Browse Source

1.联调分析模块儿,
2.修改算法json中直驱、非直驱数据结构
3.修改json分析类型结构(删除数据源)
4.分析类型新增type_code与type_flag字段关联

chenhongyan1989 1 year ago
parent
commit
8c6bcc2147
33 changed files with 520 additions and 220 deletions
  1. 5 0
      energy-manage-common/src/main/java/com/energy/manage/common/po/datatransfer/DataTransferPo.java
  2. 1 1
      energy-manage-common/src/main/java/com/energy/manage/common/po/windexceptioncount/WindExceptionCountPo.java
  3. 12 2
      energy-manage-service/src/main/java/com/energy/manage/service/constant/analysis/AnalysisConstants.java
  4. 9 10
      energy-manage-service/src/main/java/com/energy/manage/service/controller/analysis/AnalysisController.java
  5. 5 8
      energy-manage-service/src/main/java/com/energy/manage/service/controller/analysiserr/AnalysisErrController.java
  6. 42 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/analysis/AnalysisDto.java
  7. 5 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/analysis/AnalysisResultDto.java
  8. 2 2
      energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windexceptioncount/WindExceptionCountDto.java
  9. 9 0
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/analysis/AnalysisResultVo.java
  10. 6 1
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/analysis/AnalysisTypeVo.java
  11. 10 2
      energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/windexceptioncount/WindExceptionCountVo.java
  12. 2 1
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisCommentDescriptionMapper.java
  13. 2 1
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisGeneralFileMapper.java
  14. 1 2
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisResultMapper.java
  15. 9 2
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisTypeMapper.java
  16. 14 0
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/datatransfer/DataTransferMapper.java
  17. 10 0
      energy-manage-service/src/main/java/com/energy/manage/service/mappers/windenginegroup/WindEngineGroupMapper.java
  18. 12 3
      energy-manage-service/src/main/java/com/energy/manage/service/property/analysis/AlgorithmProperties.java
  19. 7 2
      energy-manage-service/src/main/java/com/energy/manage/service/service/analysis/AnalysisService.java
  20. 75 29
      energy-manage-service/src/main/java/com/energy/manage/service/service/analysis/impl/AnalysisServiceImpl.java
  21. 1 1
      energy-manage-service/src/main/java/com/energy/manage/service/service/analysiscomment/impl/AnalysisCommentServiceImpl.java
  22. 1 1
      energy-manage-service/src/main/java/com/energy/manage/service/service/datatransfer/DataTransferService.java
  23. 11 12
      energy-manage-service/src/main/java/com/energy/manage/service/service/datatransfer/impl/DataTransferServiceImpl.java
  24. 45 3
      energy-manage-service/src/main/java/com/energy/manage/service/task/AutoAnalysisTask.java
  25. 23 19
      energy-manage-service/src/main/java/com/energy/manage/service/test/TestClass.java
  26. 85 76
      energy-manage-service/src/main/java/com/energy/manage/service/test/TestJson.java
  27. 18 2
      energy-manage-service/src/main/java/com/energy/manage/service/util/TreeUtil.java
  28. 10 5
      energy-manage-service/src/main/resources/bootstrap.properties
  29. 7 5
      energy-manage-service/src/main/resources/mybatis/analysis/AnalysisResultMapper.xml
  30. 15 2
      energy-manage-service/src/main/resources/mybatis/analysis/AnalysisTypeMapper.xml
  31. 26 4
      energy-manage-service/src/main/resources/mybatis/datatransfer/DataTransferMapper.xml
  32. 16 1
      energy-manage-service/src/main/resources/mybatis/windenginegroup/WindEngineGroupMapper.xml
  33. 24 23
      energy-manage-service/src/main/resources/mybatis/windexceptioncount/WindExceptionCountMapper.xml

+ 5 - 0
energy-manage-common/src/main/java/com/energy/manage/common/po/datatransfer/DataTransferPo.java

@@ -88,4 +88,9 @@ public class DataTransferPo {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime ;
+
+    /**
+     * 是否已触发自动分析 0 :无  1:是
+     */
+    private Integer callState;
 }

+ 1 - 1
energy-manage-common/src/main/java/com/energy/manage/common/po/windexceptioncount/WindExceptionCountPo.java

@@ -29,7 +29,7 @@ public class WindExceptionCountPo {
     /**
      * 风机编号
      */
-    private String enginCode ;
+    private String engineCode ;
 
     /**
      * 分析类型编号

+ 12 - 2
energy-manage-service/src/main/java/com/energy/manage/service/constant/analysis/AnalysisConstants.java

@@ -13,6 +13,11 @@ public interface AnalysisConstants {
     String ANALYSIS_TYPE_PARRENT_KEY = "parentId";
 
     /**
+     * 分析类型节点key属性名
+     */
+    String ANALYSIS_TYPE_KEY = "id";
+
+    /**
      * 算法服务器数量
      */
      int SERVER_MERCHINE_COUNT = 3;
@@ -20,11 +25,16 @@ public interface AnalysisConstants {
     /**
      * 自动分析标识
      */
-    String AUTOMATIC = "automatic";
+    String AUTO_ANALYSIS = "automatic";
 
     /**
      * 手动分析标识
      */
-    String MANUAL = "manual";
+    String MANUAL_ANALYSIS = "manual";
+
+    /**
+     * 分析类型中数据源属性名称
+     */
+    String SCADA = "scada";
 
 }

+ 9 - 10
energy-manage-service/src/main/java/com/energy/manage/service/controller/analysis/AnalysisController.java

@@ -2,10 +2,9 @@ package com.energy.manage.service.controller.analysis;
 
 import com.energy.manage.common.base.Page;
 import com.energy.manage.common.reponse.ResultResp;
-import com.energy.manage.common.util.JSONMapper;
 import com.energy.manage.service.config.annotations.UserLoginToken;
+import com.energy.manage.service.constant.analysis.AnalysisConstants;
 import com.energy.manage.service.controller.base.BaseServiceController;
-import com.energy.manage.service.domain.dto.analysis.AnalysisAlgorithmDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisResultDto;
 import com.energy.manage.service.domain.vo.analysis.AnalysisResultVo;
@@ -47,6 +46,8 @@ public class AnalysisController extends BaseServiceController {
     @PostMapping("/analysis")
     public ResultResp analysis(@RequestBody AnalysisDto analysisto)
     {
+        //设置为手动分析
+        analysisto.setAutoOrManual(AnalysisConstants.MANUAL_ANALYSIS);
         return analysisService.analysis(analysisto);
     }
 
@@ -60,7 +61,7 @@ public class AnalysisController extends BaseServiceController {
 
     @UserLoginToken
     @ApiOperation(value = "分析详情")
-    @GetMapping("/analysisDetail")
+    @PostMapping("/analysisDetail")
     public ResultResp analysisDetail(@RequestParam("batchCode") String batchCode,
                                      @RequestParam("analysisTypeCode") String analysisTypeCode,
                                      @RequestParam("fieldEngineCode") String fieldEngineCode)
@@ -69,14 +70,12 @@ public class AnalysisController extends BaseServiceController {
     }
 
     @ApiOperation(value = "测试")
-    @PostMapping("/test")
-    public ResultResp test(@RequestBody AnalysisAlgorithmDto analysisAlgorithmDto)
+    @GetMapping("/test")
+    public ResultResp test()
     {
-        String result = JSONMapper.nonEmptyMapper().toJSon(analysisAlgorithmDto);
-        System.out.println("result = " + result);
-        result = result.replaceAll("packages","package");
-        System.out.println(AlgorithmProperties.analysisUrl);
-        return success(result);
+        System.out.println("analysisUrl: " + AlgorithmProperties.analysisUrl);
+        System.out.println("analysisJson: " + AlgorithmProperties.analysisJson);
+        return success();
     }
 
 }

+ 5 - 8
energy-manage-service/src/main/java/com/energy/manage/service/controller/analysiser/AnalysisErrController.java → energy-manage-service/src/main/java/com/energy/manage/service/controller/analysiserr/AnalysisErrController.java

@@ -1,4 +1,4 @@
-package com.energy.manage.service.controller.analysiser;
+package com.energy.manage.service.controller.analysiserr;
 
 import com.energy.manage.common.base.Page;
 import com.energy.manage.common.reponse.ResultResp;
@@ -10,10 +10,7 @@ import com.energy.manage.service.service.analysiserr.AnalysisErrService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 分析结果异常数统计
@@ -40,7 +37,7 @@ public class AnalysisErrController extends BaseServiceController {
     @UserLoginToken
     @ApiOperation(value = "异常添加")
     @PostMapping("/analysisErrAdd")
-    public ResultResp analysisErrAdd(WindExceptionCountDto windExceptionCountDto)
+    public ResultResp analysisErrAdd(@RequestBody WindExceptionCountDto windExceptionCountDto)
     {
         Integer loginUserId = getUserId();
         windExceptionCountDto.setCreateBy(loginUserId);
@@ -51,7 +48,7 @@ public class AnalysisErrController extends BaseServiceController {
     @UserLoginToken
     @ApiOperation(value = "异常编辑")
     @PostMapping("/analysisErrEdit")
-    public ResultResp analysisErrEdit(WindExceptionCountDto windExceptionCountDto)
+    public ResultResp analysisErrEdit(@RequestBody WindExceptionCountDto windExceptionCountDto)
     {
         windExceptionCountDto.setUpdateBy(getUserId());
         return analysisErrService.analysisErrEdit(windExceptionCountDto);
@@ -60,7 +57,7 @@ public class AnalysisErrController extends BaseServiceController {
     @UserLoginToken
     @ApiOperation(value = "异常删除")
     @PostMapping("/analysisErrDel")
-    public ResultResp analysisErrDel(WindExceptionCountDto windExceptionCountDto)
+    public ResultResp analysisErrDel(@RequestBody WindExceptionCountDto windExceptionCountDto)
     {
         windExceptionCountDto.setUpdateBy(getUserId());
         return analysisErrService.analysisErrDel(windExceptionCountDto);

+ 42 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/analysis/AnalysisDto.java

@@ -60,6 +60,7 @@ public class AnalysisDto {
      */
     private String scada;
 
+    /*自定义scada数据测点筛选 customFilter*/
     /**
      * 风速值最大最小
      */
@@ -80,10 +81,51 @@ public class AnalysisDto {
      */
     private List<Integer> valueGeneratorSpeed;
 
+    /*分析类型 configAnalysis*/
     /**
      * 分析类型code
      */
     private List<String> configAnalysis;
 
+    /*图像设置参数 graphSets*/
+    /**
+     * 直驱发电机转速轴系
+     */
+    private List<Integer> dGeneratorSpeed;
+
+    /**
+     * 非直驱发电机转速轴系设置
+     */
+    private List<Integer> iGeneratorSpeed;
+
+    /**
+     * 直驱发电机转矩轴系
+     */
+    private List<Integer> dGeneratorTorque;
+
+    /**
+     * 非直驱发电机转矩轴系
+     */
+    private List<Integer> iGeneratorTorque;
+
+    /**
+     *风能利用系数轴系
+     */
+    private List<Integer> cp;
+
+    /**
+     * 叶尖速比轴系
+     */
+    private List<Integer> tsr;
+
+    /**
+     * 桨距角轴系
+     */
+    private List<Integer> pitchAngle;
+
+    /**
+     * 有功功率轴系
+     */
+    private List<Integer> activePower;
 
 }

+ 5 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/analysis/AnalysisResultDto.java

@@ -29,6 +29,11 @@ public class AnalysisResultDto extends BaseDto {
     private String batchCode ;
 
     /**
+     * 风场名称
+     */
+    private String batchName ;
+
+    /**
      * 分析状态
      */
     private Integer analysisState ;

+ 2 - 2
energy-manage-service/src/main/java/com/energy/manage/service/domain/dto/windexceptioncount/WindExceptionCountDto.java

@@ -24,10 +24,10 @@ public class WindExceptionCountDto extends BaseDto {
     /**
      * 风机编号
      */
-    private String enginCode;
+    private String engineCode;
 
     /**
-     *
+     * 分析类型编号
      */
     private String analysisTypeCode;
 

+ 9 - 0
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/analysis/AnalysisResultVo.java

@@ -16,6 +16,15 @@ import java.util.Date;
 @Data
 public class AnalysisResultVo {
 
+    /**
+     * 风场名称
+     */
+    private String fieldName;
+
+    /**
+     * 风场编号
+     */
+    private String fieldCode;
 
     /**
      * 批次编号

+ 6 - 1
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/analysis/AnalysisTypeVo.java

@@ -15,9 +15,14 @@ import javax.persistence.Table;
 public class AnalysisTypeVo {
 
     /**
+     * id
+     */
+    private Long id;
+
+    /**
      * 分析类型父级编号
      */
-    private String parentId ;
+    private Long parentId ;
 
     /**
      * 分析类型编号

+ 10 - 2
energy-manage-service/src/main/java/com/energy/manage/service/domain/vo/windexceptioncount/WindExceptionCountVo.java

@@ -1,5 +1,6 @@
 package com.energy.manage.service.domain.vo.windexceptioncount;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
@@ -25,10 +26,15 @@ public class WindExceptionCountVo {
     /**
      * 风机编号
      */
-    private String enginCode;
+    private String engineCode;
 
     /**
-     *
+     * 分析类型编号
+     */
+    private String analysisTypeName;
+
+    /**
+     * 分析类型编号
      */
     private String analysisTypeCode;
 
@@ -45,10 +51,12 @@ public class WindExceptionCountVo {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date createTime;
 
     /**
      * 更新时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date updateTime;
 }

+ 2 - 1
energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisCommentDescriptionMapper.java

@@ -3,6 +3,7 @@ package com.energy.manage.service.mappers.analysis;
 import com.energy.manage.common.mapper.MyMapper;
 import com.energy.manage.common.po.analysis.AnalysisCommentDescriptionPo;
 import com.energy.manage.service.domain.vo.analysis.AnalysisCommentDescriptionVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -30,7 +31,7 @@ public interface AnalysisCommentDescriptionMapper extends MyMapper<AnalysisComme
      * @param analysisTypeCode
      * @return
      */
-    List<AnalysisCommentDescriptionVo> selecByBatchCodeAndAnalysisTypeCode(String batchCode, String analysisTypeCode);
+    List<AnalysisCommentDescriptionVo> selecByBatchCodeAndAnalysisTypeCode(@Param("batchCode") String batchCode, @Param("analysisTypeCode") String analysisTypeCode);
 
     /**
      *  新增

+ 2 - 1
energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisGeneralFileMapper.java

@@ -2,6 +2,7 @@ package com.energy.manage.service.mappers.analysis;
 
 import com.energy.manage.common.mapper.MyMapper;
 import com.energy.manage.service.domain.vo.analysis.AnalysisGeneralFileVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -20,6 +21,6 @@ public interface AnalysisGeneralFileMapper extends MyMapper<AnalysisGeneralFileV
      * @param analysisTypeCode
      * @return
      */
-    List<AnalysisGeneralFileVo> selectByCondition(String batchCode, String analysisTypeCode);
+    List<AnalysisGeneralFileVo> selectByCondition(@Param("batchCode") String batchCode, @Param("analysisTypeCode") String analysisTypeCode);
 
 }

+ 1 - 2
energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisResultMapper.java

@@ -27,9 +27,8 @@ public interface AnalysisResultMapper extends MyMapper<AnalysisResultPo> {
 
     /**
      * 查询分析中的数据量
-     * @param batchCode
      * @return
      */
-    int selectAlasisingCountByBatchCode(@Param("batchCode") String batchCode);
+    int selectAlasisingCount();
 
 }

+ 9 - 2
energy-manage-service/src/main/java/com/energy/manage/service/mappers/analysis/AnalysisTypeMapper.java

@@ -3,7 +3,7 @@ package com.energy.manage.service.mappers.analysis;
 import com.energy.manage.common.mapper.MyMapper;
 import com.energy.manage.common.po.analysis.AnalysisTypePo;
 import com.energy.manage.service.domain.vo.analysis.AnalysisTypeVo;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -27,5 +27,12 @@ public interface AnalysisTypeMapper extends MyMapper <AnalysisTypePo>{
      * @param typeCode
      * @return
      */
-    List<AnalysisTypeVo> selectByTypeCode(String typeCode);
+    List<AnalysisTypeVo> selectByTypeCode(@Param("typeCode") String typeCode);
+
+    /**
+     * 根据code 查询flag
+     * @param typeCodes
+     * @return
+     */
+    List<String> selecFlagtByCode(@Param("typeCodes") List<String> typeCodes);
 }

+ 14 - 0
energy-manage-service/src/main/java/com/energy/manage/service/mappers/datatransfer/DataTransferMapper.java

@@ -26,6 +26,12 @@ public interface DataTransferMapper extends MyMapper<DataTransferPo>{
     List<String> selectAllWindFieldBtach(Integer roleId);
 
     /**
+     * 查出秒级分钟级已转换完成的批次与风场编号的前五个批次
+     * @return
+     */
+    DataTransferVo selectBatchCodeForAutoAnaly();
+
+    /**
      * 查询数据转换列表
      * @param dataTransferDto
      * @return
@@ -63,4 +69,12 @@ public interface DataTransferMapper extends MyMapper<DataTransferPo>{
      */
     int selectCountByTransferState(Integer transferState);
 
+
+    /**
+     * 更新自动分析状态
+     * @param batchCode
+     * @return
+     */
+    int updateCallState(@Param("batchCode")String batchCode);
+
 }

+ 10 - 0
energy-manage-service/src/main/java/com/energy/manage/service/mappers/windenginegroup/WindEngineGroupMapper.java

@@ -9,6 +9,7 @@ import com.energy.manage.service.domain.vo.windenginegroup.WindEngineGroupVo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -33,5 +34,14 @@ public interface WindEngineGroupMapper extends MyMapper<WindEngineGroupPO> {
    List<WindEngineGroupVo> selectWindEngineGroupByBatchCode(@Param("batchCode") String batchCode);
 
 
+   /**
+    * 查询出最大风机功率
+    * @param fieldCode
+    * @param engineCodes
+    * @return
+    */
+   BigDecimal selectMaxRatedCapacity(@Param("fieldCode") String fieldCode,@Param("engineCodes") List<String> engineCodes);
+
+
 
 }

+ 12 - 3
energy-manage-service/src/main/java/com/energy/manage/service/property/analysis/AlgorithmProperties.java

@@ -39,19 +39,23 @@ public class AlgorithmProperties {
      */
     public static List<String> customFilterProperties;
 
-
     /**
      * 分析类型属性
      */
     public static String configAnalysisProperties;
 
+    /**
+     * 功率因数
+     */
+    public static String powerFactorRated;
+
 
     @Value("${analysis.url}")
     public void setAnalysisUrl(String analysisUrl){
         AlgorithmProperties.analysisUrl = analysisUrl;
     }
 
-    @Value("${analysis.json}")
+    @Value("${analysis.algorithm.json}")
     public void setAnalysisJson(String analysisJson){
         AlgorithmProperties.analysisJson = analysisJson;
     }
@@ -66,7 +70,7 @@ public class AlgorithmProperties {
         AlgorithmProperties.customFilterProperties = customFilterProperties;
     }
 
-    @Value("${analysis.properties}")
+    @Value("${analysis.properties.name}")
     public void setConfigAnalysisProperties(String configAnalysis){
         AlgorithmProperties.configAnalysisProperties = configAnalysis;
     }
@@ -75,4 +79,9 @@ public class AlgorithmProperties {
     public void setConfigAnalysisJson(String configAnalysisJson){
         AlgorithmProperties.configAnalysisJson = configAnalysisJson;
     }
+
+    @Value("${power.factor.rated}")
+    public void setPowerFactorRated(String powerFactorRated){
+        AlgorithmProperties.powerFactorRated = powerFactorRated;
+    }
 }

+ 7 - 2
energy-manage-service/src/main/java/com/energy/manage/service/service/analysis/AnalysisService.java

@@ -1,13 +1,11 @@
 package com.energy.manage.service.service.analysis;
 
 import com.energy.manage.common.reponse.ResultResp;
-import com.energy.manage.service.domain.dto.analysis.AnalysisAlgorithmDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisResultDto;
 import com.energy.manage.service.domain.vo.analysis.AnalysisDetailVo;
 import com.energy.manage.service.domain.vo.analysis.AnalysisResultShowVo;
 import com.energy.manage.service.domain.vo.analysis.AnalysisResultVo;
-import com.fasterxml.jackson.core.JsonProcessingException;
 
 import java.util.List;
 
@@ -52,4 +50,11 @@ public interface AnalysisService {
     List<AnalysisDetailVo> analysisDetail(String batchCode, String analysisTypeCode, String fieldEngineCode);
 
 
+    /**
+     * 分析中检查
+     * @return
+     */
+    boolean checkAnalysising();
+
+
 }

+ 75 - 29
energy-manage-service/src/main/java/com/energy/manage/service/service/analysis/impl/AnalysisServiceImpl.java

@@ -7,8 +7,6 @@ import com.energy.manage.common.util.HttpUtils;
 import com.energy.manage.service.constant.analysis.AnalysisConstants;
 import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisResultDto;
-import com.energy.manage.service.domain.dto.analysisalgorithm.DataContractDto;
-import com.energy.manage.service.domain.dto.analysisalgorithm.DataContractTypeDto;
 import com.energy.manage.service.domain.vo.analysis.*;
 import com.energy.manage.service.domain.vo.windenginegroup.WindEngineGroupVo;
 import com.energy.manage.service.mappers.analysis.*;
@@ -16,7 +14,6 @@ import com.energy.manage.service.mappers.windenginegroup.WindEngineGroupMapper;
 import com.energy.manage.service.property.analysis.AlgorithmProperties;
 import com.energy.manage.service.service.analysis.AnalysisService;
 import com.energy.manage.service.util.BeanMapUtils;
-import com.energy.manage.service.util.TreeUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -29,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -65,6 +63,8 @@ public class AnalysisServiceImpl implements AnalysisService {
     @Autowired
     private AnalysisGeneralFileMapper generalFileMapper;
 
+    @Autowired
+    private WindEngineGroupMapper windEngineGroupMapper;
 
     private static ObjectMapper mapper = new ObjectMapper();
 
@@ -86,14 +86,16 @@ public class AnalysisServiceImpl implements AnalysisService {
     @Override
     public ResultResp analysis(AnalysisDto analysisDto) {
         try {
-            String batchCode = analysisDto.getDataBatchNum();
-            if(checkAnalysising(batchCode)){
+            if(checkAnalysising()){
                 return ResultResp.FAIL(ConstVar.ANALYSISING);
             }
+            //分析类型code转换为flag(便于json分析类型赋值)
+            transferAnalysisFlagByCode(analysisDto);
             //将配置文件中的算法json转换为对象
             JsonNode rootNode = mapper.readTree(AlgorithmProperties.analysisJson);
-            //将前端入参转换为算法标准json
+            //将入参analysisDto转换为算法标准json
             dataProccess(analysisDto,rootNode);
+            log.info("调用分析算法之前,将入参analysisDto转换为算法标准json = {}" + rootNode.toString());
             //调用算法
             JSONObject jsonObject = HttpUtils.doPost(AlgorithmProperties.analysisUrl,mapper.convertValue(rootNode, Map.class));
             log.info("调用算法分析返回结果:{}",jsonObject);
@@ -134,11 +136,8 @@ public class AnalysisServiceImpl implements AnalysisService {
         }
         //最新总文件
         List<AnalysisGeneralFileVo> newGeneralFileVos = new ArrayList<>();
-        //如果风机编号为空的话 则需要查总文件
-        if(StringUtils.isBlank(fieldEngineCode)){
-            //获取最新总文件列表
-            newGeneralFileVos = getNewGeneralFiles(batchCode,analysisTypeCode);
-        }
+        //获取最新总文件列表
+        newGeneralFileVos = getNewGeneralFiles(batchCode,analysisTypeCode);
         //获取最新分文件
         List<AnalysisDiagramRelationVo> newDiagramRelationVos = getNewDiagramRelations(batchCode, analysisTypeCode, fieldEngineCode);
         //查询评论
@@ -161,6 +160,16 @@ public class AnalysisServiceImpl implements AnalysisService {
 
 
     /**
+     * 分析中检查
+     * @return
+     */
+    @Override
+    public boolean checkAnalysising(){
+        return analysisResultMapper.selectAlasisingCount() > AnalysisConstants.SERVER_MERCHINE_COUNT;
+    }
+
+
+    /**
      * 获取分析类型
      */
     private List<Map<String,Object>> getAnalysisType(){
@@ -169,8 +178,10 @@ public class AnalysisServiceImpl implements AnalysisService {
         if(CollectionUtils.isEmpty(analysisTypeVos)){
             return resultList;
         }
+        analysisTypeVos = analysisTypeVos.stream().filter(item->StringUtils.isNotBlank(item.getTypeCode())).sorted(Comparator.comparing(AnalysisTypeVo::getParentId)).collect(Collectors.toList());
         analysisTypeVos.forEach(analysisTypeVo -> resultList.add(BeanMapUtils.beanToMap(analysisTypeVo)));
-        return TreeUtil.getJava8ResultTree(resultList, AnalysisConstants.ANALYSIS_TYPE_PARRENT_KEY);
+        return resultList;
+//        return TreeUtil.getJava8ResultTree(resultList, AnalysisConstants.ANALYSIS_TYPE_PARRENT_KEY,AnalysisConstants.ANALYSIS_TYPE_KEY);
     }
 
     /**
@@ -258,13 +269,15 @@ public class AnalysisServiceImpl implements AnalysisService {
     }
 
     /**
-     * 分析中检查
-     * @param batchCode
-     * @return
+     * 根据分析类型code转换分析flag
+     * @param analysisDto
      */
-    private boolean checkAnalysising(String batchCode){
-        int analysisingCount = analysisResultMapper.selectAlasisingCountByBatchCode(batchCode);
-        return analysisingCount > AnalysisConstants.SERVER_MERCHINE_COUNT;
+    private void transferAnalysisFlagByCode(AnalysisDto analysisDto){
+        List<String> configAnalysisCodes = analysisDto.getConfigAnalysis();
+        if(CollectionUtils.isEmpty(configAnalysisCodes)){
+            return;
+        }
+        analysisDto.setConfigAnalysis(analysisTypeMapper.selecFlagtByCode(configAnalysisCodes));
     }
 
     /**
@@ -275,16 +288,24 @@ public class AnalysisServiceImpl implements AnalysisService {
     private void dataProccess(AnalysisDto analysisDto,JsonNode rootNode){
         //前端入参类
         Field[] analysisFields = analysisDto.getClass().getDeclaredFields();
+//        List<String> propertyNames = new ArrayList<>();
+        String scada = analysisDto.getScada();
         Arrays.asList(analysisFields).stream().forEach(field -> {
             field.setAccessible(true);
             try {
                 if(field.get(analysisDto) != null){
-                    updateNodesByPropertyName(rootNode, field.getName(), field.get(analysisDto));
+                    //放置值不为空的属性
+//                    propertyNames.add(field.getName());
+                    updateNodesByPropertyName(rootNode, field.getName(), field.get(analysisDto),scada);
                 }
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
             }
         });
+        //如果不包含该属性则设置默认值
+//        if(!propertyNames.contains("activePower")){
+//
+//        }
     }
 
     /**
@@ -319,20 +340,20 @@ public class AnalysisServiceImpl implements AnalysisService {
      * @param propertyName 属性名称
      * @param newValue 新值
      */
-    private void updateNodesByPropertyName(JsonNode parentNode, String propertyName, Object newValue) {
+    private void updateNodesByPropertyName(JsonNode parentNode, String propertyName, Object newValue,String scada) {
         if (parentNode.isObject()) {
             parentNode.fields().forEachRemaining(entry -> {
                 // 匹配到属性名称,进行值的修改
-                if (entry.getKey().equals(propertyName)) {
+                if (entry.getKey().equalsIgnoreCase(propertyName)) {
                     //判断当前节点有没有子节点
-                    if(parentNode.isContainerNode()){
-                        assignmentByPropertyName(entry.getValue(), propertyName, newValue);
-                    }else{
+                    if(!entry.getValue().fields().hasNext() && !propertyName.equalsIgnoreCase(AlgorithmProperties.configAnalysisProperties)){
                         ((ObjectNode) parentNode).put(propertyName, newValue.toString());
+                    }else{
+                        assignmentByPropertyName(entry.getValue(), propertyName, newValue,scada);
                     }
                 }
                 // 递归搜索子节点
-                updateNodesByPropertyName(entry.getValue(), propertyName, newValue);
+                updateNodesByPropertyName(entry.getValue(), propertyName, newValue,scada);
             });
         }
     }
@@ -343,7 +364,7 @@ public class AnalysisServiceImpl implements AnalysisService {
      * @param propertyName
      * @param newValue
      */
-    private void  assignmentByPropertyName(JsonNode subNode, String propertyName, Object newValue){
+    private void assignmentByPropertyName(JsonNode subNode, String propertyName, Object newValue,String scada){
         //scada数据筛选过滤 、图像设置特殊处理
         if(AlgorithmProperties.graphSetsProperties.contains(propertyName)
                 || AlgorithmProperties.customFilterProperties.contains(propertyName)){
@@ -352,7 +373,7 @@ public class AnalysisServiceImpl implements AnalysisService {
         }
         //分析类型特殊处理
         if(AlgorithmProperties.configAnalysisProperties.equals(propertyName)){
-            dealConfigAnalysis(subNode, newValue);
+            dealConfigAnalysis(subNode, newValue,scada);
             return;
         }
     }
@@ -364,6 +385,9 @@ public class AnalysisServiceImpl implements AnalysisService {
      */
     private void dealGraphSetsAndCustomFilter(JsonNode subNode, Object newValue){
         List<Integer> list = (List) newValue;
+        if(list.size() == 0){
+            return;
+        }
         AtomicInteger index = new AtomicInteger(0);
         subNode.fields().forEachRemaining(entry -> {
             ((ObjectNode) subNode).put(entry.getKey(), list.get(index.get()));
@@ -376,7 +400,7 @@ public class AnalysisServiceImpl implements AnalysisService {
      * @param subNode
      * @param newValue
      */
-    private void dealConfigAnalysis(JsonNode subNode, Object newValue){
+    private void dealConfigAnalysis(JsonNode subNode, Object newValue,String scada){
         try{
             ArrayNode arrayNode = (ArrayNode) subNode;
             List<String> analysisTypes = (List) newValue;
@@ -386,7 +410,11 @@ public class AnalysisServiceImpl implements AnalysisService {
                 String[] types = analysisTypes.get(i).split("\\|");
                 AtomicInteger index =  new AtomicInteger(0);
                 childNode.fields().forEachRemaining(entry-> {
-                    ((ObjectNode)childNode).put(entry.getKey(), types[index.get()]);
+                    if(StringUtils.isNotBlank(scada) && entry.getKey().equals(AnalysisConstants.SCADA)){
+                        ((ObjectNode)childNode).put(entry.getKey(), scada);
+                    }else{
+                        ((ObjectNode)childNode).put(entry.getKey(), types[index.get()]);
+                    }
                     index.incrementAndGet();
                 });
                 arrayNode.add(childNode);
@@ -396,4 +424,22 @@ public class AnalysisServiceImpl implements AnalysisService {
         }
     }
 
+    /**
+     * 获取 ratedCapacity 风机额定功率*1.2
+     * @param analysisDto
+     * @return
+     */
+    private String getRatedCapacity(AnalysisDto analysisDto){
+        //获取风机机组
+        List<String> engineCodes = analysisDto.getTurbines();
+        //获取风场编号
+        String fieldCode = analysisDto.getPowerFarmID();
+        //查询最大功率
+       BigDecimal ratedCapacity = windEngineGroupMapper.selectMaxRatedCapacity(fieldCode,engineCodes);
+       //功率因数 1.2
+       BigDecimal powerFactorRated = new BigDecimal(AlgorithmProperties.powerFactorRated);
+       //返回功率
+       return ratedCapacity == null ? "0" : ratedCapacity.multiply(powerFactorRated).toString();
+    }
+
 }

+ 1 - 1
energy-manage-service/src/main/java/com/energy/manage/service/service/analysiscomment/impl/AnalysisCommentServiceImpl.java

@@ -59,7 +59,7 @@ public class AnalysisCommentServiceImpl implements AnalysisCommentService {
             return ResultResp.FAIL(ConstVar.DUPLICATE_TYPE_NAME);
         }
         AnalysisCommentTypeRelationDto analysisCommentTypeRelationDto = new AnalysisCommentTypeRelationDto();
-        String typeCode = UUIDTools.getShortUUIDLowCase();
+        String typeCode = UUIDTools.getUUIDLowCase();
         analysisCommentTypeRelationDto.setCommentTypeCode(typeCode)
                                       .setCommentTypeCode(saveTypeName)
                                       .setCreateBy(typeRelationDto.getCreateBy());

+ 1 - 1
energy-manage-service/src/main/java/com/energy/manage/service/service/datatransfer/DataTransferService.java

@@ -43,7 +43,7 @@ public interface DataTransferService {
      */
     ResultResp dataTransfer(String batchCode,
                             String dataTransferType,
-                            String dataTransferTypePath,
+                            String dataTransferAddr,
                             Integer updateBy);
 
 

+ 11 - 12
energy-manage-service/src/main/java/com/energy/manage/service/service/datatransfer/impl/DataTransferServiceImpl.java

@@ -24,7 +24,6 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -124,20 +123,20 @@ public class DataTransferServiceImpl implements DataTransferService {
     @Override
     public ResultResp dataTransfer(String batchCode,
                                    String dataTransferType,
-                                   String dataTransferTypePath,
+                                   String dataTransferAddr,
                                    Integer updateBy) {
-        //检查转换状态是否有正在转换的数据 有的话 不转换
-        if(checkTransferState()){
-            return ResultResp.FAIL(ConstVar.DATA_TRANSFERING);
-        }
+//        //检查转换状态是否有正在转换的数据 有的话 不转换
+//        if(checkTransferState()){
+//            return ResultResp.FAIL(ConstVar.DATA_TRANSFERING);
+//        }
         DataTransferPo po = dataTransferMapper.selectByBatchCodeAndDataTransferType(batchCode,dataTransferType);
         //如果数据库中存在的数据路径地址不为空的话 说明已经转换过了 需要重新转换 备份数据
         if(po != null && StringUtils.isNotBlank(po.getTransferAddr())){
             saveHistory(po);
-            //状态重新置换为未转换
-            po.setTransferState(-1);
         }
-        po.setTransferAddr(dataTransferTypePath);
+        //状态重新置换为转换中
+        po.setTransferState(0);
+        po.setTransferAddr(dataTransferAddr);
         po.setUpdateBy(updateBy);
         return ResultResp.SUCCESS(dataTransferMapper.updateDataTransfer(po));
     }
@@ -242,9 +241,9 @@ public class DataTransferServiceImpl implements DataTransferService {
      * 检查转换状态系统中是否有正在转换的数据
      * @return
      */
-    private boolean checkTransferState(){
-        return dataTransferMapper.selectCountByTransferState(DATA_TRANSFERING_STATE) > 0;
-    }
+//    private boolean checkTransferState(){
+//        return dataTransferMapper.selectCountByTransferState(DATA_TRANSFERING_STATE) > 0;
+//    }
 
     /**
      * 备份转换数据

+ 45 - 3
energy-manage-service/src/main/java/com/energy/manage/service/task/AutoAnalysisTask.java

@@ -1,13 +1,21 @@
 package com.energy.manage.service.task;
 
-import com.energy.manage.service.domain.dto.analysis.AnalysisAlgorithmDto;
+import com.energy.manage.service.constant.analysis.AnalysisConstants;
 import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
+import com.energy.manage.service.domain.vo.analysis.AnalysisTypeVo;
+import com.energy.manage.service.domain.vo.datatransfer.DataTransferVo;
+import com.energy.manage.service.mappers.analysis.AnalysisTypeMapper;
+import com.energy.manage.service.mappers.datatransfer.DataTransferMapper;
 import com.energy.manage.service.service.analysis.AnalysisService;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 自动分析定时任务
  * @author chy
@@ -21,14 +29,48 @@ public class AutoAnalysisTask {
     @Autowired
     private AnalysisService analysisService;
 
+    @Autowired
+    private DataTransferMapper dataTransferMapper;
+
+    @Autowired
+    private AnalysisTypeMapper typeMapper;
 
     /**
      * 自动分析
      */
     @XxlJob(value = "autoAnalysis")
-    public void autoAnalysis() {
+    void autoAnalysis() {
         log.info("触发自动分析定时任务开始");
-        analysisService.analysis(new AnalysisDto());
+        if(analysisService.checkAnalysising()){
+            log.info("当前有正在分析的数据,自动分析返回");
+            return;
+        }
+        //获取转换完成且未自动分析的的批次号
+        DataTransferVo dataTransferVo = dataTransferMapper.selectBatchCodeForAutoAnaly();
+        if(dataTransferVo == null || StringUtils.isBlank(dataTransferVo.getBatchCode())){
+            log.info("当前没有秒级、分钟级全部转换完成的数据,自动分析返回");
+            return;
+        }
+        //分析调用
+        analysisService.analysis(assignmentAnalysisDto(dataTransferVo));
+        //自动分析调用完成之后更新状态
+        dataTransferMapper.updateCallState(dataTransferVo.getBatchCode());
         log.info("触发自动分析定时任务结束");
     }
+
+
+    /**
+     * 设置分析参数
+     * @param dataTransferVo
+     * @return
+     */
+    private AnalysisDto assignmentAnalysisDto(DataTransferVo dataTransferVo){
+        AnalysisDto analysisDto = new AnalysisDto();
+        analysisDto.setAutoOrManual(AnalysisConstants.AUTO_ANALYSIS);
+        analysisDto.setDataBatchNum(dataTransferVo.getBatchCode());
+        analysisDto.setPowerFarmID(dataTransferVo.getFieldCode());
+        List<String> typeCodeList = typeMapper.selectAllVo().parallelStream().map(AnalysisTypeVo::getTypeCode).collect(Collectors.toList());
+        analysisDto.setConfigAnalysis(typeCodeList);
+        return analysisDto;
+    }
 }

+ 23 - 19
energy-manage-service/src/main/java/com/energy/manage/service/test/TestClass.java

@@ -1,5 +1,6 @@
 package com.energy.manage.service.test;
 
+import com.energy.manage.common.util.UUIDTools;
 import com.energy.manage.service.domain.dto.analysis.AnalysisAlgorithmDto;
 import com.energy.manage.service.domain.dto.analysis.AnalysisDto;
 
@@ -15,26 +16,29 @@ import java.util.List;
 public class TestClass {
 
     public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
-        AnalysisAlgorithmDto algorithm = new AnalysisAlgorithmDto();
-        AnalysisDto analysis = new AnalysisDto();
-        analysis.setScada("all");
-        analysis.setBeginTime("2023-01-01 12:22:30");
-        //算法入参类
-        Field[] analysisAlgorithmFields = algorithm.getClass().getDeclaredFields();
-        //前端入参类
-        Field[] analysisFields = analysis.getClass().getDeclaredFields();
-        List<Field> fields = new ArrayList<>();
-        for(Field field : analysisFields){
-            field.setAccessible(true);
-            if(field.get(analysis) != null){
-                fields.add(field);
-            }
+//        AnalysisAlgorithmDto algorithm = new AnalysisAlgorithmDto();
+//        AnalysisDto analysis = new AnalysisDto();
+//        analysis.setScada("all");
+//        analysis.setBeginTime("2023-01-01 12:22:30");
+//        //算法入参类
+//        Field[] analysisAlgorithmFields = algorithm.getClass().getDeclaredFields();
+//        //前端入参类
+//        Field[] analysisFields = analysis.getClass().getDeclaredFields();
+//        List<Field> fields = new ArrayList<>();
+//        for(Field field : analysisFields){
+//            field.setAccessible(true);
+//            if(field.get(analysis) != null){
+//                fields.add(field);
+//            }
+//        }
+//        //前端入参属性数组
+//        for(Field analysisField : fields){
+//            setValue(analysis,algorithm,analysisField,analysisAlgorithmFields);
+//        }
+        for(int i = 0 ; i < 4; i++ ){
+            System.out.println(UUIDTools.getUUIDLowCase());
         }
-        //前端入参属性数组
-        for(Field analysisField : fields){
-            setValue(analysis,algorithm,analysisField,analysisAlgorithmFields);
-        }
-        System.out.println(algorithm.getDataContract().getDataFilter().getBeginTime());
+
     }
 
     /**

+ 85 - 76
energy-manage-service/src/main/java/com/energy/manage/service/test/TestJson.java

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.IntNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.commons.lang3.StringUtils;
 
 import java.lang.reflect.Field;
 import java.util.*;
@@ -26,80 +27,83 @@ public class TestJson {
 
     public static void main(String[] args) throws JsonProcessingException {
         String jsonString = "{\n" +
-                "        \"dataContractType\": {\n" +
-                "            \"type\": \"analysisExecuteOrder\",\n" +
-                "            \"version\": \"1.2.0\"\n" +
-                "        },\n" +
-                "        \"dataContract\": {\n" +
-                "            \"autoOrManual\":\"automatic\",\n" +
-                "            \"dataFilter\": {\n" +
-                "                \"powerFarmID\": \"010-00001\",\n" +
-                "                \"turbines\": [\n" +
-                "                    \"010-00001-0001\",\n" +
-                "                    \"010-00001-0002\"\n" +
-                "                ],\n" +
-                "                \"dataBatchNum\": \"B2024042211-0\",\n" +
-                "                \"beginTime\": \"2023-01-01 00:00:00\",\n" +
-                "                \"endTime\": \"2023-12-31 23:59:59\",\n" +
-                "                \"excludingMonths\": [\n" +
-                "                    \"2023-12\",\n" +
-                "                    \"2023-09\"\n" +
-                "                ],\n" +
-                "                \"customFilter\": {\n" +
-                "                    \"valueWindSpeed\": {\n" +
-                "                        \"min\": 3.0,\n" +
-                "                        \"max\": 25.0\n" +
-                "                    },\n" +
-                "                    \"valuePitchAngle\": {\n" +
-                "                        \"min\": 2,\n" +
-                "                        \"max\": null\n" +
-                "                    },\n" +
-                "                    \"valueActivePower\": {\n" +
-                "                        \"min\": 10,\n" +
-                "                        \"max\": 2500\n" +
-                "                    },\n" +
-                "                    \"valueGeneratorSpeed\": {\n" +
-                "                        \"min\": 10,\n" +
-                "                        \"max\": 2500\n" +
-                "                    }\n" +
-                "                }\n" +
-                "            },\n" +
-                "            \"configAnalysis\": [\n" +
-                "            ],\n" +
-                "            \"graphSets\": {\n" +
-                "                \"generatorSpeed\": {\n" +
-                "                    \"step\": 200,\n" +
-                "                    \"min\": 1000,\n" +
-                "                    \"max\": 2000\n" +
-                "                },\n" +
-                "                \"generatorTorque\": {\n" +
-                "                    \"step\": 2000,\n" +
-                "                    \"min\": 0,\n" +
-                "                    \"max\": 12000\n" +
+                "    \"dataContractType\": {\n" +
+                "        \"type\": \"analysisExecuteOrder\",\n" +
+                "        \"version\": \"1.2.0\"\n" +
+                "    },\n" +
+                "    \"dataContract\": {\n" +
+                "        \"autoOrManual\": \"automatic\",\n" +
+                "        \"dataFilter\": {\n" +
+                "            \"powerFarmID\": \"010-00001\",\n" +
+                "            \"turbines\": [],\n" +
+                "            \"dataBatchNum\": \"B2024042211-0\",\n" +
+                "            \"beginTime\": \"2023-01-01 00:00:00\",\n" +
+                "            \"endTime\": \"2023-12-31 23:59:59\",\n" +
+                "            \"excludingMonths\": [],\n" +
+                "            \"customFilter\": {\n" +
+                "                \"valueWindSpeed\": {\n" +
+                "                    \"min\": null,\n" +
+                "                    \"max\": null\n" +
                 "                },\n" +
-                "                \"cp\": {\n" +
-                "                    \"step\": 0.5,\n" +
-                "                    \"min\": 0,\n" +
-                "                    \"max\": 2\n" +
+                "                \"valuePitchAngle\": {\n" +
+                "                    \"min\": null,\n" +
+                "                    \"max\": null\n" +
                 "                },\n" +
-                "                \"tsr\": {\n" +
-                "                    \"step\": 5,\n" +
-                "                    \"min\": 0,\n" +
-                "                    \"max\": 30\n" +
+                "                \"valueActivePower\": {\n" +
+                "                    \"min\": null,\n" +
+                "                    \"max\": null\n" +
                 "                },\n" +
-                "                \"pitchAngle\": {\n" +
-                "                    \"step\": 1,\n" +
-                "                    \"min\": -1,\n" +
-                "                    \"max\": 20\n" +
-                "                },\n" +
-                "                \"activePower\": {\n" +
-                "                    \"step\": 250,\n" +
-                "                    \"min\": 0,\n" +
-                "                    \"max\": 2000\n" +
+                "                \"valueGeneratorSpeed\": {\n" +
+                "                    \"min\": null,\n" +
+                "                    \"max\": null\n" +
                 "                }\n" +
                 "            }\n" +
+                "        },\n" +
+                "        \"configAnalysis\": [],\n" +
+                "        \"graphSets\": {\n" +
+                "            \"DgeneratorSpeed\": {\n" +
+                "                \"step\": 5,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 30\n" +
+                "            },\n" +
+                "            \"DgeneratorTorque\": {\n" +
+                "                \"step\": 10000,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 100000\n" +
+                "            },\n" +
+                "            \"IgeneratorSpeed\": {\n" +
+                "                \"step\": 200,\n" +
+                "                \"min\": 1000,\n" +
+                "                \"max\": 2000\n" +
+                "            },\n" +
+                "            \"IgeneratorTorque\": {\n" +
+                "                \"step\": 2000,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 12000\n" +
+                "            },\n" +
+                "            \"cp\": {\n" +
+                "                \"step\": 0.5,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 2\n" +
+                "            },\n" +
+                "            \"tsr\": {\n" +
+                "                \"step\": 5,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 30\n" +
+                "            },\n" +
+                "            \"pitchAngle\": {\n" +
+                "                \"step\": 1,\n" +
+                "                \"min\": -1,\n" +
+                "                \"max\": 20\n" +
+                "            },\n" +
+                "            \"activePower\": {\n" +
+                "                \"step\": 250,\n" +
+                "                \"min\": 0,\n" +
+                "                \"max\": 2000\n" +
+                "            }\n" +
                 "        }\n" +
-                "    }";
+                "    }\n" +
+                "}";
         JsonNode rootNode = mapper.readTree(jsonString);
 //        AnalysisDto dto = new AnalysisDto();
 //        dto.setBeginTime("1234-12-12 00:00:12");
@@ -112,6 +116,7 @@ public class TestJson {
 //        }
 
         AnalysisDto dto = new AnalysisDto();
+        dto.setScada("all");
         dto.setAutoOrManual("manual");
         dto.setBeginTime("1234-12-12 00:00:12");
         dto.setExcludingMonths(Arrays.asList("1","2","3"));
@@ -144,7 +149,7 @@ public class TestJson {
         }
     }
 
-    private static void updateNodesByPropertyName(JsonNode rootNode, String propertyName,Object value) {
+    private static void updateNodesByPropertyName(JsonNode rootNode, String propertyName,Object value,String scada) {
         if (rootNode.isObject()) {
             rootNode.fields().forEachRemaining(entry -> {
                 // 匹配到属性名称,进行值的修改
@@ -154,14 +159,14 @@ public class TestJson {
                         ((ObjectNode) rootNode).put(propertyName, value.toString());
                     }else {
                         try {
-                            assignmentByPropertyName(entry.getValue(), propertyName, value);
+                            assignmentByPropertyName(entry.getValue(), propertyName, value,scada);
                         } catch (JsonProcessingException e) {
                             e.printStackTrace();
                         }
                     }
                 }
                 // 递归搜索子节点
-                updateNodesByPropertyName(entry.getValue(), propertyName, value);
+                updateNodesByPropertyName(entry.getValue(), propertyName, value,scada);
             });
         }
     }
@@ -178,7 +183,7 @@ public class TestJson {
             field.setAccessible(true);
             try {
                 if(field.get(analysisDto) != null){
-                    updateNodesByPropertyName(rootNode, field.getName(), field.get(analysisDto));
+                    updateNodesByPropertyName(rootNode, field.getName(), field.get(analysisDto),analysisDto.getScada());
                 }
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
@@ -187,7 +192,7 @@ public class TestJson {
     }
 
 
-    private static void  assignmentByPropertyName(JsonNode subNode, String propertyName, Object newValue) throws JsonProcessingException {
+    private static void  assignmentByPropertyName(JsonNode subNode, String propertyName, Object newValue,String scada) throws JsonProcessingException {
         //图像设置特殊处理
         if("valueActivePower".contains(propertyName)){
 //        if(AlgorithmProperties.graphSetsProperties.contains(propertyName)){
@@ -202,7 +207,7 @@ public class TestJson {
         }
         //分析类型特殊处理
         if("configAnalysis".equals(propertyName)){
-            dealConfigAnalysis(subNode, newValue);
+            dealConfigAnalysis(subNode, newValue,scada);
             return;
         }
 
@@ -221,7 +226,7 @@ public class TestJson {
      * @param subNode
      * @param newValue
      */
-    private static void dealConfigAnalysis(JsonNode subNode, Object newValue) throws JsonProcessingException {
+    private static void dealConfigAnalysis(JsonNode subNode, Object newValue,String scada) throws JsonProcessingException {
         ArrayNode arrayNode = (ArrayNode) subNode;
         List<String> analysisTypes = (List) newValue;
         for(int i = 0 ; i < analysisTypes.size() ; i++){
@@ -230,7 +235,11 @@ public class TestJson {
             String[] types = analysisTypes.get(i).split("\\|");
             AtomicInteger index =  new AtomicInteger(0);
             childNode.fields().forEachRemaining(entry-> {
-                ((ObjectNode)childNode).put(entry.getKey(), types[index.get()]);
+                if(StringUtils.isNotBlank(scada) && entry.getKey().equals("scada")){
+                    ((ObjectNode)childNode).put(entry.getKey(), scada);
+                }else{
+                    ((ObjectNode)childNode).put(entry.getKey(), types[index.get()]);
+                }
                 index.incrementAndGet();
             });
             arrayNode.add(childNode);

+ 18 - 2
energy-manage-service/src/main/java/com/energy/manage/service/util/TreeUtil.java

@@ -107,13 +107,29 @@ public class TreeUtil {
    * @param parentKeyName 父类key名称
    * @return
    */
-  public static List<Map<String, Object>> getJava8ResultTree(List<Map<String, Object>> mapList,String parentKeyName) {
+  public static List<Map<String, Object>> getJava8ResultTree(List<Map<String, Object>> mapList,String parentKeyName,String keyName) {
     if (org.springframework.util.CollectionUtils.isEmpty(mapList)) {
       return Lists.newArrayList();
     }
     //filter过滤出所有的一级节点
     return mapList.stream().filter(m ->m.get(parentKeyName).toString().equals("0"))
-            .peek(m -> m.put("children", sortJava8Map(getJava8Children(m, mapList)))).collect(Collectors.toList());
+            .peek(m -> m.put("children", sortJava8Map(getJava8Children(m, mapList,parentKeyName,keyName)))).collect(Collectors.toList());
+  }
+
+  /**
+   * 根据父级节点获取所有的子集节点
+   *
+   * @param parentNode
+   * @param allList
+   * @return
+   */
+  public static List<Map<String, Object>> getJava8Children(Map<String, Object> parentNode,
+                                                           List<Map<String, Object>> allList,
+                                                           String parentKeyName,
+                                                           String keyName) {
+    return allList.stream()
+            .filter(curNode ->curNode.get(parentKeyName)!=null && curNode.get(parentKeyName).equals(parentNode.get(keyName)))
+            .peek(m -> m.put("children", getJava8Children(m, allList))).collect(Collectors.toList());
   }
 
   /**

+ 10 - 5
energy-manage-service/src/main/resources/bootstrap.properties

@@ -31,10 +31,13 @@ spring.profiles.active = @profiles.active@
 # nacos 配置
 spring.cloud.nacos.config.server-addr = 192.168.50.234:8848
 spring.cloud.nacos.config.namespace = 79c42a7a-2c7d-4dcf-8a2c-b334271e2191
-spring.cloud.nacos.config.refreshable-dataids = application.properties
 spring.cloud.nacos.config.prefix = application
 spring.cloud.nacos.config.file-extension = properties
 spring.cloud.nacos.config.group = @profiles.active@
+spring.cloud.nacos.config.extension-configs[0].data-id=analysis.json
+spring.cloud.nacos.config.extension-configs[0].group=@profiles.active@
+spring.cloud.nacos.config.extension-configs[0].refresh=true
+
 
 # debug - sql显示
 logging.level.com.energy.manage.service.mappers= debug
@@ -52,16 +55,18 @@ template.draught = http://192.168.50.234:6900/bucket-zhzn/template/%E9%A3%8E%E6%
 
 #算法调用默认值
 analysis.url= http://192.168.50.234:16200/energy-manage-service/analysis/analysisData
-#分析算法入参
-analysis.json= {}
+#分析算法入参json格式
+analysis.algorithm.json={"dataContractType": {"type": "analysisExecuteOrder","version": "1.2.0"},"dataContract": {"autoOrManual": "","dataFilter": {"powerFarmID": "","turbines": [],"dataBatchNum": "","beginTime": "","endTime": "","excludingMonths": [],"customFilter": {"valueWindSpeed": {"min": null,"max": null},"valuePitchAngle": {"min":null,"max": null},"valueActivePower": {"min": null,"max": null},"valueGeneratorSpeed": {"min": null,"max": null}}},"configAnalysis": [],"graphSets": {"generatorSpeed": {"step": 200,"min": 1000,"max": 2000},"generatorTorque": {"step": 2000,"min": 0,"max": 12000},"cp": {"step": 0.5,"min": 0,"max": 2},"tsr": {"step": 5,"min": 0,"max": 30},"pitchAngle": {"step": 1,"min": -1,"max": 20},"activePower": {"step": 250,"min": 0,"max": 2000}}}}
 #需要特殊处理的图像设置属性
-graphSets.properties=generatorSpeed,generatorTorque,cp,tsr,pitchAngle,activePower
+graphSets.properties=dGeneratorSpeed,iGeneratorSpeed,dGeneratorTorque,iGeneratorTorque,cp,tsr,pitchAngle,activePower
 #scada数据筛选
 customFilter.properties=valueWindSpeed,valuePitchAngle,valueActivePower,valueGeneratorSpeed
 #需要特设处理分析类型属性
-analysis.properties=configAnalysis
+analysis.properties.name=configAnalysis
 #分析类型json格式
 analysis.type.json={"package":"","className":"","methodName":"","scada":""}
+#额定功率因数
+power.factor.rated=1.2
 
 #拦截器是否生效
 energy.login.enabled=true

+ 7 - 5
energy-manage-service/src/main/resources/mybatis/analysis/AnalysisResultMapper.xml

@@ -18,6 +18,7 @@
     <select id="selectByCondition" parameterType="com.energy.manage.service.domain.dto.analysis.AnalysisResultDto" resultType="com.energy.manage.service.domain.vo.analysis.AnalysisResultVo">
         select
             batch.field_name,
+            batch.field_code,
             result.batch_code,
             result.analysis_state,
             result.err_state,
@@ -26,15 +27,16 @@
         from analysis_result result
         left join wind_field_batch batch
         on result.batch_code = batch.batch_code
-        where batch.role_id = #{roleId,jdbcType=INTEGER}
-        <if test="batchName != null and batchName = ''">
-            and batch.batch_name like concat('%', #{batchName,jdbcType=VARCHAR}, '%')
+        left join sys_organization_auth auth
+        on batch.field_code = auth.code_number
+        where auth.role_id = #{roleId,jdbcType=INTEGER}
+        <if test="fieldName != null and fieldName != ''">
+            and batch.field_name like concat('%', #{fieldName,jdbcType=VARCHAR}, '%')
         </if>
     </select>
-    <select id="selectAlasisingCountByBatchCode" parameterType="java.lang.String" resultType="int">
+    <select id="selectAlasisingCount" resultType="int">
         select count(*)
         from analysis_result
         where analysis_state = 0
-        and batch_code = #{batchCode,jdbcType=VARCHAR}
     </select>
 </mapper>

+ 15 - 2
energy-manage-service/src/main/resources/mybatis/analysis/AnalysisTypeMapper.xml

@@ -12,7 +12,8 @@
     </resultMap>
 
     <select id="selectAllVo" resultType="com.energy.manage.service.domain.vo.analysis.AnalysisTypeVo">
-        select parent_id,
+        select id,
+               parent_id,
                type_code,
                type_name
         from analysis_type
@@ -24,8 +25,20 @@
                type_name
         from analysis_type
         where 1 = 1
-        <if test="type_code != null and type_code != ''">
+        <if test="typeCode != null and typeCode != ''">
             and type_code = #{typeCode,jdbcType=VARCHAR}
         </if>
     </select>
+    <select id="selecFlagtByCode" parameterType="java.lang.String" resultType="java.lang.String">
+        select
+        type_flag
+        from analysis_type
+        where 1 = 1
+        <if test="typeCodes != null and typeCodes.size() > 0">
+            and type_code in
+                <foreach collection="typeCodes" open="(" close="" separator="," item="typeCode">
+                    #{typeCode,jdbcType=VARCHAR}
+                </foreach>
+        </if>
+    </select>
 </mapper>

+ 26 - 4
energy-manage-service/src/main/resources/mybatis/datatransfer/DataTransferMapper.xml

@@ -17,6 +17,7 @@
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
         <result property="createBy" column="create_by" jdbcType="INTEGER"/>
         <result property="updateBy" column="update_by" jdbcType="INTEGER"/>
+        <result property="callState" column="call_state" jdbcType="INTEGER"/>
     </resultMap>
     <sql id="BASE_SQL">
         id,
@@ -36,11 +37,26 @@
     </sql>
 
     <select id="selectAllWindFieldBtach"  parameterType ="java.lang.Integer" resultType="java.lang.String">
-        SELECT distinct transfer.batch_code
-        FROM data_transfer transfer
+        select distinct transfer.batch_code
+        from data_transfer transfer
         left join sys_organization_auth auth
         on transfer.field_code = auth.code_number
-        WHERE auth.role_id = #{roleId,jdbcType=INTEGER}
+        where auth.role_id = #{roleId,jdbcType=INTEGER}
+    </select>
+
+    <select id="selectBatchCodeForAutoAnaly"   resultType="com.energy.manage.service.domain.vo.datatransfer.DataTransferVo">
+        select
+            field_code,
+            batch_code
+        from
+            data_transfer
+        where
+                batch_code IN ( SELECT batch_code FROM data_transfer WHERE transfer_type = 'minute' AND transfer_state = 1 )
+        and transfer_type = 'second'
+        and transfer_state = 1
+        and call_state = 0
+        order by transfer_finish_time
+        limit 1
     </select>
 
     <select id="selectDataTransferListByCondition" parameterType="com.energy.manage.service.domain.dto.datatransfer.DataTransferDto" resultType="com.energy.manage.service.domain.vo.datatransfer.DataTransferVo">
@@ -111,7 +127,7 @@
         update data_transfer
         <set>
             <if test="transferState != null">
-                transfer_state = -1,
+                transfer_state = #{transferState,jdbcType=INTEGER},
             </if>
             <if test="transferAddr != null and transferAddr != ''">
                 transfer_addr = #{transferAddr,jdbcType=VARCHAR},
@@ -126,4 +142,10 @@
         where batch_code = #{batchCode,jdbcType=VARCHAR}
         and transfer_type = #{transferType,jdbcType=VARCHAR}
     </update>
+
+    <update id="updateCallState" parameterType="java.lang.String">
+        update data_transfer
+        set  call_state = 1
+        where batch_code = #{batchCode,jdbcType=VARCHAR}
+    </update>
 </mapper>

+ 16 - 1
energy-manage-service/src/main/resources/mybatis/windenginegroup/WindEngineGroupMapper.xml

@@ -60,7 +60,7 @@
 
     <select id="selectWindEngineGroupByBatchCode" parameterType="java.lang.String" resultType="com.energy.manage.service.domain.vo.windenginegroup.WindEngineGroupVo">
         select
-            engine.engine_code AS engineCode,
+            engine.engine_code as engineCode,
             engine.engine_name as engineName
         from wind_engine_group engine
         left join wind_field_batch batch
@@ -68,5 +68,20 @@
         where batch.batch_code = #{batchCode}
     </select>
 
+    <select id="selectMaxRatedCapacity" parameterType="java.lang.String" resultType="java.math.BigDecimal">
+        select max(rated_capacity)
+        from wind_engine_group
+        where 1 = 1
+        <if test="engineCodes != null and engineCodes.size() > 0">
+            and engine_code in
+            <foreach collection="engineCodes" item="engineCode" open="(" separator="," close=")">
+                #{engineCode}
+            </foreach>
+        </if>
+        <if test="fieldCode != null and fieldCode != ''">
+            and field_code = #{fieldCode}
+        </if>
+    </select>
+
 
 </mapper>

+ 24 - 23
energy-manage-service/src/main/resources/mybatis/windexceptioncount/WindExceptionCountMapper.xml

@@ -5,7 +5,7 @@
     <resultMap id="resultMap" type="com.energy.manage.common.po.windexceptioncount.WindExceptionCountPo">
         <id column="id" property="id" jdbcType="BIGINT"/>
         <result column="batch_code" property="batchCode" jdbcType="VARCHAR"/>
-        <result column="engin_code" property="enginCode" jdbcType="VARCHAR"/>
+        <result column="engine_code" property="engineCode" jdbcType="VARCHAR"/>
         <result column="analysis_type_code" property="analysisTypeCode" jdbcType="VARCHAR"/>
         <result column="err_count" property="errCount" jdbcType="INTEGER"/>
         <result column="handle_err_count" property="handleErrCount" jdbcType="INTEGER"/>
@@ -17,28 +17,29 @@
 
     <select id="selectByCondition" parameterType="com.energy.manage.service.domain.dto.windexceptioncount.WindExceptionCountDto" resultType="com.energy.manage.service.domain.vo.windexceptioncount.WindExceptionCountVo">
         SELECT
-            id,
-            batch_code,
-            engin_code,
-            analysis_type_code,
-            err_count,
-            handle_err_count,
-            create_by,
-            create_time,
-            update_by,
-            update_time
+        count.id,
+        count.batch_code,
+        count.engine_code,
+        type.type_name as analysis_type_name,
+        count.analysis_type_code,
+        count.err_count,
+        count.handle_err_count,
+        count.create_by,
+        count.create_time,
+        count.update_by,
+        count.update_time
         FROM
-            wind_exception_count
+            wind_exception_count count
+        left join analysis_type type
+        on count.analysis_type_code = type.type_code
         WHERE
-            is_delete = 0
-        and batch_code = #{batchCode}
-
-
-        <if test="enginCode != null and enginCode != ''">
-            AND engin_code = #{enginCode}
+            count.is_delete = 0
+        and count.batch_code = #{batchCode}
+        <if test="engineCode != null and engineCode != ''">
+            AND count.engine_code = #{engineCode}
         </if>
         <if test="analysisTypeCode != null and analysisTypeCode != ''">
-            AND analysis_type_code = #{analysisTypeCode}
+            AND count.analysis_type_code = #{analysisTypeCode}
         </if>
     </select>
 
@@ -48,8 +49,8 @@
             <if test="batchCode != null">
                 batch_code,
             </if>
-            <if test="enginCode != null">
-                engin_code,
+            <if test="engineCode != null">
+                engine_code,
             </if>
             <if test="analysisTypeCode != null">
                 analysis_type_code,
@@ -71,8 +72,8 @@
             <if test="batchCode != null">
                 #{batchCode,jdbcType=VARCHAR},
             </if>
-            <if test="enginCode != null">
-                #{enginCode,jdbcType=VARCHAR},
+            <if test="engineCode != null">
+                #{engineCode,jdbcType=VARCHAR},
             </if>
             <if test="analysisTypeCode != null">
                 #{analysisTypeCode,jdbcType=VARCHAR},