Переглянути джерело

添加华电科工的配置

wzl 3 тижнів тому
батько
коміт
c49efecf18

+ 3 - 3
src/main/java/com/dskj/znzn/transData/generate/CodeGenerateMain.java

@@ -21,7 +21,7 @@ public class CodeGenerateMain {
 
     static String host = "192.168.50.235";
     static Integer port = 30306;
-    static String dbName = "energy_data";
+    static String dbName = "energy_data_huadian_test";
     static String username = "root";
     static String password = "admin123456";
 
@@ -29,7 +29,7 @@ public class CodeGenerateMain {
 
     public static void main(String[] args) throws IOException {
         //逗号分隔 ,all:查询全部  前缀_:匹配
-        String includTables = "wind_farm_day_count";
+        String includTables = "wave_result";
 
         boolean isFirst = true;
         //去掉表前缀
@@ -56,7 +56,7 @@ public class CodeGenerateMain {
                     return typeRegistry.getColumnType(metaInfo);
                 })).
                 packageConfig(builder -> {
-                    builder.parent("com.dskj.znzn.transData.web.onlineData").pathInfo(Collections.singletonMap(OutputFile.xml, xmlPahth)); // 设置mapperXml生成路径
+                    builder.parent("com.dskj.znzn.transData.web.waveData").pathInfo(Collections.singletonMap(OutputFile.xml, xmlPahth)); // 设置mapperXml生成路径
                 })
                 .strategyConfig(builder -> {
                     builder.enableSkipView();

+ 48 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/controller/WaveResultController.java

@@ -0,0 +1,48 @@
+package com.dskj.znzn.transData.web.waveData.controller;
+
+import com.dskj.znzn.transData.common.base.PageR;
+import com.dskj.znzn.transData.common.base.R;
+import com.dskj.znzn.transData.web.waveData.entity.WaveResult;
+import com.dskj.znzn.transData.web.waveData.indata.GetByFunctionTypeInData;
+import com.dskj.znzn.transData.web.waveData.outdata.GetByFunctionTypeHuaDianOutData;
+import com.dskj.znzn.transData.web.waveData.service.IWaveResultService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * <p>
+ * 波形诊断结果表 前端控制器
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2026-09-20
+ */
+@RestController
+@RequestMapping("/waveResult")
+@Api(tags = {"波形诊断结果表接口-华电科工"})
+@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
+public class WaveResultController {
+
+    private final IWaveResultService waveResultService;
+
+    @PostMapping({"getByFunctionTypeInData"})
+    @ApiOperation("根据诊断类型获取数据(汇总)")
+    public PageR<WaveResult> getByFunctionTypeInDataSummary(@RequestBody @Valid GetByFunctionTypeInData inData) {
+        return this.waveResultService.getByFunctionTypeInDataSummary(inData);
+    }
+
+    @PostMapping({"getByFunctionTypeInDataSummary"})
+    @ApiOperation("根据诊断类型获取数据(非汇总)")
+    public R<List<GetByFunctionTypeHuaDianOutData>> getByFunctionTypeInData(@RequestBody @Valid GetByFunctionTypeInData inData) {
+        return R.ok(this.waveResultService.getByFunctionTypeInData(inData));
+    }
+}

+ 76 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/entity/WaveData1.java

@@ -0,0 +1,76 @@
+
+package com.dskj.znzn.transData.web.waveData.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("wave_data")
+@ApiModel("振动数据")
+@Data
+public class WaveData1 implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("风机编号")
+    private String windTurbineNumber;
+
+    @ApiModelProperty("原始风机编号")
+    private String windTurbineName;
+
+    @ApiModelProperty("时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date timeStamp;
+
+    @ApiModelProperty("转速")
+    private Float rotationalSpeed;
+
+    @ApiModelProperty("分析频率")
+    private Integer samplingFrequency;
+
+    @ApiModelProperty("测点名称")
+    private String mesurePointName;
+
+    @ApiModelProperty("测点名称-中文")
+    private String detectionPointCn;
+
+    @ApiModelProperty("频谱单位")
+    private String euSpectrum;
+
+    @ApiModelProperty("频谱的检测类型 0:None,1:Peak,2:Peak-to-peak,3:RMS")
+    private Integer detectionType;
+
+    @ApiModelProperty(" 窗函数类型:0:Hanning,1:Uniform,2:Flat Top")
+    private Integer windowType;
+
+    @ApiModelProperty("频谱的起始频率(Hz)")
+    private Integer startFrequency;
+
+    @ApiModelProperty("频谱的结束频率(Hz)")
+    private Integer endFrequency;
+
+    @ApiModelProperty("采样点数(时域波形)或谱线数(频谱)")
+    private Integer samples;
+
+    @ApiModelProperty("-1:不存在 0:角度 1:速度 2:加速度 3:位移 4:包络,默认 -1")
+    private Integer type;
+
+    @ApiModelProperty("按类型(1:轴承诊断 2:齿轮诊断 3:不对中诊断 4:不平衡诊断 5:松动诊断)返回的诊断数据 0:正常 1:预警 2:危险")
+    private Integer status;
+
+    @ApiModelProperty("类型1")
+    @TableField(exist = false)
+    private String functionTypeName;
+
+
+}

+ 105 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/entity/WaveResult.java

@@ -0,0 +1,105 @@
+package com.dskj.znzn.transData.web.waveData.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 波形诊断结果表
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2026-09-20
+ */
+@Getter
+@Setter
+  @TableName("wave_result")
+@ApiModel(value = "WaveResult对象", description = "波形诊断结果表")
+public class WaveResult implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @ApiModelProperty("主键")
+        @TableId(value = "id", type = IdType.AUTO)
+      private Integer id;
+
+      @ApiModelProperty("关联处理后的CMS数据表id")
+      private Integer waveId;
+
+      @ApiModelProperty("风机编号")
+      private String windTurbineNumber;
+
+      @ApiModelProperty("原始风机编号")
+      private String windTurbineName;
+
+  @ApiModelProperty(value = "数据时间")
+  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+  private Date timeStamp;
+
+  // @ApiModelProperty(value = "轴承诊断", example = "0")
+  // private Integer status1;
+  //
+  // @ApiModelProperty(value = "齿轮诊断", example = "0")
+  // private Integer status2;
+  //
+  // @ApiModelProperty(value = "不对中诊断", example = "0")
+  // private Integer status3;
+  //
+  // @ApiModelProperty(value = "不平衡诊断", example = "0")
+  // private Integer status4;
+  //
+  // @ApiModelProperty(value = "松动诊断", example = "0")
+  // private Integer status5;
+
+  @ApiModelProperty("按类型(1:轴承诊断 2:齿轮诊断 3:不对中诊断 4:不平衡诊断 5:松动诊断)返回的诊断数据 0:正常 1:预警 2:危险")
+  private Integer status;
+
+  @ApiModelProperty("类型1")
+  @TableField(exist = false)
+  private String functionTypeName;
+
+  @ApiModelProperty(value = "起始频率(Hz)")
+  @TableField(exist = false)
+  private Double frequencyStartHz;
+
+  @ApiModelProperty(value = "结束频率(Hz)")
+  @TableField(exist = false)
+  private Double frequencyEndHz;
+
+  @ApiModelProperty(value = "采样点数")
+  @TableField(exist = false)
+  private Integer sampleCount;
+
+  @ApiModelProperty(value = "转速")
+  private Double rotationalSpeed;
+
+  @ApiModelProperty(value = "采样频率")
+  private Double samplingFrequency;
+
+  @ApiModelProperty(value = "测点名称")
+  @TableField(exist = false)
+  private String mesurePointName;
+
+  @ApiModelProperty("-1:不存在 0:角度 1:速度 2:加速度 3:位移 4:包络,默认 -1")
+  @TableField(exist = false)
+  private String type;
+
+  @ApiModelProperty(value = "检测点中文名称")
+  @TableField(exist = false)
+  private String detectionPointCn;
+
+  @ApiModelProperty(value = "检测点英文名称")
+  @TableField(exist = false)
+  private String detectionPointEn;
+
+}

+ 41 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/mapper/WaveResultMapper.java

@@ -0,0 +1,41 @@
+package com.dskj.znzn.transData.web.waveData.mapper;
+
+
+import com.dskj.znzn.transData.web.waveData.entity.WaveResult;
+import com.dskj.znzn.transData.web.waveData.indata.GetByFunctionTypeInData;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+ * <p>
+ * 七台河 Mapper 接口
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2026-09-17
+ */
+@Mapper
+public interface WaveResultMapper extends BaseMapper<WaveResult> {
+
+    /**
+     * 根据诊断类型获取数据(非汇总)
+     * @param inData
+     * @return
+     */
+    List<WaveResult> getByFunctionTypeInData(@Param("inData")GetByFunctionTypeInData inData);    
+    
+    /**
+     * 根据诊断类型获取数据(汇总)
+     * @param queryPage
+     * @param inData
+     * @return
+     */
+    Page<WaveResult> getByFunctionTypeInDataSummary(Page<WaveResult> queryPage, GetByFunctionTypeInData inData);
+
+}

+ 25 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/outdata/GetByFunctionTypeHuaDianOutData.java

@@ -0,0 +1,25 @@
+package com.dskj.znzn.transData.web.waveData.outdata;
+
+import com.dskj.znzn.transData.web.waveData.entity.WaveResult;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel
+@Data
+public class GetByFunctionTypeHuaDianOutData {
+
+    @ApiModelProperty("测点名称-中文")
+    private String pointNameCn;
+
+    @ApiModelProperty("诊断数据")
+//    private List<GetByFunctionTypeSummaryInnerDataOutData> innerDatas;
+    private List<WaveResult> innerDatas;
+
+
+}
+
+

+ 25 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/service/IWaveResultService.java

@@ -0,0 +1,25 @@
+package com.dskj.znzn.transData.web.waveData.service;
+
+import com.dskj.znzn.transData.common.base.PageR;
+import com.dskj.znzn.transData.web.waveData.entity.WaveResult;
+import com.dskj.znzn.transData.web.waveData.indata.GetByFunctionTypeInData;
+import com.dskj.znzn.transData.web.waveData.outdata.GetByFunctionTypeHuaDianOutData;
+import com.dskj.znzn.transData.web.waveData.outdata.GetByFunctionTypeSummaryOutData;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 七台河 服务类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2026-09-17
+ */
+public interface IWaveResultService extends IService<WaveResult> {
+    List<GetByFunctionTypeHuaDianOutData> getByFunctionTypeInData(GetByFunctionTypeInData inData);
+
+     PageR<WaveResult>  getByFunctionTypeInDataSummary(GetByFunctionTypeInData inData);
+}

+ 82 - 0
src/main/java/com/dskj/znzn/transData/web/waveData/service/impl/WaveResultServiceImpl.java

@@ -0,0 +1,82 @@
+package com.dskj.znzn.transData.web.waveData.service.impl;
+
+import com.dskj.znzn.transData.common.base.PageR;
+import com.dskj.znzn.transData.common.exception.BusinessException;
+import com.dskj.znzn.transData.web.waveData.entity.WaveData;
+import com.dskj.znzn.transData.web.waveData.entity.WaveResult;
+import com.dskj.znzn.transData.web.waveData.indata.GetByFunctionTypeInData;
+import com.dskj.znzn.transData.web.waveData.mapper.WaveResultMapper;
+import com.dskj.znzn.transData.web.waveData.outdata.GetByFunctionTypeHuaDianOutData;
+import com.dskj.znzn.transData.web.waveData.outdata.GetByFunctionTypeSummaryOutData;
+import com.dskj.znzn.transData.web.waveData.service.IWaveResultService;
+
+import lombok.RequiredArgsConstructor;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 波形诊断结果表 服务实现类
+ * </p>
+ *
+ * @author 魏志亮
+ * @since 2026-09-20
+ */
+@Service
+@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
+public class WaveResultServiceImpl extends ServiceImpl<WaveResultMapper, WaveResult> implements IWaveResultService {
+    
+    private final WaveResultMapper waveResultMapper;
+
+    @Override
+    public List<GetByFunctionTypeHuaDianOutData> getByFunctionTypeInData(GetByFunctionTypeInData inData) {
+        
+               if (inData.getWindCode().contains(" ")) {
+            throw new BusinessException("风场参数异常");
+        } else {
+            inData.setWindCode(inData.getWindCode() + "_wave");
+            Map<String, List<WaveResult>> nameGrooup = waveResultMapper.getByFunctionTypeInData(inData).stream()
+                    .collect(Collectors.groupingBy(data -> data.getDetectionPointCn()));
+            List<GetByFunctionTypeHuaDianOutData> datas = new ArrayList<>();
+            for (Map.Entry<String, List<WaveResult>> entry : nameGrooup.entrySet()) {
+                GetByFunctionTypeHuaDianOutData outData = new GetByFunctionTypeHuaDianOutData();
+                outData.setPointNameCn(entry.getKey());
+//                List<GetByFunctionTypeSummaryInnerDataOutData> innerDatas = new ArrayList<>();
+//                for (WaveData value : entry.getValue()) {
+//                    GetByFunctionTypeSummaryInnerDataOutData innerDataOutData = new GetByFunctionTypeSummaryInnerDataOutData();
+//                    innerDataOutData.setTimeStamp(value.getTimeStamp());
+//                    innerDataOutData.setStatus(value.getStatus());
+//                    innerDataOutData.setId(value.getId());
+//                    innerDatas.add(innerDataOutData);
+//                }
+//                innerDatas.sort(Comparator.comparing(GetByFunctionTypeSummaryInnerDataOutData::getTimeStamp));
+                outData.setInnerDatas(entry.getValue());
+                datas.add(outData);
+            }
+
+            return datas;
+        }
+    }
+
+    @Override
+    public PageR<WaveResult> getByFunctionTypeInDataSummary(GetByFunctionTypeInData inData) {
+        if (inData.getWindCode().contains(" ")) {
+            throw new BusinessException("风场参数异常");
+        } else {
+
+            Page<WaveResult> queryPage = Page.of(inData.getPageNo(), inData.getPageSize());
+            inData.setWindCode(inData.getWindCode() + "_wave");
+            Page<WaveResult> pageData = this.waveResultMapper.getByFunctionTypeInDataSummary(queryPage, inData);
+            return PageR.page(pageData);
+        }
+    }
+}

+ 1 - 1
src/main/resources/application-dev.yml

@@ -8,7 +8,7 @@ knife4j:
 
 spring:
   datasource:
-    url: jdbc:p6spy:mysql://192.168.50.235:30306/energy_data_qianan?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
+    url: jdbc:p6spy:mysql://192.168.50.235:30306/energy_data_huadian_test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
     username: root
     password: admin123456
 

+ 74 - 0
src/main/resources/mapper/WaveResultMapper.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dskj.znzn.transData.web.waveData.mapper.WaveResultMapper">
+
+<select id="getByFunctionTypeInData" resultType="com.dskj.znzn.transData.web.waveData.entity.WaveResult">
+
+
+SELECT c.id,
+       a.wave_id,
+       a.wind_turbine_number,
+       a.wind_turbine_name,
+       a.time_stamp,
+       c.frequency_start_hz,
+       c.frequency_end_hz,
+       c.sample_count,
+       c.rotational_speed,
+       c.sampling_frequency,
+       c.mesure_point_name,
+       c.type,
+       a.status_${inData.functionType} as status,
+       b.detection_point_cn,
+       b.detection_point_en,
+       b.function_type_name
+            FROM wave_result a
+            INNER JOIN ${inData.windCode}  c ON c.id = a.wave_id
+         INNER JOIN (SELECT t.detection_point_cn,
+                            t.detection_point_en,
+                            SUBSTRING_INDEX(
+                                    SUBSTRING(t.function_type_name,
+                                              LOCATE('${inData.functionType}_', t.function_type_name) + 2),
+                                            ',',
+                                    1
+                            ) AS function_type_name
+                     FROM detection_point_dic t
+                     WHERE t.function_type_name LIKE '%${inData.functionType}\\_%') b
+                    ON c.mesure_point_name = b.detection_point_en
+where a.diag_flag = 1
+    and a.time_stamp between #{inData.startTime} and #{inData.endTime}
+    and c.rotational_speed > 0
+    and a.wind_turbine_number = #{inData.windTurbineNumber}
+order by a.time_stamp asc
+
+    </select>
+
+
+    <select id="getByFunctionTypeInDataSummary" resultType="com.dskj.znzn.transData.web.waveData.entity.WaveResult">
+
+        SELECT a.wind_turbine_number,
+               a.wind_turbine_name,
+               b.function_type_name,
+               b.sort_num,
+               MAX(a.status_${inData.functionType}) AS status
+        FROM wave_result a
+                 INNER JOIN ${inData.windCode} c
+                            ON a.wave_id = c.id
+                 INNER JOIN (SELECT t.detection_point_cn,
+                                    t.detection_point_en,
+                                    t.sort_num,
+                                    SUBSTRING_INDEX(
+                                            SUBSTRING(t.function_type_name,
+                                                      LOCATE('${inData.functionType}_', t.function_type_name) + 2),
+                                            ',',
+                                            1
+                                    ) AS function_type_name
+                             FROM detection_point_dic t
+                             WHERE t.function_type_name LIKE '%${inData.functionType}\\_%') b
+                            ON c.mesure_point_name = b.detection_point_en
+        WHERE a.diag_flag = 1
+          AND a.time_stamp BETWEEN #{inData.startTime} AND #{inData.endTime}
+          AND a.wind_turbine_number = #{inData.windTurbineNumber}
+        GROUP BY a.wind_turbine_number, a.wind_turbine_name, b.function_type_name, b.sort_num
+        ORDER BY b.sort_num
+    </select>
+</mapper>

+ 46 - 0
src/test/java/Xshell7.java

@@ -0,0 +1,46 @@
+import org.apache.commons.lang3.StringUtils;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.NoSuchAlgorithmException;
+
+public class Xshell7 {
+
+    public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
+
+
+        // Windows 用户名
+        String winUserName = "Administrator";
+// Windows SID
+        String winSID = "S-1-5-21-538436921-2117675692-42460903-500";
+// XShell 密文密码
+        String encryptedPasswd = "sEtGWmNonpnX1WYI0MWvfLBp+dUvXjHy/4WZA7R5OgZyYfQBBaRbbDmeWQ==";
+
+// base64 解码后的字节数组
+        byte[] originalBytes = org.apache.commons.codec.binary.Base64.decodeBase64(encryptedPasswd);
+
+// 从密文数组中去除校验和 (校验和,是 32 个字节长的 SHA-256 摘要,有的脚本里写的减 0x20 这是 32 的 16 进制值)
+        byte[] newBytes = new byte[originalBytes.length - 32];
+        System.arraycopy(originalBytes, 0, newBytes, 0, originalBytes.length - 32);
+
+// 创建密钥 Key (密钥为 "倒序的SID + 操作系统帐户名称" 的 sha256 摘要数组)
+        byte[] sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256(StringUtils.reverse(winSID) + winUserName);
+        Key key = new SecretKeySpec(sha256hex, "RC4");
+
+// 创建RC4解密器
+        Cipher cipher = Cipher.getInstance("RC4");
+// 初始化解密器,并指定 Key
+        cipher.init(Cipher.DECRYPT_MODE, key);
+
+// 解密后的密码
+        String decryptedPasswd = new String(cipher.doFinal(newBytes));  // 解密后结果为字节数组,使用 new String() 将其转化为字符串
+        System.out.println(decryptedPasswd);
+// 明文密码为 test@!@#
+
+    }
+}