Ver código fonte

故障诊断接口

chenminghua 3 anos atrás
pai
commit
b9fc442751
100 arquivos alterados com 4533 adições e 973 exclusões
  1. 55 0
      gyee-sample-impala/src/main/java/com/gyee/impala/aspect/LoginAspect.java
  2. 87 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/cache/InfoCache.java
  3. 46 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/cache/TokenCache.java
  4. 70 2
      gyee-sample-impala/src/main/java/com/gyee/impala/common/config/GyeeConfig.java
  5. 3 3
      gyee-sample-impala/src/main/java/com/gyee/impala/common/config/MapperGenerator.java
  6. 3 1
      gyee-sample-impala/src/main/java/com/gyee/impala/common/config/datasource/KuduDataSourceConfig.java
  7. 0 2
      gyee-sample-impala/src/main/java/com/gyee/impala/common/config/jsch/JSchConfig.java
  8. 26 21
      gyee-sample-impala/src/main/java/com/gyee/impala/common/constant/Constants.java
  9. 11 1
      gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/IAdapterService.java
  10. 36 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/IShardingService.java
  11. 13 8
      gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/RemoteServiceBuilder.java
  12. 8 1
      gyee-sample-impala/src/main/java/com/gyee/impala/common/result/JsonResult.java
  13. 2 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/result/ResultCode.java
  14. 0 6
      gyee-sample-impala/src/main/java/com/gyee/impala/common/spring/ExitDisposable.java
  15. 69 19
      gyee-sample-impala/src/main/java/com/gyee/impala/common/spring/InitialRunner.java
  16. 18 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/util/DateUtil.java
  17. 305 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/util/GyeeUtil.java
  18. 0 26
      gyee-sample-impala/src/main/java/com/gyee/impala/common/util/StationMapperUtil.java
  19. 45 0
      gyee-sample-impala/src/main/java/com/gyee/impala/common/util/TokenGenerator.java
  20. 0 41
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/AnalysePerformanceWarningController.java
  21. 0 93
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/CaseFaultAlgController.java
  22. 100 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/AutoFaultController.java
  23. 199 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/CoordinateController.java
  24. 81 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/GearboxDiagnosisController.java
  25. 216 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/SupervisedController.java
  26. 74 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/analyse/AnalysePerformanceWarningController.java
  27. 1 15
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/AnalyseScatterController.java
  28. 25 1
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/PowerCurveController.java
  29. 95 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/cases/CaseFaultAlgController.java
  30. 4 6
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/CaseFaultController.java
  31. 6 24
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/CasePerformanceController.java
  32. 36 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/cases/CaseWarningController.java
  33. 8 33
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/BasicQueryController.java
  34. 43 78
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowBasicController.java
  35. 1 1
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowFaultProcessController.java
  36. 2 2
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowMaintenanceController.java
  37. 1 1
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/WindturbinePointController.java
  38. 66 0
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/login/LoginController.java
  39. 1 1
      gyee-sample-impala/src/main/java/com/gyee/impala/controller/WeatherController.java
  40. 10 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/CaseperformanceMapper.java
  41. 7 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/CasewarningMapper.java
  42. 16 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/EquipmentmodelMapper.java
  43. 2 2
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/KnowfaulttypeMapper.java
  44. 7 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/UserMapper.java
  45. 1 1
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/WeatherforecastMapper.java
  46. 16 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/diagnose/DiagnosereportMapper.java
  47. 8 0
      gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/diagnose/DiagnosetrainhistoryMapper.java
  48. 30 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/AlertHistory.java
  49. 14 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/TokenUser.java
  50. 60 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Algorithm.java
  51. 26 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/CodeInfo.java
  52. 28 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Coordinate.java
  53. 83 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/DataInfo.java
  54. 27 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/ExecuteInfo.java
  55. 256 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/FaultInfo.java
  56. 37 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/History.java
  57. 43 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Parameter.java
  58. 35 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/PointData.java
  59. 75 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/UniformCodeInfo.java
  60. 26 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Value.java
  61. 31 23
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casefault.java
  62. 20 70
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casefaultalg.java
  63. 2 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Caseperformance.java
  64. 73 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casewarning.java
  65. 55 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Equipmentmodel.java
  66. 9 7
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Knowfaulttype.java
  67. 1 4
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Powercurvebasic.java
  68. 30 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/User.java
  69. 9 1
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Windpowerstation.java
  70. 1 1
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Windturbinepoint.java
  71. 19 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/AlgorithmType.java
  72. 43 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/Diagnosereport.java
  73. 41 0
      gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/Diagnosetrainhistory.java
  74. 107 90
      gyee-sample-impala/src/main/java/com/gyee/impala/schdule/TaskPerformance.java
  75. 49 39
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/AnalyseScatterService.java
  76. 6 7
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/GoldenService.java
  77. 50 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/ShiroService.java
  78. 0 61
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/TablePropService.java
  79. 90 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/WarningService.java
  80. 55 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/AutoCmdService.java
  81. 119 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/CmdService.java
  82. 336 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/DataService.java
  83. 106 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/FaultRefreshService.java
  84. 27 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/InitService.java
  85. 110 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/SupervisedCmdService.java
  86. 19 29
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasefaultServiceImpl.java
  87. 112 38
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasefaultalgServiceImpl.java
  88. 89 71
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CaseperformanceServiceImpl.java
  89. 87 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasewarningServiceImpl.java
  90. 37 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/EquipmentmodelServiceImpl.java
  91. 122 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowcategoryServiceImpl.java
  92. 4 9
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaultfixServiceImpl.java
  93. 6 12
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaultsymptomServiceImpl.java
  94. 0 94
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaulttypeServiceImpl.java
  95. 7 4
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/PowercurvebasicServiceImpl.java
  96. 33 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/UserServiceImpl.java
  97. 6 1
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WeatherforecastServiceImpl.java
  98. 58 12
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindpowerstationServiceImpl.java
  99. 1 11
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindturbineServiceImpl.java
  100. 0 0
      gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindturbinepointServiceImpl.java

+ 55 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/aspect/LoginAspect.java

@@ -0,0 +1,55 @@
+package com.gyee.impala.aspect;
+
+import com.gyee.impala.common.cache.TokenCache;
+import com.gyee.impala.common.exception.CustomException;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.custom.TokenUser;
+import com.gyee.impala.service.custom.ShiroService;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+@Aspect
+@Component
+public class LoginAspect {
+
+    @Autowired
+    private TokenCache tokenCache;
+    @Autowired
+    private ShiroService shiroService;
+
+    @Pointcut("execution(* com.gyee.impala.controller.sample.*.*(..))")
+    public void pointcut(){}
+
+    @Before("pointcut()")
+    public void signVerification() {
+        ServletRequestAttributes requestAttributes =
+                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = requestAttributes.getRequest();
+
+        String url = request.getRequestURI();
+        String token = request.getHeader("token");
+        if (url != null && !url.contains("sys/login")) {
+            TokenUser user = shiroService.findToken(token);
+            if (user == null)
+                throw new CustomException(ResultCode.USER_NOT_LOGIN);
+
+            long expireTime = user.getExpireTime();
+            long nowTime = new Date().getTime();
+            /**
+             * 判断登录是否过期
+             */
+            if (nowTime - expireTime > shiroService.EXPIRE){
+                tokenCache.removeToken(token);
+                throw new CustomException(ResultCode.USER_ERROR_TOKEN);
+            }
+        }
+    }
+}

+ 87 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/cache/InfoCache.java

@@ -0,0 +1,87 @@
+package com.gyee.impala.common.cache;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.parser.Feature;
+import com.gyee.impala.model.custom.diagnose.Algorithm;
+import com.gyee.impala.model.custom.diagnose.FaultInfo;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * 缓存
+ *
+ * @author xysn
+ */
+@Component
+public class InfoCache {
+    /**
+     * algorithm
+     */
+    @Value("classpath:algorithm.json")
+    private org.springframework.core.io.Resource algorithmIni;
+
+    /**
+     * 坐标信息
+     */
+    private String coordinates;
+    /**
+     * 有监督学习坐标信息
+     */
+    private String supervised;
+    /**
+     * 算法
+     */
+    private Algorithm[] algorithms;
+
+    public String getCoordinates() {
+        if (coordinates == null) {
+            coordinates = "";
+        }
+        return coordinates;
+    }
+
+    public void setCoordinates(String coordinateInfo) {
+        this.coordinates = coordinateInfo;
+    }
+
+    public String getSupervised() {
+        if(coordinates == null){
+            coordinates = "";
+        }
+        return supervised;
+    }
+
+    public void setSupervised(String supervised) {
+        this.supervised = supervised;
+    }
+
+    public Algorithm[] getAlgorithms() {
+        return algorithms;
+    }
+
+    public void init() throws IOException {
+        // 初始化算法信息
+        initAlgorithm();
+    }
+
+    /**
+     * 初始化算法信息
+     */
+    private void initAlgorithm() throws IOException {
+        Algorithm[] as = JSONArray.parseObject(algorithmIni.getInputStream(), Algorithm[].class, Feature.AllowComment);
+        algorithms = as;
+    }
+    /**
+     * 实时报警
+     */
+    private Map<Long, FaultInfo> faultRecent;
+    public Map<Long, FaultInfo> getFaultRecent() {
+        return faultRecent;
+    }
+    public void setFaultRecent(Map<Long, FaultInfo> faultRecent) {
+        this.faultRecent = faultRecent;
+    }
+}

+ 46 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/cache/TokenCache.java

@@ -0,0 +1,46 @@
+package com.gyee.impala.common.cache;
+
+import com.gyee.impala.model.custom.TokenUser;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class TokenCache {
+
+    private Map<String, TokenUser> tokenMap = new HashMap<>();
+
+    public TokenUser getToken(String tokenId) {
+        TokenUser data = null;
+        if (tokenMap.containsKey(tokenId)) {
+            data = tokenMap.get(tokenId);
+        }
+        return data;
+    }
+
+    public boolean saveToken(String token, TokenUser user) {
+        if (tokenMap.containsKey(token)){
+            return false;
+        }
+        tokenMap.put(token, user);
+
+        return  true;
+    }
+
+    public boolean removeToken(String token){
+        if (tokenMap.containsKey(token)){
+            tokenMap.remove(token);
+            return true;
+        }
+        return false;
+    }
+
+    public TokenUser findUserByToken(String token){
+        TokenUser user = null;
+        if (tokenMap.containsKey(token))
+            user = tokenMap.get(token);
+
+        return user;
+    }
+}

+ 70 - 2
gyee-sample-impala/src/main/java/com/gyee/impala/common/config/GyeeConfig.java

@@ -1,10 +1,10 @@
 package com.gyee.impala.common.config;
 
-import lombok.Data;
+import com.gyee.impala.common.util.JudeSystem;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
-@Data
+
 @Component
 @ConfigurationProperties(prefix = "gyee")
 public class GyeeConfig {
@@ -12,6 +12,9 @@ public class GyeeConfig {
     /**数据适配器网址 **/
     private String goldenUrl;
 
+    /**scaada报警网址**/
+    private String alertUrl;
+
     /***数据模板路径  windows*/
     private String templatePathWindow;
 
@@ -20,4 +23,69 @@ public class GyeeConfig {
 
     /****kudu的连接地址*/
     private String kuduHost;
+
+    /***故障诊断脚本路径 windows*/
+    private String diagnosePathWindow;
+
+    /***故障诊断脚本路径  linux*/
+    private String diagnosePathLinux;
+
+    /***故障诊断数据存储路径 windows*/
+    private String diagnoseFileWindow;
+
+    /***故障诊断数据存储路径  linux*/
+    private String diagnoseFileLinux;
+
+
+    private String templatePath;
+    private String diagnosePath;
+    private String diagnoseFile;
+
+    public String getGoldenUrl() {
+        return goldenUrl;
+    }
+
+    public void setGoldenUrl(String goldenUrl) {
+        this.goldenUrl = goldenUrl;
+    }
+
+    public String getAlertUrl() {
+        return alertUrl;
+    }
+
+    public void setAlertUrl(String alertUrl) {
+        this.alertUrl = alertUrl;
+    }
+
+    public String getKuduHost() {
+        return kuduHost;
+    }
+
+    public void setKuduHost(String kuduHost) {
+        this.kuduHost = kuduHost;
+    }
+
+    public String getTemplatePath() {
+        return templatePath = JudeSystem.isWindows() ? templatePathWindow : JudeSystem.isLinux() ? templatePathLinux : "";
+    }
+
+    public void setTemplatePath(String templatePath) {
+        this.templatePath = templatePath;
+    }
+
+    public String getDiagnosePath() {
+        return JudeSystem.isWindows() ? diagnosePathWindow : JudeSystem.isLinux() ? diagnosePathWindow : "";
+    }
+
+    public void setDiagnosePath(String diagnosePath) {
+        this.diagnosePath = diagnosePath;
+    }
+
+    public String getDiagnoseFile() {
+        return diagnoseFile = JudeSystem.isWindows() ? diagnoseFileWindow : JudeSystem.isLinux() ? diagnoseFileLinux : "";
+    }
+
+    public void setDiagnoseFile(String diagnoseFile) {
+        this.diagnoseFile = diagnoseFile;
+    }
 }

+ 3 - 3
gyee-sample-impala/src/main/java/com/gyee/impala/common/config/MapperGenerator.java

@@ -40,9 +40,9 @@ public class MapperGenerator {
 //    private static String password = "";
 
     private static String driverName = "oracle.jdbc.driver.OracleDriver";
-    private static String url = "jdbc:oracle:thin:@10.155.32.7:1521:ORCL";
-    private static String username = "gyee";
-    private static String password = "FRWIND";
+    private static String url = "jdbc:oracle:thin:@192.168.1.105:1521:gdnxfd";
+    private static String username = "nxfdprod";
+    private static String password = "gdnxfd123";
 
     public static void main(String[] args) {
         AutoGenerator gen = new AutoGenerator();

+ 3 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/common/config/datasource/KuduDataSourceConfig.java

@@ -24,6 +24,8 @@ public class KuduDataSourceConfig {
 
     // 对于Kudu操作,获取KuduClient客户端实例对象
     public KuduClient kuduClient = null;
+    // 批量一次提交的数据量
+    public final int count = 2000;
 
 
     @Bean
@@ -42,7 +44,7 @@ public class KuduDataSourceConfig {
         // TODO: 设置手动刷新数据到表中
         kuduSession.setFlushMode(SessionConfiguration.FlushMode.MANUAL_FLUSH);
         // 批量插入的缓冲区条目数
-        kuduSession.setMutationBufferSpace(2000);
+        kuduSession.setMutationBufferSpace(count);
         return kuduSession;
     }
 

+ 0 - 2
gyee-sample-impala/src/main/java/com/gyee/impala/common/config/jsch/JSchConfig.java

@@ -1,6 +1,5 @@
 package com.gyee.impala.common.config.jsch;
 
-import com.jcraft.jsch.ChannelExec;
 import com.jcraft.jsch.ChannelSftp;
 import lombok.Data;
 import org.apache.commons.pool2.impl.AbandonedConfig;
@@ -27,7 +26,6 @@ public class JSchConfig {
     public ChannelSftpFactory sftpFactory;
 
     public GenericObjectPool<ChannelSftp> channelSftpPool;//连接池
-    public GenericObjectPool<ChannelExec> channelExecPool;//连接池
 
     /**
      * @Title: getSftpSocket

+ 26 - 21
gyee-sample-impala/src/main/java/com/gyee/impala/common/constant/Constants.java

@@ -1,30 +1,35 @@
 package com.gyee.impala.common.constant;
 
 import lombok.extern.slf4j.Slf4j;
+import java.util.ArrayList;
+import java.util.List;
 
 
 @Slf4j
 public class Constants {
 
-    // 实时欠发状态
-    public static final String RSSQFZT = "RSSQFZT";
-    // 发电机转速
-    public static final String FDJZS = "AI012";
-    public static final String FDJZSB = "AI012B";
-    // 明细状态
-    public static final String FJMXZT = "ZTMX";
-    // 风机状态
-    public static final String FJZT = "FJZT";
-    // 风机风速
-    public static final String POINT_SPEED = "AI022";
-    // 风机日发电量
-    public static final String POINT_QUANTITY = "RFDL";
-    // 风机实发功率
-    public static final String POINT_POWER = "AI130";
-    // 风机理论功率
-    public static final String POINT_POWER_LLGL = "LLGL";
-    // 风向
-    public static final String POINT_WIND_DIRECT = "AI008";
-    // 对风角度(对风误差)
-    public static final String POINT_WIND_ANGLE = "AI036";
+    /**  实时欠发状态  **/
+    public static final String DI_RSSQFZT = "RSSQFZT";
+    /**  明细状态  **/
+    public static final String DI_FJMXZT = "ZTMX";
+    /**  风机状态  **/
+    public static final String DI_FJZT = "FJZT";
+    /**  限电状态  **/
+    public static final String DI_XDZT = "XDZT";
+    /**  风机风速  **/
+    public static final String AI_SPEED = "AI022";
+    /**  风机日发电量  **/
+    public static final String AI_QUANTITY = "RFDL";
+    /**  发电机转速  **/
+    public static final String AI_FDJZS = "AI128";
+    /**  风机实发功率  **/
+    public static final String AI_POWER = "AI130";
+    /**  风机理论功率  **/
+    public static final String AI_POWER_LLGL = "LLGL";
+    /**  风向  **/
+    public static final String AI_WIND_DIRECT = "AI008";
+    /**  对风角度(对风误差)  **/
+    public static final String AI_WIND_ANGLE = "AI036";
+    /**  桨叶角度 **/
+    public static final String AI_JYJD = "AI031";
 }

+ 11 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/IAdapterService.java

@@ -3,6 +3,7 @@ package com.gyee.impala.common.feign;
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.model.custom.TsBooleanData;
 import com.gyee.impala.model.custom.TsDoubleData;
+import com.gyee.impala.model.custom.diagnose.PointData;
 import feign.Headers;
 import feign.Param;
 import feign.RequestLine;
@@ -36,7 +37,6 @@ public interface IAdapterService {
 
 
 
-
     @Headers({"Content-Type: application/json", "Accept: application/json"})
     @RequestLine("GET /ts/history/snap?tagName={tagName}&startTs={startTs}&endTs={endTs}&interval={interval}")
     List<TsBooleanData> getHistorySnapDI(@Param(value = "tagName") String tagName, @Param(value = "startTs") long startTs,
@@ -53,4 +53,14 @@ public interface IAdapterService {
     @RequestLine("GET /ts/history/section?tagNames={tagNames}&ts={ts}")
     List<TsBooleanData> getHistorySectionDI(@Param(value = "tagNames") String tagNames, @Param(value = "ts") long ts);
 
+    /**
+     * 通过UniformCode获取历史数据(注意其中有的参数设置为了固定值)
+     * @param uniformCode 唯一识别码
+     * @param startTs 开始时间戳
+     * @param endTs 结束时间戳
+     * @param thingId 风机(或其他)ID
+     * @return 历史数据列表
+     */
+    @RequestLine("GET /ts/history/snap?uniformCode={uniformCode}&startTs={startTs}&endTs={endTs}&thingType=windturbine&thingId={thingId}&interval=1")
+    List<PointData> getHistoryByUniformCode(@Param(value = "uniformCode") String uniformCode, @Param("startTs") String startTs, @Param("endTs") String endTs, @Param("thingId") String thingId);
 }

+ 36 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/IShardingService.java

@@ -0,0 +1,36 @@
+package com.gyee.impala.common.feign;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.model.custom.diagnose.FaultInfo;
+import feign.Headers;
+import feign.Param;
+import feign.RequestLine;
+
+import java.util.List;
+
+public interface IShardingService {
+
+  @RequestLine("GET /fault/history/list?pagenum=1&pagesize=500&stationid={stationid}&starttime={starttime}&endtime={endtime}&messagetype=1")
+  List<FaultInfo> getFaultInfoList(
+          @Param(value = "stationid") String stationid,
+          @Param(value = "starttime") String starttime,
+          @Param(value = "endtime") String endtime);
+
+  @RequestLine("GET /fault/recent?faulttime={faulttime}")
+  List<FaultInfo> getFaultRecent(@Param(value = "faulttime") String faulttime);
+
+  @RequestLine("GET /fault/history?ids={historyId}")
+  List<FaultInfo> getFaultHistoryById(@Param(value = "historyId") String historyId);
+
+
+  @Headers({"Content-Type: application/json", "Accept: application/json"})
+  @RequestLine("GET /alarm/history/page2?category1={category}&starttime={starttime}&pagenum=1&pagesize=1000&endtime={endtime}&stationid={stationeid}" +
+          "&category2=&keyword=&windturbineid={windturbineid}")
+  JSONObject getAlertHistory(@Param(value = "category") String category,
+                             @Param(value = "starttime") String st,
+                             @Param(value = "endtime") String et,
+                             @Param(value = "stationeid") String station,
+                             @Param(value = "windturbineid") String wtId);
+
+}

+ 13 - 8
gyee-sample-impala/src/main/java/com/gyee/impala/common/feign/RemoteServiceBuilder.java

@@ -8,29 +8,34 @@ import feign.jackson.JacksonDecoder;
 import feign.jackson.JacksonEncoder;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
 
 
 @Slf4j
-@Configuration
+@Component
 public class RemoteServiceBuilder {
 
     @Autowired
     private GyeeConfig config;
 
-    @Value("${goldenUrl:http://10.155.32.4:8011}")
-    private String shardingUrlString;
+    @Bean
+    public IAdapterService adapter() {
+        return Feign.builder()
+                .encoder(new JacksonEncoder())
+                .decoder(new JacksonDecoder())
+                .options(new Request.Options(5000, 600000))
+                .retryer(new Retryer.Default(10000, 10000, 3))
+                .target(IAdapterService.class, config.getGoldenUrl());
+    }
 
     @Bean
-    public IAdapterService ShardingService() {
-        shardingUrlString = config.getGoldenUrl();
+    public IShardingService sharding() {
         return Feign.builder()
                 .encoder(new JacksonEncoder())
                 .decoder(new JacksonDecoder())
                 .options(new Request.Options(5000, 600000))
                 .retryer(new Retryer.Default(10000, 10000, 3))
-                .target(IAdapterService.class, shardingUrlString);
+                .target(IShardingService.class, config.getAlertUrl());
     }
 }

+ 8 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/common/result/JsonResult.java

@@ -42,6 +42,13 @@ public class JsonResult extends HashMap<String, Object> implements Serializable
         return json;
     }
 
+    public static JSONObject seccess(int code, String message){
+        JSONObject json = new JSONObject();
+        json.put("code", code);
+        json.put("msg", message);
+        return json;
+    }
+
     public static JSONObject success(ResultCode resultCode){
         JSONObject json = new JSONObject();
         json.put("code", resultCode.getCode());
@@ -53,7 +60,7 @@ public class JsonResult extends HashMap<String, Object> implements Serializable
         JSONObject json = new JSONObject();
         json.put("code", code.getCode());
         json.put("msg", code.getMessage());
-        json.put("data", data != null ? data : "");
+        json.put("data", data != null ? data : null);
         return json;
     }
 

+ 2 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/result/ResultCode.java

@@ -33,6 +33,8 @@ public enum ResultCode {
     USER_NOT_LOGIN(2001, "用户未登录"),
     USER_ACCOUNT_ERROR(2002, "账号或密码错误"),
     USER_FAIL_LOGIN(2003, "登录失败"),
+    USER_OUT_LOGIN(2004, "登出成功"),
+    USER_ERROR_TOKEN(2005, "登录已过期,请重新登录"),
 
     /* 业务错误 */
     NO_PERMISSION(3001, "没有权限");

+ 0 - 6
gyee-sample-impala/src/main/java/com/gyee/impala/common/spring/ExitDisposable.java

@@ -2,7 +2,6 @@ package com.gyee.impala.common.spring;
 
 import com.gyee.impala.common.config.datasource.HiveDataSourceConfig;
 import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
-import com.gyee.impala.common.config.jsch.JSchConfig;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ExitCodeGenerator;
@@ -12,8 +11,6 @@ import org.springframework.stereotype.Component;
 public class ExitDisposable implements DisposableBean, ExitCodeGenerator {
 
     @Autowired
-    private JSchConfig config;
-    @Autowired
     private KuduDataSourceConfig kuduConfig;
     @Autowired
     private HiveDataSourceConfig hiveConfig;
@@ -25,9 +22,6 @@ public class ExitDisposable implements DisposableBean, ExitCodeGenerator {
 
         hiveConfig.close();
         System.out.println("############   hive 资源已释放   ##############");
-
-        config.getSftpFactory().destroyObject(config.getSftpFactory().makeObject());
-        System.out.println("############   sftp 资源已释放   ##############");
     }
 
     @Override

+ 69 - 19
gyee-sample-impala/src/main/java/com/gyee/impala/common/spring/InitialRunner.java

@@ -1,10 +1,7 @@
 package com.gyee.impala.common.spring;
 
-import com.gyee.impala.common.util.DateUtil;
-import com.gyee.impala.model.master.Knowfaulttype;
-import com.gyee.impala.model.master.Powercurvebasic;
-import com.gyee.impala.model.master.Windpowerstation;
-import com.gyee.impala.model.master.Windturbine;
+
+import com.gyee.impala.model.master.*;
 import com.gyee.impala.service.master.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
@@ -24,47 +21,100 @@ public class InitialRunner implements CommandLineRunner {
     @Resource
     private WindpowerstationService windpowerstationService;
     @Autowired
-    private PowercurvebasicService powercurvebasicService;
-    @Autowired
-    private PowercurvefittingService fittingService;
+    private KnowcategoryService faulttypeService;
     @Autowired
-    private KnowfaulttypeService faulttypeService;
+    private EquipmentmodelService modelService;
 
 
     /**场站所有信息**/
     public static List<Windpowerstation> wpList = new ArrayList<>();
     /**场站的风机**/
-    public static Map<String, List<Windturbine>> wtMap = new HashMap<>();
+    public static Map<String, List<Windturbine>> wpMap = new HashMap<>();
     /** <MHS_FDC, 麻黄山风电场> **/
     public static Map<String, String> stationMap = new HashMap<>();
     /**所有的风机**/
     public static List<Windturbine> wtList = new ArrayList<>();
+    /** <NG01_01, Windturbine> **/
+    public static Map<String, Windturbine> wtMap = new HashMap<>();
     /**功率曲线预处理数据表格数据 key:time+wtId  value:当前风机的总条数 **/
     public static Map<String, Integer> scatterMap = new HashMap<>();
-    /**根据排序缓存**/
-    public static List<Powercurvebasic> powerCurveList = new ArrayList<>();
     /***故障  <FDJ,发电机故障>  类型*/
     public static Map<String, String> faultTypeMap = new HashMap<>();
-    public static List<Knowfaulttype> faultTypeList = new ArrayList<>();
+    public static List<Knowcategory> faultTypeList = new ArrayList<>();
+    /***scada预警  <FDJ,发电机>  类型*/
+    public static Map<String, String> scadaWarnMap = new HashMap<>();
+    public static List<Knowcategory> scadaWarnList = new ArrayList<>();
+    /***自定义预警  <FDJ,发电机>  类型*/
+    public static Map<String, String> customWarnMap = new HashMap<>();
+    public static List<Knowcategory> customWarnList = new ArrayList<>();
+    /** 设备型号配置 <UP82, Equipmentmodel> **/
+    public static Map<String, Equipmentmodel> modelMap = new HashMap<>();
 
 
     @Override
-    public void run(String... args) throws Exception {
+    public void run(String... args){
         System.out.println(">>>>>>>>>>>>>>>服务启动,正在缓存数据<<<<<<<<<<<<<<");
 
+        cacheStation();
+        cacheKnowCategory();
+        cacheEquipmentModel();
+
+        System.out.println(">>>>>>>>>>>>>>>数据缓存完成<<<<<<<<<<<<<<");
+    }
+
+    /**
+     * 缓存场站数据
+     * 数据新增或删除后需要更新,故每次清空
+     */
+    public void cacheStation(){
+        wpList.clear();
+        wtList.clear();
+        stationMap.clear();
+        wpMap.clear();
+        wtMap.clear();
+
         List<Windpowerstation> stations = windpowerstationService.getAll();
         wpList = stations;
         stations.stream().forEach(obj -> {
             List<Windturbine> wts = windturbineService.getWindTurbineId(obj.getId());
             stationMap.put(obj.getId(), obj.getName());
-            wtMap.put(obj.getId(), wts);
+            wpMap.put(obj.getId(), wts);
             wtList.addAll(wts);
+            wts.stream().forEach(o -> wtMap.put(o.getId(), o));
         });
+    }
 
-        List<Knowfaulttype> faultType = faulttypeService.getAll();
-        faultTypeList = faultType;
-        faultType.stream().forEach(obj -> faultTypeMap.put(obj.getFaultcode(), obj.getFaulttype()));
+    /**
+     * 缓存故障知识数据
+     */
+    public void cacheKnowCategory() {
+        faultTypeList.clear();
+        scadaWarnList.clear();
+        customWarnList.clear();
+        faultTypeMap.clear();
+        scadaWarnMap.clear();
+        customWarnMap.clear();
 
-        System.out.println(">>>>>>>>>>>>>>>数据缓存完成<<<<<<<<<<<<<<");
+        List<Knowcategory> faultType = faulttypeService.getAll();
+        faultType.stream().forEach(obj -> {
+            if (obj.getCategory().equals("GZ")) {
+                faultTypeList.add(obj);
+                faultTypeMap.put(obj.getCode(), obj.getName());
+            }
+            else if (obj.getCategory().equals("SCADABJ")) {
+                scadaWarnList.add(obj);
+                scadaWarnMap.put(obj.getCode(), obj.getName());
+            }
+            else if (obj.getCategory().equals("CUSTOMBJ")) {
+                customWarnList.add(obj);
+                customWarnMap.put(obj.getCode(), obj.getName());
+            }
+        });
+    }
+
+    public void cacheEquipmentModel() {
+        modelMap.clear();
+        List<Equipmentmodel> models = modelService.getAll();
+        models.stream().forEach(obj -> modelMap.put(obj.getId(), obj));
     }
 }

+ 18 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/util/DateUtil.java

@@ -116,6 +116,24 @@ public class DateUtil extends DateUtils {
     }
 
     /**
+     * 字符串格式化
+     * @param time
+     * @param pattern
+     * @return
+     */
+    public static String format(String time,String pattern) {
+        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+        Date dateTime = null;
+        try {
+            dateTime = sdf.parse(time);
+        } catch (ParseException e) {
+            e.printStackTrace();
+
+        }
+        return format(dateTime, pattern);
+    }
+
+    /**
      * 时间转换
      *
      * @param time

+ 305 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/util/GyeeUtil.java

@@ -0,0 +1,305 @@
+package com.gyee.impala.common.util;
+
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.model.master.Equipmentmodel;
+import com.gyee.impala.model.master.Windturbine;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class GyeeUtil {
+
+    /**
+     * 倍率转换
+     * @param windturbine
+     * @param value
+     * @return
+     */
+    public static Double convertNum(Windturbine windturbine, Double value){
+        if (windturbine == null || value == null)
+            return value;
+
+        double v = value;
+        try{
+            Equipmentmodel model = InitialRunner.modelMap.get(windturbine.getModel());
+            if (model.getPowerproduction() == 2000)
+                v = value * 9.55;
+            else
+                v = value;
+        } catch (Exception e){
+            e.getStackTrace();
+        }
+
+        return v;
+    }
+
+    /**
+     * @param station
+     * @return
+     */
+    public static String stationCN(String station){
+        if (StringUtils.isEmpty(station))
+            return null;
+
+        switch (station){
+            case "MHS_FDC":
+                return "麻黄山";
+            case "NSS_FDC":
+                return "牛首山";
+            case "QS_FDC":
+                return "青山";
+            case "SBQ_FDC":
+                return "石板泉";
+            case "XS_FDC":
+                return "香山";
+            default:
+                return null;
+        }
+    }
+
+    /**
+     * 模拟功率曲线
+     * @param power  风机功率
+     * @return
+     */
+    public static Map<String, List<List<Object>>> powerCurve(int power){
+        Map<String, List<List<Object>>> map = new HashMap<>();
+        //最优功率
+        List<List<Object>> optimal = new ArrayList<>();
+        //实际功率
+        List<List<Object>> actual = new ArrayList<>();
+
+        if (power == 1500){
+            List<Object> op0 = new ArrayList<>();
+            op0.add(0);
+            op0.add(0);
+            List<Object> op1 = new ArrayList<>();
+            op1.add(1);
+            op1.add(0);
+            List<Object> op2 = new ArrayList<>();
+            op2.add(2);
+            op2.add(0);
+            List<Object> op3 = new ArrayList<>();
+            op3.add(3);
+            op3.add(25);
+            List<Object> op4 = new ArrayList<>();
+            op4.add(4);
+            op4.add(110);
+            List<Object> op5 = new ArrayList<>();
+            op5.add(5);
+            op5.add(220);
+            List<Object> op6 = new ArrayList<>();
+            op6.add(6);
+            op6.add(380);
+            List<Object> op7 = new ArrayList<>();
+            op7.add(7);
+            op7.add(550);
+            List<Object> op8 = new ArrayList<>();
+            op8.add(8);
+            op8.add(750);
+            List<Object> op9 = new ArrayList<>();
+            op9.add(9);
+            op9.add(1000);
+            List<Object> op10 = new ArrayList<>();
+            op10.add(10);
+            op10.add(1300);
+            List<Object> op11 = new ArrayList<>();
+            op11.add(11);
+            op11.add(1500);
+            optimal.add(op0);
+            optimal.add(op1);
+            optimal.add(op2);
+            optimal.add(op3);
+            optimal.add(op4);
+            optimal.add(op5);
+            optimal.add(op6);
+            optimal.add(op7);
+            optimal.add(op8);
+            optimal.add(op9);
+            optimal.add(op10);
+            optimal.add(op11);
+            for (int i = 12; i <= 25; i++){
+                List<Object> op = new ArrayList<>();
+                op.add(i);
+                op.add(1500);
+                optimal.add(op);
+            }
+
+            List<Object> ap0 = new ArrayList<>();
+            ap0.add(0);
+            ap0.add(0);
+            List<Object> ap1 = new ArrayList<>();
+            ap1.add(1);
+            ap1.add(0);
+            List<Object> ap2 = new ArrayList<>();
+            ap2.add(2);
+            ap2.add(0);
+            List<Object> ap3 = new ArrayList<>();
+            ap3.add(3);
+            ap3.add(20);
+            List<Object> ap4 = new ArrayList<>();
+            ap4.add(4);
+            ap4.add(80);
+            List<Object> ap5 = new ArrayList<>();
+            ap5.add(5);
+            ap5.add(180);
+            List<Object> ap6 = new ArrayList<>();
+            ap6.add(6);
+            ap6.add(320);
+            List<Object> ap7 = new ArrayList<>();
+            ap7.add(7);
+            ap7.add(480);
+            List<Object> ap8 = new ArrayList<>();
+            ap8.add(8);
+            ap8.add(650);
+            List<Object> ap9 = new ArrayList<>();
+            ap9.add(9);
+            ap9.add(830);
+            List<Object> ap10 = new ArrayList<>();
+            ap10.add(10);
+            ap10.add(1100);
+            List<Object> ap11 = new ArrayList<>();
+            ap11.add(11);
+            ap11.add(1350);
+            List<Object> ap12 = new ArrayList<>();
+            ap12.add(12);
+            ap12.add(1500);
+            actual.add(ap0);
+            actual.add(ap1);
+            actual.add(ap2);
+            actual.add(ap3);
+            actual.add(ap4);
+            actual.add(ap5);
+            actual.add(ap6);
+            actual.add(ap7);
+            actual.add(ap8);
+            actual.add(ap9);
+            actual.add(ap10);
+            actual.add(ap11);
+            actual.add(ap12);
+            for (int i = 13; i <= 25; i++){
+                List<Object> ap = new ArrayList<>();
+                ap.add(i);
+                ap.add(1500);
+                actual.add(ap);
+            }
+        }
+        if (power == 2000){
+            List<Object> ap0 = new ArrayList<>();
+            ap0.add(0);
+            ap0.add(0);
+            List<Object> ap1 = new ArrayList<>();
+            ap1.add(1);
+            ap1.add(0);
+            List<Object> ap2 = new ArrayList<>();
+            ap2.add(2);
+            ap2.add(0);
+            List<Object> ap3 = new ArrayList<>();
+            ap3.add(3);
+            ap3.add(40);
+            List<Object> ap4 = new ArrayList<>();
+            ap4.add(4);
+            ap4.add(100);
+            List<Object> ap5 = new ArrayList<>();
+            ap5.add(5);
+            ap5.add(200);
+            List<Object> ap6 = new ArrayList<>();
+            ap6.add(6);
+            ap6.add(380);
+            List<Object> ap7 = new ArrayList<>();
+            ap7.add(7);
+            ap7.add(600);
+            List<Object> ap8 = new ArrayList<>();
+            ap8.add(8);
+            ap8.add(900);
+            List<Object> ap9 = new ArrayList<>();
+            ap9.add(9);
+            ap9.add(1300);
+            List<Object> ap10 = new ArrayList<>();
+            ap10.add(10);
+            ap10.add(1650);
+            List<Object> ap11 = new ArrayList<>();
+            ap11.add(11);
+            ap11.add(1900);
+            actual.add(ap0);
+            actual.add(ap1);
+            actual.add(ap2);
+            actual.add(ap3);
+            actual.add(ap4);
+            actual.add(ap5);
+            actual.add(ap6);
+            actual.add(ap7);
+            actual.add(ap8);
+            actual.add(ap9);
+            actual.add(ap10);
+            actual.add(ap11);
+            for (int i = 12; i <= 25; i++){
+                List<Object> ap = new ArrayList<>();
+                ap.add(i);
+                ap.add(2000);
+                actual.add(ap);
+            }
+
+
+
+            List<Object> op0 = new ArrayList<>();
+            op0.add(0);
+            op0.add(0);
+            List<Object> op1 = new ArrayList<>();
+            op1.add(1);
+            op1.add(0);
+            List<Object> op2 = new ArrayList<>();
+            op2.add(2);
+            op2.add(0);
+            List<Object> op3 = new ArrayList<>();
+            op3.add(3);
+            op3.add(60);
+            List<Object> op4 = new ArrayList<>();
+            op4.add(4);
+            op4.add(150);
+            List<Object> op5 = new ArrayList<>();
+            op5.add(5);
+            op5.add(300);
+            List<Object> op6 = new ArrayList<>();
+            op6.add(6);
+            op6.add(500);
+            List<Object> op7 = new ArrayList<>();
+            op7.add(7);
+            op7.add(750);
+            List<Object> op8 = new ArrayList<>();
+            op8.add(8);
+            op8.add(1100);
+            List<Object> op9 = new ArrayList<>();
+            op9.add(9);
+            op9.add(1620);
+            List<Object> op10 = new ArrayList<>();
+            op10.add(10);
+            op10.add(2000);
+            optimal.add(op0);
+            optimal.add(op1);
+            optimal.add(op2);
+            optimal.add(op3);
+            optimal.add(op4);
+            optimal.add(op5);
+            optimal.add(op6);
+            optimal.add(op7);
+            optimal.add(op8);
+            optimal.add(op9);
+            optimal.add(op10);
+            for (int i = 11; i <= 25; i++){
+                List<Object> op = new ArrayList<>();
+                op.add(i);
+                op.add(2000);
+                optimal.add(op);
+            }
+        }
+
+        map.put("actual", actual);
+        map.put("optimal", optimal);
+
+        return map;
+    }
+}

+ 0 - 26
gyee-sample-impala/src/main/java/com/gyee/impala/common/util/StationMapperUtil.java

@@ -1,26 +0,0 @@
-package com.gyee.impala.common.util;
-
-import org.apache.commons.lang3.StringUtils;
-
-public class StationMapperUtil {
-
-    public static String stationCN(String station){
-        if (StringUtils.isEmpty(station))
-            return null;
-
-        switch (station){
-            case "MHS_FDC":
-                return "麻黄山";
-            case "NSS_FDC":
-                return "牛首山";
-            case "QS_FDC":
-                return "青山";
-            case "SBQ_FDC":
-                return "石板泉";
-            case "XS_FDC":
-                return "香山";
-            default:
-                return null;
-        }
-    }
-}

+ 45 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/common/util/TokenGenerator.java

@@ -0,0 +1,45 @@
+package com.gyee.impala.common.util;
+
+import java.security.MessageDigest;
+import java.util.UUID;
+
+public class TokenGenerator {
+
+    private TokenGenerator(){}
+
+    public static String generateValue() {
+        return generateValue(UUID.randomUUID().toString());
+    }
+
+    private static final char[] hexCode = "asdfghjkqwert4841632128".toCharArray();
+
+    private static String toHexString(byte[] data) {
+        if (data == null) {
+            return null;
+        }
+        StringBuilder r = new StringBuilder(data.length * 2);
+        for (byte b : data) {
+            r.append(hexCode[(b >> 4) & 0xF]);
+            r.append(hexCode[(b & 0xF)]);
+        }
+        return r.toString();
+    }
+
+    /**
+     * 生成Token
+     * @param param
+     * @return
+     */
+    private static String generateValue(String param) {
+        try {
+            MessageDigest algorithm = MessageDigest.getInstance("MD5");
+            algorithm.reset();
+            algorithm.update(param.getBytes());
+            byte[] messageDigest = algorithm.digest();
+            return toHexString(messageDigest);
+        } catch (Exception e) {
+            throw new RuntimeException("生成Token失败");
+        }
+    }
+
+}

+ 0 - 41
gyee-sample-impala/src/main/java/com/gyee/impala/controller/AnalysePerformanceWarningController.java

@@ -1,41 +0,0 @@
-package com.gyee.impala.controller;
-
-
-import com.alibaba.fastjson.JSONObject;
-import com.gyee.impala.common.result.JsonResult;
-import com.gyee.impala.common.result.ResultCode;
-import com.gyee.impala.model.master.Caseperformance;
-import com.gyee.impala.service.master.CaseperformanceService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * <p>
- *  场站基础库配置
- * </p>
- *
- * @author chenmh
- * @since 2021-10-15
- */
-@CrossOrigin
-@RestController
-@RequestMapping("/analyse")
-public class AnalysePerformanceWarningController {
-
-    @Autowired
-    private CaseperformanceService caseperformanceService;
-
-
-    @GetMapping("/basic")
-    public JSONObject faultAll(String station, String intervals, Integer tag,
-                               String st, String et){
-        List<Caseperformance> list = caseperformanceService.getPerformanceList(station, intervals, tag, st, et);
-
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-    }
-}

+ 0 - 93
gyee-sample-impala/src/main/java/com/gyee/impala/controller/CaseFaultAlgController.java

@@ -1,93 +0,0 @@
-package com.gyee.impala.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.gyee.impala.common.result.JsonResult;
-import com.gyee.impala.common.result.ResultCode;
-import com.gyee.impala.model.master.Casefaultalg;
-import com.gyee.impala.service.master.CasefaultalgService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 故障诊断故障样本库
- */
-@CrossOrigin
-@RestController
-@RequestMapping("/case")
-public class CaseFaultAlgController {
-
-
-    @Autowired
-    private CasefaultalgService casefaultalgService;
-
-
-    /**
-     * 根据条件查询故障
-     * @return
-     */
-    @GetMapping("/fault/train/all")
-    public JSONObject faultAll(String[] ids){
-        List<Casefaultalg> list = casefaultalgService.getAllByIds(ids);
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-    }
-
-    /**
-     * 批量新增或修改数据
-     * @param list
-     * @return
-     */
-    @PostMapping("/fault/train/operate")
-    public JSONObject faultFixInsert(@RequestBody List<Casefaultalg> list){
-        boolean flag = casefaultalgService.insertOrUpdate(list);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR);
-    }
-
-
-
-
-    /**
-     * 删除样本案例
-     * @param id
-     * @return
-     */
-    @PostMapping("/faultalg/removealgbyid")
-    @ResponseBody
-    public JSONObject stationRemove(@RequestParam(value = "id", required = true) String id){
-
-        boolean flag = casefaultalgService.removeFaultAlgById(id);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR);
-    }
-
-
-    /**
-     * 根据条件查询故障
-     * @param station  场站
-     * @param model    风机型号
-     * @param widget   故障部件
-     * @param st       开始时间
-     * @param et       结束时间
-     * @return
-     */
-    @GetMapping("/faultalg/list")
-    public JSONObject faultAlgList(String station, String[] model, String[] widget,
-                                 String st, String et){
-
-        Page<Casefaultalg> page =new Page(1,10);
-        List<Casefaultalg> list = casefaultalgService.getAll(station, model, widget, st, et);
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-    }
-
-
-
-}

+ 100 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/AutoFaultController.java

@@ -0,0 +1,100 @@
+package com.gyee.impala.controller.diagnose;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.feign.RemoteServiceBuilder;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.custom.diagnose.DataInfo;
+import com.gyee.impala.model.custom.diagnose.FaultInfo;
+import com.gyee.impala.model.custom.diagnose.PointData;
+import com.gyee.impala.model.master.diagnose.Diagnosereport;
+import com.gyee.impala.service.custom.diagnose.DataService;
+import com.gyee.impala.service.master.diagnose.DiagnosereportService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+
+@CrossOrigin
+@RestController
+@RequestMapping("/api/autofault")
+public class AutoFaultController {
+    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @Resource
+    private DataService dataService;
+    @Resource
+    private DiagnosereportService reportService;
+    @Resource
+    private RemoteServiceBuilder shardingBuilder;
+
+    /**
+     * 获取故障信息
+     * @param faultid
+     * @return
+     */
+    @GetMapping("/fault-info/{faultid}")
+    public JSONObject getFaultInfo(@PathVariable long faultid) {
+        List<FaultInfo> fis = shardingBuilder.sharding().getFaultHistoryById(faultid + "");
+        return JsonResult.successData(ResultCode.SUCCESS, fis);
+    }
+
+    /**
+     * 获取故障原始数据
+     * @param faultid
+     * @return
+     */
+    @GetMapping("/data/{faultid}")
+    public JSONObject getData(@PathVariable long faultid) {
+        List<FaultInfo> fis = shardingBuilder.sharding().getFaultHistoryById(faultid + "");
+        if (fis == null || fis.size() <= 0) {
+            return JsonResult.error(ResultCode.ERROR_DATA);
+        }
+
+        FaultInfo fi = fis.get(0);
+
+        String faultTime = fi.getFaultTime();
+
+        Calendar calendar = Calendar.getInstance();
+        try {
+            calendar.setTime(dateFormat.parse(faultTime));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        DataInfo dataInfo = new DataInfo();
+        dataInfo.setId(fi.getId());
+        dataInfo.setFaultTime(String.valueOf(calendar.getTime().getTime()));
+
+        calendar.add(Calendar.MINUTE, -1);
+        dataInfo.setEndTs(String.valueOf(calendar.getTime().getTime()));
+
+        calendar.add(Calendar.HOUR_OF_DAY, -1);
+        dataInfo.setStartTs(String.valueOf(calendar.getTime().getTime()));
+
+        dataInfo.setThingId(fi.getWindturbineId());
+        dataInfo.setModelId(fi.getModelId());
+        dataInfo.setStationId(fi.getStationId());
+
+        Map<String, List<PointData>> data = dataService.getData(dataInfo);
+        return JsonResult.successData(ResultCode.SUCCESS, data);
+    }
+
+
+    @PostMapping("/report/add")
+    public JSONObject getHistory(@RequestBody Diagnosereport obj) {
+        reportService.insertItem(obj);
+        return JsonResult.success();
+    }
+
+
+    @GetMapping("/report")
+    public JSONObject getHistory(String wtId, String model, String modelName, String trainingTimes) {
+        List<Diagnosereport> list = reportService.getAll(wtId, model, modelName, trainingTimes);
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
+}

+ 199 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/CoordinateController.java

@@ -0,0 +1,199 @@
+package com.gyee.impala.controller.diagnose;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.cache.InfoCache;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.custom.diagnose.*;
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+import com.gyee.impala.service.custom.diagnose.CmdService;
+import com.gyee.impala.service.custom.diagnose.DataService;
+import com.gyee.impala.service.master.diagnose.DiagnosetrainhistoryService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+/**
+ * 坐标控制器
+ *
+ * @author xysn
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/api/coordinate")
+public class CoordinateController {
+
+    @org.springframework.beans.factory.annotation.Value("${path.history: d:\\}")
+    private String historyPath;
+    /**
+     * 缓存
+     */
+    @Resource
+    private InfoCache infoCache;
+    /**
+     * 命令执行
+     */
+    @Resource
+    private CmdService cmdService;
+    /**
+     * 数据服务
+     */
+    @Resource
+    private DataService dataService;
+
+    /**
+     * 线程池
+     */
+    @Resource
+    private ThreadPoolTaskExecutor taskExecutor;
+
+
+    /**
+     * 历史记录数据库操作
+     */
+    @Resource
+    private DiagnosetrainhistoryService  historyService;
+
+    private static final Object locker = new Object();
+    private ExecuteInfo executeInfo;
+
+    /**
+     * 更新缓存数据
+     *
+     * @param ci
+     * @return
+     */
+    @PostMapping("/")
+    public JSONObject updateCoordinateCache(@RequestBody String ci) {
+        infoCache.setCoordinates(ci);
+        System.out.print("cu ");
+        return JsonResult.success();
+    }
+
+    /**
+     * 报告进度
+     *
+     * @param process
+     * @return
+     */
+    @GetMapping("/progress/{process}")
+    public JSONObject updateCoordinateCache(@PathVariable Double process) {
+        cmdService.setProcess(process);
+        System.out.print("cp" + process + " ");
+        return JsonResult.success();
+    }
+
+    /**
+     * 获取进度
+     *
+     * @return
+     */
+    @GetMapping("/progress")
+    public JSONObject updateCoordinateCache() {
+        Value value = new Value(cmdService.getProcess());
+        return JsonResult.successData(ResultCode.SUCCESS, value);
+    }
+
+    /**
+     * 获取数据
+     *
+     * @return
+     */
+    @GetMapping("/")
+    public JSONObject getCoordinateCache() {
+        String str = infoCache.getCoordinates();
+        return JsonResult.successData(ResultCode.SUCCESS, str);
+    }
+
+    @GetMapping("/complete/{fname}")
+    public JSONObject setCompleteFileName(@PathVariable String fname) {
+        Diagnosetrainhistory history = cmdService.getHistory(fname, infoCache.getCoordinates());
+        historyService.insertItem(history);
+        return JsonResult.success();
+    }
+
+    /**
+     * 获取数据并执行脚本
+     *
+     * @return
+     */
+    @PostMapping("/execute")
+    public JSONObject executeScript(@RequestBody ExecuteInfo ais) {
+        if (ais == null || ais.getDataInfos().length <= 0) {
+            return JsonResult.error(4000, "训练内容不能为空!");
+        }
+        if (!cmdService.isComplete()) {
+            return JsonResult.error(4000, "命令正在执行...");
+        }
+        synchronized (locker) {
+            executeInfo = ais;
+            taskExecutor.submit(this::execute);
+        }
+        return JsonResult.success();
+    }
+
+    private void execute() {
+        infoCache.setCoordinates("");
+        cmdService.setProcess(-1);
+
+        cmdService.exec(executeInfo);
+    }
+
+    /**
+     * 获取UniformCodes
+     *
+     * @return
+     */
+    @GetMapping("/uniform")
+    public JSONObject getUniformCodes() {
+        Map<String, UniformCodeInfo> map = dataService.getUniformCodeInfoMap();
+        return JsonResult.successData(ResultCode.SUCCESS, map);
+    }
+
+    /**
+     * 获取算法信息
+     *
+     * @return
+     */
+    @GetMapping("/algorithm")
+    public JSONObject getAlgorithm(@RequestParam("type") int type) {
+        Stream<Algorithm> list = Arrays.stream(infoCache.getAlgorithms()).filter(a -> a.getType().ordinal() == type);
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
+
+    @GetMapping("/history")
+    public JSONObject getHistory() {
+        List<History> hs = new ArrayList<>();
+        List<Diagnosetrainhistory> ls = historyService.getAll(AlgorithmType.unsupervised);
+        for (Diagnosetrainhistory he : ls) {
+            History h = new History();
+            h.setCoordinate(he.getContext());
+            h.setFaultIds(Arrays.asList(he.getFaultids().split(",")));
+            h.setName(he.getName());
+            hs.add(h);
+        }
+        return JsonResult.successData(ResultCode.SUCCESS, hs);
+    }
+
+    @GetMapping("/history/remove")
+    public JSONObject removeHistory(@RequestParam(value = "names", required = true) String names) {
+        if (names == null) {
+            return JsonResult.error(4000, "记录名不能为空!");
+        }
+        String[] ns = names.split(",");
+        for (String s : ns) {
+            if (s == null || s.equals("")) {
+                continue;
+            }
+            historyService.deleteById(s);
+        }
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+}

+ 81 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/GearboxDiagnosisController.java

@@ -0,0 +1,81 @@
+package com.gyee.impala.controller.diagnose;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.diagnose.History;
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+import com.gyee.impala.service.master.diagnose.DiagnosetrainhistoryService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author xysn
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/api/gearbox-diagnosis")
+public class GearboxDiagnosisController {
+
+    /**
+     * 历史记录数据库操作
+     */
+    @Resource
+    private DiagnosetrainhistoryService historyService;
+
+    /**
+     * 执行结束,保存历史
+     */
+    @GetMapping("/complete/{fname}")
+    public JSONObject setCompleteFileName(@PathVariable String fname) {
+        Diagnosetrainhistory he = new Diagnosetrainhistory();
+        he.setType(AlgorithmType.gearbox);
+        he.setTime(DateUtil.getTime());
+        he.setName(fname);
+        historyService.insertItem(he);
+        return JsonResult.success();
+    }
+
+    @GetMapping("/history")
+    public JSONObject getHistory() {
+        List<History> hs = new ArrayList<>();
+        List<Diagnosetrainhistory> ls = historyService.getAll(AlgorithmType.gearbox);
+        for (Diagnosetrainhistory he : ls) {
+            History h = new History();
+            h.setCoordinate(he.getContext());
+            if (StringUtils.isNotEmpty(he.getFaultids())) {
+                h.setFaultIds(Arrays.asList(he.getFaultids().split(",")));
+            }
+            h.setName(he.getName());
+            hs.add(h);
+        }
+        return JsonResult.successData(ResultCode.SUCCESS, hs);
+    }
+
+    @GetMapping("/history/remove")
+    public JSONObject removeHistory(@RequestParam(value = "names", required = true) String names) {
+        if (names == null) {
+            return JsonResult.error(4000, "记录名不能为空!");
+        }
+        String[] ns = names.split(",");
+        for (String s : ns) {
+            if (s == null || s.equals("")) {
+                continue;
+            }
+            try {
+                historyService.deleteById(s);
+            } catch (Exception ex) {
+            }
+        }
+        return JsonResult.success();
+    }
+}

+ 216 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/SupervisedController.java

@@ -0,0 +1,216 @@
+package com.gyee.impala.controller.diagnose;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.cache.InfoCache;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.custom.diagnose.*;
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+import com.gyee.impala.service.custom.diagnose.DataService;
+import com.gyee.impala.service.custom.diagnose.SupervisedCmdService;
+import com.gyee.impala.service.master.diagnose.DiagnosetrainhistoryService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 有监督学习控制器
+ *
+ * @author xysn
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/api/supervised")
+public class SupervisedController {
+    /**
+     * 缓存
+     */
+    @Resource
+    private InfoCache infoCache;
+    /**
+     * 命令执行
+     */
+    @Resource
+    private SupervisedCmdService supervisedCmdService;
+    /**
+     * 数据服务
+     */
+    @Resource
+    private DataService dataService;
+
+    /**
+     * 线程池
+     */
+    @Resource
+    private ThreadPoolTaskExecutor taskExecutor;
+    /**
+     * 历史记录数据库操作
+     */
+    @Resource
+    private DiagnosetrainhistoryService historyService;
+
+    private static final Object locker = new Object();
+    private ExecuteInfo executeInfo;
+
+    /**
+     * 更新缓存数据
+     *
+     * @param ci
+     * @return
+     */
+    @PostMapping("/")
+    public JSONObject updateCoordinateCache(@RequestBody String ci) {
+        infoCache.setSupervised(ci);
+        System.out.print("su ");
+        return JsonResult.success();
+    }
+
+    /**
+     * 报告进度
+     *
+     * @param process
+     * @return
+     */
+    @GetMapping("/progress/{process}")
+    public JSONObject updateCoordinateCache(@PathVariable Double process) {
+        supervisedCmdService.setProcess(process);
+        System.out.print("sp" + process + " ");
+        return JsonResult.success();
+    }
+
+    /**
+     * 获取具体故障信息
+     *
+     * @return
+     */
+    @GetMapping("fault-info")
+    public JSONObject getFaultInfo() {
+        ExecuteInfo info = supervisedCmdService.getExecuteInfo();
+        return JsonResult.successData(ResultCode.SUCCESS, info);
+    }
+
+    /**
+     * 获取进度
+     *
+     * @return
+     */
+    @GetMapping("/progress")
+    public JSONObject updateCoordinateCache() {
+        Value value = new Value(supervisedCmdService.getProcess());
+        return JsonResult.successData(ResultCode.SUCCESS, value);
+    }
+
+    /**
+     * 获取数据
+     *
+     * @return
+     */
+    @GetMapping("/")
+    public JSONObject getCoordinateCache() {
+        Value value = new Value(infoCache.getSupervised());
+        return JsonResult.successData(ResultCode.SUCCESS, value);
+    }
+
+    @GetMapping("/complete/{fname}")
+    public JSONObject setCompleteFileName(@PathVariable String fname) {
+        Diagnosetrainhistory history = supervisedCmdService.getHistory(fname, infoCache.getSupervised());
+        historyService.insertItem(history);
+        return JsonResult.success();
+    }
+
+    /**
+     * 获取数据并执行脚本
+     *
+     * @return
+     */
+    @PostMapping("/execute")
+    public JSONObject executeScript(@RequestBody ExecuteInfo ais) {
+        if (ais == null || ais.getDataInfos().length <= 0) {
+            return JsonResult.error(4000, "训练内容不能为空!");
+        }
+        if (!supervisedCmdService.isComplete()) {
+            return JsonResult.error(4000, "命令正在执行...");
+        }
+        synchronized (locker) {
+            executeInfo = ais;
+            taskExecutor.submit(this::execute);
+        }
+        return JsonResult.success();
+    }
+
+    private void execute() {
+        infoCache.setSupervised("");
+        supervisedCmdService.setProcess(-1);
+
+        supervisedCmdService.exec(executeInfo);
+    }
+
+    /**
+     * 获取UniformCodes
+     *
+     * @return
+     */
+    @GetMapping("/uniform")
+    public JSONObject getUniformCodes() {
+        Map<String, UniformCodeInfo> map = dataService.getUniformCodeInfoMap();
+        return JsonResult.successData(ResultCode.SUCCESS, map);
+    }
+
+    /**
+     * 获取UniformCodes
+     *
+     * @return
+     */
+    @GetMapping("/data")
+    public JSONObject getData() {
+        String str = dataService.getFormData(supervisedCmdService.getExecuteInfo());
+        return JsonResult.successData(ResultCode.SUCCESS, str);
+    }
+
+    /**
+     * 获取算法信息
+     *
+     * @return
+     */
+    @GetMapping("/algorithm")
+    public JSONObject getAlgorithm() {
+        Algorithm[] algorithms = infoCache.getAlgorithms();
+        return JsonResult.successData(ResultCode.SUCCESS, algorithms);
+    }
+
+    @GetMapping("/history")
+    public JSONObject getHistory() {
+        List<History> hs = new ArrayList<>();
+        List<Diagnosetrainhistory> ls = historyService.getAll(AlgorithmType.supervised);
+        for (Diagnosetrainhistory he : ls) {
+            History h = new History();
+            h.setCoordinate(he.getContext());
+            h.setFaultIds(Arrays.asList(he.getFaultids().split(",")));
+            h.setName(he.getName());
+            hs.add(h);
+        }
+        return JsonResult.successData(ResultCode.SUCCESS, hs);
+    }
+
+    @GetMapping("/history/remove")
+    public JSONObject removeHistory(@RequestParam(value = "names") String names) {
+        if (names == null) {
+            return JsonResult.error(4000, "记录名不能为空!");
+        }
+        String[] ns = names.split(",");
+        for (String s : ns) {
+            if (s == null || s.equals("")) {
+                continue;
+            }
+            historyService.deleteById(s);
+        }
+        return JsonResult.success();
+    }
+}

+ 74 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/analyse/AnalysePerformanceWarningController.java

@@ -0,0 +1,74 @@
+package com.gyee.impala.controller.sample.analyse;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.master.Caseperformance;
+import com.gyee.impala.service.custom.WarningService;
+import com.gyee.impala.service.master.CaseperformanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *  性能下降预警结合分析
+ * </p>
+ *
+ * @author chenmh
+ * @since 2021-10-15
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/analyse")
+public class AnalysePerformanceWarningController {
+
+    @Autowired
+    private CaseperformanceService caseperformanceService;
+    @Autowired
+    private WarningService warningService;
+
+
+    /**
+     * 性能下降左侧树结构
+     * @return
+     */
+    @GetMapping("/basic")
+    public JSONObject performanceAll(String station, String intervals, Integer tag,
+                               String st, String et){
+        List<Caseperformance> list = caseperformanceService.getPerformanceList(station, intervals, tag, st, et);
+
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
+
+
+    /**
+     * 根据风机查询scada报警
+     * @return
+     */
+    @GetMapping("/warning")
+    public JSONObject warningAll(@RequestParam("category") String category,
+                                 @RequestParam("station") String station,
+                                 @RequestParam("wtid") String wtId,
+                                 @RequestParam("st") String st,
+                                 @RequestParam("et") String et){
+        // 将时间分成多份,resolveWarn使用
+        List<String> lt = new ArrayList<>();
+        Long stime = DateUtil.covertDateTimestamp(st);
+        Long etime = DateUtil.covertDateTimestamp(et);
+        while (stime < etime){
+            lt.add(DateUtil.format(stime, DateUtil.YYYY_MM_DD_HH_MM_SS));
+            stime += 300000;
+        }
+        List<Object> list = warningService.resolveWarn(category, station, wtId, lt);
+
+        if (list != null)
+            return JsonResult.successData(ResultCode.SUCCESS, list);
+        else
+            return JsonResult.error(ResultCode.ERROR);
+    }
+}

+ 1 - 15
gyee-sample-impala/src/main/java/com/gyee/impala/controller/AnalyseScatterController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.analyse;
 
 
 import com.alibaba.fastjson.JSONObject;
@@ -7,10 +7,7 @@ import com.gyee.impala.common.result.ResultCode;
 import com.gyee.impala.common.util.DateUtil;
 import com.gyee.impala.model.custom.PowerCurveCondition;
 import com.gyee.impala.model.custom.YawValuesVo;
-import com.gyee.impala.model.master.Powercurvebasic;
 import com.gyee.impala.service.custom.AnalyseScatterService;
-import com.gyee.impala.service.custom.GoldenService;
-import com.gyee.impala.service.master.PowercurvebasicService;
 import com.gyee.impala.service.slave.WindturbinewindyawService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -29,10 +26,6 @@ public class AnalyseScatterController {
     private WindturbinewindyawService windturbinewindyawService;
     @Autowired
     private AnalyseScatterService scatterService;
-    @Autowired
-    private PowercurvebasicService powercurvebasicService;
-    @Autowired
-    private GoldenService goldenService;
 
 
     /**
@@ -94,11 +87,4 @@ public class AnalyseScatterController {
             return JsonResult.error(ResultCode.ERROR);
         }
     }
-
-
-    @GetMapping("/test")
-    public JSONObject test(String point, long start, long end){
-        List<List<Long>> connectData = goldenService.getConnectData(point, start, end);
-        return JsonResult.successData(ResultCode.SUCCESS, connectData);
-    }
 }

+ 25 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/controller/PowerCurveController.java

@@ -1,9 +1,11 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.analyse;
+
 
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
 import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.service.custom.WarningService;
 import com.gyee.impala.service.master.PowercurvebasicService;
 import com.gyee.impala.service.master.PowercurvefittingService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +27,8 @@ public class PowerCurveController {
     private PowercurvebasicService powercurvebasicService;
     @Autowired
     private PowercurvefittingService fittingService;
+    @Autowired
+    private WarningService warningService;
 
 
     /**
@@ -81,4 +85,24 @@ public class PowerCurveController {
             return JsonResult.error(ResultCode.ERROR_DATA);
         }
     }
+
+
+    /**
+     * 功率曲线圈选完散点查询报警
+     * @return
+     */
+    @PostMapping("/warning")
+    public JSONObject lassoSelect(@RequestParam("category") String category,
+                                  @RequestParam("station") String station,
+                                  @RequestParam("wtid") String wtId,
+                                  @RequestParam("time") String... time){
+
+        List<Object> list = warningService.resolveWarn(category, station, wtId, Arrays.asList(time));
+
+        if (list != null)
+            return JsonResult.successData(ResultCode.SUCCESS, list);
+        else
+            return JsonResult.error(ResultCode.ERROR);
+    }
+
 }

+ 95 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/cases/CaseFaultAlgController.java

@@ -0,0 +1,95 @@
+package com.gyee.impala.controller.sample.cases;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.master.Casefaultalg;
+import com.gyee.impala.service.master.CasefaultalgService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 故障诊断故障样本库
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/case")
+public class CaseFaultAlgController {
+
+    @Autowired
+    private CasefaultalgService casefaultalgService;
+
+
+    @GetMapping("/faultalg/list")
+    public JSONObject faultAlgList(@RequestParam(value = "station", required = false) String station,
+                                   @RequestParam(value = "id", required = false) String[] id,
+                                   @RequestParam(value = "faultid", required = false) Long[] faultid,
+                                   @RequestParam(value = "model", required = false) String[] model,
+                                   @RequestParam(value = "faultcode", required = false) String[] faultcode,
+                                   @RequestParam(value = "st", required = false) String st,
+                                   @RequestParam(value = "et", required = false) String et,
+                                   @RequestParam(value = "algcode", required = false) String algcode,
+                                   @RequestParam(value = "confirm", required = false) Boolean confirm){
+
+        List<Casefaultalg> list = casefaultalgService.getAll(station, id, faultid, model, faultcode, st, et, algcode, confirm);
+        return JsonResult.successData(ResultCode.SUCCESS, list);
+    }
+
+
+    /**
+     * 批量新增
+     * @param list
+     * @return
+     */
+    @PostMapping("/faultalg/insert")
+    public JSONObject faultAlgInsert(@RequestBody List<Casefaultalg> list){
+        casefaultalgService.insertBatch(list);
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+
+
+    /**
+     * 批量更新
+     * @param list
+     * @return
+     */
+    @PostMapping("/faultalg/edit")
+    @ResponseBody
+    public JSONObject faultAlgEdit(@RequestBody List<Casefaultalg> list){
+        casefaultalgService.editBatch(list);
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+
+
+    /**
+     * 删除样本案例
+     * @param id
+     * @return
+     */
+    @GetMapping("/faultalg/delete")
+    @ResponseBody
+    public JSONObject faultAlgDelete(@RequestParam(value = "id") String... id){
+
+        boolean flag = casefaultalgService.delete(id);
+        if (flag){
+            return JsonResult.success(ResultCode.SUCCESS);
+        }
+
+        return JsonResult.error(ResultCode.ERROR);
+    }
+
+
+    /**
+     * 诊断样本确认后存到结论样本
+     * @param list
+     * @return
+     */
+    @PostMapping("/faultalg/confirm")
+    public JSONObject faultAlgConfirm(@RequestBody List<Casefaultalg> list){
+        casefaultalgService.confirm(list);
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+
+}

+ 4 - 6
gyee-sample-impala/src/main/java/com/gyee/impala/controller/CaseFaultController.java

@@ -1,12 +1,10 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.cases;
 
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.config.GyeeConfig;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
-import com.gyee.impala.common.spring.InitialRunner;
 import com.gyee.impala.common.util.FileUtil;
-import com.gyee.impala.common.util.JudeSystem;
 import com.gyee.impala.model.master.Casefault;
 import com.gyee.impala.service.custom.FileUploadService;
 import com.gyee.impala.service.master.CasefaultService;
@@ -30,7 +28,7 @@ import java.util.List;
 public class CaseFaultController {
 
     @Autowired
-    private GyeeConfig config;
+    private GyeeConfig gyeeConfig;
     @Autowired
     private FileUploadService fileUploadService;
     @Autowired
@@ -58,7 +56,7 @@ public class CaseFaultController {
 
 
     /**
-     * 批量新增或修改数据
+     * 批量新增数据
      *
      * @param list
      * @return
@@ -114,7 +112,7 @@ public class CaseFaultController {
     public void downloadTemplate(HttpServletResponse response,
                                  @RequestParam(value = "template", required = false) String template) {
         String fileName = null;
-        String path = JudeSystem.isWindows() ? config.getTemplatePathWindow() : config.getTemplatePathLinux();
+        String path = gyeeConfig.getTemplatePath();
         if (StringUtils.isEmpty(template) || template.equals("fault")) {
             fileName = "fault.xlsx";
         }

+ 6 - 24
gyee-sample-impala/src/main/java/com/gyee/impala/controller/CasePerformanceController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.cases;
 
 
 import com.alibaba.fastjson.JSONObject;
@@ -57,13 +57,11 @@ public class CasePerformanceController {
     /**
      * 新增样本
      *
-     * @param performance 样本对象
      * @return
      */
     @PostMapping("/performance/add")
-    public JSONObject addPerformance(@RequestBody Caseperformance performance) {
-        boolean flag = caseperformanceService.addPerformance(performance);
-
+    public JSONObject addPerformance(@RequestBody List<Caseperformance> list) {
+        boolean flag = caseperformanceService.insertBatch(list);
         if (flag) {
             return JsonResult.success(ResultCode.SUCCESS);
         }
@@ -79,7 +77,7 @@ public class CasePerformanceController {
      */
     @PostMapping("/performance/edit")
     public JSONObject editPerformance(@RequestBody Caseperformance performance) {
-        boolean flag = caseperformanceService.editPerformance(performance);
+        boolean flag = caseperformanceService.editItem(performance);
 
         if (flag) {
             return JsonResult.success(ResultCode.SUCCESS);
@@ -93,9 +91,9 @@ public class CasePerformanceController {
      * @param id 样本id
      * @return
      */
-    @PostMapping("/performance/remove")
+    @PostMapping("/performance/delete")
     public JSONObject removePerformance(Integer id) {
-        boolean flag = caseperformanceService.removePerformance(id);
+        boolean flag = caseperformanceService.deleteItem(id);
         if (flag) {
             return JsonResult.success(ResultCode.SUCCESS);
         }
@@ -104,22 +102,6 @@ public class CasePerformanceController {
 
 
     /**
-     * 批量新增或修改数据
-     * @param list
-     * @return
-     */
-    @PostMapping("/performance/insert")
-    public JSONObject faultInsert(@RequestBody @RequestParam(required = false) List<Caseperformance> list){
-        boolean flag = caseperformanceService.insertOrUpdate(list);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
-    }
-
-
-    /**
      * 性能分析散点图
      *
      * @param id        样本ID

+ 36 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/cases/CaseWarningController.java

@@ -0,0 +1,36 @@
+package com.gyee.impala.controller.sample.cases;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.model.master.Casewarning;
+import com.gyee.impala.service.master.CasewarningService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 故障样本库操作
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/case")
+public class CaseWarningController {
+
+    @Autowired
+    private CasewarningService casewarningService;
+
+
+    /**
+     * 批量新增
+     * @param list
+     * @return
+     */
+    @PostMapping("/warning/insert")
+    public JSONObject faultInsert(@RequestBody List<Casewarning> list) {
+        casewarningService.insertBatch(list);
+        return JsonResult.success(ResultCode.SUCCESS);
+    }
+
+}

+ 8 - 33
gyee-sample-impala/src/main/java/com/gyee/impala/controller/BasicQueryController.java

@@ -1,11 +1,10 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.know;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
 import com.gyee.impala.common.spring.InitialRunner;
-import com.gyee.impala.model.master.Knowfaulttype;
 import com.gyee.impala.model.master.Windpowerstation;
 import com.gyee.impala.model.master.Windturbine;
 import com.gyee.impala.service.master.WindpowerstationService;
@@ -62,25 +61,13 @@ public class BasicQueryController {
 
 
     /**
-     * 查询部件
-     * @return
-     */
-    @GetMapping("/widget/condition")
-    @ResponseBody
-    public JSONObject faultTypeAll(){
-        List<Knowfaulttype> list = InitialRunner.faultTypeList;
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-    }
-
-
-    /**
      * 查询场站的所有风机
      * @return
      */
     @GetMapping("/windturbine/all")
     @ResponseBody
     public JSONObject windsAll(String station){
-        List<Windturbine> list = InitialRunner.wtMap.get(station);
+        List<Windturbine> list = InitialRunner.wpMap.get(station);
         return JsonResult.successData(ResultCode.SUCCESS, list);
     }
 
@@ -88,36 +75,24 @@ public class BasicQueryController {
     @PostMapping("/station/insert")
     @ResponseBody
     public JSONObject stationInsert(Windpowerstation obj){
-        boolean flag = windpowerstationService.insertItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR);
+        windpowerstationService.insertItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
     @PostMapping("/station/edit")
     @ResponseBody
     public JSONObject stationEdit(Windpowerstation obj){
-        boolean flag = windpowerstationService.editItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        windpowerstationService.editItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
     @PostMapping("/station/delete")
     @ResponseBody
     public JSONObject stationDelete(String id){
-        boolean flag = windpowerstationService.deleteItem(id);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        windpowerstationService.deleteItem(id);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 }

+ 43 - 78
gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowBasicController.java

@@ -1,20 +1,21 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.know;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.spring.InitialRunner;
 import com.gyee.impala.model.master.Knowfaultfix;
 import com.gyee.impala.model.master.Knowfaultsymptom;
-import com.gyee.impala.model.master.Knowfaulttype;
+import com.gyee.impala.model.master.Knowcategory;
 import com.gyee.impala.service.master.KnowfaultfixService;
 import com.gyee.impala.service.master.KnowfaultsymptomService;
-import com.gyee.impala.service.master.KnowfaulttypeService;
+import com.gyee.impala.service.master.KnowcategoryService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 知识库数据查询
@@ -25,7 +26,7 @@ import java.util.Map;
 public class KnowBasicController {
     
     @Autowired
-    private KnowfaulttypeService knowfaulttypeService;
+    private KnowcategoryService knowcategoryService;
     @Autowired
     private KnowfaultsymptomService knowfaultsymptomService;
     @Autowired
@@ -36,8 +37,20 @@ public class KnowBasicController {
      * @return
      */
     @GetMapping("/fault/type/all")
-    public JSONObject faultTypeAll(){
-        List<Knowfaulttype> list = knowfaulttypeService.getAll();
+    public JSONObject faultTypeAll(@RequestParam(value = "category", required = false) String category){
+        List<Knowcategory> list = null;
+        String type = StringUtils.isEmpty(category) ? "GZ" : category;
+        switch (type){
+            case "GZ":
+                list = InitialRunner.faultTypeList;
+                break;
+            case "CUSTOMBJ":
+                list = InitialRunner.customWarnList;
+                break;
+            case "SCADABJ":
+                list = InitialRunner.scadaWarnList;
+                break;
+        }
         return JsonResult.successData(ResultCode.SUCCESS, list);
     }
 
@@ -48,13 +61,9 @@ public class KnowBasicController {
      * @return
      */
     @PostMapping("/fault/type/edit")
-    public JSONObject faultTypeEdit(@RequestBody Knowfaulttype obj){
-        boolean flag = knowfaulttypeService.editItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+    public JSONObject faultTypeEdit(@RequestBody Knowcategory obj){
+        knowcategoryService.editItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
     /**
@@ -63,13 +72,9 @@ public class KnowBasicController {
      * @return
      */
     @PostMapping("/fault/type/insert")
-    public JSONObject faultTypeInsert(@RequestBody Knowfaulttype obj){
-        boolean flag = knowfaulttypeService.insertItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+    public JSONObject faultTypeInsert(@RequestBody Knowcategory obj){
+        knowcategoryService.insertItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
@@ -78,15 +83,10 @@ public class KnowBasicController {
      * @param id
      * @return
      */
-    @PostMapping("/fault/type/delete")
-    @ResponseBody
+    @GetMapping("/fault/type/delete")
     public JSONObject faultTypeDelete(String id){
-        boolean flag = knowfaulttypeService.deleteItem(id);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowcategoryService.deleteItem(id);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
@@ -109,12 +109,8 @@ public class KnowBasicController {
      */
     @PostMapping("/fault/symptom/edit")
     public JSONObject faultSymptomEdit(@RequestBody Knowfaultsymptom obj){
-        boolean flag = knowfaultsymptomService.editItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowfaultsymptomService.editItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
     /**
@@ -124,12 +120,8 @@ public class KnowBasicController {
      */
     @PostMapping("/fault/symptom/insert")
     public JSONObject faultSymptomInsert(@RequestBody Knowfaultsymptom obj){
-        boolean flag = knowfaultsymptomService.insertItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowfaultsymptomService.insertItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
@@ -138,17 +130,13 @@ public class KnowBasicController {
      * @param id
      * @return
      */
-    @PostMapping("/fault/symptom/delete")
-    @ResponseBody
+    @GetMapping("/fault/symptom/delete")
     public JSONObject faultSymptomDelete(String id){
-        boolean flag = knowfaulttypeService.deleteItem(id);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowfaultsymptomService.deleteItem(id);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
+
     /**
      * 查询所有故障检修数据
      * @return
@@ -160,29 +148,14 @@ public class KnowBasicController {
     }
 
     /**
-     * 查询所有故障检修数据
-     * @return
-     */
-    @GetMapping("/fault/fix/widget")
-    public JSONObject faultFixAll(){
-        List<Map<String, String>> list = knowfaultfixService.getWidgetAll();
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-    }
-
-
-    /**
      * 编辑故障检修数据
      * @param obj
      * @return
      */
     @PostMapping("/fault/fix/edit")
     public JSONObject faultFixEdit(@RequestBody Knowfaultfix obj){
-        boolean flag = knowfaultfixService.editItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowfaultfixService.editItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
     /**
@@ -192,12 +165,8 @@ public class KnowBasicController {
      */
     @PostMapping("/fault/fix/insert")
     public JSONObject faultFixInsert(@RequestBody Knowfaultfix obj){
-        boolean flag = knowfaultfixService.insertItem(obj);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR);
+        knowfaultfixService.insertItem(obj);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 
 
@@ -209,11 +178,7 @@ public class KnowBasicController {
     @PostMapping("/fault/fix/delete")
     @ResponseBody
     public JSONObject faultFixDelete(String id){
-        boolean flag = knowfaultfixService.deleteItem(id);
-        if (flag){
-            return JsonResult.success(ResultCode.SUCCESS);
-        }
-
-        return JsonResult.error(ResultCode.ERROR_DATA);
+        knowfaultfixService.deleteItem(id);
+        return JsonResult.success(ResultCode.SUCCESS);
     }
 }

+ 1 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowFaultProcessController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.know;
 
 
 import com.alibaba.fastjson.JSONObject;

+ 2 - 2
gyee-sample-impala/src/main/java/com/gyee/impala/controller/KnowMaintenanceController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.know;
 
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
@@ -12,7 +12,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 知识库检修数据查询
+ * 知识库检修手册数据查询
  */
 @CrossOrigin
 @RestController

+ 1 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/controller/WindturbinePointController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.know;
 
 
 import com.alibaba.fastjson.JSONObject;

+ 66 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/controller/sample/login/LoginController.java

@@ -0,0 +1,66 @@
+package com.gyee.impala.controller.sample.login;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.cache.TokenCache;
+import com.gyee.impala.common.result.JsonResult;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.master.User;
+import com.gyee.impala.service.custom.ShiroService;
+import com.gyee.impala.service.master.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 用户管理
+ */
+@CrossOrigin
+@RestController
+@RequestMapping("/sys")
+public class LoginController {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ShiroService shiroService;
+    @Autowired
+    private TokenCache tokenCache;
+
+    /**
+     * 登录入口
+     * @param username
+     * @param password
+     * @return
+     */
+    @PostMapping(value = "/login")
+    public JSONObject login(@RequestParam("username") String username,
+                            @RequestParam("password") String password){
+        User user = userService.getUser(username, password);
+        if (user == null)
+            return JsonResult.error(ResultCode.USER_ACCOUNT_ERROR);
+
+        /*移除旧token同时更新user表*/
+        String token = shiroService.createToken(user);
+        tokenCache.removeToken(user.getToken());
+        user.setToken(token);
+        user.setTime(DateUtil.getTime());
+        userService.updateUser(user);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("user", user);
+        map.put("token", token);
+
+        return JsonResult.successData(ResultCode.SUCCESS, map);
+    }
+
+
+    @PostMapping(value = "/logout")
+    public JSONObject logout(@RequestHeader("token")String token){
+        shiroService.logout(token);
+        return JsonResult.success(ResultCode.USER_OUT_LOGIN);
+    }
+
+}

+ 1 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/controller/WeatherController.java

@@ -1,4 +1,4 @@
-package com.gyee.impala.controller;
+package com.gyee.impala.controller.sample.weather;
 
 
 import com.alibaba.fastjson.JSONObject;

+ 10 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/CaseperformanceMapper.java

@@ -2,6 +2,10 @@ package com.gyee.impala.mapper.master;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.gyee.impala.model.master.Caseperformance;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,10 @@ import com.gyee.impala.model.master.Caseperformance;
  */
 public interface CaseperformanceMapper extends BaseMapper<Caseperformance> {
 
+
+    @Select("SELECT * from caseperformance where endtime = (SELECT max(endtime) as endtime " +
+            "from caseperformance where windturbineid = #{wtId} order by endtime desc) " +
+            "and windturbineid = #{wtId}")
+    List<Caseperformance> getOneMaxTimeByWtId(@Param("wtId") String wtId);
+
 }

+ 7 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/CasewarningMapper.java

@@ -0,0 +1,7 @@
+package com.gyee.impala.mapper.master;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.impala.model.master.Casewarning;
+
+public interface CasewarningMapper extends BaseMapper<Casewarning> {
+}

+ 16 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/EquipmentmodelMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.impala.mapper.master;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.impala.model.master.Equipmentmodel;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author chenmh
+ * @since 2022-03-29
+ */
+public interface EquipmentmodelMapper extends BaseMapper<Equipmentmodel> {
+
+}

+ 2 - 2
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/KnowfaulttypeMapper.java

@@ -1,6 +1,6 @@
 package com.gyee.impala.mapper.master;
 
-import com.gyee.impala.model.master.Knowfaulttype;
+import com.gyee.impala.model.master.Knowcategory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author chenmh
  * @since 2021-10-25
  */
-public interface KnowfaulttypeMapper extends BaseMapper<Knowfaulttype> {
+public interface KnowcategoryMapper extends BaseMapper<Knowcategory> {
 
 }

+ 7 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/UserMapper.java

@@ -0,0 +1,7 @@
+package com.gyee.impala.mapper.master;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.impala.model.master.User;
+
+public interface UserMapper extends BaseMapper<User> {
+}

+ 1 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/WeatherforecastMapper.java

@@ -19,7 +19,7 @@ public interface WeatherforecastMapper extends BaseMapper<Weatherforecast> {
     @Select("select * from weatherforecast w, (select MAX(filetime) as a, time  from \n" +
             "weatherforecast where substr(time,15,5)='00:00' and time >= #{st}" +
             "and time <= #{et} and stationen = #{station} group by  time) as t \n" +
-            "where w.filetime = t.a and w.time = t.time and stationen = #{station};")
+            "where w.filetime = t.a and w.time = t.time and stationen = #{station}")
     List<Weatherforecast> getListByStationAndTime(@Param("station") String station,
                                            @Param("st") String st,
                                            @Param("et") String et);

+ 16 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/diagnose/DiagnosereportMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.impala.mapper.master.diagnose;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.impala.model.master.diagnose.Diagnosereport;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author chenmh
+ * @since 2021-10-18
+ */
+public interface DiagnosereportMapper extends BaseMapper<Diagnosereport> {
+
+}

+ 8 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/mapper/master/diagnose/DiagnosetrainhistoryMapper.java

@@ -0,0 +1,8 @@
+package com.gyee.impala.mapper.master.diagnose;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+
+
+public interface DiagnosetrainhistoryMapper extends BaseMapper<Diagnosetrainhistory> {
+}

+ 30 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/AlertHistory.java

@@ -0,0 +1,30 @@
+package com.gyee.impala.model.custom;
+
+import lombok.Data;
+
+@Data
+public class AlertHistory {
+
+    private long id;
+    private String alertTime;
+    private Integer messageType;
+    private long snapId;
+    private String dataInfo;
+    private String alertTextLast;
+    private String stationId;
+    private String projectId;
+    private String lineId;
+    private String windturbineId;
+    private Integer alertValue;
+    private String category1;
+    private String category2;
+    private String category3;
+    private String rank;
+    private String lastUpdateTime;
+    private String stationName;
+    private String lineName;
+    private String windturbineName;
+    private String alertText;
+    private String modelId;
+
+}

+ 14 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/TokenUser.java

@@ -0,0 +1,14 @@
+package com.gyee.impala.model.custom;
+
+import lombok.Data;
+
+@Data
+public class TokenUser {
+
+    private String code;
+    private String name;
+    private String password;
+    private Long updateTime;
+    private Long expireTime;
+
+}

+ 60 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Algorithm.java

@@ -0,0 +1,60 @@
+package com.gyee.impala.model.custom.diagnose;
+
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+
+/**
+ * 算法
+ *
+ * @author xysn
+ */
+public class Algorithm {
+    /**
+     * 算法名称
+     */
+    private String name;
+    /**
+     * 算法类型
+     */
+    private AlgorithmType type;
+    /**
+     * 算法参数
+     */
+    private Parameter[] parameters;
+    /**
+     * 算法参数
+     */
+    private String parameter;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Parameter[] getParameters() {
+        return parameters;
+    }
+
+    public void setParameters(Parameter[] parameters) {
+        this.parameters = parameters;
+    }
+
+    public String getParameter() {
+        return parameter;
+    }
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+
+    public AlgorithmType getType() {
+        return type;
+    }
+
+    public void setType(AlgorithmType type) {
+        this.type = type;
+    }
+}
+

+ 26 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/CodeInfo.java

@@ -0,0 +1,26 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * UniformCode信息
+ * @author xysn
+ */
+public class CodeInfo {
+    private String name;
+    private String code;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}

+ 28 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Coordinate.java

@@ -0,0 +1,28 @@
+package com.gyee.impala.model.custom.diagnose;
+
+import java.util.List;
+
+/**
+ * 坐标
+ * @author xysn
+ */
+public class Coordinate {
+    private List<double[]> value;
+    private String Flag;
+
+    public String getFlag() {
+        return Flag;
+    }
+
+    public void setFlag(String flag) {
+        Flag = flag;
+    }
+
+    public List<double[]> getValue() {
+        return value;
+    }
+
+    public void setValue(List<double[]> value) {
+        this.value = value;
+    }
+}

+ 83 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/DataInfo.java

@@ -0,0 +1,83 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * 数据信息
+ * @author xysn
+ */
+public class DataInfo {
+    private long id;
+    private String startTs;
+    private String endTs;
+    private String thingId;
+    private String modelId;
+    private String stationId;
+    private String faultTime;
+    /**
+     * 标签
+     */
+    private String tag;
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getStartTs() {
+        return startTs;
+    }
+
+    public void setStartTs(String startTs) {
+        this.startTs = startTs;
+    }
+
+    public String getEndTs() {
+        return endTs;
+    }
+
+    public void setEndTs(String endTs) {
+        this.endTs = endTs;
+    }
+
+    public String getThingId() {
+        return thingId;
+    }
+
+    public void setThingId(String thingId) {
+        this.thingId = thingId;
+    }
+
+    public String getModelId() {
+        return modelId;
+    }
+
+    public void setModelId(String modelId) {
+        this.modelId = modelId;
+    }
+
+    public String getStationId() {
+        return stationId;
+    }
+
+    public void setStationId(String stationId) {
+        this.stationId = stationId;
+    }
+
+    public String getFaultTime() {
+        return faultTime;
+    }
+
+    public void setFaultTime(String faultTime) {
+        this.faultTime = faultTime;
+    }
+}

+ 27 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/ExecuteInfo.java

@@ -0,0 +1,27 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * 执行信息
+ *
+ * @author xysn
+ */
+public class ExecuteInfo {
+    private Algorithm algorithm;
+    private DataInfo[] dataInfos;
+
+    public Algorithm getAlgorithm() {
+        return algorithm;
+    }
+
+    public void setAlgorithm(Algorithm algorithm) {
+        this.algorithm = algorithm;
+    }
+
+    public DataInfo[] getDataInfos() {
+        return dataInfos;
+    }
+
+    public void setDataInfos(DataInfo[] dataInfos) {
+        this.dataInfos = dataInfos;
+    }
+}

+ 256 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/FaultInfo.java

@@ -0,0 +1,256 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * @author xysn
+ */
+public class FaultInfo {
+    private long id;
+    //报警时间
+    private String faultTime;
+    //对象类型
+    private int messageType;
+    //报警内容
+    private long snapID;
+
+    private Integer confirmType;
+
+    private String confirmTime;
+
+    private String confirmPerson;
+
+    private String stationId;
+
+    private String projectId;
+
+    private String lineId;
+
+    private String windturbineId;
+    //报警对应故障编码
+    private long alertValue;
+    //报警级别
+    private String rank;
+
+    private String category1;
+
+    private String category2;
+
+    private String category3;
+
+    private boolean isOpened;
+
+    private String lastUpdateTime;
+
+    private String lastUpdatePerson;
+
+    private String stationName;
+
+    private String projectName;
+
+    private String lineName;
+
+    private String windturbineName;
+
+    private String alertText;
+
+    private String modelId;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getFaultTime() {
+        return faultTime;
+    }
+
+    public void setFaultTime(String faultTime) {
+        this.faultTime = faultTime;
+    }
+
+    public int getMessageType() {
+        return messageType;
+    }
+
+    public void setMessageType(int messageType) {
+        this.messageType = messageType;
+    }
+
+    public long getSnapID() {
+        return snapID;
+    }
+
+    public void setSnapID(long snapID) {
+        this.snapID = snapID;
+    }
+
+    public Integer getConfirmType() {
+        return confirmType;
+    }
+
+    public void setConfirmType(Integer confirmType) {
+        this.confirmType = confirmType;
+    }
+
+    public String getConfirmTime() {
+        return confirmTime;
+    }
+
+    public void setConfirmTime(String confirmTime) {
+        this.confirmTime = confirmTime;
+    }
+
+    public String getConfirmPerson() {
+        return confirmPerson;
+    }
+
+    public void setConfirmPerson(String confirmPerson) {
+        this.confirmPerson = confirmPerson;
+    }
+
+    public String getStationId() {
+        return stationId;
+    }
+
+    public void setStationId(String stationId) {
+        this.stationId = stationId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getLineId() {
+        return lineId;
+    }
+
+    public void setLineId(String lineId) {
+        this.lineId = lineId;
+    }
+
+    public String getWindturbineId() {
+        return windturbineId;
+    }
+
+    public void setWindturbineId(String windturbineId) {
+        this.windturbineId = windturbineId;
+    }
+
+    public long getAlertValue() {
+        return alertValue;
+    }
+
+    public void setAlertValue(long alertValue) {
+        this.alertValue = alertValue;
+    }
+
+    public String getRank() {
+        return rank;
+    }
+
+    public void setRank(String rank) {
+        this.rank = rank;
+    }
+
+    public String getCategory1() {
+        return category1;
+    }
+
+    public void setCategory1(String category1) {
+        this.category1 = category1;
+    }
+
+    public String getCategory2() {
+        return category2;
+    }
+
+    public void setCategory2(String category2) {
+        this.category2 = category2;
+    }
+
+    public String getCategory3() {
+        return category3;
+    }
+
+    public void setCategory3(String category3) {
+        this.category3 = category3;
+    }
+
+    public boolean isOpened() {
+        return isOpened;
+    }
+
+    public void setOpened(boolean opened) {
+        isOpened = opened;
+    }
+
+    public String getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    public void setLastUpdateTime(String lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    public String getLastUpdatePerson() {
+        return lastUpdatePerson;
+    }
+
+    public void setLastUpdatePerson(String lastUpdatePerson) {
+        this.lastUpdatePerson = lastUpdatePerson;
+    }
+
+    public String getStationName() {
+        return stationName;
+    }
+
+    public void setStationName(String stationName) {
+        this.stationName = stationName;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getLineName() {
+        return lineName;
+    }
+
+    public void setLineName(String lineName) {
+        this.lineName = lineName;
+    }
+
+    public String getWindturbineName() {
+        return windturbineName;
+    }
+
+    public void setWindturbineName(String windturbineName) {
+        this.windturbineName = windturbineName;
+    }
+
+    public String getAlertText() {
+        return alertText;
+    }
+
+    public void setAlertText(String alertText) {
+        this.alertText = alertText;
+    }
+
+    public String getModelId() {
+        return modelId;
+    }
+
+    public void setModelId(String modelId) {
+        this.modelId = modelId;
+    }
+}

+ 37 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/History.java

@@ -0,0 +1,37 @@
+package com.gyee.impala.model.custom.diagnose;
+
+import java.util.List;
+
+/**
+ * 历史记录信息
+ * @author xysn
+ */
+public class History {
+    private String name;
+    private List<String> faultIds;
+    private String coordinate;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<String> getFaultIds() {
+        return faultIds;
+    }
+
+    public void setFaultIds(List<String> faultIds) {
+        this.faultIds = faultIds;
+    }
+
+    public String getCoordinate() {
+        return coordinate;
+    }
+
+    public void setCoordinate(String coordinate) {
+        this.coordinate = coordinate;
+    }
+}

+ 43 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Parameter.java

@@ -0,0 +1,43 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * 算法参数
+ */
+public class Parameter {
+    /**
+     * 参数名称
+     */
+    private String name;
+    /**
+     * 参数类型
+     */
+    private String type;
+    /**
+     * 参数
+     */
+    private double value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public double getValue() {
+        return value;
+    }
+
+    public void setValue(double value) {
+        this.value = value;
+    }
+}

+ 35 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/PointData.java

@@ -0,0 +1,35 @@
+package com.gyee.impala.model.custom.diagnose;
+
+public class PointData {
+    private long ts;
+    private double doubleValue = 0;
+    private boolean booleanValue ;
+
+    public double getValue(){
+        return booleanValue ? 1 : doubleValue;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public double getDoubleValue() {
+        return doubleValue;
+    }
+
+    public void setDoubleValue(double doubleValue) {
+        this.doubleValue = doubleValue;
+    }
+
+    public boolean isBooleanValue() {
+        return booleanValue;
+    }
+
+    public void setBooleanValue(boolean booleanValue) {
+        this.booleanValue = booleanValue;
+    }
+}

+ 75 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/UniformCodeInfo.java

@@ -0,0 +1,75 @@
+package com.gyee.impala.model.custom.diagnose;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * UniformCode信息
+ *
+ * @author xysn
+ */
+public class UniformCodeInfo {
+    private String name;
+    private List<UniformCodeValue> values;
+
+    private Map<String, UniformCodeValue> uniformCodeValueMap;
+
+    public List<CodeInfo> getCodeInfos(String stationId) {
+        if (uniformCodeValueMap == null) {
+            initUniformCodeValues();
+        }
+        if (!uniformCodeValueMap.containsKey(stationId)) {
+            return new ArrayList<>();
+        }
+        return uniformCodeValueMap.get(stationId).getCodes();
+    }
+
+    private void initUniformCodeValues() {
+        uniformCodeValueMap = new HashMap<>();
+        for (UniformCodeValue uv : values) {
+            if (!uniformCodeValueMap.containsKey(uv.getModelId())) {
+                uniformCodeValueMap.put(uv.getModelId(), uv);
+            }
+        }
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<UniformCodeValue> getValues() {
+        return values;
+    }
+
+    public void setValues(List<UniformCodeValue> values) {
+        this.values = values;
+    }
+}
+
+class UniformCodeValue {
+    private String modelId;
+    private List<CodeInfo> codes;
+
+    public String getModelId() {
+        return modelId;
+    }
+
+    public void setModelId(String modelId) {
+        this.modelId = modelId;
+    }
+
+    public List<CodeInfo> getCodes() {
+        return codes;
+    }
+
+    public void setCodes(List<CodeInfo> codes) {
+        this.codes = codes;
+    }
+}
+

+ 26 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/custom/diagnose/Value.java

@@ -0,0 +1,26 @@
+package com.gyee.impala.model.custom.diagnose;
+
+/**
+ * 用于提供对一个简单值包装
+ *
+ * @author xysn
+ */
+public class Value {
+    private Object value;
+
+    public Value(Object v) {
+        this.value = v;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public int getCode(){
+        return 200;
+    }
+}

+ 31 - 23
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casefault.java

@@ -1,11 +1,12 @@
 package com.gyee.impala.model.master;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.io.Serializable;
+
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.common.util.SnowFlakeUtil;
+import com.gyee.impala.model.ToData;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -20,60 +21,43 @@ import lombok.EqualsAndHashCode;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @TableName("casefault")
-public class Casefault extends Model<Casefault> {
+public class Casefault extends Model<Casefault> implements ToData<Object> {
 
     private static final long serialVersionUID=1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
-    @TableField("id")
+//    @TableId(value = "id", type = IdType.INPUT)
     private String id;
 
-    @TableField("tag")
     private Integer tag;
 
-    @TableField("faultid")
     private Long faultid;
 
-    @TableField("stationcn")
     private String stationcn;
 
-    @TableField("windturbineid")
     private String windturbineid;
 
-    @TableField("faulttype")
     private String faulttype;
 
-    @TableField("faultcode")
     private String faultcode;
 
-    @TableField("symptom")
     private String symptom;
 
-    @TableField("symptomcode")
     private String symptomcode;
 
-    @TableField("starttime")
     private String starttime;
 
-    @TableField("endtime")
     private String endtime;
 
-    @TableField("manufacturer")
     private String manufacturer;
 
-    @TableField("model")
     private String model;
 
-    @TableField("stationen")
     private String stationen;
 
-    @TableField("remark")
     private String remark;
 
-    @TableField("category")
     private String category;
 
-    @TableField("createtime")
     private String createtime;
 
 
@@ -93,5 +77,29 @@ public class Casefault extends Model<Casefault> {
     }
 
 
-
+    @Override
+    public Object toData(Object t) {
+        Casefaultalg obj = (Casefaultalg) t;
+        if (obj == null)
+            return null;
+
+        Casefault fault = new Casefault();
+        fault.setTag(0);
+        fault.setFaultid(obj.getFaultid());
+        fault.setStationcn(obj.getStationcn());
+        fault.setStationen(obj.getStationen());
+        fault.setWindturbineid(obj.getWindturbineid());
+        fault.setFaulttype(obj.getFaulttype());
+        fault.setFaultcode(obj.getFaultcode());
+        fault.setSymptom(obj.getSymptom());
+        fault.setSymptomcode(obj.getSymptomcode());
+        fault.setStarttime(obj.getStarttime());
+        fault.setEndtime(obj.getEndtime());
+        fault.setManufacturer(obj.getManufacturer());
+        fault.setModel(obj.getModel());
+        fault.setRemark(obj.getRemark());
+        fault.setCategory("3");
+
+        return fault;
+    }
 }

+ 20 - 70
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casefaultalg.java

@@ -1,10 +1,7 @@
 package com.gyee.impala.model.master;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,92 +21,45 @@ public class Casefaultalg extends Model<Casefaultalg> {
 
     private static final long serialVersionUID=1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
-    @TableField("id")
-    private Integer id;
+    private String id;
 
-    @TableField("faultTime")
-    private String faultTime;
+    private Integer tag;
 
-    @TableField("messageType")
-    private Integer messageType;
+    private Long faultid;
 
-    @TableField("snapID")
-    private Integer snapID;
+    private String stationcn;
 
-    @TableField("confirmType")
-    private Integer confirmType;
+    private String windturbineid;
 
-    @TableField("confirmTime")
-    private String confirmTime;
+    private String faulttype;
 
-    @TableField("confirmPerson")
-    private String confirmPerson;
+    private String faultcode;
 
-    @TableField("stationId")
-    private String stationId;
+    private String algname;
 
-    @TableField("projectId")
-    private String projectId;
+    private String algcode;
 
-    @TableField("lineId")
-    private String lineId;
+    private String symptom;
 
-    @TableField("windturbineId")
-    private String windturbineId;
+    private String symptomcode;
 
-    @TableField("alertValue")
-    private Integer alertValue;
+    private String starttime;
 
-    private Integer rank;
+    private String endtime;
 
-    private String category1;
+    private String model;
 
-    private String category2;
+    private String manufacturer;
 
-    private String category3;
+    private String stationen;
 
-    @TableField("lastUpdateTime")
-    private String lastUpdateTime;
+    private Boolean confirm;
 
-    @TableField("lastUpdatePerson")
-    private String lastUpdatePerson;
+    private String remark;
 
-    @TableField("stationName")
-    private String stationName;
+    private String category;
 
-    @TableField("projectName")
-    private String projectName;
-
-    @TableField("lineName")
-    private String lineName;
-
-    @TableField("windturbineName")
-    private String windturbineName;
-
-    @TableField("alertText")
-    private String alertText;
-
-    @TableField("modelId")
-    private String modelId;
-
-    @TableField("objectName")
-    private String objectName;
-
-    @TableField("messageTypeString")
-    private String messageTypeString;
-
-    @TableField("objectId")
-    private String objectId;
-
-    private Boolean opened;
-
-    @TableField("categoryName")
-    private String categoryName;
-
-    private String colors;
-
-    private String labels;
+    private String createtime;
 
 
     @Override

+ 2 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Caseperformance.java

@@ -47,6 +47,8 @@ public class Caseperformance extends Model<Caseperformance> {
 
     private String category;
 
+    private String createtime;
+
 
     @Override
     protected Serializable pkVal() {

+ 73 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Casewarning.java

@@ -0,0 +1,73 @@
+package com.gyee.impala.model.master;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.model.ToData;
+import com.gyee.impala.model.custom.AlertHistory;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("casewarning")
+public class Casewarning extends Model<Caseperformance> implements ToData<Object> {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+    private String stationen;
+    private String windturbineid;
+    private String warntype;
+    private String warncode;
+    private String warndes;
+    private String warntime;
+    private int warnrank;
+    private String model;
+    private String projectid;
+    private String lineid;
+    private String stationcn;
+    private String windturbinename;
+    private int tag;
+    private String remark;
+    private String category;
+    private String createtime;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public Object toData(Object t) {
+        AlertHistory obj = (AlertHistory) t;
+        if (obj == null)
+            return null;
+
+        Casewarning warn = new Casewarning();
+        warn.setId(String.valueOf(obj.getId()));
+        warn.setStationcn(obj.getStationName());
+        warn.setStationen(obj.getStationId());
+        warn.setWindturbineid(obj.getWindturbineId());
+        warn.setWindturbinename(obj.getWindturbineName());
+        if (obj.getCategory1().equalsIgnoreCase("windturbine"))
+            warn.setWarntype(InitialRunner.scadaWarnMap.get(obj.getCategory2().toUpperCase()));
+        if (obj.getCategory1().equalsIgnoreCase("custom"))
+            warn.setWarntype(InitialRunner.customWarnMap.get(obj.getCategory2().toUpperCase()));
+        warn.setWarncode(obj.getCategory2());
+        warn.setWarndes(obj.getAlertText());
+        warn.setWarntime(obj.getAlertTime());
+        warn.setWarnrank(Integer.valueOf(obj.getRank()));
+        warn.setModel(obj.getModelId());
+        warn.setProjectid(obj.getProjectId());
+        warn.setLineid(obj.getLineId());
+        warn.setTag(0);
+        warn.setRemark(null);
+        warn.setCategory(null);
+        warn.setCreatetime(null);
+
+        return warn;
+    }
+}

+ 55 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Equipmentmodel.java

@@ -0,0 +1,55 @@
+package com.gyee.impala.model.master;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author chenmh
+ * @since 2022-03-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("EQUIPMENTMODEL")
+public class Equipmentmodel extends Model<Equipmentmodel> {
+
+    private static final long serialVersionUID=1L;
+
+    private String id;
+
+    private String code;
+
+    private String name;
+
+    private String description;
+
+    private Double powerproduction;
+
+    private Double cutinwindspeed;
+
+    private Double ratedwindspeed;
+
+    private Double cutoutwindspeed;
+
+    private String unit;
+
+    private Double sweptarea;
+
+    private String remark;
+
+    private String category;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 9 - 7
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Knowfaulttype.java

@@ -3,6 +3,9 @@ package com.gyee.impala.model.master;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.io.Serializable;
+
+import com.gyee.impala.model.ToData;
+import com.gyee.impala.model.custom.AlertHistory;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -16,18 +19,18 @@ import lombok.EqualsAndHashCode;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@TableName("knowfaulttype")
-public class Knowfaulttype extends Model<Knowfaulttype> {
+@TableName("knowcategory")
+public class Knowcategory extends Model<Knowcategory> {
 
     private static final long serialVersionUID=1L;
 
-      private Long id;
+    private String id;
 
-    private String faulttype;
+    private String name;
 
-    private String faultcode;
+    private String code;
 
-    private String createtime;
+    private String time;
 
     private String remark;
 
@@ -38,5 +41,4 @@ public class Knowfaulttype extends Model<Knowfaulttype> {
     protected Serializable pkVal() {
         return this.id;
     }
-
 }

+ 1 - 4
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Powercurvebasic.java

@@ -6,11 +6,8 @@ import com.gyee.impala.model.ToData;
 import com.gyee.impala.model.custom.PowerCurveCondition;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.apache.poi.ss.formula.functions.T;
-
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
+
 
 @Data
 @EqualsAndHashCode(callSuper = false)

+ 30 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/User.java

@@ -0,0 +1,30 @@
+package com.gyee.impala.model.master;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("user")
+public class User extends Model<User> {
+
+    private static final long serialVersionUID=1L;
+
+    private String id;
+    private String name;
+    private String code;
+    private String password;
+    private String phone;
+    private String organization;
+    private String token;
+    private String time;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+}

+ 9 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Windpowerstation.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * <p>
@@ -21,7 +22,7 @@ public class Windpowerstation extends Model<Windpowerstation> {
 
     private static final long serialVersionUID=1L;
 
-      private String id;
+    private String id;
 
     private String name;
 
@@ -49,6 +50,13 @@ public class Windpowerstation extends Model<Windpowerstation> {
 
     private String remark;
 
+    public void setType(String type) {
+        this.type = StringUtils.isEmpty(type) ? "FJ" : type;
+    }
+
+    public void setCapacityunit(String capacityunit) {
+        this.capacityunit = StringUtils.isEmpty(capacityunit) ? "MW" : capacityunit;
+    }
 
     @Override
     protected Serializable pkVal() {

+ 1 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/Windturbinepoint.java

@@ -21,7 +21,7 @@ public class Windturbinepoint extends Model<Windturbinepoint> {
 
     private static final long serialVersionUID=1L;
 
-      private String id;
+    private String id;
 
     private String windturbineid;
 

+ 19 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/AlgorithmType.java

@@ -0,0 +1,19 @@
+package com.gyee.impala.model.master.diagnose;
+
+/**
+ * 参数类型
+ */
+public enum AlgorithmType {
+    /**
+     * 无监督学习
+     */
+    unsupervised,
+    /**
+     * 有监督学习
+     */
+    supervised,
+    /**
+     * 齿轮箱油温
+     */
+    gearbox,
+}

+ 43 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/Diagnosereport.java

@@ -0,0 +1,43 @@
+package com.gyee.impala.model.master.diagnose;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 故障诊断报告
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("diagnosereport")
+public class Diagnosereport extends Model<Diagnosereport> {
+
+    private long id;
+    /**
+     * 风机编号
+     */
+    private String windturbineid;
+    /**
+     * 风机型号
+     */
+    private String model;
+    /**
+     * 故障发生时间
+     */
+    private String faulttime;
+    /**
+     * 模型名称
+     */
+    private String modelName;
+    /**
+     * 训练次数
+     */
+    private int trainingtimes;
+    /**
+     * 训练结果
+     */
+    private String result;
+
+    private String createtime;
+}

+ 41 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/Diagnosetrainhistory.java

@@ -0,0 +1,41 @@
+package com.gyee.impala.model.master.diagnose;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 历史记录
+ * @author xysn
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("diagnosetrainhistory")
+public class Diagnosetrainhistory extends Model<Diagnosetrainhistory> {
+
+    private String id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 时间
+     */
+    private String time;
+    /**
+     * 算法类型
+     */
+    private AlgorithmType type;
+    /**
+     * 内容
+     */
+    private String context;
+    /**
+     * 故障ID
+     */
+    private String faultids;
+
+    private String createtime;
+}

+ 107 - 90
gyee-sample-impala/src/main/java/com/gyee/impala/schdule/TaskPerformance.java

@@ -1,13 +1,16 @@
 package com.gyee.impala.schdule;
 
+import com.gyee.impala.common.constant.Constants;
 import com.gyee.impala.common.feign.RemoteServiceBuilder;
+import com.gyee.impala.common.spring.InitialRunner;
 import com.gyee.impala.common.util.DateUtil;
-import com.gyee.impala.common.util.FileUtil;
+import com.gyee.impala.common.util.GyeeUtil;
 import com.gyee.impala.common.util.SnowFlakeUtil;
 import com.gyee.impala.model.custom.TsDoubleData;
+import com.gyee.impala.model.master.Caseperformance;
 import com.gyee.impala.model.master.Windturbine;
 import com.gyee.impala.model.master.Windturbinepoint;
-import com.gyee.impala.service.master.WindturbineService;
+import com.gyee.impala.service.master.CaseperformanceService;
 import com.gyee.impala.service.master.WindturbinepointService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,106 +23,120 @@ import java.util.List;
 @Slf4j
 public class TaskPerformance {
 
-    // 分钟 * 秒
+    /**  等间隔查询   分钟 * 秒 **/
     private final Integer interval = 5 * 60;
+    private final String START_TIME = "2021-01-01 00:00:00";
 
-    // 实时欠发状态
-    private final String RSSQFZT = "RSSQFZT";
-    // 发电机转速
-    private final String FDJZS = "AI012";
-    private final String FDJZSB = "AI012B";
-    // 明细状态
-    private final String FJMXZT = "ZTMX";
-    // 桨叶角度
-    private final String JYJD = "AI031";
-
-    private final String START_TIME = "2021-06-01 00:00:00";
-    private final String END_TIME = "2021-11-20 00:00:00";
-
-    @Autowired
-    private RemoteServiceBuilder remoteServiceBuilder;
     @Autowired
-    private WindturbineService windturbineService;
+    private RemoteServiceBuilder remoteService;
     @Autowired
     private WindturbinepointService windturbinepointService;
+    @Autowired
+    private CaseperformanceService performanceService;
 
 
-    /**
-     * 性能下降统计
-     * 延时30s执行
-     * 每隔60s执行一次
-     */
-    @Scheduled(initialDelay = 30 * 1000, fixedRate = 2 * 86400000 * 1000)
+    @Scheduled(initialDelay = 10 * 1000, fixedRate = 2 * 86400000 * 1000)
     public void performanceNSS(){
-        List<Windturbine> listNSS = windturbineService.getWindTurbineId("NSS_FDC");
-
-        if (listNSS == null || listNSS.size() < 0)
-            return;
-
-        List<String> data = new ArrayList<>();
-        for (int i = 0; i < listNSS.size(); i++){
-            if (i > 10)
-                break;
-
-            Windturbinepoint wp_zs = windturbinepointService.getItemByWtIdAndUniformCode(listNSS.get(i).getId(), FDJZS);
-            Windturbinepoint wp_zt = windturbinepointService.getItemByWtIdAndUniformCode(listNSS.get(i).getId(), FJMXZT);
-            Windturbinepoint wp_qf = windturbinepointService.getItemByWtIdAndUniformCode(listNSS.get(i).getId(), RSSQFZT);
-            Windturbinepoint wp_jy = windturbinepointService.getItemByWtIdAndUniformCode(listNSS.get(i).getId(), JYJD);
-
-            List<TsDoubleData> zsData = remoteServiceBuilder.ShardingService().getHistorySnapAI(wp_zs.getPoint(),
-                    DateUtil.covertDateTimestamp(START_TIME), DateUtil.covertDateTimestamp(END_TIME), interval);
-            List<TsDoubleData> ztData = remoteServiceBuilder.ShardingService().getHistorySnapAI(wp_zt.getPoint(),
-                    DateUtil.covertDateTimestamp(START_TIME), DateUtil.covertDateTimestamp(END_TIME), interval);
-            List<TsDoubleData> qfData = remoteServiceBuilder.ShardingService().getHistorySnapAI(wp_qf.getPoint(),
-                    DateUtil.covertDateTimestamp(START_TIME), DateUtil.covertDateTimestamp(END_TIME), interval);
-            List<TsDoubleData> jdData = remoteServiceBuilder.ShardingService().getHistorySnapAI(wp_jy.getPoint(),
-                    DateUtil.covertDateTimestamp(START_TIME), DateUtil.covertDateTimestamp(END_TIME), interval);
-
-            int k = 0;
-            int m = 0;
-            List<String> list = new ArrayList<>();
-            List<String> list1 = new ArrayList<>();
-            for (int j = 0; j < zsData.size(); j++) {
-                if (zsData.get(j).getDoubleValue() >= 14
-                        && ztData.get(j).getDoubleValue() == 2
-                        && qfData.get(j).getDoubleValue() > 3
-                        && jdData.get(j).getDoubleValue() == 0) {
-                    k++;
-                    list.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
-                } else if(zsData.get(j).getDoubleValue() >= 14
-                        && ztData.get(j).getDoubleValue() == 2
-                        && qfData.get(j).getDoubleValue() <= 2
-                        && jdData.get(j).getDoubleValue() == 0){
-                    m++;
-                    list1.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
-                }
-                else {
-                    // 统计欠发
-                    if (k >= 5) {
-                        data.add(SnowFlakeUtil.generateId() + "^0^NSS_FDC^"
-                                + listNSS.get(i).getId() + "^" + list.get(0) + "^"
-                                + list.get(list.size() - 1) + "^"
-                                + String.format("%.1f",(double)(k * interval) / 3600)
-                                + "^0^牛首山风电场^^^^\n");
+        InitialRunner.wpMap.forEach((k, v) -> {
+            if (!k.equals("NSS_FDC"))
+                return;
+
+            List<Caseperformance> list = new ArrayList<>();
+            for (int i = 0; i < v.size(); i++){
+                Windturbine wt = v.get(i);
+                try{
+                    /**********************   关系库获取测点名   ******************************/
+                    List<Windturbinepoint> wp_zs = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_FDJZS);
+                    List<Windturbinepoint> wp_zt = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_FJMXZT);
+                    List<Windturbinepoint> wp_qf = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_RSSQFZT);
+                    List<Windturbinepoint> wp_jy = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.AI_JYJD);
+                    List<Windturbinepoint> wp_xd = windturbinepointService.getItemByWtIdAndUniformCode(wt.getId(), Constants.DI_XDZT);
+                    /**********************   关系库获取测点名   ******************************/
+
+                    Caseperformance item = performanceService.getOneMaxTimeByWtId(wt.getId());
+                    long st = DateUtil.covertDateTimestamp(START_TIME);
+                    long et = DateUtil.covertDateTimestamp("2021-03-31 00:00:00");
+//                    long et = item == null ? System.currentTimeMillis() : DateUtil.covertDateTimestamp(item.getEndtime());
+                    /**********************   Golden读取原始数据   ******************************/
+                    List<TsDoubleData> zsData = remoteService.adapter().getHistorySnapAI(wp_zs.get(0).getPoint(), st, et, interval);
+                    List<TsDoubleData> ztData = remoteService.adapter().getHistorySnapAI(wp_zt.get(0).getPoint(), st, et, interval);
+                    List<TsDoubleData> qfData = remoteService.adapter().getHistorySnapAI(wp_qf.get(0).getPoint(), st, et, interval);
+                    List<TsDoubleData> jdData = remoteService.adapter().getHistorySnapAI(wp_jy.get(0).getPoint(), st, et, interval);
+                    List<TsDoubleData> xdData = remoteService.adapter().getHistorySnapAI(wp_xd.get(0).getPoint(), st, et, interval);
+                    /**********************   Golden读取原始数据   ******************************/
+
+                    List<String> lt = new ArrayList<>();
+                    List<String> ls = new ArrayList<>();
+                    for (int j = 0; j < zsData.size(); j++) {
+                        /**性能差**/
+                        if (GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400
+                                && ztData.get(j).getDoubleValue() == 2
+                                && qfData.get(j).getDoubleValue() > 3
+                                && jdData.get(j).getDoubleValue() == 0
+                                && xdData.get(j).getDoubleValue() == 0) {
+                            lt.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
+                        }
+                        /**性能好**/
+                        if(GyeeUtil.convertNum(wt, zsData.get(j).getDoubleValue()) >= 1400
+                                && ztData.get(j).getDoubleValue() == 2
+                                && qfData.get(j).getDoubleValue() <= 2
+                                && jdData.get(j).getDoubleValue() == 0
+                                && xdData.get(j).getDoubleValue() == 0){
+                            ls.add(DateUtil.format(zsData.get(j).getTs(), DateUtil.DATE_TIME_PATTERN));
+                        }
+                        /**数据整理保存至kudu**/
+                        if (lt.size() > 1 || ls.size() > 1){
+                            Caseperformance obj = new Caseperformance();
+                            // 统计欠发
+                            if (lt.size() > 1) {
+                                obj.setTag(0);
+                                obj.setStarttime(lt.get(0));
+                                obj.setEndtime(lt.get(lt.size() - 1));
+                                obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(lt.size() * interval) / 3600)));
+                                lt.clear();
+                            }
+                            // 统计不欠发
+                            if (ls.size() > 1) {
+                                obj.setTag(1);
+                                obj.setStarttime(ls.get(0));
+                                obj.setEndtime(ls.get(lt.size() - 1));
+                                obj.setIntervals(Double.valueOf(String.format("%.1f",(double)(ls.size() * interval) / 3600)));
+                                ls.clear();
+                            }
+                            obj.setId(SnowFlakeUtil.generateId());
+                            obj.setStationen(k);
+                            obj.setWindturbineid(wt.getId());
+                            obj.setAlgtype("QFMX");
+                            obj.setModel(wt.getModel());
+                            obj.setStationcn(InitialRunner.stationMap.get(k));
+                            obj.setManufacturer(InitialRunner.wpList.get(InitialRunner.wpList.indexOf(k)).getManufacturer());
+
+                            list.add(obj);
+                        }
                     }
-                    k = 0;
-                    list.clear();
+                    performanceService.insertBatch(list);
+                } catch (Exception e){
+                    log.error(e.getMessage());
+                }
+            }
+        });
+    }
 
-                    // 统计不欠发 大于5小时
-                    if (m >= 60) {
-                        data.add(SnowFlakeUtil.generateId() + "^1^NSS_FDC^"
-                                + listNSS.get(i).getId() + "^" + list1.get(0) + "^"
-                                + list1.get(list1.size() - 1) + "^"
-                                + String.format("%.1f",(double)(m * interval) / 3600)
-                                + "^0^牛首山风电场^^^^\n");
-                    }
-                    m = 0;
-                    list1.clear();
+    public static void main(String[] args){
+        List<String> list = new ArrayList<>();
+        list.add("qq");
+        list.add("ww");
+        list.add("ee");
+        for (String ls : list){
+            try{
+                if (ls.equals("ww")) {
+                    int i = 9 / 0;
                 }
+
+                System.out.println(ls);
+            }catch (Exception e){
+                e.getStackTrace();
             }
         }
-
-        FileUtil.writeFile("nss_caseperformence_1_45", data);
     }
-
 }

+ 49 - 39
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/AnalyseScatterService.java

@@ -7,14 +7,15 @@ import com.gyee.impala.common.constant.Constants;
 import com.gyee.impala.common.exception.CustomException;
 import com.gyee.impala.common.feign.RemoteServiceBuilder;
 import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.spring.InitialRunner;
 import com.gyee.impala.common.util.DateUtil;
 import com.gyee.impala.common.util.FileUtil;
+import com.gyee.impala.common.util.GyeeUtil;
 import com.gyee.impala.common.util.SnowFlakeUtil;
 import com.gyee.impala.model.custom.PowerCurveCondition;
 import com.gyee.impala.model.custom.TsDoubleData;
 import com.gyee.impala.model.master.Powercurvebasic;
 import com.gyee.impala.model.master.Powercurvefitting;
-import com.gyee.impala.model.slave.Windturbinecurvefittingmonth;
 import com.gyee.impala.model.slave.Windturbinetestingpointai2;
 import com.gyee.impala.service.master.PowercurvebasicService;
 import com.gyee.impala.service.master.PowercurvefittingService;
@@ -62,6 +63,13 @@ public class AnalyseScatterService {
     public void dataPreprocess(PowerCurveCondition condition){
         //对多台风机操作
         condition.getWindturbineid().stream().forEach(wtId -> {
+            //数据预处理之前加入缓存进程,防止多次操作
+            String key =  condition.getTime() + wtId;
+            if (InitialRunner.scatterMap.containsKey(key))
+                return;
+            else
+                InitialRunner.scatterMap.put(key, 0);
+
             List<Powercurvebasic> list = powercurvebasicService.getList(condition.getStationen(), wtId, condition.getTime());
             if (list != null && list.size() > 0)
                 return;
@@ -78,45 +86,42 @@ public class AnalyseScatterService {
             try {
                 /**********************   数据预处理需要的测点    ******************************/
                 List<Windturbinetestingpointai2> power = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.POINT_POWER);
+                        .getListByStationAndCode(station, wtId, Constants.AI_POWER);
                 List<Windturbinetestingpointai2> speed = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.POINT_SPEED);
+                        .getListByStationAndCode(station, wtId, Constants.AI_SPEED);
 
                 // 数据库(oracle)配置问题, 可能有空值
                 List<Windturbinetestingpointai2> rotate = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.FDJZS);
-                if (rotate == null)
-                    rotate = pointAi2Service
-                            .getListByStationAndCode(station, wtId, Constants.FDJZSB);
+                        .getListByStationAndCode(station, wtId, Constants.AI_FDJZS);
                 List<Windturbinetestingpointai2> status = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.FJZT);
+                        .getListByStationAndCode(station, wtId, Constants.DI_FJZT);
                 List<Windturbinetestingpointai2> fdl = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.POINT_QUANTITY);
+                        .getListByStationAndCode(station, wtId, Constants.AI_QUANTITY);
                 List<Windturbinetestingpointai2> ssqfzt = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.RSSQFZT);
+                        .getListByStationAndCode(station, wtId, Constants.DI_RSSQFZT);
                 List<Windturbinetestingpointai2> direct = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.POINT_WIND_DIRECT);
+                        .getListByStationAndCode(station, wtId, Constants.AI_WIND_DIRECT);
                 List<Windturbinetestingpointai2> angle = pointAi2Service
-                        .getListByStationAndCode(station, wtId, Constants.POINT_WIND_ANGLE);
+                        .getListByStationAndCode(station, wtId, Constants.AI_WIND_ANGLE);
                 /**********************   数据预处理需要的测点    ******************************/
 
 
-                /**********************   数据存储到hive   ******************************/
-                List<TsDoubleData> dataPower = remoteServiceBuilder.ShardingService()
+                /**********************   Golden读取原始数据     ******************************/
+                List<TsDoubleData> dataPower = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(power.size() > 0 ? power.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataSpeed = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataSpeed = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(speed.size() > 0 ? speed.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataRotate = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataRotate = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(rotate.size() > 0 ? rotate.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataStatus = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataStatus = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(status.size() > 0 ? status.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataFdl = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataFdl = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(fdl.size() > 0 ? fdl.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataQfzt = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataQfzt = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(ssqfzt.size() > 0 ? ssqfzt.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataDirect = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataDirect = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(direct.size() > 0 ? direct.get(0).getId() : "", st, et, interval);
-                List<TsDoubleData> dataAngle = remoteServiceBuilder.ShardingService()
+                List<TsDoubleData> dataAngle = remoteServiceBuilder.adapter()
                         .getHistorySnapAI(angle.size() > 0 ? angle.get(0).getId() : "", st, et, interval);
 
                 StringBuffer sb = new StringBuffer();
@@ -144,6 +149,8 @@ public class AnalyseScatterService {
                 /**********************   数据存储到kudu   ******************************/
                 condition.setWtId(wtId);
                 powercurvebasicService.insertItem((Powercurvebasic) new Powercurvebasic().toData(condition));
+                /***数据处理完成,将总条数缓存***/
+                InitialRunner.scatterMap.replace(key, dataPower.size());
             } catch (Exception e) {
                 e.getStackTrace();
                 log.error(e.getMessage());
@@ -188,30 +195,33 @@ public class AnalyseScatterService {
                 scatter.add(ls);
             });
 
-            /**查询功率**/
-            List<Windturbinecurvefittingmonth> curve = fittingService.getListByWtIdAndYearAndMonth(wtId, String.valueOf(year), String.valueOf(month));
-            curve.stream().forEach(cv -> {
-                List<Object> ap = new ArrayList<>();
-                List<Object> op = new ArrayList<>();
-                int c = cv.getSpeed().intValue();
-
-                if (c == cv.getSpeed()) {
-                    ap.add(cv.getSpeed());
-                    ap.add(cv.getActualpower());// 实际拟合功率
-                    op.add(cv.getSpeed());// 风速
-                    op.add(cv.getOptimalpower());// 最优拟合功率
-                    actual.add(ap);
-                    optimal.add(op);
-                }
-            });
+            /**查询功率曲线**/
+//            List<Windturbinecurvefittingmonth> curve = fittingService.getListByWtIdAndYearAndMonth(wtId, String.valueOf(year), String.valueOf(month));
+//            curve.stream().forEach(cv -> {
+//                List<Object> ap = new ArrayList<>();
+//                List<Object> op = new ArrayList<>();
+//                int c = cv.getSpeed().intValue();
+//
+//                if (c == cv.getSpeed()) {
+//                    ap.add(cv.getSpeed());
+//                    ap.add(cv.getActualpower());// 实际拟合功率
+//                    op.add(cv.getSpeed());// 风速
+//                    op.add(cv.getOptimalpower());// 最优拟合功率
+//                    actual.add(ap);
+//                    optimal.add(op);
+//                }
+//            });
+
+
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
 
+        int power = InitialRunner.modelMap.get(InitialRunner.wtMap.get(wtId).getModel()).getPowerproduction().intValue();
         result.put("scatter", scatter);
-        result.put("lineactual", actual);
-        result.put("lineoptimal", optimal);
+        result.put("lineactual", GyeeUtil.powerCurve(power).get("actual"));
+        result.put("lineoptimal", GyeeUtil.powerCurve(power).get("optimal"));
 
         return result;
     }

+ 6 - 7
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/GoldenService.java

@@ -16,7 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.text.DecimalFormat;
 import java.util.*;
 
 @Slf4j
@@ -50,9 +49,9 @@ public class GoldenService {
                 List<TsDoubleData> data = new ArrayList<>();
                 Map m = new HashMap();
                 if (interval <= 0) {
-                    data = remoteService.ShardingService().getHistoryRawAI(point, startTs, endTs);
+                    data = remoteService.adapter().getHistoryRawAI(point, startTs, endTs);
                 } else {
-                    data = remoteService.ShardingService().getHistorySnapAI(point, startTs, endTs, interval);
+                    data = remoteService.adapter().getHistorySnapAI(point, startTs, endTs, interval);
                 }
                 /**保留2位小数**/
                 data.stream().forEach(obj -> obj.setDoubleValue(new BigDecimal(obj.getDoubleValue()).setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue()));
@@ -84,16 +83,16 @@ public class GoldenService {
 
         try {
             for (String id : ids) {
-                String[] codes = new String[]{Constants.POINT_SPEED, Constants.POINT_POWER};
+                String[] codes = new String[]{Constants.AI_SPEED, Constants.AI_POWER};
                 Caseperformance cp = caseperformanceService.getPerformanceById(id);
 
                 //查询测点名
                 List<Windturbinepoint> winds = windturbinepointService.getListByStationAndWtIdAndUniformCode(cp.getStationen(), cp.getWindturbineid(), codes);
 
                 //golden适配器取数据
-                List<TsDoubleData> speedList = remoteService.ShardingService().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+                List<TsDoubleData> speedList = remoteService.adapter().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                         DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
-                List<TsDoubleData> powerList = remoteService.ShardingService().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+                List<TsDoubleData> powerList = remoteService.adapter().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                         DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
 
                 if (speedList == null || powerList == null)
@@ -154,7 +153,7 @@ public class GoldenService {
         List<List<Long>> list = new ArrayList<>();
 
         try{
-            List<TsDoubleData> data = remoteService.ShardingService().getHistoryRawAI(point, startTime, endTime);
+            List<TsDoubleData> data = remoteService.adapter().getHistoryRawAI(point, startTime, endTime);
             int index = 0;
             boolean flag = false;
             if (data != null && data.size() > 0){

+ 50 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/ShiroService.java

@@ -0,0 +1,50 @@
+package com.gyee.impala.service.custom;
+
+import com.gyee.impala.common.cache.TokenCache;
+import com.gyee.impala.common.util.TokenGenerator;
+import com.gyee.impala.model.custom.TokenUser;
+import com.gyee.impala.model.master.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+public class ShiroService {
+
+    @Autowired
+    TokenCache tokenCache;
+
+    //10天后过期
+    public final long EXPIRE = 10 * 24 * 60 * 60;
+
+    public String createToken(User labor){
+        //生成一个token id
+        String token = TokenGenerator.generateValue();
+        //当前时间
+        Date now = new Date();
+        //过期时间
+        long expireTime = now.getTime() + EXPIRE * 1000;
+
+        TokenUser user = new TokenUser();
+        user.setCode(labor.getCode());
+        user.setName(labor.getName());
+        user.setExpireTime(expireTime);
+
+        // 保存并更新token
+        tokenCache.saveToken(token, user);
+
+        return token;
+    }
+
+
+    public void logout(String token) {
+        tokenCache.removeToken(token);
+    }
+
+
+    public TokenUser findToken(String token) {
+        return tokenCache.findUserByToken(token);
+    }
+
+}

+ 0 - 61
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/TablePropService.java

@@ -1,61 +0,0 @@
-package com.gyee.impala.service.custom;
-
-import com.gyee.impala.common.exception.CustomException;
-import com.gyee.impala.common.result.ResultCode;
-import com.gyee.impala.model.custom.TableProp;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.sql.DataSource;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@Service
-public class TablePropService {
-
-//    @Autowired
-//    private DataSource dataSource;
-//
-//    public List<Object> listData(String table){
-//        List<Object> list = new ArrayList<>();
-//        try {
-//            String sql = "select * from " + table;
-//            Statement st = dataSource.getConnection().createStatement();
-//            ResultSet rs = st.executeQuery(sql);
-//
-//            Map<String, Object> map = new HashMap<>();
-//
-//            // 设置表头信息
-//            int columns = rs.getMetaData().getColumnCount();
-//            List<TableProp> header = new ArrayList<>();
-//            for (int i = 1; i <= columns; i++) {
-//                String name = rs.getMetaData().getColumnName(i);
-//                TableProp prop = new TableProp();
-//                prop.setLabel(name);
-//                prop.setProp(name);
-//                header.add(prop);
-//            }
-//            map.put("header", header);
-//
-//            while (rs.next()) {
-//                Map<String, String> data = new HashMap<>();
-//                for (int i = 1; i <= columns; i++) {
-//                    data.put(header.get(i - 1).getProp(), rs.getString(i));
-//                }
-//            }
-//
-////            map.put("data", list);
-//        } catch (SQLException e) {
-//            throw new CustomException(ResultCode.ERROR_DATA);
-//        }
-//
-//        return list;
-//    }
-}

+ 90 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/WarningService.java

@@ -0,0 +1,90 @@
+package com.gyee.impala.service.custom;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.impala.common.feign.RemoteServiceBuilder;
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.AlertHistory;
+import com.gyee.impala.model.master.Casewarning;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class WarningService {
+
+    @Autowired
+    private RemoteServiceBuilder remoteService;
+
+
+    /**
+     * 通过sharding获取时间内的报警数据
+     * @param category 报警分类  DI scada:windturbine  自定义:custom
+     * @param station
+     * @param wtId
+     * @param time
+     * @return
+     */
+    public List<Object> resolveWarn(String category, String station, String wtId, List<String> time){
+        if (StringUtils.isEmpty(station) || StringUtils.isEmpty(wtId) || time.size() == 0)
+            return null;
+
+        List<Object> result = new ArrayList<>();
+        List<Casewarning> list = new ArrayList<>();
+        Calendar cal = Calendar.getInstance();
+
+        /**将时间按照天分开**/
+        Map<String, List<String>> map = time.stream().collect(Collectors.groupingBy(item -> DateUtil.format(item, DateUtil.YYYY_MM_DD)));
+        try{
+            map.forEach((k, v) -> {
+                if (v.size() < 10)
+                    return;
+                String max = v.stream().max(String::compareTo).get();
+                /**提前30分钟**/
+                String min = DateUtil.format(DateUtil.covertDateTimestamp(v.stream().min(String::compareTo).get()) - 30000, DateUtil.YYYY_MM_DD_HH_MM_SS);
+
+                cal.setTime(DateUtil.parseStrtoDate(k));
+                cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
+                String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
+                cal.add(cal.DATE,1);
+                String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
+                JSONObject data = remoteService.sharding().getAlertHistory(category, st, et, station, wtId);
+                JSONObject json = data.getJSONObject("data");
+                if (json == null)
+                    return;
+                String records = json.getJSONArray("records").toJSONString();
+                List<AlertHistory> ls = JSONArray.parseArray(records, AlertHistory.class);
+                ls.stream().forEach(obj -> {
+                    if (StringUtils.isNotEmpty(obj.getCategory1()) && StringUtils.isNotEmpty(obj.getCategory2())
+                        && obj.getAlertTime().compareTo(min) > 0 && obj.getAlertTime().compareTo(max) < 0){
+                        Casewarning warn = (Casewarning) new Casewarning().toData(obj);
+                        list.add(warn);
+                    }
+                });
+            });
+        }catch (Exception e){
+            e.getStackTrace();
+            log.error(e.getMessage());
+        }
+
+        /**按照报警类型分类**/
+        Map<String, List<Casewarning>> collect = list.stream().sorted(Comparator.comparing(Casewarning::getWarntime))
+                .filter(obj -> StringUtils.isNotEmpty(obj.getWarncode()))
+                .collect(Collectors.groupingBy(Casewarning::getWarncode));
+        collect.forEach((k, v) -> {
+            Map<String, Object> mp = new HashMap<>();
+            mp.put("label", InitialRunner.scadaWarnMap.get(k.toUpperCase()));
+            mp.put("value", k);
+            mp.put("children", v);
+            result.add(mp);
+        });
+
+        return result;
+    }
+}

+ 55 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/AutoCmdService.java

@@ -0,0 +1,55 @@
+package com.gyee.impala.service.custom.diagnose;
+
+import com.gyee.impala.common.config.GyeeConfig;
+import com.gyee.impala.model.custom.diagnose.FaultInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Date;
+
+@Component
+public class AutoCmdService {
+    /**
+     * 保存脚本的位置
+     */
+    @Autowired
+    private GyeeConfig gyeeConfig;
+    /**
+     * 是否执行结束
+     */
+    private boolean isComplete = true;
+
+    /**
+     * 执行命令
+     */
+    public void exec(FaultInfo fi) {
+        System.out.println(new Date() + "开始执行脚本...");
+        Process p;
+        String cmdPath = gyeeConfig.getDiagnosePath();
+        try {
+            String[] cmd = {"/bin/sh", "-c", "python " + cmdPath + "ANNs_predict" + fi.getStationId() + "_" + fi.getModelId() + ".py " + fi.getId()};
+            //String order = "cmd /c python " + cmdPath + "ANNs_predict" + fi.getStationId() + "_" + fi.getModelId() + ".py " + fi.getId();
+            System.out.println(cmd[0] + " " + cmd[1] + " " + cmd[2]);
+            p = Runtime.getRuntime().exec(cmd);
+            BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
+            BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
+            String si = null, se = null;
+            while ((si = bri.readLine()) != null || (se = bre.readLine()) != null) {
+                if (si != null) {
+                    System.out.println(si);
+                }
+                if (se != null) {
+                    System.out.println(se);
+                }
+            }
+            p.waitFor();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            isComplete = true;
+        }
+        System.out.println(new Date() + "脚本执行结束...");
+    }
+}

+ 119 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/CmdService.java

@@ -0,0 +1,119 @@
+package com.gyee.impala.service.custom.diagnose;
+
+
+import com.gyee.impala.common.config.GyeeConfig;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.diagnose.ExecuteInfo;
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.stream.Collectors;
+
+/**
+ * 指令执行程序
+ *
+ * @author xysn
+ */
+@Component
+public class CmdService {
+    /**
+     * 保存脚本的位置
+     */
+    @Autowired
+    private GyeeConfig gyeeConfig;
+
+    /**
+     * 执行信息
+     */
+    private ExecuteInfo executeInfo;
+
+    /**
+     * 数据服务
+     */
+    @Resource
+    private DataService dataService;
+
+    /**
+     * 是否执行结束
+     */
+    private boolean isComplete = true;
+    /**
+     * 进度
+     */
+    private double process = -1;
+
+    public double getProcess() {
+        return process;
+    }
+
+    public void setProcess(double process) {
+        this.process = process;
+    }
+
+    public boolean isComplete() {
+        return isComplete;
+    }
+
+    /**
+     * 执行命令
+     */
+    private void exec() {
+        System.out.println(new Date() + "开始执行脚本...");
+        Process p;
+        String cmdPath = gyeeConfig.getDiagnosePath();
+        try {
+            String[] cmd = {"/bin/sh", "-c", "python " + cmdPath + executeInfo.getAlgorithm().getName() + ".py " + executeInfo.getAlgorithm().getParameter()};
+            //String s = JSON.toJSONString(Arrays.stream(executeInfo.getAlgorithm().getParameters()).map(Parameter::getValue).toArray());
+            //String order = "cmd /c python " + cmdPath + executeInfo.getAlgorithm().getName() + ".py " + executeInfo.getAlgorithm().getParameter();
+
+            System.out.println(cmd[0] + " " + cmd[1] + " " + cmd[2]);
+            p = Runtime.getRuntime().exec(cmd);
+            p.waitFor();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            isComplete = true;
+        }
+        System.out.println(new Date() + "脚本执行结束...");
+    }
+
+    public void exec(ExecuteInfo executeInfo) {
+        if (!isComplete) {
+            return;
+        }
+        isComplete = false;
+        this.executeInfo = executeInfo;
+        boolean b = dataService.downloadFile(executeInfo.getDataInfos());
+        if (!b) {
+            isComplete = true;
+            return;
+        }
+        this.exec();
+    }
+
+
+    /**
+     * 获取历史记录
+     *
+     * @param name    历史记录名称
+     * @param context 历史记录内容
+     * @return
+     */
+    public Diagnosetrainhistory getHistory(String name, String context) {
+        if (this.executeInfo == null || this.executeInfo.getDataInfos() == null) {
+            return null;
+        }
+        Diagnosetrainhistory he = new Diagnosetrainhistory();
+        he.setName(name);
+        he.setFaultids(Arrays.stream(this.executeInfo.getDataInfos()).map(i -> i.getId() + "").collect(Collectors.joining(",")));
+        he.setContext(context);
+        he.setTime(DateUtil.getTime());
+        he.setType(AlgorithmType.unsupervised);
+        return he;
+    }
+}

+ 336 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/DataService.java

@@ -0,0 +1,336 @@
+package com.gyee.impala.service.custom.diagnose;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.parser.Feature;
+import com.gyee.impala.common.cache.InfoCache;
+import com.gyee.impala.common.config.GyeeConfig;
+import com.gyee.impala.common.feign.RemoteServiceBuilder;
+import com.gyee.impala.model.custom.diagnose.*;
+import org.apache.jasper.tagplugins.jstl.If;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 数据处理服务
+ *
+ * @author xysn
+ */
+@Component
+public class DataService {
+
+    @Autowired
+    private GyeeConfig gyeeConfig;
+
+    /**
+     * uniformCode配置文件
+     */
+    @Value("classpath:uniform_codes.json")
+    private org.springframework.core.io.Resource uniformCodesResource;
+
+
+    /**
+     * 数据适配器
+     */
+    @Resource
+    private RemoteServiceBuilder dataAdapterBuilder;
+
+    @Resource
+    private InfoCache infoCache;
+
+    /**
+     * UniformCode信息
+     */
+    private Map<String, UniformCodeInfo> uniformCodeInfoMap;
+
+    public Map<String, UniformCodeInfo> getUniformCodeInfoMap() {
+        return uniformCodeInfoMap;
+    }
+
+    public void init() throws IOException {
+        // 初始化UniformCode
+        initUniformCode();
+    }
+
+    /**
+     * 初始化UniformCode
+     */
+    private void initUniformCode() throws IOException {
+        UniformCodeInfo[] ucs = JSONArray.parseObject(uniformCodesResource.getInputStream(), UniformCodeInfo[].class, Feature.AllowComment);
+        uniformCodeInfoMap = new HashMap<>();
+        for (UniformCodeInfo uci : ucs) {
+            if (!uniformCodeInfoMap.containsKey(uci.getName())) {
+                uniformCodeInfoMap.put(uci.getName(), uci);
+            }
+        }
+    }
+
+    /**
+     * 下载数据文件
+     *
+     * @param ais
+     */
+    public boolean downloadFile(DataInfo[] ais) {
+        System.out.println("开始导出数据...");
+        // 初始化文件夹
+        initDirectory();
+        for (DataInfo di : ais) {
+            if (!uniformCodeInfoMap.containsKey(di.getStationId())) {
+                continue;
+            }
+            loadAndSaveFile(di);
+        }
+        System.out.println("数据导出结束...");
+        return true;
+    }
+
+    /**
+     * 获取数据
+     */
+    public String getFormData(ExecuteInfo executeInfo) {
+        System.out.println("有监督学习获取数据...");
+        StringBuilder sb = new StringBuilder();
+        boolean isFirst = true;
+        for (DataInfo di : executeInfo.getDataInfos()) {
+            if (!uniformCodeInfoMap.containsKey(di.getStationId())) {
+                continue;
+            }
+            Map<String, List<PointData>> data = getData(di);
+            String s = getDataString(data, di.getTag(), isFirst);
+            sb.append(s);
+            isFirst = false;
+        }
+        System.out.println("有监督学习获取数据结束...");
+        return sb.toString();
+    }
+
+    private String getDataString(Map<String, List<PointData>> data, String tag, boolean isFirst) {
+        List<List<PointData>> vals = new ArrayList<>(data.values());
+        if(vals.size()<=0){
+            return "";
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        StringBuilder stringBuilder = new StringBuilder();
+        if (isFirst) {
+            stringBuilder.append(getFileTitle(data.keySet()));
+        }
+
+        for (int i = 0; i < vals.get(0).size(); ++i) {
+            StringBuilder sb = new StringBuilder();
+            Date dt = new Date(vals.get(0).get(i).getTs());
+            sb.append(sdf.format(dt)).append(',');
+            for (List<PointData> vv : vals) {
+                if (i >= vv.size()) {
+                    sb.append(0).append(',');
+                    continue;
+                }
+                sb.append(vv.get(i).getValue()).append(',');
+            }
+            if (tag != null) {
+                sb.append(tag);
+            }
+            sb.append('\n');
+            stringBuilder.append(sb);
+        }
+        return stringBuilder.toString();
+    }
+
+    public Map<String, List<PointData>> getData(DataInfo di) {
+        UniformCodeInfo uc = uniformCodeInfoMap.get(di.getStationId());
+        List<CodeInfo> cis = uc.getCodeInfos(di.getModelId());
+        Map<String, List<PointData>> pairs = new HashMap<>();
+        for (CodeInfo ci : cis) {
+            if (pairs.containsKey(ci.getName())) {
+                continue;
+            }
+            try {
+                List<PointData> pds = dataAdapterBuilder.adapter().getHistoryByUniformCode(ci.getCode(), di.getStartTs(), di.getEndTs(), di.getThingId());
+                pairs.put(ci.getName(), pds);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return pairs;
+    }
+
+    /**
+     * 初始化文件夹
+     */
+    private void initDirectory() {
+        File f = new File(gyeeConfig.getDiagnoseFile());
+        f.mkdirs();
+
+        File[] fs = f.listFiles();
+        for (File ff : fs) {
+            ff.delete();
+        }
+    }
+
+    /**
+     * 获取数据并保存数据
+     *
+     * @param di
+     */
+    private void loadAndSaveFile(DataInfo di) {
+        Map<String, List<PointData>> data = getData(di);
+
+        String url = gyeeConfig.getDiagnoseFile() + "\\" + di.getThingId() + "-" + di.getFaultTime() + "-" + di.getId() + ".csv";
+        try {
+            BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(url, true), "gbk"));
+            //fw.write(getFileTitle(data.keySet()));
+            String s = getDataString(data, null, true);
+            fw.write(s);
+            fw.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private String getFileTitle(Set<String> keySet) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("时间,");
+        for (String st : keySet) {
+            sb.append(st).append(',');
+        }
+        sb.append('\n');
+        return sb.toString();
+    }
+
+    /**
+     * 保存历史记录
+     *
+     * @param fname
+     * @param dataInfos
+     */
+    public void saveHistory(String fname, DataInfo[] dataInfos) {
+        String path = gyeeConfig.getDiagnoseFile();
+        File f = new File(path);
+        f.mkdirs();
+        History h = new History();
+        h.setName(getFileName(fname));
+        h.setFaultIds(Arrays.stream(dataInfos).map(i -> i.getId() + "").collect(Collectors.toList()));
+        h.setCoordinate(infoCache.getCoordinates());
+        String context = JSON.toJSONString(h);
+        String url = path + "\\" + getFileName(fname) + ".his";
+        BufferedWriter fw = null;
+        try {
+            fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(url, true), "gbk"));
+            fw.write(context);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (fw != null) {
+                    fw.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 获取文件名
+     *
+     * @param fname
+     * @return
+     */
+    private String getFileName(String fname) {
+        if (fname == null) {
+            return "";
+        }
+        int i = fname.lastIndexOf('.');
+        if (i <= 0) {
+            return "";
+        }
+        return fname.substring(0, i);
+    }
+
+    /**
+     * 获取历史记录
+     *
+     * @return
+     */
+    public List<History> getHistories() {
+        List<History> hs = new ArrayList<>();
+        File f = new File(gyeeConfig.getDiagnoseFile());
+        File[] fs = f.listFiles();
+        for (File ff : fs) {
+            if (ff.getName().endsWith(".his")) {
+                hs.add(getHistory(ff.getName()));
+            }
+        }
+        return hs;
+    }
+
+    /**
+     * 获取历史数据
+     *
+     * @param name
+     * @return
+     */
+    private History getHistory(String name) {
+        History h = new History();
+        h.setName(getFileName(name));
+        FileInputStream inputStream = null;
+        BufferedReader bufferedReader = null;
+        try {
+            inputStream = new FileInputStream(gyeeConfig.getDiagnoseFile() + "\\" + h.getName() + ".his");
+            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            String s = "";
+            StringBuilder sb = new StringBuilder();
+            while ((s = bufferedReader.readLine()) != null) {
+                sb.append(s);
+            }
+            h = JSON.parseObject(sb.toString(), History.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                inputStream.close();
+                bufferedReader.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return h;
+    }
+
+    /**
+     * 删除历史记录
+     */
+    public void removeHistory(String files) {
+        if (files == null) {
+            return;
+        }
+        String[] fs = files.split(",");
+        for (String f : fs) {
+            if (f == null || f.equals("")) {
+                continue;
+            }
+            deleteFile(gyeeConfig.getDiagnoseFile() + "\\" + f + ".pkl");
+            deleteFile(gyeeConfig.getDiagnoseFile() + "\\" + f + ".his");
+        }
+    }
+
+    /**
+     * 删除文件
+     *
+     * @param s
+     */
+    private void deleteFile(String s) {
+        File fl = new File(s);
+        if (fl.exists()) {
+            fl.delete();
+        }
+    }
+}

+ 106 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/FaultRefreshService.java

@@ -0,0 +1,106 @@
+package com.gyee.impala.service.custom.diagnose;
+
+
+import com.gyee.impala.common.cache.InfoCache;
+import com.gyee.impala.common.feign.RemoteServiceBuilder;
+import com.gyee.impala.model.custom.diagnose.FaultInfo;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 报警刷新服务
+ *
+ * @author xysn
+ */
+@Component
+@Order(1)
+public class FaultRefreshService implements ApplicationRunner {
+
+    @Resource
+    private AutoCmdService autoCmdService;
+
+    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private Calendar calendar;
+    /**
+     * FaultInfo上次缓存
+     */
+    private List<FaultInfo> faultRecentold;
+    /**
+     * FaultInfo当前值
+     */
+    private List<FaultInfo> faultRecent;
+    /**
+     * FaultInfo当前值
+     */
+    private Map<Long, FaultInfo> faultRecentMap;
+    /**
+     * FaultInfo上次缓存
+     */
+    private Map<Long, FaultInfo> faultRecentMapold;
+
+    @Resource
+    private RemoteServiceBuilder shardingBuilder;
+    /**
+     * 线程池
+     */
+    @Resource
+    private ThreadPoolTaskExecutor taskExecutor;
+    @Resource
+    private InfoCache infoCache;
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        taskExecutor.submit(this::refresh);
+    }
+
+    private void refresh() {
+        while (true) {
+            try {
+                toRefresh();
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+            try {
+                Thread.sleep(5000);
+            } catch (Exception e) {
+            }
+        }
+    }
+
+    /**
+     * 刷新数据
+     */
+    private void toRefresh() {
+        calendar = Calendar.getInstance();
+        calendar.add(Calendar.HOUR_OF_DAY, -2);
+        String s = dateFormat.format(calendar.getTime());
+        if (faultRecentold == null || faultRecent == null) {
+            faultRecentold = shardingBuilder.sharding().getFaultRecent(s);
+            faultRecentold = faultRecentold.stream().filter(f -> f.getCategory1().equals("FJ")).collect(Collectors.toList());
+            faultRecentMapold = faultRecentold.stream().collect(Collectors.toMap(FaultInfo::getId, Function.identity(), (key1, key2) -> key2));
+            infoCache.setFaultRecent(faultRecentMapold);
+        } else {
+            faultRecentMapold = faultRecentMap;
+            infoCache.setFaultRecent(faultRecentMap);
+        }
+        faultRecent = shardingBuilder.sharding().getFaultRecent(s);
+        faultRecent = faultRecent.stream().filter(f -> f.getCategory1().equals("FJ")).collect(Collectors.toList());
+        faultRecentMap = faultRecent.stream().collect(Collectors.toMap(FaultInfo::getId, Function.identity(), (key1, key2) -> key2));
+        for (FaultInfo fi : faultRecentMap.values()) {
+            if (!faultRecentMapold.containsKey(fi.getId())) {
+                autoCmdService.exec(fi);
+            }
+        }
+    }
+}

+ 27 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/InitService.java

@@ -0,0 +1,27 @@
+package com.gyee.impala.service.custom.diagnose;
+
+import com.gyee.impala.common.cache.InfoCache;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 初始化服务
+ * @author xysn
+ */
+@Component
+@Order(0)
+public class InitService implements ApplicationRunner {
+    @Resource
+    private DataService dataService;
+    @Resource
+    private InfoCache infoCache;
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        infoCache.init();
+        dataService.init();
+    }
+}

+ 110 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/SupervisedCmdService.java

@@ -0,0 +1,110 @@
+package com.gyee.impala.service.custom.diagnose;
+
+import com.alibaba.fastjson.JSON;
+import com.gyee.impala.common.config.GyeeConfig;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.diagnose.ExecuteInfo;
+import com.gyee.impala.model.master.diagnose.AlgorithmType;
+import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.stream.Collectors;
+
+/**
+ * 指令执行程序
+ *
+ * @author xysn
+ */
+@Component
+public class SupervisedCmdService {
+    /**
+     * 保存脚本的位置
+     */
+    @Autowired
+    private GyeeConfig gyeeConfig;
+
+    /**
+     * 执行信息
+     */
+    private ExecuteInfo executeInfo;
+
+    /**
+     * 是否执行结束
+     */
+    private boolean isComplete = true;
+    /**
+     * 进度
+     */
+    private double process = -1;
+
+    public double getProcess() {
+        return process;
+    }
+
+    public void setProcess(double process) {
+        this.process = process;
+    }
+
+    public boolean isComplete() {
+        return isComplete;
+    }
+
+    public ExecuteInfo getExecuteInfo() {
+        return executeInfo;
+    }
+
+    /**
+     * 执行命令
+     */
+    private void exec() {
+        System.out.println(new Date() + "开始执行脚本...");
+        Process p;
+        String cmdPath = gyeeConfig.getDiagnosePath();
+        try {
+            String[] cmd = {"/bin/sh", "-c", "python " + cmdPath + executeInfo.getAlgorithm().getName() + ".py " + JSON.toJSONString(executeInfo.getDataInfos())};
+            //String s = JSON.toJSONString(Arrays.stream(executeInfo.getAlgorithm().getParameters()).map(Parameter::getValue).toArray());
+            //String order = "cmd /c python " + cmdPath + executeInfo.getAlgorithm().getName() + ".py " + executeInfo.getAlgorithm().getParameter();
+
+            System.out.println(cmd[0] + " " + cmd[1] + " " + cmd[2]);
+            p = Runtime.getRuntime().exec(cmd);
+            p.waitFor();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            isComplete = true;
+        }
+        System.out.println(new Date() + "脚本执行结束...");
+    }
+
+    public void exec(ExecuteInfo executeInfo) {
+        if (!isComplete) {
+            return;
+        }
+        isComplete = false;
+        this.executeInfo = executeInfo;
+        this.exec();
+    }
+
+    /**
+     * 获取历史记录
+     *
+     * @param name       历史记录名称
+     * @param supervised 历史记录内容
+     * @return
+     */
+    public Diagnosetrainhistory getHistory(String name, String supervised) {
+        if (this.executeInfo == null || this.executeInfo.getDataInfos() == null) {
+            return null;
+        }
+        Diagnosetrainhistory he = new Diagnosetrainhistory();
+        he.setName(name);
+        he.setFaultids(Arrays.stream(this.executeInfo.getDataInfos()).map(i -> i.getId() + "").collect(Collectors.joining(",")));
+        he.setContext(supervised);
+        he.setTime(DateUtil.getTime());
+        he.setType(AlgorithmType.supervised);
+        return he;
+    }
+}

+ 19 - 29
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasefaultServiceImpl.java

@@ -33,12 +33,6 @@ public class CasefaultServiceImpl extends ServiceImpl<CasefaultMapper, Casefault
     @Override
     public List<Casefault> getAll(String station, String[] model, String[] widget, String st, String et,String category, Long[] ids) {
         ExcludeQueryWrapper<Casefault> wrapper = new ExcludeQueryWrapper<>();
-
-//        List<Long> collect = null;
-//        // string数组转成List<Long>
-//        if (ids != null)
-//            collect = Arrays.stream(ids).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
-
         wrapper.eq("stationen", station)
                 .eq("category", category)
                 .in("model", model)
@@ -48,10 +42,7 @@ public class CasefaultServiceImpl extends ServiceImpl<CasefaultMapper, Casefault
                 .le("starttime", et);
 
         try {
-            List<Casefault> list = baseMapper.selectList(wrapper);
-
-            return list;
-
+            return baseMapper.selectList(wrapper);
         } catch (Exception e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -62,7 +53,7 @@ public class CasefaultServiceImpl extends ServiceImpl<CasefaultMapper, Casefault
     @Override
     public void insertBatch(List<Casefault> list) {
         if (list == null || list.size() == 0)
-            throw new CustomException(ResultCode.ERROR_DATA);
+            return;
 
         try{
             insert(list);
@@ -110,38 +101,37 @@ public class CasefaultServiceImpl extends ServiceImpl<CasefaultMapper, Casefault
         KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.casefault");
         KuduSession kuduSession = kuduConfig.kuduSession();
         int i = 0;
-        for (Casefault fault : list){
+        for (Casefault obj : list){
             Insert insert = kuduTable.newInsert();
             // 获取Row对象,设置插入的值
             PartialRow row = insert.getRow();
             row.addObject("id", SnowFlakeUtil.generateId());
-            row.addObject("tag", fault.getTag());
-            row.addObject("faultid", fault.getFaultid());
-            row.addObject("stationcn", fault.getStationcn());
-            row.addObject("windturbineid", fault.getWindturbineid());
-            row.addObject("faulttype", fault.getFaulttype());
-            row.addObject("faultcode", fault.getFaultcode());
-            row.addObject("symptom", fault.getSymptom());
-            row.addObject("symptomcode", fault.getSymptomcode());
-            row.addObject("starttime", fault.getStarttime());
-            row.addObject("endtime", fault.getEndtime());
-            row.addObject("manufacturer", fault.getManufacturer());
-            row.addObject("model", fault.getModel());
-            row.addObject("stationen", fault.getStationen());
-            row.addObject("remark", fault.getRemark());
-            row.addObject("category", fault.getCategory());
+            row.addObject("tag", obj.getTag());
+            row.addObject("faultid", obj.getFaultid());
+            row.addObject("stationcn", obj.getStationcn());
+            row.addObject("windturbineid", obj.getWindturbineid());
+            row.addObject("faulttype", obj.getFaulttype());
+            row.addObject("faultcode", obj.getFaultcode());
+            row.addObject("symptom", obj.getSymptom());
+            row.addObject("symptomcode", obj.getSymptomcode());
+            row.addObject("starttime", obj.getStarttime());
+            row.addObject("endtime", obj.getEndtime());
+            row.addObject("manufacturer", obj.getManufacturer());
+            row.addObject("model", obj.getModel());
+            row.addObject("stationen", obj.getStationen());
+            row.addObject("remark", obj.getRemark());
+            row.addObject("category", obj.getCategory());
             row.addObject("createtime", DateUtil.getCurrentDate());
 
             // 先不提交kudu
             kuduSession.apply(insert);
             i ++;
-            if (i % 2000 == 0)
+            if (i % kuduConfig.getCount() == 0)
                 kuduSession.flush(); //批量写入kudu
         }
 
         // 最后,补加一条批量写入
         kuduSession.flush();
-
         // 关闭和kudu的会话
         kuduSession.close();
     }

+ 112 - 38
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasefaultalgServiceImpl.java

@@ -3,19 +3,23 @@ package com.gyee.impala.service.impl.master;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.impala.common.base.ExcludeQueryWrapper;
+import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
 import com.gyee.impala.common.exception.CustomException;
 import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.common.util.SnowFlakeUtil;
 import com.gyee.impala.mapper.master.CasefaultalgMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.impala.model.master.Casefault;
 import com.gyee.impala.model.master.Casefaultalg;
+import com.gyee.impala.service.master.CasefaultService;
 import com.gyee.impala.service.master.CasefaultalgService;
+import org.apache.kudu.client.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -28,64 +32,60 @@ import java.util.stream.Collectors;
 @Service
 public class CasefaultalgServiceImpl extends ServiceImpl<CasefaultalgMapper, Casefaultalg> implements CasefaultalgService {
 
-    @Override
-    public List<Casefaultalg> getAllByIds(String[] ids) {
-        List<Casefaultalg> list = new ArrayList<>();
-        if (StringUtils.isEmpty(ids))
-            return list;
+    @Autowired
+    private KuduDataSourceConfig kuduConfig;
+    @Autowired
+    private CasefaultService casefaultService;
 
-        try {
-            // string数组转成List<Integer>
-            List<Integer> ls = Arrays.stream(ids).map(s -> Integer.parseInt(s.trim())).collect(Collectors.toList());
-            list = baseMapper.selectBatchIds(ls);
 
-        } catch (CustomException e) {
+    @Override
+    public void insertBatch(List<Casefaultalg> list) {
+        if (list == null || list.size() == 0)
+            return;
+        try{
+            insert(list);
+        } catch (Exception e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-
-        return list;
     }
 
-    @Override
-    public boolean insertOrUpdate(List<Casefaultalg> list) {
-        boolean flag = false;
 
+    @Override
+    public List<Casefaultalg> getAll(String station, String[] id, Long[] faultid, String[] model, String[] faultcode,
+                                     String st, String et, String algcode, Boolean confirm) {
+        ExcludeQueryWrapper<Casefaultalg> wrapper = new ExcludeQueryWrapper<>();
+        wrapper.eq("stationen", station)
+                .in("id", id)
+                .in("faultid", model)
+                .in("model", model)
+                .in("faultcode", faultcode)
+                .ge("starttime", st)
+                .le("endtime", et)
+                .eq("algcode", algcode)
+                .eq("confirm", confirm);
         try {
-            flag = saveOrUpdateBatch(list);
-        } catch (CustomException e) {
+            return baseMapper.selectList(wrapper);
+        } catch (Exception e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-
-        return flag;
     }
 
     @Override
-    public List<Casefaultalg> getAll(String station, String[] model, String[] widget, String st, String et) {
-
-        ExcludeQueryWrapper<Casefaultalg> wrapper = new ExcludeQueryWrapper<>();
-        wrapper.eq("stationid", station)
-                .in("modelid", model)
-                .in("labels", widget)
-                .ge("faultTime", st)
-                .le("faultTime", et);
-
-        List<Casefaultalg> list = new ArrayList<>();
+    public void editBatch(List<Casefaultalg> list) {
         try {
-            list = baseMapper.selectList(wrapper);
-        } catch (Exception e) {
+            updateBatchById(list, list.size());
+        } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-
-        return list;
     }
 
     @Override
-    public boolean removeFaultAlgById(String id) {
+    public boolean delete(String[] id) {
         QueryWrapper<Casefaultalg> query = new QueryWrapper<>();
-        query.eq("id", id);
+        query.in("id", id);
 
         try {
             baseMapper.delete(query);
@@ -96,5 +96,79 @@ public class CasefaultalgServiceImpl extends ServiceImpl<CasefaultalgMapper, Cas
         }
     }
 
+    @Override
+    public void confirm(List<Casefaultalg> list) {
+        if (list == null || list.size() == 0)
+            return;
+        faultDataAssemble(list);
+    }
+
+
+    /**
+     * 故障诊断的样本确认完后保存至结论样本库,同时更新故障诊断的样本数据
+     * @param list
+     */
+    private void faultDataAssemble(List<Casefaultalg> list) {
+        List<Casefault> ls = new ArrayList<>();
+        list.stream().forEach(obj -> {
+            obj.setConfirm(true);
+            Casefault fault = (Casefault) new Casefault().toData(obj);
+            ls.add(fault);
+        });
+        /**保存至结论样本库**/
+        casefaultService.insertBatch(ls);
+        /**更新诊断样本库**/
+        editBatch(list);
+    }
+
+
+    /**
+     * 由于mybatis-plus存储的中文乱码
+     * 采用原生写法
+     * @param list
+     * @return
+             */
+    private void insert(List<Casefaultalg> list) throws KuduException {
+        KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.casefaultalg");
+        KuduSession kuduSession = kuduConfig.kuduSession();
+        int i = 0;
+        for (Casefaultalg obj : list){
+            Insert insert = kuduTable.newInsert();
+            // 获取Row对象,设置插入的值
+            PartialRow row = insert.getRow();
+            row.addObject("id", SnowFlakeUtil.generateId());
+            row.addObject("tag", obj.getTag());
+            row.addObject("faultid", obj.getFaultid());
+            row.addObject("stationcn", obj.getStationcn());
+            row.addObject("windturbineid", obj.getWindturbineid());
+            row.addObject("faulttype", obj.getFaulttype());
+            row.addObject("faultcode", obj.getFaultcode());
+            row.addObject("algname", obj.getAlgname());
+            row.addObject("symptom", obj.getSymptom());
+            row.addObject("symptomcode", obj.getSymptomcode());
+            row.addObject("starttime", obj.getStarttime());
+            row.addObject("endtime", obj.getEndtime());
+            row.addObject("manufacturer", obj.getManufacturer());
+            row.addObject("model", obj.getModel());
+            row.addObject("stationen", obj.getStationen());
+            row.addObject("confirm", obj.getConfirm());
+            row.addObject("remark", obj.getRemark());
+            row.addObject("category", obj.getCategory());
+            row.addObject("createtime", DateUtil.getCurrentDate());
+
+            // 先不提交kudu
+            kuduSession.apply(insert);
+            i ++;
+            if (i % kuduConfig.getCount() == 0)
+                kuduSession.flush(); //批量写入kudu
+        }
+
+        // 最后,补加一条批量写入
+        kuduSession.flush();
+
+        // 关闭和kudu的会话
+        kuduSession.close();
+    }
+
 
 }

+ 89 - 71
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CaseperformanceServiceImpl.java

@@ -3,13 +3,14 @@ package com.gyee.impala.service.impl.master;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.impala.common.base.ExcludeQueryWrapper;
+import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
 import com.gyee.impala.common.constant.Constants;
 import com.gyee.impala.common.exception.CustomException;
 import com.gyee.impala.common.feign.RemoteServiceBuilder;
 import com.gyee.impala.common.result.ResultCode;
 import com.gyee.impala.common.util.DateUtil;
 import com.gyee.impala.common.util.SnowFlakeUtil;
-import com.gyee.impala.common.util.StationMapperUtil;
+import com.gyee.impala.common.util.GyeeUtil;
 import com.gyee.impala.mapper.master.CaseperformanceMapper;
 import com.gyee.impala.model.custom.TsDoubleData;
 import com.gyee.impala.model.master.Caseperformance;
@@ -17,6 +18,7 @@ import com.gyee.impala.model.master.Windturbinepoint;
 import com.gyee.impala.service.master.CaseperformanceService;
 import com.gyee.impala.service.master.WindturbinepointService;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.kudu.client.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -35,6 +37,8 @@ import java.util.stream.Collectors;
 public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMapper, Caseperformance> implements CaseperformanceService {
 
     @Autowired
+    private KuduDataSourceConfig kuduConfig;
+    @Autowired
     private RemoteServiceBuilder remoteService;
     @Autowired
     private WindturbinepointService windturbinepointService;
@@ -54,63 +58,55 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
                 .le("intervals", Double.valueOf(temp[1]))
                 .ge("starttime", st)
                 .le("endtime", et);
-
-        List<Caseperformance> list = null;
         try {
-            list = baseMapper.selectList(wrapper);
+            return baseMapper.selectList(wrapper);
         } catch (Exception e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-        return list;
     }
 
     @Override
-    public boolean addPerformance(Caseperformance performance) {
-        boolean flag = false;
-        try {
-            // 设置一个新ID
-            if (StringUtils.isEmpty(performance.getId()))
-                performance.setId(SnowFlakeUtil.generateId());
+    public boolean insertBatch(List<Caseperformance> list) {
+        if (list == null || list.size() == 0)
+            return false;
+        try{
+            insert(list);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+        return true;
+    }
 
-            int code = baseMapper.insert(performance);
-            if (code > 0) {
-                flag = true;
-            }
+
+    @Override
+    public boolean deleteItem(Integer id) {
+        try {
+            baseMapper.deleteById(id);
+            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
 
-        return flag;
     }
 
     @Override
-    public boolean removePerformance(Integer id) {
-
-        int code = 0;
+    public boolean editItem(Caseperformance performance) {
         try {
-            code = baseMapper.deleteById(id);
-            if (code > 0) {
-                return true;
-            }
-            return false;
+            baseMapper.updateById(performance);
+            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-
     }
 
     @Override
-    public boolean editPerformance(Caseperformance performance) {
+    public Caseperformance getPerformanceById(String id) {
         try {
-            int code = baseMapper.updateById(performance);
-            if (code > 0) {
-                return true;
-            }
-            return false;
-
+            return baseMapper.selectById(id);
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -118,9 +114,15 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
     }
 
     @Override
-    public Caseperformance getPerformanceById(String id) {
-        Caseperformance cp = baseMapper.selectById(id);
-        return cp;
+    public Caseperformance getOneMaxTimeByWtId(String wtId) {
+        try {
+            List<Caseperformance> list = baseMapper.getOneMaxTimeByWtId(wtId);
+            if (list != null && list.size() > 0)
+                return list.get(0);
+        } catch (CustomException e) {
+            log.error(e.getMessage());
+        }
+        return null;
     }
 
     @Override
@@ -128,16 +130,16 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
         Map<String, List> maps = new HashMap<>();
 
         try {
-            String[] codes = new String[]{Constants.POINT_SPEED, Constants.POINT_POWER};
+            String[] codes = new String[]{Constants.AI_SPEED, Constants.AI_POWER};
             Caseperformance cp = getPerformanceById(id);
 
             //查询测点名
             List<Windturbinepoint> winds = windturbinepointService.getListByStationAndWtIdAndUniformCode(cp.getStationen(), cp.getWindturbineid(), codes);
 
             //golden适配器取数据
-            List<TsDoubleData> speedList = remoteService.ShardingService().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+            List<TsDoubleData> speedList = remoteService.adapter().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                     DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
-            List<TsDoubleData> powerList = remoteService.ShardingService().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+            List<TsDoubleData> powerList = remoteService.adapter().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                     DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
 
             if (speedList == null || powerList == null)
@@ -262,8 +264,7 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
                     .sorted(Comparator.comparing(Caseperformance::getWindturbineid))
                     .collect(Collectors.groupingBy(Caseperformance::getWindturbineid));
 
-            String wtId = StationMapperUtil.stationCN(station);
-            int i = 0; //前端树状展示,需要id
+            String wtId = GyeeUtil.stationCN(station);
             for (Map.Entry<String, List<Caseperformance>> entry : singleMap.entrySet()){
                 Map<String, Object> map = new LinkedHashMap<>();
                 String key = entry.getKey();
@@ -272,7 +273,7 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
                 List<Caseperformance> value = entry.getValue();
                 List childList = new ArrayList();
                 for (Caseperformance performance : value){
-                    Map<String, Object> childMap = new LinkedHashMap<>();
+                    Map<String, Object> childMap = new TreeMap<>();
                     childMap.put("id", performance.getId());
                     childMap.put("wtId", key);
                     childMap.put("windturbineId", performance.getStarttime() + "性能下降");
@@ -280,12 +281,11 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
                     childMap.put("et", performance.getEndtime());
                     childList.add(childMap);
                 }
-                map.put("id", i);
+                map.put("id", SnowFlakeUtil.generateId());
                 map.put("windturbineId", windId);
                 map.put("children", childList);
 
                 list.add(map);
-                i++;
             }
 
             return list;
@@ -296,30 +296,6 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
         }
     }
 
-    @Override
-    public boolean insertOrUpdate(List<Caseperformance> list) {
-        boolean flag = false;
-
-        if (list == null || list.size() < 0)
-            return flag;
-
-        try{
-            list.stream().forEach(obj -> {
-                if (StringUtils.isEmpty(obj.getId())) {
-                    // 新增
-                    obj.setId(SnowFlakeUtil.generateId());
-                }
-            });
-
-            flag = saveOrUpdateBatch(list, list.size());
-
-        } catch (CustomException e) {
-            log.error(e.getMessage());
-            throw new CustomException(ResultCode.ERROR_DATA);
-        }
-
-        return flag;
-    }
 
     /**
      * 查询单台风机风速功率
@@ -335,17 +311,17 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
             if (StringUtils.isEmpty(id))
                 return maps;
 
-            String[] codes = new String[]{Constants.POINT_SPEED, Constants.POINT_POWER, Constants.POINT_POWER_LLGL};
+            String[] codes = new String[]{Constants.AI_SPEED, Constants.AI_POWER, Constants.AI_POWER_LLGL};
             //单台风机
             Caseperformance cp = getPerformanceById(id);
             //查询测点名
             List<Windturbinepoint> winds = windturbinepointService.getListByStationAndWtIdAndUniformCode(cp.getStationen(), cp.getWindturbineid(), codes);
             //golden适配器取数据
-            List<TsDoubleData> speedList = remoteService.ShardingService().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+            List<TsDoubleData> speedList = remoteService.adapter().getHistorySnapAI(winds.get(0).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                     DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
-            List<TsDoubleData> powerList = remoteService.ShardingService().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+            List<TsDoubleData> powerList = remoteService.adapter().getHistorySnapAI(winds.get(1).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                     DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
-            List<TsDoubleData> llglList = remoteService.ShardingService().getHistorySnapAI(winds.get(2).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
+            List<TsDoubleData> llglList = remoteService.adapter().getHistorySnapAI(winds.get(2).getPoint(), DateUtil.covertDateTimestamp(cp.getStarttime()),
                     DateUtil.covertDateTimestamp(cp.getEndtime()), interval);
 
             if (speedList == null || powerList == null || llglList == null)
@@ -378,4 +354,46 @@ public class CaseperformanceServiceImpl extends ServiceImpl<CaseperformanceMappe
     }
 
 
+    /**
+     * 由于mybatis-plus存储的中文乱码
+     * 采用原生写法
+     * @param list
+     * @return
+     */
+    private void insert(List<Caseperformance> list) throws KuduException {
+        KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.caseperformance");
+        KuduSession kuduSession = kuduConfig.kuduSession();
+        int i = 0;
+        for (Caseperformance obj : list){
+            Insert insert = kuduTable.newInsert();
+            // 获取Row对象,设置插入的值
+            PartialRow row = insert.getRow();
+            row.addObject("id", SnowFlakeUtil.generateId());
+            row.addObject("tag", obj.getTag());
+            row.addObject("stationen", obj.getStationen());
+            row.addObject("windturbineid", obj.getWindturbineid());
+            row.addObject("starttime", obj.getStarttime());
+            row.addObject("endtime", obj.getEndtime());
+            row.addObject("intervals", obj.getIntervals());
+            row.addObject("algtype", obj.getAlgtype());
+            row.addObject("stationcn", obj.getStationcn());
+            row.addObject("manufacturer", obj.getManufacturer());
+            row.addObject("model", obj.getModel());
+            row.addObject("remark", obj.getRemark());
+            row.addObject("category", obj.getCategory());
+            row.addObject("createtime", DateUtil.getCurrentDate());
+
+            // 先不提交kudu
+            kuduSession.apply(insert);
+            i ++;
+            if (i % kuduConfig.getCount() == 0)
+                kuduSession.flush(); //批量写入kudu
+        }
+
+        // 最后,补加一条批量写入
+        kuduSession.flush();
+
+        // 关闭和kudu的会话
+        kuduSession.close();
+    }
 }

+ 87 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/CasewarningServiceImpl.java

@@ -0,0 +1,87 @@
+package com.gyee.impala.service.impl.master;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
+import com.gyee.impala.common.exception.CustomException;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.common.util.SnowFlakeUtil;
+import com.gyee.impala.mapper.master.CasewarningMapper;
+import com.gyee.impala.model.master.Casewarning;
+import com.gyee.impala.service.master.CasewarningService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.kudu.client.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class CasewarningServiceImpl extends ServiceImpl<CasewarningMapper, Casewarning> implements CasewarningService {
+
+    @Autowired
+    private KuduDataSourceConfig kuduConfig;
+
+
+    @Override
+    public void insertBatch(List<Casewarning> list) {
+        if (list == null || list.size() == 0)
+            return;
+
+        try{
+            insert(list);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+
+
+    /**
+     * 由于mybatis-plus存储的中文乱码
+     * 采用原生写法
+     * @param list
+     * @return
+     */
+    private void insert(List<Casewarning> list) throws KuduException {
+        KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.casewarning");
+        KuduSession kuduSession = kuduConfig.kuduSession();
+        int i = 0;
+        for (Casewarning boj : list){
+            Insert insert = kuduTable.newInsert();
+            // 获取Row对象,设置插入的值
+            PartialRow row = insert.getRow();
+            row.addObject("id", SnowFlakeUtil.generateId());
+            row.addObject("tag", 0);
+            row.addObject("stationen", boj.getStationen());
+            row.addObject("stationcn", boj.getStationcn());
+            row.addObject("windturbineid", boj.getWindturbineid());
+            row.addObject("warntype", boj.getWarntype());
+            row.addObject("warncode", boj.getWarncode());
+            row.addObject("warndes", boj.getWarndes());
+            row.addObject("warntime", boj.getWarntime());
+            row.addObject("warnrank", boj.getWarnrank());
+            row.addObject("model", boj.getModel());
+            row.addObject("projectid", boj.getProjectid());
+            row.addObject("lineid", boj.getLineid());
+            row.addObject("windturbinename", boj.getWindturbinename());
+            row.addObject("remark", boj.getRemark());
+            row.addObject("category", boj.getCategory());
+            row.addObject("createtime", DateUtil.getCurrentDate());
+
+            // 先不提交kudu
+            kuduSession.apply(insert);
+            i ++;
+            if (i % kuduConfig.getCount() == 0)
+                kuduSession.flush(); //批量写入kudu
+        }
+
+        // 最后,补加一条批量写入
+        kuduSession.flush();
+
+        // 关闭和kudu的会话
+        kuduSession.close();
+    }
+
+}

+ 37 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/EquipmentmodelServiceImpl.java

@@ -0,0 +1,37 @@
+package com.gyee.impala.service.impl.master;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.impala.common.exception.CustomException;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.mapper.master.EquipmentmodelMapper;
+import com.gyee.impala.model.master.Equipmentmodel;
+import com.gyee.impala.service.master.EquipmentmodelService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author chenmh
+ * @since 2022-03-29
+ */
+@Slf4j
+@Service
+public class EquipmentmodelServiceImpl extends ServiceImpl<EquipmentmodelMapper, Equipmentmodel> implements EquipmentmodelService {
+
+
+    @Override
+    public List<Equipmentmodel> getAll() {
+        try{
+            return baseMapper.selectList(null);
+        } catch (Exception e){
+            e.getStackTrace();
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+}

+ 122 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowcategoryServiceImpl.java

@@ -0,0 +1,122 @@
+package com.gyee.impala.service.impl.master;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.impala.common.base.ExcludeQueryWrapper;
+import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
+import com.gyee.impala.common.exception.CustomException;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.common.util.SnowFlakeUtil;
+import com.gyee.impala.model.master.Casefault;
+import com.gyee.impala.model.master.Knowcategory;
+import com.gyee.impala.mapper.master.KnowcategoryMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.impala.service.master.KnowcategoryService;
+import org.apache.kudu.client.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author chenmh
+ * @since 2021-10-25
+ */
+@Service
+public class KnowcategoryServiceImpl extends ServiceImpl<KnowcategoryMapper, Knowcategory> implements KnowcategoryService {
+
+    @Autowired
+    private InitialRunner initialRunner;
+    @Autowired
+    private KuduDataSourceConfig kuduConfig;
+
+    @Override
+    public List<Knowcategory> getAll() {
+        ExcludeQueryWrapper<Knowcategory> wrapper = new ExcludeQueryWrapper<>();
+        try {
+            wrapper.orderByAsc("id");
+            return baseMapper.selectList(wrapper);
+        } catch (CustomException e){
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+
+    @Override
+    public void editItem(Knowcategory obj) {
+        try {
+            if (obj == null)
+                return;
+            baseMapper.updateById(obj);
+        } catch (CustomException e) {
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+
+    @Override
+    public void insertItem(Knowcategory obj) {
+        // 判断该类型是否已经存在
+        ExcludeQueryWrapper<Knowcategory> wrapper = new ExcludeQueryWrapper<>();
+        wrapper.eq("code", obj.getCode())
+                .eq("category", obj.getCategory());
+        List<Knowcategory> list = baseMapper.selectList(wrapper);
+        if (list != null && list.size() > 0)
+            throw new CustomException(ResultCode.ERROR_DATA_REPEAT);
+
+        try {
+            insert(obj);
+            initialRunner.cacheKnowCategory();
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+
+    @Override
+    public void deleteItem(String id) {
+        QueryWrapper<Knowcategory> query = new QueryWrapper<>();
+        query.eq("id", id);
+
+        try {
+            baseMapper.delete(query);
+            initialRunner.cacheKnowCategory();
+        } catch (CustomException e) {
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.ERROR_DATA);
+        }
+    }
+
+    /**
+     * 由于mybatis-plus存储的中文乱码
+     * 采用原生写法
+     * @param obj
+     * @return
+     */
+    private void insert(Knowcategory obj) throws KuduException {
+        KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.knowcategory");
+        KuduSession kuduSession = kuduConfig.kuduSession();
+        Insert insert = kuduTable.newInsert();
+        // 获取Row对象,设置插入的值
+        PartialRow row = insert.getRow();
+        row.addObject("id", SnowFlakeUtil.generateId());
+        row.addObject("name", obj.getName());
+        row.addObject("code", obj.getCode());
+        row.addObject("time", obj.getTime());
+        row.addObject("remark", obj.getRemark());
+        row.addObject("category", obj.getCategory());
+
+        kuduSession.apply(insert);
+        kuduSession.flush();
+
+        // 关闭和kudu的会话
+        kuduSession.close();
+    }
+}

+ 4 - 9
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaultfixServiceImpl.java

@@ -68,13 +68,11 @@ public class KnowfaultfixServiceImpl extends ServiceImpl<KnowfaultfixMapper, Kno
     }
 
     @Override
-    public boolean editItem(Knowfaultfix obj) {
+    public void editItem(Knowfaultfix obj) {
         try {
             if (obj == null)
-                return false;
-
+                return;
             baseMapper.updateById(obj);
-            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -82,14 +80,12 @@ public class KnowfaultfixServiceImpl extends ServiceImpl<KnowfaultfixMapper, Kno
     }
 
     @Override
-    public boolean insertItem(Knowfaultfix obj) {
+    public void insertItem(Knowfaultfix obj) {
         try {
             // 设置一个新ID
             if (obj != null && StringUtils.isEmpty(obj.getId()))
                 obj.setId(SnowFlakeUtil.generateId());
-
             baseMapper.insert(obj);
-            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -97,13 +93,12 @@ public class KnowfaultfixServiceImpl extends ServiceImpl<KnowfaultfixMapper, Kno
     }
 
     @Override
-    public boolean deleteItem(String id) {
+    public void deleteItem(String id) {
         QueryWrapper<Knowfaultfix> query = new QueryWrapper<>();
         query.eq("id", id);
 
         try {
             baseMapper.delete(query);
-            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);

+ 6 - 12
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaultsymptomServiceImpl.java

@@ -37,13 +37,11 @@ public class KnowfaultsymptomServiceImpl extends ServiceImpl<KnowfaultsymptomMap
     }
 
     @Override
-    public boolean editItem(Knowfaultsymptom obj) {
+    public void editItem(Knowfaultsymptom obj) {
         try {
             if (obj == null)
-                return false;
-
+                return;
             baseMapper.updateById(obj);
-            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -51,7 +49,7 @@ public class KnowfaultsymptomServiceImpl extends ServiceImpl<KnowfaultsymptomMap
     }
 
     @Override
-    public boolean insertItem(Knowfaultsymptom obj) {
+    public void insertItem(Knowfaultsymptom obj) {
         try {
             // 设置一个新ID
             if (obj != null && StringUtils.isEmpty(obj.getId()))
@@ -60,27 +58,23 @@ public class KnowfaultsymptomServiceImpl extends ServiceImpl<KnowfaultsymptomMap
             // 判断该类型是否已经存在
             QueryWrapper<Knowfaultsymptom> query = new QueryWrapper<>();
             query.eq("faultcode", obj.getFaultcode())
-                 .eq("symptomcode", obj.getSymptomcode());
+                    .eq("symptomcode", obj.getSymptomcode());
             List<Knowfaultsymptom> list = baseMapper.selectList(query);
             if (list != null && list.size() > 0)
                 throw new CustomException(ResultCode.ERROR_DATA_REPEAT);
-
             baseMapper.insert(obj);
-            return true;
-        } catch (CustomException e) {
+        } catch (Exception e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
     }
 
     @Override
-    public boolean deleteItem(String id) {
+    public void deleteItem(String id) {
         QueryWrapper<Knowfaultsymptom> query = new QueryWrapper<>();
         query.eq("id", id);
-
         try {
             baseMapper.delete(query);
-            return true;
         } catch (CustomException e) {
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);

+ 0 - 94
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/KnowfaulttypeServiceImpl.java

@@ -1,94 +0,0 @@
-package com.gyee.impala.service.impl.master;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.gyee.impala.common.base.ExcludeQueryWrapper;
-import com.gyee.impala.common.exception.CustomException;
-import com.gyee.impala.common.result.ResultCode;
-import com.gyee.impala.common.util.SnowFlakeUtil;
-import com.gyee.impala.model.master.Knowfaulttype;
-import com.gyee.impala.mapper.master.KnowfaulttypeMapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.gyee.impala.service.master.KnowfaulttypeService;
-import org.springframework.stereotype.Service;
-
-
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author chenmh
- * @since 2021-10-25
- */
-@Service
-public class KnowfaulttypeServiceImpl extends ServiceImpl<KnowfaulttypeMapper, Knowfaulttype> implements KnowfaulttypeService {
-
-    @Override
-    public List<Knowfaulttype> getAll() {
-        ExcludeQueryWrapper<Knowfaulttype> wrapper = new ExcludeQueryWrapper<>();
-        try {
-            wrapper.orderByAsc("id");
-
-            List<Knowfaulttype> list = baseMapper.selectList(wrapper);
-            list.sort(Comparator.comparing(Knowfaulttype::getId));
-
-            return list;
-        } catch (CustomException e){
-            log.error(e.getMessage());
-            throw new CustomException(ResultCode.ERROR_DATA);
-        }
-    }
-
-    @Override
-    public boolean editItem(Knowfaulttype obj) {
-        try {
-            if (obj == null)
-                return false;
-
-            baseMapper.updateById(obj);
-            return true;
-        } catch (CustomException e) {
-            log.error(e.getMessage());
-            throw new CustomException(ResultCode.ERROR_DATA);
-        }
-    }
-
-    @Override
-    public boolean insertItem(Knowfaulttype obj) {
-        try {
-            // 设置一个新ID
-            if (obj != null && obj.getId() <= 0)
-                obj.setId(Long.valueOf(SnowFlakeUtil.generateId()));
-
-            // 判断该类型是否已经存在
-            QueryWrapper<Knowfaulttype> query = new QueryWrapper<>();
-            query.eq("faultcode", obj.getFaultcode());
-            List<Knowfaulttype> list = baseMapper.selectList(query);
-            if (list != null && list.size() > 0)
-                throw new CustomException(ResultCode.ERROR_DATA_REPEAT);
-
-            baseMapper.insert(obj);
-            return true;
-        } catch (CustomException e) {
-            log.error(e.getMessage());
-            throw new CustomException(ResultCode.ERROR_DATA);
-        }
-    }
-
-    @Override
-    public boolean deleteItem(String id) {
-        QueryWrapper<Knowfaulttype> query = new QueryWrapper<>();
-        query.eq("id", id);
-
-        try {
-            baseMapper.delete(query);
-            return true;
-        } catch (CustomException e) {
-            log.error(e.getMessage());
-            throw new CustomException(ResultCode.ERROR_DATA);
-        }
-    }
-}

+ 7 - 4
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/PowercurvebasicServiceImpl.java

@@ -139,17 +139,20 @@ public class PowercurvebasicServiceImpl extends ServiceImpl<PowercurvebasicMappe
                     Map<String, Object> map2 = new HashMap<>();
                     map.get(k).get(k1).forEach((k2, v2) -> {
                         Map<String, Object> map3 = new HashMap<>();
-                        map3.put("windturbineid", k2);
-                        map3.put("children", v2);
+                        map3.put("id", SnowFlakeUtil.generateId());
+                        map3.put("label", k2);
+                        map3.put("children", v2.stream().sorted(Comparator.comparing(Powercurvebasic::getWindturbineid)));
                         l2.add(map3);
                     });
 
-                    map2.put("windturbineid", k1);
+                    map2.put("id", SnowFlakeUtil.generateId());
+                    map2.put("label", k1);
                     map2.put("children", l2);
                     l1.add(map2);
                 });
 
-                map1.put("windturbineid", key);
+                map1.put("id", SnowFlakeUtil.generateId());
+                map1.put("label", key);
                 map1.put("children", l1);
                 result.add(map1);
             });

+ 33 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/UserServiceImpl.java

@@ -0,0 +1,33 @@
+package com.gyee.impala.service.impl.master;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.impala.common.exception.CustomException;
+import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.mapper.master.UserMapper;
+import com.gyee.impala.model.master.User;
+import com.gyee.impala.service.master.UserService;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
+
+    @Override
+    public User getUser(String username, String password) {
+        QueryWrapper<User> wrapper = new QueryWrapper<>();
+        wrapper.eq("code", username).eq("password", password);
+        return baseMapper.selectOne(wrapper);
+    }
+
+
+    @Override
+    public void updateUser(User user) {
+        try{
+            baseMapper.updateById(user);
+        } catch (Exception e){
+            log.error(e.getMessage());
+            throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
+        }
+    }
+}

+ 6 - 1
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WeatherforecastServiceImpl.java

@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Comparator;
 import java.util.List;
 
 
@@ -20,7 +21,11 @@ public class WeatherforecastServiceImpl extends ServiceImpl<WeatherforecastMappe
     @Override
     public List<Weatherforecast> getListByStationAndTime(String station, String st, String et) {
         try {
-            return baseMapper.getListByStationAndTime(station, st, et);
+            List<Weatherforecast> list = baseMapper.getListByStationAndTime(station, st, et);
+            if (list != null)
+                list.sort(Comparator.comparing(Weatherforecast::getTime));
+
+            return list;
         }catch (CustomException e){
             log.error(e.getMessage());
         }

+ 58 - 12
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindpowerstationServiceImpl.java

@@ -1,12 +1,19 @@
 package com.gyee.impala.service.impl.master;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.impala.common.config.datasource.KuduDataSourceConfig;
 import com.gyee.impala.common.exception.CustomException;
 import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.common.util.SnowFlakeUtil;
+import com.gyee.impala.model.master.Casefault;
 import com.gyee.impala.model.master.Windpowerstation;
 import com.gyee.impala.mapper.master.WindpowerstationMapper;
 import com.gyee.impala.service.master.WindpowerstationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.kudu.client.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
@@ -24,27 +31,30 @@ import java.util.List;
 @Service
 public class WindpowerstationServiceImpl extends ServiceImpl<WindpowerstationMapper, Windpowerstation> implements WindpowerstationService {
 
+    @Autowired
+    private InitialRunner initialRunner;
+    @Autowired
+    private KuduDataSourceConfig kuduConfig;
+
+
     @Override
     public List<Windpowerstation> getAll() {
-        List<Windpowerstation> list = new ArrayList<>();
         try {
             QueryWrapper<Windpowerstation> wrapper = new QueryWrapper<>();
             wrapper.orderByAsc("ordernum");
             wrapper.like("id", "%FDC");
 
-            list = baseMapper.selectList(wrapper);
+            return baseMapper.selectList(wrapper);
         } catch (CustomException e){
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
-        return list;
     }
 
     @Override
-    public boolean editItem(Windpowerstation obj) {
+    public void editItem(Windpowerstation obj) {
         try {
             baseMapper.updateById(obj);
-            return true;
         } catch (CustomException e){
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
@@ -52,27 +62,63 @@ public class WindpowerstationServiceImpl extends ServiceImpl<WindpowerstationMap
     }
 
     @Override
-    public boolean insertItem(Windpowerstation obj) {
+    public void insertItem(Windpowerstation obj) {
         try {
-            baseMapper.insert(obj);
-            return true;
-        } catch (CustomException e){
+            insert(obj);
+            initialRunner.cacheStation();
+        } catch (Exception e){
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
     }
 
     @Override
-    public boolean deleteItem(String id) {
+    public void deleteItem(String id) {
         QueryWrapper<Windpowerstation> query = new QueryWrapper<>();
         query.eq("id", id);
-
         try {
             baseMapper.delete(query);
-            return true;
         } catch (CustomException e){
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);
         }
     }
+
+
+    /**
+     * 由于mybatis-plus存储的中文乱码
+     * 采用原生写法
+     * @param obj
+     * @return
+     */
+    private void insert(Windpowerstation obj) throws KuduException {
+        KuduTable kuduTable = kuduConfig.kuduClient.openTable("impala::gyee_sample_kudu.windpowerstation");
+        KuduSession kuduSession = kuduConfig.kuduSession();
+        Insert insert = kuduTable.newInsert();
+        // 获取Row对象,设置插入的值
+        PartialRow row = insert.getRow();
+        row.addObject("id", SnowFlakeUtil.generateId());
+        row.addObject("name", obj.getName());
+        row.addObject("address", obj.getAddress());
+        row.addObject("telephone", obj.getTelephone());
+        row.addObject("type", obj.getType());
+        row.addObject("capacity", obj.getCapacity());
+        row.addObject("capacityunit", obj.getCapacityunit());
+        row.addObject("quanity", obj.getQuantity());
+        row.addObject("longitude", obj.getLongitude());
+        row.addObject("latitude", obj.getLatitude());
+        row.addObject("model", obj.getModel());
+        row.addObject("manufacturer", obj.getManufacturer());
+        row.addObject("ordernum", InitialRunner.wpList.get(InitialRunner.wpList.size()-1).getOrdernum()+1);
+        row.addObject("remark", obj.getRemark());
+
+        // 先不提交kudu
+        kuduSession.apply(insert);
+        // 最后,补加一条批量写入
+        kuduSession.flush();
+
+        // 关闭和kudu的会话
+        kuduSession.close();
+    }
+
 }

+ 1 - 11
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindturbineServiceImpl.java

@@ -2,20 +2,14 @@ package com.gyee.impala.service.impl.master;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.gyee.impala.common.base.ExcludeQueryWrapper;
 import com.gyee.impala.common.exception.CustomException;
 import com.gyee.impala.common.result.ResultCode;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.impala.mapper.master.WindturbineMapper;
 import com.gyee.impala.model.master.Windturbine;
 import com.gyee.impala.service.master.WindturbineService;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -34,11 +28,7 @@ public class WindturbineServiceImpl extends ServiceImpl<WindturbineMapper, Windt
             QueryWrapper<Windturbine> wrapper = new QueryWrapper<>();
             wrapper.eq("station", station);
             wrapper.orderByAsc("id");
-
-            List<Windturbine> list = baseMapper.selectList(wrapper);
-
-            return list;
-
+            return baseMapper.selectList(wrapper);
         } catch (CustomException e){
             log.error(e.getMessage());
             throw new CustomException(ResultCode.ERROR_DATA);

+ 0 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/WindturbinepointServiceImpl.java


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff