shiyue 3 viikkoa sitten
vanhempi
commit
246ffefc35
26 muutettua tiedostoa jossa 628 lisäystä ja 95 poistoa
  1. 5 0
      energy-manage-common/src/main/java/com/energy/manage/common/constant/redis/ManagerRedisKeyConstant.java
  2. 15 0
      energy-manage-common/src/main/java/com/energy/manage/common/po/healthscores/HealthscoresWindPO.java
  3. 4 0
      energy-manage-common/src/main/java/com/energy/manage/common/po/windenginegroup/WindEngineGroupPO.java
  4. 1 1
      energy-manage-common/src/main/java/com/energy/manage/common/po/windfield/WindFieldPO.java
  5. 20 3
      energy-manage-service/src/main/java/com/energy/manage/service/client/skf/DynamicMeasurementsClient.java
  6. 16 1
      energy-manage-service/src/main/java/com/energy/manage/service/constant/client/skf/SkfClientConstants.java
  7. 16 4
      energy-manage-service/src/main/java/com/energy/manage/service/controller/healthscores/HealthscoresController.java
  8. 8 3
      energy-manage-service/src/main/java/com/energy/manage/service/controller/system/SysTestController.java
  9. 11 0
      energy-manage-service/src/main/java/com/energy/manage/service/controller/windenginegroup/WindEngineGroupController.java
  10. 32 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/ConditionalPointTagVO.java
  11. 43 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/CoordinateVO.java
  12. 22 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/FaultFrequencyVO.java
  13. 34 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/MachineAttributeVO.java
  14. 48 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/MachineVO.java
  15. 5 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windenginegroup/WindEngineGroupCreateDto.java
  16. 6 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windenginemill/WindEngineMillCreateDto.java
  17. 17 11
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/excel/WindEngineGroupExcelVo.java
  18. 22 22
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/healthscores/HealthOverviewListVO.java
  19. 16 2
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/healthscores/HealthscoresTendencyVO.java
  20. 5 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/windenginegroup/WindEngineGroupVo.java
  21. 8 1
      energy-manage-service/src/main/java/com/energy/manage/service/service/vibration/VibrationService.java
  22. 143 42
      energy-manage-service/src/main/java/com/energy/manage/service/service/vibration/impl/VibrationServiceImpl.java
  23. 9 0
      energy-manage-service/src/main/java/com/energy/manage/service/service/windenginegroup/WindEngineGroupService.java
  24. 113 1
      energy-manage-service/src/main/java/com/energy/manage/service/service/windenginegroup/impl/WindEngineGroupServiceImpl.java
  25. 6 3
      energy-manage-service/src/main/java/com/energy/manage/service/task/SkfVibrationDataTask.java
  26. 3 1
      energy-manage-service/src/main/resources/mybatis/healthscores/HealthscoresMapper.xml

+ 5 - 0
energy-manage-common/src/main/java/com/energy/manage/common/constant/redis/ManagerRedisKeyConstant.java

@@ -20,6 +20,11 @@ public class ManagerRedisKeyConstant {
     public static String DICT_CONSTANTS_KEY = "energy:dict:constants";
 
     /**
+     * skf震动key
+     */
+    public static String SKF_SHAKE_KEY = "energy:skf:shake";
+
+    /**
      * id 工具缓存
      */
     public static final String IDGENERATOR_CONSTANTS_KEY = "energy:Idgenerator:{id}";

+ 15 - 0
energy-manage-common/src/main/java/com/energy/manage/common/po/healthscores/HealthscoresWindPO.java

@@ -2,6 +2,8 @@ package com.energy.manage.common.po.healthscores;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -13,6 +15,7 @@ import java.util.Date;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
+@ApiModel
 public class HealthscoresWindPO implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -21,66 +24,77 @@ public class HealthscoresWindPO implements Serializable {
      * 主键ID
      * 对应数据库字段:id (INT, 自增主键)
      */
+    @ApiModelProperty("主键ID")
     private Integer id;
 
     /**
      * 风场ID(客户内部编号)
      * 对应数据库字段:fieldId (VARCHAR(32), 非空,默认空字符串)
      */
+    @ApiModelProperty("风场ID(客户内部编号)")
     private String fieldId;
 
     /**
      * 风场内健康等级为优的风机个数
      * 对应数据库字段:excellent_count (INT, 可为空)
      */
+    @ApiModelProperty("风场内健康等级为优的风机个数")
     private Integer excellentCount;
 
     /**
      * 风场内健康等级为良的风机个数
      * 对应数据库字段:good_count (INT, 可为空)
      */
+    @ApiModelProperty("风场内健康等级为良的风机个数")
     private Integer goodCount;
 
     /**
      * 风场内健康等级为中的风机个数
      * 对应数据库字段:fair_count (INT, 可为空)
      */
+    @ApiModelProperty("风场内健康等级为中的风机个数")
     private Integer fairCount;
 
     /**
      * 风场内健康等级为差的风机个数
      * 对应数据库字段:poor_count (INT, 可为空)
      */
+    @ApiModelProperty("风场内健康等级为差的风机个数")
     private Integer poorCount;
 
     /**
      * 风场综合健康评分 (0-100)
      * 对应数据库字段:overall_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("风场综合健康评分")
     private BigDecimal overallScore;
 
     /**
      * 风场结构健康评分 (0-100)
      * 对应数据库字段:structure_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("风场结构健康评分")
     private BigDecimal structureScore;
 
     /**
      * 风场系统健康评分 (0-100)
      * 对应数据库字段:system_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("风场系统健康评分")
     private BigDecimal systemScore;
 
     /**
      * 风场部件健康评分 (0-100)
      * 对应数据库字段:component_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("风场部件健康评分")
     private BigDecimal componentScore;
 
     /**
      * 数据来源时间 (yyyy-mm-dd)
      * 对应数据库字段:source_datetime (DATE, 非空)
      */
+    @ApiModelProperty("数据来源时间")
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private Date sourceDatetime;
 
@@ -88,6 +102,7 @@ public class HealthscoresWindPO implements Serializable {
      * 评估入库时间戳 (yyyy-mm-dd hh:mm:ss)
      * 对应数据库字段:create_time (DATETIME, 非空,默认当前时间)
      */
+    @ApiModelProperty("评估入库时间戳")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
     private Date createTime;
 

+ 4 - 0
energy-manage-common/src/main/java/com/energy/manage/common/po/windenginegroup/WindEngineGroupPO.java

@@ -15,6 +15,10 @@ import javax.persistence.Table;
 public class WindEngineGroupPO extends NewBaseDomain {
 
     /**
+     * 客户内部(远景系统)风机id
+     */
+    private String engineId;
+    /**
      * 风场编号
      */
     private String fieldCode;

+ 1 - 1
energy-manage-common/src/main/java/com/energy/manage/common/po/windfield/WindFieldPO.java

@@ -20,7 +20,7 @@ import java.util.Date;
 public class WindFieldPO extends NewBaseDomain {
 
     /**
-     * 客户内部唯一编号
+     *  客户内部(远景系统)风场id
      */
     private String fieldId;
 

+ 20 - 3
energy-manage-service/src/main/java/com/energy/manage/service/client/skf/DynamicMeasurementsClient.java

@@ -3,9 +3,7 @@ package com.energy.manage.service.client.skf;
 import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.*;
 import com.energy.manage.service.constant.client.skf.SkfClientConstants;
-import com.energy.manage.service.domain.client.skf.AutoTokenVO;
-import com.energy.manage.service.domain.client.skf.DynamicMeasurementsVo;
-import com.energy.manage.service.domain.client.skf.HierarchyListVo;
+import com.energy.manage.service.domain.client.skf.*;
 
 import java.util.List;
 
@@ -30,6 +28,25 @@ public interface DynamicMeasurementsClient {
     List<HierarchyListVo> getSkfHierarchy(@Header("Authorization") String authorization);
 
 
+    /**
+     * 获取机器编号
+     * @param authorization
+     * @return
+     */
+    @Get(
+            url = SkfClientConstants.SKF_REQUEST_PATH + SkfClientConstants.SKF_MACHINES_URL
+    )
+    List<MachineVO> getMachine(@Header("Authorization") String authorization);
+
 
+    /**
+     * 获取故障频率
+     * @param authorization
+     * @return
+     */
+    @Get(
+            url = SkfClientConstants.SKF_REQUEST_PATH + SkfClientConstants.SKF_PARTS_URL + "{1}"
+    )
+    MachinePartVO  getMachinePart(@Header("Authorization") String authorization,Integer machineId);
 
 }

+ 16 - 1
energy-manage-service/src/main/java/com/energy/manage/service/constant/client/skf/SkfClientConstants.java

@@ -5,6 +5,7 @@ package com.energy.manage.service.constant.client.skf;
  */
 public interface SkfClientConstants {
 
+
     String SKF_REQUEST_PATH = "http://192.168.50.242:13050";
 
     String SKF_TOKEN_GRANT_TYPE = "password";
@@ -24,7 +25,21 @@ public interface SkfClientConstants {
     String SKF_DM_PATH = "/v1/points/";
 
     /**
-     * 结构信息
+     * 结构信息
      */
     String SKF_HIERARCHY = "/v1/hierarchy/?includePoints=true";
+
+
+    /**
+     * 获取skf机器编号编号(id)machines
+     */
+    String SKF_MACHINES_URL = "/v1/machines/";
+
+
+    /**
+     * 获取故障率
+     */
+    String SKF_PARTS_URL = "/v1/parts/";
+
+
 }

+ 16 - 4
energy-manage-service/src/main/java/com/energy/manage/service/controller/healthscores/HealthscoresController.java

@@ -11,6 +11,7 @@ import com.energy.manage.service.service.healthscores.HealthscoresService;
 import com.energy.manage.service.service.homepage.HomePageService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -31,7 +32,10 @@ public class HealthscoresController extends BaseServiceController {
     @ApiOperation("首页风场健康台数统计数据")
     @UserLoginToken
     @PostMapping("/getHealthscoresWindList")
-    public ResultResp<List<HealthscoresWindVO>> getHealthscoresWindList(@RequestParam(value = "fieldCode",required = false) String fieldCode,
+    public ResultResp<List<HealthscoresWindVO>> getHealthscoresWindList(
+                                                                @ApiParam(value = "fieldCode参数为平台内部风场编号,当参数为空时,默认查全部风场", required = false)
+                                                                @RequestParam(value = "fieldCode",required = false) String fieldCode,
+                                                                @ApiParam(value = "datatime参数为查询日期,当参数为空时,默认查昨天日期的数据", required = false)
                                                                 @RequestParam(value = "datatime",required = false) String datatime){
         List<HealthscoresWindVO> list = healthscoresService.getHealthscoresWind(fieldCode,datatime);
         return success(list);
@@ -42,8 +46,11 @@ public class HealthscoresController extends BaseServiceController {
     @ApiOperation("风场下所有风机健康查询概览页面")
     @UserLoginToken
     @PostMapping("/getHealthOverview")
-    public ResultResp<HealthOverviewVO> getHealthOverview(@RequestParam(value = "fieldCode") String fieldCode,
-                                                                        @RequestParam(value = "datatime",required = false) String datatime){
+    public ResultResp<HealthOverviewVO> getHealthOverview(
+                                                        @ApiParam(value = "fieldCode参数为平台内部风场编号", required = true)
+                                                        @RequestParam(value = "fieldCode") String fieldCode,
+                                                        @ApiParam(value = "datatime参数为查询日期,当参数为空时,默认查昨天日期的数据", required = false)
+                                                        @RequestParam(value = "datatime",required = false) String datatime){
         HealthOverviewVO healthOverviewVO = healthscoresService.getHealthOverview(fieldCode,datatime);
         return success(healthOverviewVO);
     }
@@ -52,8 +59,12 @@ public class HealthscoresController extends BaseServiceController {
     @ApiOperation("风机按天数查询趋势图")
     @UserLoginToken
     @PostMapping("/getLastDaysTrend")
-    public ResultResp<HealthscoresTendencyVO> getLastDaysTrend(@RequestParam(value = "fieldId") String fieldId,
+    public ResultResp<HealthscoresTendencyVO> getLastDaysTrend(
+                                                               @ApiParam(value = "fieldId参数为客户内部风场ID,可通过风机概览页面获取", required = true)
+                                                               @RequestParam(value = "fieldId") String fieldId,
+                                                               @ApiParam(value = "engineId参数为客户内部风机ID,可通过风机概览页面获取", required = true)
                                                                @RequestParam(value = "engineId") String engineId,
+                                                               @ApiParam(value = "day参数为查询多少天的趋势图数据,如7天,30天,365天", required = true)
                                                                @RequestParam(value = "day") int day){
         List<HealthscoresTendencyVO> list = healthscoresService.getLastDaysTrend(day,fieldId,engineId);
         return success(list);
@@ -66,4 +77,5 @@ public class HealthscoresController extends BaseServiceController {
 
 
 
+
 }

+ 8 - 3
energy-manage-service/src/main/java/com/energy/manage/service/controller/system/SysTestController.java

@@ -40,7 +40,7 @@ public class SysTestController {
     private VibrationService vibrationService;
 
     // 定义时间格式
-    private final String dateTimeFormatter = "yyyy-MM-dd";
+    private final String dateTimeFormatter = "yyyyMMdd";
 
 //	@Autowired
 //	private KafkaSendService kafkaSendService;
@@ -72,10 +72,15 @@ public class SysTestController {
 	public void vibrationData() {
 
 //        vibrationService.extractSkfPointData();
-        log.info("233333");
 
-        vibrationService.extracTwindGeneratorSkfPointData();
+        String yesterdayDate = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(dateTimeFormatter));
 
+
+//        vibrationService.extracTwindGeneratorSkfPointData(yesterdayDate);
+
+        vibrationService.extracTwindGeneratorSkfMachinePart(yesterdayDate);
+
+        vibrationService.extracTwindGeneratorSkfPointData(yesterdayDate);
 	}
 
 

+ 11 - 0
energy-manage-service/src/main/java/com/energy/manage/service/controller/windenginegroup/WindEngineGroupController.java

@@ -66,6 +66,17 @@ public class WindEngineGroupController extends BaseServiceController {
         return windEngineGroupService.windEngineGroupImportData(file, fieldCode, getUserId());
     }
 
+
+    @UserLoginToken
+    @PostMapping(value = "/windEngineGroupAndIdImportData")
+    @ApiOperation(value = "导入风机数据(大唐使用,包含远景内部风机id属性,并对风机ID进行验证),此功能由前端通过打包命令进行控制使用")
+    public ResultResp windEngineGroupAndIdImportData(@RequestPart MultipartFile file, @RequestParam("fieldCode") String fieldCode) {
+        if (!fieldCode.contains(IdPrefixEnum.WIND_FIELD_NUMBER.getCode())) {
+            return ResultResp.FAIL("未绑定风场信息!");
+        }
+        return windEngineGroupService.windEngineGroupAndIdImportData(file, fieldCode, getUserId());
+    }
+
     @Deprecated
     @UserLoginToken
     @PostMapping(value = "/afreshWindEngineGroupImportData")

+ 32 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/ConditionalPointTagVO.java

@@ -0,0 +1,32 @@
+package com.energy.manage.service.domain.client.skf;
+
+public class ConditionalPointTagVO {
+    private String id;
+    private Object value; // 可能是null,用Object或String
+
+    // 构造函数
+    public ConditionalPointTagVO() {
+    }
+
+    public ConditionalPointTagVO(String id, Object value) {
+        this.id = id;
+        this.value = value;
+    }
+
+    // Getter 和 Setter
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+}

+ 43 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/CoordinateVO.java

@@ -0,0 +1,43 @@
+package com.energy.manage.service.domain.client.skf;
+
+public class CoordinateVO {
+
+    private String id;
+    private double value;
+    private String unit;
+
+    // 构造函数
+    public CoordinateVO() {
+    }
+
+    public CoordinateVO(String id, double value, String unit) {
+        this.id = id;
+        this.value = value;
+        this.unit = unit;
+    }
+
+    // Getter 和 Setter
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public double getValue() {
+        return value;
+    }
+
+    public void setValue(double value) {
+        this.value = value;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+}

+ 22 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/FaultFrequencyVO.java

@@ -0,0 +1,22 @@
+package com.energy.manage.service.domain.client.skf;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class FaultFrequencyVO {
+
+    /**
+     * 故障频率名称
+     */
+    private String name;
+
+    /**
+     * 倍率
+     */
+    private Double multiple;
+}

+ 34 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/MachineAttributeVO.java

@@ -0,0 +1,34 @@
+package com.energy.manage.service.domain.client.skf;
+
+public class MachineAttributeVO {
+
+    private String id;
+    private String value;
+
+    // 构造函数
+    public MachineAttributeVO() {
+    }
+
+    public MachineAttributeVO(String id, String value) {
+        this.id = id;
+        this.value = value;
+    }
+
+    // Getter 和 Setter
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+}

+ 48 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/client/skf/MachineVO.java

@@ -0,0 +1,48 @@
+package com.energy.manage.service.domain.client.skf;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 机器对象
+ */
+@Getter
+@Setter
+public class MachineVO {
+
+    private int id;
+    private String name;
+    private String description;
+    private String path;
+    private List<MachineAttributeVO> driving;
+    private List<MachineAttributeVO> driven;
+    private List<MachineAttributeVO> transmission;
+
+    @JsonProperty("machineCode")
+    private String machineCode;
+
+    private String power;
+    private String gear;
+
+    @JsonProperty("isoClass")
+    private int isoClass;
+
+    @JsonProperty("idContact")
+    private int idContact;
+
+    @JsonProperty("conditionalPoint")
+    private int conditionalPoint;
+
+    @JsonProperty("conditionalPointSrc")
+    private Object conditionalPointSrc; // 可能是null,用Object或具体类型
+
+    @JsonProperty("conditionalPointTag")
+    private List<ConditionalPointTagVO> conditionalPointTag;
+
+    private List<CoordinateVO> coordinates;
+
+
+}

+ 5 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windenginegroup/WindEngineGroupCreateDto.java

@@ -20,6 +20,11 @@ import javax.validation.constraints.NotNull;
 public class WindEngineGroupCreateDto {
 
     /**
+     * 风机机组客户内部编号(远景内部风机编号)
+     */
+    @ApiModelProperty("风机机组客户内部编号(远景内部风机编号)")
+    private String engineId;
+    /**
      * 风场编号
      */
     @NotNull(message = "风场编号不能为空")

+ 6 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windenginemill/WindEngineMillCreateDto.java

@@ -86,4 +86,10 @@ public class WindEngineMillCreateDto {
     @ApiModelProperty("切出风速")
     private Double ratedCutOutWindspeed;
 
+    /**
+     * 塔筒形式类型
+     */
+    @ApiModelProperty("塔筒形式类型")
+    private Integer turbineTowerType;
+
 }

+ 17 - 11
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/excel/WindEngineGroupExcelVo.java

@@ -2,6 +2,7 @@ package com.energy.manage.service.domain.vo.excel;
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -12,9 +13,14 @@ public class WindEngineGroupExcelVo {
 
 
     /**
+     * 风机机组客户内部编号(远景内部风机编号)
+     */
+    @ExcelProperty(value = "内部风机id", index = 0)
+    private String engineId;
+    /**
      * 机型编号(收资的)
      */
-    @ExcelProperty(value = "风机机型", index = 0)
+    @ExcelProperty(value = "风机机型", index = 1)
     private String machineTypeCode;
 
     /**
@@ -24,54 +30,54 @@ public class WindEngineGroupExcelVo {
     /**
      * 风机名称
      */
-    @ExcelProperty(value = "风机编号", index = 1)
+    @ExcelProperty(value = "风机编号", index = 2)
     private String engineName;
 
     /**
      * 轮毂高度
      */
-    @ExcelProperty(value = "轮毂高度", index = 2)
+    @ExcelProperty(value = "轮毂高度", index = 3)
     private String hubHeight;
     /**
      * 海拔高度
      */
-    @ExcelProperty(value = "海拔高度", index = 3)
+    @ExcelProperty(value = "海拔高度", index = 4)
     private String elevationHeight;
     /**
      * 额定容量
      */
-    @ExcelProperty(value = "额定容量", index = 4)
+    @ExcelProperty(value = "额定容量", index = 5)
     private String ratedCapacity;
     /**
      * 经度
      */
-    @ExcelProperty(value = "经度", index = 5)
+    @ExcelProperty(value = "经度", index = 6)
     private String longitude;
     /**
      * 纬度
      */
-    @ExcelProperty(value = "纬度", index = 6)
+    @ExcelProperty(value = "纬度", index = 7)
     private String latitude;
 
     /**
      * 额定风速 (m/s)
      */
-    @ExcelProperty(value = "额定风速", index = 7)
+    @ExcelProperty(value = "额定风速", index = 8)
     private Double rated_wind_speed;
     /**
      * 切入风速 (m/s)
      */
-    @ExcelProperty(value = "切入风速", index = 8)
+    @ExcelProperty(value = "切入风速", index = 9)
     private Double ratedCutInWindspeed;
     /**
      * 切出风速 (m/s)
      */
-    @ExcelProperty(value = "切出风速", index = 9)
+    @ExcelProperty(value = "切出风速", index = 10)
     private Double ratedCutOutWindspeed;
     /**
      * 是否标杆风机
      */
-    @ExcelProperty(value = "是否标杆风机", index = 10)
+    @ExcelProperty(value = "是否标杆风机", index = 11)
     private String sightcingString;
 
 

+ 22 - 22
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/healthscores/HealthOverviewListVO.java

@@ -17,13 +17,13 @@ public class HealthOverviewListVO {
     /**
      * 编号
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("编号")
     private Integer id;
     /**
      * 风场ID(内部命名)
      * 对应数据库字段:field_code (VARCHAR(32), 非空,默认空字符串)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("风场ID(客户内部命名)")
     private String fieldId;
 
 
@@ -31,110 +31,110 @@ public class HealthOverviewListVO {
      * 风机ID(内部命名)
      * 对应数据库字段:engine_code (VARCHAR(32), 非空,默认空字符串)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("风机ID(客户内部命名)")
     private String engineId;
 
     /**
      * 风机名称
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("风机名称")
     private String engineName;
 
     /**
      * 机型型号
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("机型型号")
     private String machineTypeCode;
 
     /**
      * 综合健康评分 (0-100)
      * 对应数据库字段:overall_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("综合健康评分 (0-100)")
     private BigDecimal overallScore;
 
     /**
      * 综合健康等级 (优/良/中/差)
      * 对应数据库字段:overall_level (VARCHAR(10), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("综合健康等级 (优/良/中/差)")
     private String overallLevel;
 
     /**
      * 叶轮健康评分 (0-100)
      * 对应数据库字段:rotor_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("叶轮健康评分 (0-100)")
     private BigDecimal rotorScore;
 
     /**
      * 塔筒健康评分 (0-100)
      * 对应数据库字段:tower_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("塔筒健康评分 (0-100)")
     private BigDecimal towerScore;
 
     /**
      * 发电机健康评分 (0-100)
      * 对应数据库字段:generator_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("发电机健康评分 (0-100)")
     private BigDecimal generatorScore;
 
     /**
      * 齿轮箱健康评分 (0-100)
      * 对应数据库字段:gearbox_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("齿轮箱健康评分 (0-100)")
     private BigDecimal gearboxScore;
 
     /**
      * 主轴健康评分 (0-100)
      * 对应数据库字段:main_shaft_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("主轴健康评分 (0-100)")
     private BigDecimal mainShaftScore;
 
     /**
      * 变流器健康评分 (0-100)
      * 对应数据库字段:converter_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("变流器健康评分 (0-100)")
     private BigDecimal converterScore;
 
     /**
      * 偏航系统健康评分 (0-100)
      * 对应数据库字段:yaw_system_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("偏航系统健康评分 (0-100)")
     private BigDecimal yawSystemScore;
 
     /**
      * 变桨系统健康评分 (0-100)
      * 对应数据库字段:pitch_system_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("变桨系统健康评分 (0-100)")
     private BigDecimal pitchSystemScore;
 
     /**
      * 液压系统健康评分 (0-100)
      * 对应数据库字段:hydraulic_system_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("液压系统健康评分 (0-100)")
     private BigDecimal hydraulicSystemScore;
 
     /**
      * 主控系统健康评分 (0-100)
      * 对应数据库字段:control_system_score (DECIMAL(5,2), 可为空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("主控系统健康评分 (0-100)")
     private BigDecimal controlSystemScore;
 
     /**
      * 数据来源时间 (yyyy-mm-dd)
      * 对应数据库字段:source_datetime (DATE, 非空)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("数据来源时间 (yyyy-mm-dd)")
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private Date sourceDatetime;
 
@@ -142,25 +142,25 @@ public class HealthOverviewListVO {
      * 评估入库时间戳 (yyyy-mm-dd hh:mm:ss)
      * 对应数据库字段:create_time (DATETIME, 非空,默认当前时间)
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("评估入库时间戳 (yyyy-mm-dd hh:mm:ss)")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
     private Date createTime;
 
     /**
      * 结构健康评分
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("结构健康评分")
     private BigDecimal structureScore;
 
     /**
      * 部件健康评分
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("部件健康评分")
     private BigDecimal componentScore;
 
     /**
      * 系统健康评分
      */
-    @ApiModelProperty("")
+    @ApiModelProperty("系统健康评分")
     private BigDecimal systemScore;
 }

+ 16 - 2
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/healthscores/HealthscoresTendencyVO.java

@@ -2,6 +2,7 @@ package com.energy.manage.service.domain.vo.healthscores;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -25,16 +26,19 @@ public class HealthscoresTendencyVO {
     /**
      * 风场id
      */
+    @ApiModelProperty("风场id,客户内部编号")
     private String  fieldId;
 
     /**
      * 风机id
      */
+    @ApiModelProperty("风机id,客户内部编号")
     private String  engineId;
 
     /**
      * 坐标x
      */
+    @ApiModelProperty("坐标x")
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private LocalDate sourceDatetime;
 
@@ -42,64 +46,74 @@ public class HealthscoresTendencyVO {
      * 叶轮健康评分 (0-100)
      * 对应数据库字段:rotor_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("叶轮健康评分")
     private BigDecimal rotorScore;
 
     /**
      * 塔筒健康评分 (0-100)
      * 对应数据库字段:tower_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("塔筒健康评分")
     private BigDecimal towerScore;
 
     /**
      * 发电机健康评分 (0-100)
      * 对应数据库字段:generator_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("发电机健康评分")
     private BigDecimal generatorScore;
 
     /**
      * 齿轮箱健康评分 (0-100)
      * 对应数据库字段:gearbox_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("齿轮箱健康评分")
     private BigDecimal gearboxScore;
 
     /**
      * 主轴健康评分 (0-100)
      * 对应数据库字段:main_shaft_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("主轴健康评分")
     private BigDecimal mainShaftScore;
 
     /**
      * 变流器健康评分 (0-100)
      * 对应数据库字段:converter_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("变流器健康评分")
     private BigDecimal converterScore;
 
     /**
      * 偏航系统健康评分 (0-100)
      * 对应数据库字段:yaw_system_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("偏航系统健康评分")
     private BigDecimal yawSystemScore;
 
     /**
      * 变桨系统健康评分 (0-100)
      * 对应数据库字段:pitch_system_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("变桨系统健康评分")
     private BigDecimal pitchSystemScore;
 
     /**
      * 液压系统健康评分 (0-100)
      * 对应数据库字段:hydraulic_system_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("液压系统健康评分")
     private BigDecimal hydraulicSystemScore;
 
     /**
      * 主控系统健康评分 (0-100)
      * 对应数据库字段:control_system_score (DECIMAL(5,2), 可为空)
      */
+    @ApiModelProperty("主控系统健康评分")
     private BigDecimal controlSystemScore;
 
-
-
+    @ApiModelProperty("综合健康评分 (0-100) ")
+    private BigDecimal overallScore;
 
 
 }

+ 5 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/windenginegroup/WindEngineGroupVo.java

@@ -15,6 +15,11 @@ import lombok.Setter;
 public class WindEngineGroupVo {
 
     /**
+     * 客户内部(远景系统)风机id
+     */
+    @ApiModelProperty("客户内部(远景系统)风机id")
+    private String engineId;
+    /**
      * 风场编号
      */
     @ApiModelProperty("风场编号")

+ 8 - 1
energy-manage-service/src/main/java/com/energy/manage/service/service/vibration/VibrationService.java

@@ -13,5 +13,12 @@ public interface VibrationService {
     /**
      * 抽取skf测点数据生成csv文件,风机下测点数据
      */
-    void extracTwindGeneratorSkfPointData();
+    void extracTwindGeneratorSkfPointData(String yesterdayDate);
+
+    /**
+     * 抽取skf故障频率数据生成csv文件
+     */
+    void extracTwindGeneratorSkfMachinePart(String yesterdayDate);
+
+
 }

+ 143 - 42
energy-manage-service/src/main/java/com/energy/manage/service/service/vibration/impl/VibrationServiceImpl.java

@@ -2,6 +2,7 @@ package com.energy.manage.service.service.vibration.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.text.StrFormatter;
 import cn.hutool.core.text.csv.CsvUtil;
 import cn.hutool.core.text.csv.CsvWriter;
@@ -9,13 +10,13 @@ import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.energy.manage.common.constant.redis.ManagerRedisKeyConstant;
 import com.energy.manage.common.reponse.HttpResult;
 import com.energy.manage.service.client.skf.AuthClient;
 import com.energy.manage.service.client.skf.DynamicMeasurementsClient;
 import com.energy.manage.service.constant.client.skf.SkfClientConstants;
-import com.energy.manage.service.domain.client.skf.AutoTokenVO;
-import com.energy.manage.service.domain.client.skf.DynamicMeasurementsVo;
-import com.energy.manage.service.domain.client.skf.HierarchyListVo;
+import com.energy.manage.service.domain.client.skf.*;
+import com.energy.manage.service.service.cache.CacheService;
 import com.energy.manage.service.service.vibration.VibrationService;
 import com.energy.manage.service.util.HttpGetClient;
 import com.google.common.collect.Lists;
@@ -23,20 +24,20 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.Month;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -48,15 +49,22 @@ public class VibrationServiceImpl implements VibrationService {
     @Autowired
     private DynamicMeasurementsClient dynamicMeasurementsClient;
 
+    @Autowired
+    private CacheService cacheService;
+
     // 定义时间格式
     private final String dateTimeFormatter = "yyyy-MM-dd";
 
     private final String dateFormatter = "MM-dd";
 
-    private String dynamicMeasurementsUrl = "http://192.168.50.242:13050/v1/points/{}/dynamicMeasurements";
+    @Value("${skf.data.url}")
+    private String dynamicMeasurementsUrl;
 
     private ZoneId shanghaiZone = ZoneId.of("Asia/Shanghai");
 
+    // redis 过期时间
+    private final Long expire = 172800L;
+
     private String yesterdayTime = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(dateFormatter));
 
     @Value("${skf.data.path}")
@@ -65,6 +73,11 @@ public class VibrationServiceImpl implements VibrationService {
     @Value("${skf.data.condition}")
     private String condition;
 
+    private List<String> abcd = Lists.newArrayList();
+
+    /**
+     * 通过skf接口获取树结构(带部件)
+     */
     @Override
     public void extractSkfPointData() {
 
@@ -111,7 +124,7 @@ public class VibrationServiceImpl implements VibrationService {
                                     + engineHierarchyListVo.getName() + "/" + getCurrentYearByTimeZone(this.shanghaiZone) + "/"
                                     + yesterdayTime;
 
-                            String fileNamePrefix = fieldHierarchyListVo.getName() + "#" + engineHierarchyListVo.getName() + "#" + pointHierarchyListVo.getName();
+                            String fileNamePrefix = fieldHierarchyListVo.getName() + "@" + engineHierarchyListVo.getName() + "@" + pointHierarchyListVo.getName();
 
                             // 获取具体数据并生成csv
                             dynamicMeasurementsConvertData(dynamicMeasurementsList, dataPath, fileNamePrefix);
@@ -123,9 +136,11 @@ public class VibrationServiceImpl implements VibrationService {
         }
     }
 
-
+    /**
+     * 通过skf接口获取树结构(不带部件,直接到测点)
+     */
     @Override
-    public void extracTwindGeneratorSkfPointData() {
+    public void extracTwindGeneratorSkfPointData(String yesterdayDate) {
         // 获取组织结构
         List<HierarchyListVo> hierarchyListVoList = getHierarchyLists();
         log.info("获取SKF数据组织结构树 >>> " + JSON.toJSONString(hierarchyListVoList));
@@ -139,47 +154,95 @@ public class VibrationServiceImpl implements VibrationService {
                 if (CollectionUtils.isEmpty(fieldHierarchyListVo.getChildren())) {
                     continue;
                 }
-                // 是否包含当前风场
-//                if (fieldHierarchyListVo.getName().contains(this.condition)) {
-                    //风机,特殊情况需要单独处理(风机到部件到具体测点有可能少一层部件)需要根据不同风场进行单独处理,风机直接获取测点id,跳过部件
-                    engine:
-                    for (HierarchyListVo engineHierarchyListVo : fieldHierarchyListVo.getChildren()) {
-                        if (CollectionUtils.isEmpty(engineHierarchyListVo.getChildren())) {
+                //风机,特殊情况需要单独处理(风机到部件到具体测点有可能少一层部件)需要根据不同风场进行单独处理,风机直接获取测点id,跳过部件
+                engine:
+                for (HierarchyListVo engineHierarchyListVo : fieldHierarchyListVo.getChildren()) {
+                    if (CollectionUtils.isEmpty(engineHierarchyListVo.getChildren())) {
+                        continue;
+                    }
+                    // 具体测点
+                    for (HierarchyListVo pointHierarchyListVo : engineHierarchyListVo.getChildren()) {
+                        //获取测点id值,调用skf接口获取振动测点值
+                        log.info("测点路径:>>> " + companyHierarchyListVo.getName() + " -> " + fieldHierarchyListVo.getName() +
+                                " -> " + engineHierarchyListVo.getName() + " -> " + pointHierarchyListVo.getName());
+                        // 测点id
+                        Integer pointId = pointHierarchyListVo.getId();
+                        log.info("测点id >>> " + pointId);
+
+                        List<DynamicMeasurementsVo> dynamicMeasurementsList = getDynamicMeasurementsList(pointId);
+                        if (CollectionUtil.isEmpty(dynamicMeasurementsList)) {
                             continue;
                         }
-                        // 具体测点
-                        for (HierarchyListVo pointHierarchyListVo : engineHierarchyListVo.getChildren()) {
-                            //获取测点id值,调用skf接口获取振动测点值
-                            log.info("测点路径:>>> " + companyHierarchyListVo.getName() + " -> " + fieldHierarchyListVo.getName() +
-                                    " -> " + engineHierarchyListVo.getName() + " -> " + pointHierarchyListVo.getName());
-                            // 测点id
-                            Integer pointId = pointHierarchyListVo.getId();
-                            log.info("测点id >>> " + pointId);
+                        // 拼接服务器地址
+                        String dataPath = skfDataPath + "/" + companyHierarchyListVo.getName() + "/" + fieldHierarchyListVo.getName() + "/"
+                                + engineHierarchyListVo.getName() + "/" + getCurrentYearByTimeZone(this.shanghaiZone) + "/"
+                                + yesterdayTime;
 
-                            List<DynamicMeasurementsVo> dynamicMeasurementsList = getDynamicMeasurementsList(pointId);
-                            if (CollectionUtil.isEmpty(dynamicMeasurementsList)) {
-                                continue;
-                            }
-                            // 拼接服务器地址
-                            String dataPath = skfDataPath + companyHierarchyListVo.getName() + "/" + fieldHierarchyListVo.getName() + "/"
-                                    + engineHierarchyListVo.getName() + "/" + getCurrentYearByTimeZone(this.shanghaiZone) + "/"
-                                    + yesterdayTime;
+                        String fileNamePrefix = fieldHierarchyListVo.getName() + "@" + engineHierarchyListVo.getName() + "@" + pointId + "@" + pointHierarchyListVo.getName();
 
-                            String fileNamePrefix = fieldHierarchyListVo.getName() + "#" + engineHierarchyListVo.getName() + "#" + pointHierarchyListVo.getName();
+                        // 获取具体数据并生成csv
+                        dynamicMeasurementsConvertData(dynamicMeasurementsList, dataPath, fileNamePrefix);
+                    }
 
-                            // 获取具体数据并生成csv
-                            dynamicMeasurementsConvertData(dynamicMeasurementsList, dataPath, fileNamePrefix);
-                        }
+                }
+            }
+        }
 
-                    }
+        StringBuffer keyBuffer = new StringBuffer(ManagerRedisKeyConstant.SKF_SHAKE_KEY);
+        keyBuffer.append(ManagerRedisKeyConstant.PLACEHOLDER);
+        keyBuffer.append(yesterdayDate);
+        cacheService.add(keyBuffer.toString(), "1");
 
-//                }
+        log.info(" >>> skf接口处理完毕 <<<");
+    }
+
+    @Override
+    public void extracTwindGeneratorSkfMachinePart(String yesterdayDate) {
 
+        log.info(" ========== 生成故障频率开始 ========== ");
+        List<MachineVO> machineList = getMachine();
+        log.info(" skf机器号 =====> " + machineList);
+
+        if (CollectionUtil.isEmpty(machineList)) {
+            log.info("=====>没有skf机器号<=====");
+        }
+
+        for (MachineVO machineVO : machineList) {
+            // 获取skf故障频率
+            MachinePartVO machinePart = getMachinePart(machineVO.getId());
+            String machinePartJson = JSON.toJSONString(machinePart);
+            log.info("机器号" + machineVO.getId() + ":故障频律 ====> " + machinePartJson);
+
+            if (StringUtils.isEmpty(machineVO.getPath())) {
+                log.error(" 机器号对应风场路径为空 ");
+                continue;
             }
-            log.info(" >>> skf接口处理完毕 <<<");
+            // 使用split方法,注意\\是转义字符
+            List<String> pathlist = Arrays.stream(machineVO.getPath().split("\\\\")).collect(Collectors.toList());
+            // 打印结果
+            System.out.println("分隔结果: " + pathlist);
+
+            StringBuffer skfPath = new StringBuffer();
+            for (String path : pathlist) {
+                skfPath.append(path).append("/");
+            }
+
+            //机器id@关联测点id@output.json
+            String fileName = machineVO.getName() + "@" + machinePart.getSpeedPointId() + "@output.json";
+
+            // 拼接服务器地址
+            StringBuffer dataPath = new StringBuffer(skfDataPath).append("/").
+                    append(skfPath).
+                    append(getCurrentYearByTimeZone(this.shanghaiZone)).append("/").
+                    append(yesterdayTime).append("/").append(fileName);
+
+            FileUtil.writeString(machinePartJson, new File(dataPath.toString()), StandardCharsets.UTF_8);
         }
+
+        log.info(" ========== 生成故障频率结束 ========== ");
     }
 
+
     /**
      * 通过测点id获取测点数据并生成csv文件
      *
@@ -222,7 +285,7 @@ public class VibrationServiceImpl implements VibrationService {
 
 
     /**
-     * 将测点数据转换抽取
+     * 将测点数据转换抽取文件
      *
      * @param dynamicMeasurementsList
      * @return
@@ -238,7 +301,11 @@ public class VibrationServiceImpl implements VibrationService {
             if (CollectionUtils.isEmpty(doubleList)) {
                 break dynamic;
             }
-            String fileName = fileNamePrefix + "@" + dynamicMeasurementsVo.getSpeed() + "@" + utctolocal(dynamicMeasurementsVo.getReadingTimeUTC()) + "_cms.csv";
+            // 风场名称@风机名称@测点id@测点名称@转速@采样频率@震动类型时间_cms.csv
+            String fileName = fileNamePrefix + "@" + dynamicMeasurementsVo.getSpeed() + "@" + dynamicMeasurementsVo.getSampleRate() + "@" + dynamicMeasurementsVo.getEUType() + "@" + utctolocal(dynamicMeasurementsVo.getReadingTimeUTC()) + "_cms.csv";
+
+            // abcd.add("震动类型:" + dynamicMeasurementsVo.getEUType() + " 类型值: " + dynamicMeasurementsVo.getEu());
+
             //生成csv文件
             createCsvFile(doubleList, dataPath, fileName);
             log.info("抽取skf数据并生成csv文件 >>>> " + fileName);
@@ -306,6 +373,40 @@ public class VibrationServiceImpl implements VibrationService {
 
 
     /**
+     * 获取skf机器信息
+     *
+     * @return
+     */
+    private List<MachineVO> getMachine() {
+
+        String skfToken = getSkfAutoToken();
+        if (StringUtils.isEmpty(skfToken)) {
+            log.info(" >>>>>> 获取skftoken失败 <<<<<< ");
+            return null;
+        }
+        List<MachineVO> list = dynamicMeasurementsClient.getMachine(skfToken);
+        return CollectionUtils.isEmpty(list) ? null : list;
+    }
+
+
+    /**
+     * 获取skf故障频率
+     *
+     * @return
+     */
+    private MachinePartVO getMachinePart(int machineId) {
+
+        String skfToken = getSkfAutoToken();
+        if (StringUtils.isEmpty(skfToken)) {
+            log.info(" >>>>>> 获取skftoken失败 <<<<<< ");
+            return null;
+        }
+        MachinePartVO machinePart = dynamicMeasurementsClient.getMachinePart(skfToken, machineId);
+        return machinePart;
+    }
+
+
+    /**
      * 获取token
      *
      * @return

+ 9 - 0
energy-manage-service/src/main/java/com/energy/manage/service/service/windenginegroup/WindEngineGroupService.java

@@ -34,6 +34,15 @@ public interface WindEngineGroupService {
      */
     ResultResp windEngineGroupImportData(MultipartFile file, String fieldCode,Integer userId);
 
+    /**
+     * 导入风机数据(大唐使用,包含远景内部风机id属性,并对风机ID进行验证)
+     * @param file
+     * @param fieldCode
+     * @param userId
+     * @return
+     */
+    ResultResp windEngineGroupAndIdImportData(MultipartFile file, String fieldCode, Integer userId);
+
 
     /**
      * 风机分页查询

+ 113 - 1
energy-manage-service/src/main/java/com/energy/manage/service/service/windenginegroup/impl/WindEngineGroupServiceImpl.java

@@ -95,6 +95,10 @@ public class WindEngineGroupServiceImpl extends BaseServiceImpl<WindEngineGroupP
         windEngineGroupPO.setState(Constants.GLOBAL_IN_USE);
         windEngineGroupPO.setDelState(DeleteStatusEnum.NODELETE.getCode());
         windEngineGroupPO.setDataSource(DataSourceTypeEnum.TERRACE_SOURCE.getCode());
+        // 风机机组客户内部编号(远景内部风机编号)
+        if (!StringUtils.isEmpty(windEngineGroupCreateDto.getEngineId())) {
+            windEngineGroupPO.setEngineId(windEngineGroupCreateDto.getEngineId());
+        }
         if (windEngineGroupMapper.insertUseGeneratedKeys(windEngineGroupPO) <= 0) {
             return false;
         }
@@ -194,6 +198,114 @@ public class WindEngineGroupServiceImpl extends BaseServiceImpl<WindEngineGroupP
             }
             windEngineGroupPO.setCreateBy(userId);
             windEngineGroupPO.setDataSource(DataSourceTypeEnum.UPLOAD_SOURCE.getCode());
+            // 风机机组客户内部编号(远景内部风机编号)
+            if (!StringUtils.isEmpty(windFieldExceVos.getEngineId())) {
+                windEngineGroupPO.setEngineId(windFieldExceVos.getEngineId());
+            }
+            list.add(windEngineGroupPO);
+        }
+        if (CollectionUtils.isEmpty(list)) {
+            return ResultResp.FAIL("数据处理异常!");
+        }
+        if (windEngineGroupMapper.insertList(list) <= 0) {
+            return ResultResp.FAIL();
+        }
+        return ResultResp.SUCCESS();
+    }
+
+    @SneakyThrows
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ResultResp windEngineGroupAndIdImportData(MultipartFile file, String fieldCode, Integer userId) {
+        List<WindEngineGroupExcelVo> windEngineGroupExcelVos = EasyExcel.read(file.getInputStream()).head(WindEngineGroupExcelVo.class).sheet().doReadSync();
+        if (CollectionUtils.isEmpty(windEngineGroupExcelVos)) {
+            return ResultResp.FAIL("未读取到文件数据,请核对数据准确性!");
+        }
+        // 过滤空数据
+        List<WindEngineGroupExcelVo> windEngineGroupExceVoList = windEngineGroupExcelVos.stream().filter(item ->
+                !StringUtils.isEmpty(item.getEngineName())).collect(Collectors.toList());
+
+        // 校验数据非空
+        for (WindEngineGroupExcelVo exceVo : windEngineGroupExceVoList) {
+            if (exceVo.getLongitude() == null || exceVo.getLatitude() == null || StringUtils.isEmpty(exceVo.getMachineTypeCode())) {
+                return ResultResp.FAIL("当前导入风机数据未填写经纬度,请核查导入数据!");
+            }
+        }
+
+        // 校验是否有重复的风机编号
+        Set<String> engineNames = windEngineGroupExceVoList.stream().map(item -> item.getEngineName()).collect(Collectors.toSet());
+        if (windEngineGroupExceVoList.size() != engineNames.size()) {
+            return ResultResp.FAIL("当前导入风机数据有重复风机编号,请核查导入数据!");
+        }
+
+        //处理客户风机内部编号问题
+        Set<String> engineIdSet = windEngineGroupExceVoList.stream()
+                .filter(item -> item.getEngineId() != null)
+                .map(WindEngineGroupExcelVo::getEngineId)
+                .collect(Collectors.toSet());
+        if (engineIdSet == null || engineIdSet.size() != windEngineGroupExceVoList.size()) {
+            return ResultResp.FAIL(" 当前导入风机数据内部风机ID不正确,请核查导入数据!");
+        }
+
+        // TODO 增加客户内部风机id校验,调用亮亮接口
+
+
+
+
+        // 处理机型编号
+        List<String> millTypeCodes = windEngineGroupExceVoList.stream().map(item -> item.getMachineTypeCode()).collect(Collectors.toList());
+        List<WindEngineMillVo> windEngineMillVoList = windEngineMillService.getWindEngineMillListByInMachineTypeCode(millTypeCodes);
+        //校验机型准确性
+        for (String millTypeCode : millTypeCodes) {
+            boolean flg = windEngineMillVoList.stream().anyMatch(item -> item.getMachineTypeCode().equals(millTypeCode));
+            if (!flg) {
+                return ResultResp.FAIL("当前导入机型编号系统中不存在,请核查导入数据!");
+            }
+        }
+        for (WindEngineGroupExcelVo windEngineGroupExcelVo : windEngineGroupExceVoList) {
+            for (WindEngineMillVo windEngineMillVo : windEngineMillVoList) {
+                if (windEngineGroupExcelVo.getMachineTypeCode().equals(windEngineMillVo.getMachineTypeCode())) {
+                    windEngineGroupExcelVo.setMillTypeCode(windEngineMillVo.getMillTypeCode());
+                }
+            }
+        }
+
+        // 数据校验是否有重名风机编号
+        List<String> engineNamees = windEngineGroupExceVoList.stream().map(item -> item.getEngineName()).collect(Collectors.toList());
+        Example queryExample = new Example(WindEngineGroupPO.class);
+        Example.Criteria criteria = queryExample.createCriteria();
+        criteria.andEqualTo("fieldCode", fieldCode);
+        criteria.andIn("engineName", engineNamees);
+        criteria.andEqualTo("delState", DeleteStatusEnum.NODELETE.getCode());
+        int count = windEngineGroupMapper.selectCountByExample(queryExample);
+        if (count > 0) {
+            return ResultResp.FAIL("当前风场中有存在的风机,请核查导入数据!");
+        }
+
+        WindEngineGroupPO windEngineGroupPO = null;
+        List<WindEngineGroupPO> list = Lists.newArrayList();
+        for (WindEngineGroupExcelVo windFieldExceVos : windEngineGroupExceVoList) {
+            windEngineGroupPO = new WindEngineGroupPO();
+            BeanUtil.copyProperties(windFieldExceVos, windEngineGroupPO);
+            String number = IdPrefixEnum.WIND_GROUP_NUMBER.getCode().concat(IdGeneratorUtil.zeroFillUtil(cacheService.incr(ManagerRedisKeyConstant.build(ManagerRedisKeyConstant.IDGENERATOR_CONSTANTS_KEY, IdPrefixEnum.WIND_GROUP_NUMBER.getCode()))));
+            windEngineGroupPO.setEngineCode(number);
+            windEngineGroupPO.setFieldCode(fieldCode);
+            windEngineGroupPO.setCreateTime(new Date());
+            windEngineGroupPO.setUpdateTime(new Date());
+            windEngineGroupPO.setState(Constants.GLOBAL_IN_USE);
+            windEngineGroupPO.setDelState(DeleteStatusEnum.NODELETE.getCode());
+            if (windFieldExceVos.getSightcingString().equals("是")) {
+                windEngineGroupPO.setSightcing(1);
+            }
+            if (windFieldExceVos.getSightcingString().equals("否")) {
+                windEngineGroupPO.setSightcing(2);
+            }
+            windEngineGroupPO.setCreateBy(userId);
+            windEngineGroupPO.setDataSource(DataSourceTypeEnum.UPLOAD_SOURCE.getCode());
+            // 风机机组客户内部编号(远景内部风机编号)
+            if (!StringUtils.isEmpty(windFieldExceVos.getEngineId())) {
+                windEngineGroupPO.setEngineId(windFieldExceVos.getEngineId());
+            }
             list.add(windEngineGroupPO);
         }
         if (CollectionUtils.isEmpty(list)) {
@@ -418,7 +530,7 @@ public class WindEngineGroupServiceImpl extends BaseServiceImpl<WindEngineGroupP
 
 
     @Override
-    public int getCountWindEngineGroupByCode(String engineName,String fieldCode) {
+    public int getCountWindEngineGroupByCode(String engineName, String fieldCode) {
 
         Example queryExample = new Example(WindEngineGroupPO.class);
         Example.Criteria criteria = queryExample.createCriteria();

+ 6 - 3
energy-manage-service/src/main/java/com/energy/manage/service/task/SkfVibrationDataTask.java

@@ -18,7 +18,7 @@ public class SkfVibrationDataTask {
     private VibrationService vibrationService;
 
     // 定义时间格式
-    private final String dateTimeFormatter = "yyyy-MM-dd";
+    private final String dateTimeFormatter = "yyyyMMdd";
 
     /**
      * 开始定时器
@@ -30,10 +30,13 @@ public class SkfVibrationDataTask {
 
         // 获取昨天的时间
         String yesterdayDate = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(dateTimeFormatter));
-
         // vibrationService.extractSkfPointData();
 
-        vibrationService.extracTwindGeneratorSkfPointData();
+        // 故障频率
+        vibrationService.extracTwindGeneratorSkfMachinePart(yesterdayDate);
+
+        // 振动测点
+        vibrationService.extracTwindGeneratorSkfPointData(yesterdayDate);
 
         log.info(getCurrentDateTim() + "结束抽取skf测点数据 ");
     }

+ 3 - 1
energy-manage-service/src/main/resources/mybatis/healthscores/HealthscoresMapper.xml

@@ -148,6 +148,7 @@
         <result column="pitch_system_score" property="pitchSystemScore" jdbcType="DECIMAL"/>
         <result column="hydraulic_system_score" property="hydraulicSystemScore" jdbcType="DECIMAL"/>
         <result column="control_system_score" property="controlSystemScore" jdbcType="DECIMAL"/>
+        <result column="overall_score" property="overallScore" jdbcType="DECIMAL"/>
     </resultMap>
     <!-- 无定时天跨年分表查询 -->
     <select id="listHscoresLastays" resultMap="BaseResultMap">
@@ -165,7 +166,8 @@
             yaw_system_score,
             pitch_system_score,
             hydraulic_system_score,
-            control_system_score
+            control_system_score,
+            overall_score
             FROM ${tableName}
             WHERE  1=1
             <if test="fieldId!=null">