Browse Source

Merge remote-tracking branch 'origin/master'

tianye 2 years ago
parent
commit
badf7d46c6
100 changed files with 4000 additions and 126 deletions
  1. 2 0
      .gitignore
  2. 47 0
      risk-calc/build.gradle
  3. 22 0
      risk-calc/src/main/java/com/gyee/wisdom/Bootstrap.java
  4. 23 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/ApplicationReadyEventListener.java
  5. 220 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/CalculateServer.java
  6. 139 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/biz/rule/RiskRule.java
  7. 54 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/AlarmSnapCache.java
  8. 72 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskModelCache.java
  9. 50 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskRuleCache.java
  10. 43 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskSnapCache.java
  11. 33 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/WindPowerStationCache.java
  12. 47 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/WindturbineCache.java
  13. 21 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/config/ConfigProperties.java
  14. 105 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/AlarmSnap.java
  15. 40 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/AlarmSnapInfo.java
  16. 36 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskHistory.java
  17. 65 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskModel.java
  18. 43 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskModelRule.java
  19. 64 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskSnap.java
  20. 63 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/WindPowerStation.java
  21. 27 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/Windturbine.java
  22. 64 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/AlarmSnapMapper.java
  23. 14 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskHistoryMapper.java
  24. 28 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskModelMapper.java
  25. 20 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskModelRuleMapper.java
  26. 14 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskSnapMapper.java
  27. 21 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/WindPowerStationMapper.java
  28. 22 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/WindturbineMapper.java
  29. 25 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/AlarmSnapService.java
  30. 15 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskHistoryService.java
  31. 15 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskModelRuleService.java
  32. 25 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskModelService.java
  33. 39 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskSnapService.java
  34. 23 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/WindpowerstationService.java
  35. 62 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/WindturbineService.java
  36. 161 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/util/SnowflakeGenerator.java
  37. 62 0
      risk-calc/src/main/java/com/gyee/wisdom/riskcalc/util/SpringContextUtils.java
  38. 91 0
      risk-calc/src/main/resources/application.yaml
  39. 7 0
      risk-calc/src/main/resources/banner.txt
  40. 64 0
      risk-calc/src/main/resources/log4j2.xml
  41. 174 0
      risk-calc/src/main/resources/mappers-oracle/AlarmSnapMapper.xml
  42. 4 0
      risk-calc/src/main/resources/mappers-oracle/RiskHistoryMapper.xml
  43. 4 0
      risk-calc/src/main/resources/mappers-oracle/RiskModelMapper.xml
  44. 4 0
      risk-calc/src/main/resources/mappers-oracle/RiskModelRuleMapper.xml
  45. 4 0
      risk-calc/src/main/resources/mappers-oracle/RiskSnapMapper.xml
  46. 29 0
      risk-calc/src/main/resources/mappers-oracle/WindPowerStationMapper.xml
  47. 101 0
      risk-calc/src/main/resources/mappers-oracle/WindturbineMapper.xml
  48. 167 0
      risk-calc/src/main/resources/mappers-postgresql/AlarmSnapMapper.xml
  49. 4 0
      risk-calc/src/main/resources/mappers-postgresql/RiskHistoryMapper.xml
  50. 4 0
      risk-calc/src/main/resources/mappers-postgresql/RiskModelMapper.xml
  51. 4 0
      risk-calc/src/main/resources/mappers-postgresql/RiskModelRuleMapper.xml
  52. 4 0
      risk-calc/src/main/resources/mappers-postgresql/RiskSnapMapper.xml
  53. 29 0
      risk-calc/src/main/resources/mappers-postgresql/WindPowerStationMapper.xml
  54. 100 0
      risk-calc/src/main/resources/mappers-postgresql/WindturbineMapper.xml
  55. 187 0
      risk-calc/src/main/resources/mappers/AlarmSnapMapper.xml
  56. 4 0
      risk-calc/src/main/resources/mappers/RiskHistoryMapper.xml
  57. 4 0
      risk-calc/src/main/resources/mappers/RiskModelMapper.xml
  58. 4 0
      risk-calc/src/main/resources/mappers/RiskModelRuleMapper.xml
  59. 4 0
      risk-calc/src/main/resources/mappers/RiskSnapMapper.xml
  60. 29 0
      risk-calc/src/main/resources/mappers/WindPowerStationMapper.xml
  61. 101 0
      risk-calc/src/main/resources/mappers/WindturbineMapper.xml
  62. 2 1
      schedule-job/alarm-schedule/build.gradle
  63. 1 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportTask.java
  64. 3 3
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlertRule2.java
  65. 3 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReport.java
  66. 5 1
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportWindturbine.java
  67. 19 1
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/job/EarlyReportHandler.java
  68. 2 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/EarlyReportParam.java
  69. BIN
      schedule-job/alarm-schedule/src/main/lib/ojdbc6.jar
  70. 9 5
      schedule-job/alarm-schedule/src/main/resources/application.yaml
  71. 167 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmCountMapper.xml
  72. 203 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmHistoryMapper.xml
  73. 137 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmSnapMapper.xml
  74. 5 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlertRule2Mapper.xml
  75. 7 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportAlarmMapper.xml
  76. 7 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportConclusionMapper.xml
  77. 7 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportMapper.xml
  78. 7 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportWindturbineMapper.xml
  79. 17 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyWarnScoreMapper.xml
  80. 35 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/FaultStatisticWindturbineMapper.xml
  81. 34 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/Warning2Mapper.xml
  82. 29 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/WindPowerStationMapper.xml
  83. 69 0
      schedule-job/alarm-schedule/src/main/resources/mappers-oracle/WindturbineMapper.xml
  84. 1 0
      settings.gradle
  85. 106 33
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/biz/InspectOrderBiz.java
  86. 2 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/config/MybatisPlusConfig.java
  87. 3 6
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/HomeController.java
  88. 12 3
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/InspectOrderController.java
  89. 7 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/AlarmStat.java
  90. 18 4
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/InspectOrder.java
  91. 3 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/AlarmCountMapper.java
  92. 1 1
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/Alertrule2Mapper.java
  93. 12 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/model/HiddeDanger.java
  94. 20 13
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/model/InspectOrderDto.java
  95. 62 50
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmCountService.java
  96. 3 3
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmSnapService.java
  97. 1 1
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/EarlyReportService.java
  98. 1 1
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/EarlyReportWindturbineService.java
  99. 27 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/InspectOrderService.java
  100. 0 0
      warning-web/src/main/resources/application.yaml

+ 2 - 0
.gitignore

@@ -41,6 +41,8 @@
 /common/data/build
 /common/utils/build
 /warning-web/build
+/risk-calc/build
+/risk-calc/out
 /logs
 /*.class
 .DS_Store

+ 47 - 0
risk-calc/build.gradle

@@ -0,0 +1,47 @@
+buildscript {
+    repositories {
+        mavenLocal()
+        maven {
+            allowInsecureProtocol = true
+            url "http://maven.aliyun.com/nexus/content/groups/public" }
+        mavenCentral()
+    }
+    dependencies {
+        classpath("$bootGroup:spring-boot-gradle-plugin:$springBootVersion")
+    }
+}
+version = '1.0.02'
+apply plugin: "$bootGroup"
+apply plugin: 'io.spring.dependency-management'
+
+
+dependencies {
+
+   // implementation fileTree(dir: 'src/main/lib', include: '*.jar')
+    //implementation ("org.postgresql:postgresql:$postgresqlDriverVersion")
+    implementation ("mysql:mysql-connector-java:$mysqlConnectorVersion")
+
+    implementation("$bootGroup:spring-boot-starter-web")
+    implementation("$bootGroup:spring-boot-starter-undertow")
+    implementation("$bootGroup:spring-boot-starter-websocket")
+    implementation("org.apache.logging.log4j:log4j-core:$log4jVersion")
+    implementation("org.apache.logging.log4j:log4j-jul:$log4jVersion")
+    implementation("org.apache.logging.log4j:log4j-api:$log4jVersion")
+    implementation("org.apache.logging.log4j:log4j-slf4j-impl:$log4jVersion")
+    implementation "com.alibaba:druid:$alibabaDruidVersion"
+    implementation "com.alibaba:fastjson:$fastjsonVersion"
+    implementation("org.codehaus.groovy:groovy-all:$groovyVersion")
+
+    implementation "com.baomidou:mybatis-plus-boot-starter:3.1.1"
+    implementation "com.baomidou:mybatis-plus-generator:3.1.1"
+    implementation("com.taosdata.jdbc:taos-jdbcdriver:2.0.35") {
+        exclude group: 'com.alibaba', module: 'fastjson'
+    }
+
+    implementation("org.apache.commons:commons-lang3:$commonsLang3Version")
+    testImplementation("$bootGroup:spring-boot-starter-test")
+    implementation("io.github.openfeign:feign-core:$openFeignVersion")
+    implementation("io.github.openfeign:feign-jackson:$openFeignVersion")
+
+}
+

+ 22 - 0
risk-calc/src/main/java/com/gyee/wisdom/Bootstrap.java

@@ -0,0 +1,22 @@
+package com.gyee.wisdom;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+@SpringBootApplication
+@ServletComponentScan
+@EnableScheduling
+public class Bootstrap {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Bootstrap.class, args);
+    }
+
+}

+ 23 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/ApplicationReadyEventListener.java

@@ -0,0 +1,23 @@
+package com.gyee.wisdom.riskcalc;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ApplicationReadyEventListener implements
+        ApplicationListener<ApplicationReadyEvent> {
+
+    @Autowired
+    private CalculateServer calculateServer;
+
+    @Override
+    public void onApplicationEvent(ApplicationReadyEvent event) {
+        System.out.println("ApplicationReadyEvent  rised!");
+        System.out.println("listener: " + event.toString());
+        calculateServer.start();
+    }
+
+}

+ 220 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/CalculateServer.java

@@ -0,0 +1,220 @@
+package com.gyee.wisdom.riskcalc;
+
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.gyee.wisdom.riskcalc.biz.rule.RiskRule;
+import com.gyee.wisdom.riskcalc.cache.AlarmSnapCache;
+import com.gyee.wisdom.riskcalc.cache.RiskModelCache;
+import com.gyee.wisdom.riskcalc.cache.RiskRuleCache;
+import com.gyee.wisdom.riskcalc.config.ConfigProperties;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnap;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo;
+import com.gyee.wisdom.riskcalc.entity.RiskSnap;
+import com.gyee.wisdom.riskcalc.service.AlarmSnapService;
+import com.gyee.wisdom.riskcalc.service.RiskSnapService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+//todo : 此处改造为抽象类,可扩展框架设计
+
+@Slf4j
+@Component
+public class CalculateServer {
+    @Autowired
+    private ConfigProperties configProperties;
+    @Autowired
+    private AlarmSnapService alarmSnapService;
+    @Autowired
+    private RiskSnapService riskSnapService;
+
+    private boolean serverStarted = false;
+    private boolean readThreadFlag = false;
+    private boolean calcThreadFlag = false;
+    //只有数据加载线程执行成功一次后,才开始执行计算线程
+    private boolean readRtdbSuccess = false;
+
+    private List<RiskRule> riskRuleList;
+
+    private Date lastDateTime = null;
+
+    public boolean start() {
+        if (serverStarted) {
+            return true;
+        }
+        try {
+            //GlobalVar.config = configProperties;
+            log.warn("风险计算模型服务启动...... ");
+
+            readThreadFlag = true;
+            getReadThread().start();
+            sleep(1000);
+            calcThreadFlag = true;
+            getCalcThread().start();
+
+            serverStarted = true;
+        } catch (Exception ex) {
+            serverStarted = false;
+            stop();
+            log.error(ex.getMessage());
+            return false;
+        }
+        return true;
+    }
+
+    public void stop() {
+        readThreadFlag = false;
+        calcThreadFlag = false;
+        serverStarted = false;
+        try {
+            Thread.sleep(5000);
+            //线程停止后,清空报警规则相关缓存
+            // cacheService.clearCache();
+        } catch (Exception ex) {
+        }
+    }
+
+    public void restart() {
+    }
+
+    Thread getReadThread() {
+        return new Thread(new Runnable() {
+            public void run() {
+                log.info("数据加载线程启动...");
+                while (readThreadFlag) {
+                    try {
+                        List<String> customRuleIdList = RiskModelCache.getRuleList("custom").stream().map(s -> s.getRuleId()).collect(Collectors.toList());
+                        List<String> windturbineRuleIdList = RiskModelCache.getRuleList("windturbine").stream().map(s -> s.getRuleId()).collect(Collectors.toList());
+
+                        if (lastDateTime == null)
+                            lastDateTime = new Date();
+
+                        List<AlarmSnapInfo> customAlarmSnapInfoList = alarmSnapService.getLatestAlarmSnap(customRuleIdList, "custom", lastDateTime);
+                        List<AlarmSnapInfo> windturbineAlarmSnapInfoList = alarmSnapService.getLatestAlarmSnap(windturbineRuleIdList, "windturbine", lastDateTime);
+
+                        ArrayList<AlarmSnapInfo> allAlarmSnapInfoList = new ArrayList<>();
+                        allAlarmSnapInfoList.addAll(customAlarmSnapInfoList);
+                        allAlarmSnapInfoList.addAll(windturbineAlarmSnapInfoList);
+
+                        AlarmSnapCache.setSnapInfoList(allAlarmSnapInfoList);
+                        System.out.print("*");
+                        readRtdbSuccess = true;
+                        lastDateTime = new Date();
+
+                    } catch (Exception ex) {
+                        log.error("读取alarmsnap异常:{}", ex.getMessage(), ex);
+                    }
+                    sleep(configProperties.getReadThreadInterval());
+                }
+            }
+        });
+    }
+
+    Thread getCalcThread() {
+        return new Thread(new Runnable() {
+            public void run() {
+                log.info("状态计算线程启动...");
+
+                ExecutorService pool = Executors.newFixedThreadPool(configProperties.getMaxThreadCount());
+                ListeningExecutorService executorService = MoreExecutors.listeningDecorator(pool);
+                List<Task> tasks = getTaskList();
+
+                while (calcThreadFlag) {
+                    List<ListenableFuture<RiskSnap>> futures = Lists.newArrayList();
+                    if (readRtdbSuccess == false) {
+                        sleep(configProperties.getCalcThreadInterval());
+                        continue;
+                    }
+                    try {
+                        if (tasks != null && tasks.size() > 0) {
+                            for (Task task : tasks) {
+                                futures.add(executorService.submit(task));
+                            }
+                        }
+                        final ListenableFuture<List<RiskSnap>> resultsFuture = Futures.successfulAsList(futures);
+
+                        try {//所有都执行完毕
+                            List<RiskSnap> calcResult = resultsFuture.get();
+                            //过滤掉为null的元素(得到需要更新risksnap表和写入riskhistory历史流水的数据)
+                            calcResult = calcResult.stream().filter(s -> s != null).collect(Collectors.toList());
+                            if(calcResult.size()>0){
+                                boolean b = riskSnapService.saveRiskSnap(calcResult);
+                                if (!b) {
+                                    log.error("动态风险计算结果保存失败");
+                                }
+                            }
+
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        } finally {
+                            System.out.println("#");
+                        }
+                    } catch (Exception ex) {
+                        log.info(ex.getMessage());
+                    }
+                    System.out.println("#");
+                    sleep(configProperties.getCalcThreadInterval());
+                }
+
+                if (pool != null)
+                    pool.shutdown();
+            }
+        });
+    }
+
+    private void sleep(int milliseconds) {
+        try {
+            TimeUnit.MILLISECONDS.sleep(milliseconds);
+        } catch (Exception ex) {
+            log.info(ex.getMessage());
+        }
+    }
+
+    private List<Task> getTaskList() {
+        if (riskRuleList == null || riskRuleList.size() <= 0) {
+            riskRuleList = RiskRuleCache.getRiskRuleList();
+        }
+        if (riskRuleList != null) {
+            List<Task> result = new ArrayList<>(riskRuleList.size());
+            for (RiskRule ar : riskRuleList) {
+                Task task = new Task(ar);
+                result.add(task);
+            }
+            return result;
+        }
+        return null;
+    }
+
+    /**
+     * 内部类,用于执行风险预警规则解析任务
+     */
+    class Task implements Callable<RiskSnap> {
+        private RiskRule riskRule;
+
+        public Task(RiskRule rule) {
+            this.riskRule = rule;
+        }
+
+        @Override
+        public RiskSnap call() throws Exception {
+            RiskSnap runResult = riskRule.run();
+            System.out.print('.');
+            return runResult;
+        }
+    }
+
+
+}

+ 139 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/biz/rule/RiskRule.java

@@ -0,0 +1,139 @@
+package com.gyee.wisdom.riskcalc.biz.rule;
+
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.gyee.wisdom.riskcalc.cache.AlarmSnapCache;
+import com.gyee.wisdom.riskcalc.cache.RiskSnapCache;
+import com.gyee.wisdom.riskcalc.cache.WindPowerStationCache;
+import com.gyee.wisdom.riskcalc.entity.*;
+import com.gyee.wisdom.riskcalc.util.SnowflakeGenerator;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-08
+ */
+@Data
+@Accessors(chain = true)
+@Slf4j
+public class RiskRule {
+
+    private RiskModel riskModel;
+
+    private String windturbineId;
+
+    private String model;
+
+    List<String> windturbineRuleIdList;
+
+    List<String> customRuleIdList;
+
+
+    public RiskRule(String windturbineId, RiskModel riskModel) {
+        this.riskModel = riskModel;
+        this.windturbineId = windturbineId;
+    }
+
+    public RiskSnap run() {
+        if (windturbineRuleIdList == null || windturbineRuleIdList.size() <= 0)
+            windturbineRuleIdList = riskModel.getRuleList().stream().filter(s -> s.getRuleType().equals("windturbine")).map(s -> s.getRuleId()).collect(Collectors.toList());
+        if (customRuleIdList == null || customRuleIdList.size() <= 0)
+            customRuleIdList = riskModel.getRuleList().stream().filter(s -> s.getRuleType().equals("custom")).map(s -> s.getRuleId()).collect(Collectors.toList());
+
+
+        boolean hit = false;
+        boolean hitCustom = true;
+        boolean hitWindturbine = true;
+
+        List<AlarmSnapInfo> customAlarmList = AlarmSnapCache.getSnapInfoList(windturbineId, customRuleIdList, "custom");
+        List<AlarmSnapInfo> windturbineAlarmList = AlarmSnapCache.getSnapInfoList(windturbineId, customRuleIdList, "windturbine");
+
+        if ((customAlarmList.size() <= 0 && customRuleIdList.size() > 0) || (windturbineAlarmList.size() <= 0 && windturbineRuleIdList.size() > 0)) {
+            hitCustom = false;
+            hitWindturbine = false;
+        }
+        Date nowTime = new Date();
+        for (AlarmSnapInfo info :
+                customAlarmList) {
+            if (info.isOpened() == false) {
+                long subTime = nowTime.getTime() - info.getLastUpdateTime().getTime();
+                if (subTime > riskModel.getRollingPeriod() * 1000) {
+                    hitCustom = false;
+                    break;
+                }
+            }
+        }
+        for (AlarmSnapInfo info :
+                windturbineAlarmList) {
+            if (info.isOpened() == false) {
+                long subTime = nowTime.getTime() - info.getLastUpdateTime().getTime();
+                if (subTime > riskModel.getRollingPeriod() * 1000) {
+                    hitWindturbine = false;
+                    break;
+                }
+            }
+        }
+        if (hitCustom && hitWindturbine) {
+            hit = true;
+        } else {
+            hit = false;
+        }
+        RiskSnap result = null;
+        RiskSnap riskSnap = RiskSnapCache.getRiskSnap(windturbineId, riskModel.getId());
+        if (riskSnap != null) {
+            if (riskSnap.isOpened() != hit) {
+                riskSnap.setOpened(hit).setLastUpdateTime(new Date());
+                result = riskSnap;
+            }
+        } else {
+            if (hit) {
+                riskSnap = createRiskSnap().setOpened(true).setLastUpdateTime(new Date());
+                result = riskSnap;
+                RiskSnapCache.addRiskSnap(riskSnap);
+            }
+        }
+        if (result != null) {
+            if (result.isOpened())
+                log.info("风机:" + windturbineId + "风险规则" + riskModel.getId() + riskModel.getName() + "触发");
+            else
+                log.info("风机:" + windturbineId + "风险规则" + riskModel.getId() + riskModel.getName() + "解除");
+        }
+        return result;
+    }
+
+    private RiskSnap createRiskSnap() {
+        RiskSnap riskSnap = new RiskSnap().setId(String.valueOf(SnowflakeGenerator.generateId()))
+                .setName(riskModel.getName())
+                .setDescription(riskModel.getDescription())
+                .setRank(riskModel.getRank())
+                .setWindturbineId(windturbineId)
+                .setWindpowerstationId(riskModel.getWindpowerstationId())
+                .setWindpowerstationName(WindPowerStationCache.getStationName(riskModel.getWindpowerstationId()))
+                .setOpened(false)
+                .setParts(riskModel.getParts())
+                .setRiskModelId(riskModel.getId())
+                .setLastUpdateTime(new Date());
+        return riskSnap;
+    }
+}
+
+@Data
+@Accessors(chain = true)
+class AlarmKeepTimeInfo {
+    private String ruleId;
+
+    private String ruleType;
+
+    private long keepTime;
+
+    private Date lastTime;
+}

+ 54 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/AlarmSnapCache.java

@@ -0,0 +1,54 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.entity.AlarmSnap;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+@Slf4j
+public class AlarmSnapCache {
+
+    private static List<AlarmSnapInfo> snapInfoList = new ArrayList<>();
+
+    private static ReentrantLock lock = new ReentrantLock();
+
+    public static void setSnapInfoList(List<AlarmSnapInfo> lst) {
+        lock.lock();
+        try {
+            snapInfoList = lst;
+        } catch (Exception ex) {
+            log.error("赋值alarmSnapInfo异常:{}", ex.getMessage(), ex);
+        } finally {
+            lock.unlock();
+        }
+
+    }
+
+    public static List<AlarmSnapInfo> getSnapInfoList(String windturbineId, List<String> ruleIdList, String ruleType) {
+        List<AlarmSnapInfo> resultList = new ArrayList<>();
+        lock.lock();
+        try {
+            if (StringUtils.isBlank(ruleType)) {
+                resultList = snapInfoList.stream().filter(s -> s.getWindturbineId().equals(windturbineId) && ruleIdList.contains(s.getRuleId())).collect(Collectors.toList());
+            } else {
+                resultList = snapInfoList.stream().filter(s -> s.getWindturbineId().equals(windturbineId) && s.getAlarmType().equals(ruleType) && ruleIdList.contains(s.getRuleId())).collect(Collectors.toList());
+            }
+        } catch (Exception ex) {
+            log.error("获取alarmSnapInfo异常:{}", ex.getMessage(), ex);
+        } finally {
+            lock.unlock();
+            return resultList;
+        }
+    }
+
+}

+ 72 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskModelCache.java

@@ -0,0 +1,72 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.entity.RiskModel;
+import com.gyee.wisdom.riskcalc.entity.RiskModelRule;
+import com.gyee.wisdom.riskcalc.service.RiskModelService;
+import com.gyee.wisdom.riskcalc.util.SpringContextUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+public class RiskModelCache {
+
+    private static List<RiskModel> riskModelList = new ArrayList<>();
+
+    private static Map<String, List<RiskModelRule>> mapByRuleType = new HashMap<>();
+
+    public static List<RiskModel> getRiskModelList(String stationId, String model) {
+        if (riskModelList == null || riskModelList.size() <= 0) {
+            initRiskModelList();
+        }
+        List<RiskModel> collect = riskModelList.stream().filter(s -> s.getModel().equals(model) && s.getWindpowerstationId().equals(stationId)).collect(Collectors.toList());
+        return collect;
+    }
+
+    public static List<RiskModelRule> getRuleList(String ruleType) {
+        if (mapByRuleType.size() <= 0) {
+            if (riskModelList == null || riskModelList.size() <= 0) {
+                initRiskModelList();
+            }
+            List<RiskModelRule> ruleList = new ArrayList<>();
+            riskModelList.stream().map(s -> s.getRuleList()).forEach(k -> {
+                ruleList.addAll(k);
+            });
+            mapByRuleType = ruleList.stream().collect(Collectors.groupingBy(RiskModelRule::getRuleType));
+        }
+
+        if (mapByRuleType.containsKey(ruleType))
+            return mapByRuleType.get(ruleType);
+        else
+            return new ArrayList<>();
+    }
+
+
+    public static List<RiskModel> getRiskModelList() {
+
+        if (riskModelList == null || riskModelList.size() <= 0) {
+            initRiskModelList();
+        }
+        return riskModelList;
+
+    }
+
+
+    public static void initRiskModelList() {
+        RiskModelService bean = SpringContextUtils.getBean(RiskModelService.class);
+        riskModelList = bean.getRiskModel().stream().filter(s -> s.isEnabled() == true).collect(Collectors.toList());
+    }
+
+    public static void clearCache(){
+        riskModelList=new ArrayList<>();
+        mapByRuleType=new HashMap<>();
+    }
+
+}

+ 50 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskRuleCache.java

@@ -0,0 +1,50 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.biz.rule.RiskRule;
+import com.gyee.wisdom.riskcalc.entity.RiskModel;
+import com.gyee.wisdom.riskcalc.entity.RiskModelRule;
+import com.gyee.wisdom.riskcalc.entity.Windturbine;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-09
+ */
+@Data
+public class RiskRuleCache {
+
+    public static List<RiskRule> riskRuleList;
+
+    public static List<RiskRule> getRiskRuleList() {
+        if (riskRuleList == null || riskRuleList.size() <= 0) {
+            initRiskRuleList();
+        }
+        return riskRuleList;
+    }
+
+    private static void initRiskRuleList() {
+        List<Windturbine> windturbineList = WindturbineCache.getWindturbineList();
+        List<RiskModel> riskModelList = RiskModelCache.getRiskModelList();
+        riskRuleList = new ArrayList<>();
+        for (RiskModel riskModel :
+                riskModelList) {
+            List<Windturbine> collect = windturbineList.stream().filter(s -> s.getModelid().equals(riskModel.getModel()) && s.getWindpowerstationid().equals(riskModel.getWindpowerstationId())).collect(Collectors.toList());
+            collect.forEach(s -> {
+                RiskRule riskRule = new RiskRule(s.getId(), riskModel);
+                riskRuleList.add(riskRule);
+            });
+        }
+
+    }
+
+    public static void clearCache(){
+        riskRuleList=null;
+    }
+
+}

+ 43 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/RiskSnapCache.java

@@ -0,0 +1,43 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.entity.RiskSnap;
+import com.gyee.wisdom.riskcalc.service.RiskSnapService;
+import com.gyee.wisdom.riskcalc.util.SpringContextUtils;
+
+import javax.swing.*;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-08
+ */
+public class RiskSnapCache {
+
+    private static List<RiskSnap> riskSnapList;
+
+    public static RiskSnap getRiskSnap(String windturbineId, String riskModelId) {
+        if (riskSnapList == null || riskSnapList.size() <= 0) {
+            initRiskSnapList();
+        }
+
+        Optional<RiskSnap> first = riskSnapList.stream().filter(s -> s.getRiskModelId().equals(riskModelId) && s.getWindturbineId().equals(windturbineId)).findFirst();
+        if (first.isPresent())
+            return first.get();
+        else
+            return null;
+    }
+
+    private static void initRiskSnapList() {
+        RiskSnapService bean = SpringContextUtils.getBean(RiskSnapService.class);
+        riskSnapList = bean.list();
+    }
+
+    public static void addRiskSnap(RiskSnap snap){
+        if (riskSnapList == null || riskSnapList.size() <= 0) {
+            initRiskSnapList();
+        }
+        riskSnapList.add(snap);
+    }
+}

+ 33 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/WindPowerStationCache.java

@@ -0,0 +1,33 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.entity.WindPowerStation;
+import com.gyee.wisdom.riskcalc.service.WindpowerstationService;
+import com.gyee.wisdom.riskcalc.util.SpringContextUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+public class WindPowerStationCache {
+
+    static List<WindPowerStation> stationList = new ArrayList<>();
+
+    public static String getStationName(String stationId) {
+        if (stationList.size() <= 0) {
+
+            WindpowerstationService bean = SpringContextUtils.getBean(WindpowerstationService.class);
+            List<WindPowerStation> lst = bean.getAllStation("");
+            stationList = lst;
+        }
+        Optional<WindPowerStation> first = stationList.stream().filter(s -> s.getId().equals(stationId)).findFirst();
+        if (first.isPresent())
+            return first.get().getName();
+        else
+            return null;
+    }
+}

+ 47 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/cache/WindturbineCache.java

@@ -0,0 +1,47 @@
+package com.gyee.wisdom.riskcalc.cache;
+
+import com.gyee.wisdom.riskcalc.entity.Windturbine;
+import com.gyee.wisdom.riskcalc.service.WindturbineService;
+import com.gyee.wisdom.riskcalc.util.SpringContextUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+public  class WindturbineCache {
+
+
+    private static List<Windturbine> windturbineList = new ArrayList<>();
+
+
+    private static void initWindturbineList() {
+        List<Windturbine> windturbines = SpringContextUtils.getBean(WindturbineService.class).windturbineList();
+
+        windturbineList = windturbines;
+    }
+
+    public static List<Windturbine> getWindturbineList() {
+        if (windturbineList.size() <= 0)
+            initWindturbineList();
+        return windturbineList;
+    }
+
+    public static Windturbine getWindturbine(String windturbineId) {
+        if (windturbineList.size() <= 0)
+            initWindturbineList();
+        Optional<Windturbine> first = windturbineList.stream().filter(s -> s.getId().equals(windturbineId)).findFirst();
+
+        if (first.isPresent())
+            return first.get();
+        else
+            return null;
+    }
+
+
+}

+ 21 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/config/ConfigProperties.java

@@ -0,0 +1,21 @@
+package com.gyee.wisdom.riskcalc.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties("calculate.config")
+public class ConfigProperties {
+
+    //扫描实时数据线程轮询时间间隔,单位毫秒
+    private int readThreadInterval = 1000;
+
+    //计算状态线程轮询时间间隔,单位毫秒
+    private int calcThreadInterval = 100;
+
+    //规则解析线程池大小
+    private int maxThreadCount = 4;
+
+}

+ 105 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/AlarmSnap.java

@@ -0,0 +1,105 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gyee.wisdom.riskcalc.cache.WindturbineCache;
+import com.gyee.wisdom.riskcalc.util.SpringContextUtils;
+import org.apache.commons.lang3.StringUtils;
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("ALARMSNAP")
+public class AlarmSnap implements Serializable {
+
+    @TableId("ID")
+    private Long id;
+    @TableField("STATIONID")
+    private String stationId;
+    @TableField("PROJECTID")
+    private String projectId;
+    @TableField("LINEID")
+    private String lineId;
+    @TableField("WINDTURBINEID")
+    private String windturbineId;
+    @TableField("ALERTVALUE")
+    private int alertValue;
+    @TableField("CATEGORY1")
+    private String category1;
+    @TableField("CATEGORY2")
+    private String category2;
+    @TableField("CATEGORY3")
+    private String category3;
+    @TableField("RANK")
+    private String rank;
+    @TableField("ISOPENED")
+    private int isOpened;
+    @TableField("LASTUPDATETIME")
+    private Date lastUpdateTime;
+    @TableField("STATIONNAME")
+    private String stationName;
+    @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("TESTINGPOINTKEY")
+    private String testingpointKey;
+    @TableField("DATAINFO")
+    private String dataInfo;
+    @TableField("ISCONFIRMED")
+    private int isconfirmed;
+    @TableField("CONFIRMTIME")
+    private Date confirmtime;
+    @TableField("LASTUPDATEPERSON")
+    private String lastUpdatePerson;
+    @TableField("IFIXPICTURE")
+    private String ifixpicture;
+    @TableField("IFIXTAG")
+    private String ifixtag;
+    @TableField("LASTCLOSETIME")
+    private Date lastCloseTime;
+    @TableField("LASTCLOSEPERSON")
+    private String lastClosePerson;
+    @TableField("CONFIRMPERSON")
+    private String confirmPerson;
+    @TableField(exist = false)
+    @Getter(AccessLevel.NONE)
+    @Setter(AccessLevel.NONE)
+    private String shortStationName;
+
+    @TableField(exist = false)
+    @Getter(AccessLevel.NONE)
+    @Setter(AccessLevel.NONE)
+    private String windturbineCode;
+
+    public String getShortStationName() {
+        return this.stationName.replace("风电场", "").replace("风场", "");
+    }
+
+    public String getWindturbineCode() {
+        WindturbineCache bean = SpringContextUtils.getBean(WindturbineCache.class);
+        if (StringUtils.isNotBlank(this.windturbineId)) {
+            Windturbine windturbine = bean.getWindturbine(this.windturbineId);
+            if (windturbine != null)
+                return windturbine.getCode();
+            else
+                return "";
+        } else {
+            return "";
+        }
+    }
+
+    // private int isNew = 0;
+}

+ 40 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/AlarmSnapInfo.java

@@ -0,0 +1,40 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+@Data
+@Accessors(chain = true)
+public class AlarmSnapInfo implements Serializable {
+
+    private String id;
+
+    private String alertText;
+
+    private String stationId;
+
+    private int alertValue;
+
+    private String stationName;
+
+    private String windturbineId;
+
+    private String alarmType;
+
+    private boolean isOpened;
+
+    private Date lastUpdateTime;
+
+    private int rank;
+
+    private String ruleId;
+
+}

+ 36 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskHistory.java

@@ -0,0 +1,36 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+
+@Data
+@Accessors(chain = true)
+@TableName("RISKHISTORY")
+public class RiskHistory implements Serializable {
+
+    @TableId
+    private String id;
+
+    //riskSnap 表id
+    @TableField("SNAPID")
+    private String snapId;
+
+    //风险触发时间
+    @TableField("RISKTIME")
+    private Date riskTime;
+    //触发信息  冗余字段
+    @TableField("DATAINFO")
+    private String dataInfo;
+}

+ 65 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskModel.java

@@ -0,0 +1,65 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Data
+@Accessors(chain = true)
+@TableName("RISKMODEL")
+public class RiskModel  implements Serializable {
+
+    @TableId
+    private String id;
+
+    //模型名称
+    @TableField("NAME")
+    private String name;
+
+    //模型描述
+    @TableField("DESCRIPTION")
+    private  String description;
+
+    //计算时间窗口
+    @TableField("ROLLINGPERIOD")
+    private int rollingPeriod;
+
+    //风机型号
+    @TableField("MODEL")
+    private String model;
+
+    //风场id
+    @TableField("WINDPOWERSTATIONID")
+    private String windpowerstationId;
+
+    //模型所属部件
+    @TableField("PARTS")
+    private String parts;
+
+    //模型风险等级
+    @TableField("RANK")
+    private int rank;
+
+    //是否启用
+    @TableField("ENABLED")
+    private boolean enabled;
+
+    //创建日期
+    @TableField("CREATETIME")
+    private Date createTime;
+
+    @TableField(exist = false)
+    private List<RiskModelRule> ruleList;
+
+}

+ 43 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskModelRule.java

@@ -0,0 +1,43 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Data
+@Accessors(chain = true)
+@TableName("RISKMODELRULE")
+public class RiskModelRule implements Serializable {
+
+    @TableId
+    private String id;
+
+    //规则类型  custom 自定义  windturbine 风机原始报警
+    @TableField("RULETYPE")
+    private String ruleType;
+
+    //规则id
+    @TableField("RULEID")
+    private String ruleId;
+
+    //次数阈值
+    @TableField("COUNT")
+    private int count;
+
+    //保持时间 秒
+    @TableField("KEEPTIME")
+    private int keepTime;
+
+    //模型主表id
+    @TableField("RISKMODELID")
+    private String riskModelId;
+}

+ 64 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/RiskSnap.java

@@ -0,0 +1,64 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Data
+@Accessors(chain = true)
+@TableName("RISKSNAP")
+public class RiskSnap  implements Serializable {
+
+    @TableId
+    private String id;
+
+    //名称
+    @TableField("NAME")
+    private String name;
+
+    //描述
+    @TableField("DESCRIPTION")
+    private String description;
+
+    //级别
+    @TableField("RANK")
+    private int rank;
+
+    //风机id
+    @TableField("WINDTURBINEID")
+    private String windturbineId;
+
+    //风场id
+    @TableField("WINDPOWERSTATIONID")
+    private String windpowerstationId;
+
+    //风场名称
+    @TableField("WINDPOWERSTATIONNAME")
+    private String windpowerstationName;
+
+    //是否开启
+    @TableField("OPENED")
+    private boolean opened;
+
+    //所属部件
+    @TableField("PARTS")
+    private String parts;
+
+    //模型id
+    @TableField("RISKMODELID")
+    private String riskModelId;
+
+    //最后更新时间
+    @TableField("LASTUPDATETIME")
+    private Date lastUpdateTime;
+}

+ 63 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/WindPowerStation.java

@@ -0,0 +1,63 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @descrition:场站实体
+ * @author:Wanghs
+ * @date:2019-11-29
+ */
+public class WindPowerStation implements Serializable {
+
+    @TableId("ID")
+    private String id;
+
+    @TableField("NAME")
+    private String name;
+
+    @TableField("MODEL")
+    private String model;
+
+
+    private List<String> modelList;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+        this.modelList = Arrays.asList(model.split("/"));
+    }
+
+    public List<String> getModelList() {
+        return modelList;
+    }
+
+    public void setModelList(List<String> modelList) {
+        this.modelList = modelList;
+    }
+
+
+}

+ 27 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/entity/Windturbine.java

@@ -0,0 +1,27 @@
+package com.gyee.wisdom.riskcalc.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class Windturbine implements Serializable {
+    private String id;
+    private String code;
+    private String windpowerstationid;
+    private Double longitude;
+    private Double latitude;
+    private String modelid;
+    private String status;
+    private String projectid;
+    private String lineid;
+    private String firstintegratedtime;
+    private String photo;
+    private String name;
+    private String standardid;
+
+    public String getWindturbineCode(){
+        return this.code;
+    }
+}

+ 64 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/AlarmSnapMapper.java

@@ -0,0 +1,64 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnap;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+
+@Mapper
+public interface AlarmSnapMapper extends BaseMapper<AlarmSnap> {
+
+
+    List<AlarmSnap> queryAll(@Param("stid") String stationId,
+                             @Param("wtid") String windturbineId,
+                             @Param("category1") String category1,
+                             @Param("category2") String category2,
+                             @Param("rank") String rank,
+                             @Param("modelid") String modelid,
+                             @Param("isopened") Integer isopened,
+                             @Param("keyword") String keyword,
+                             @Param("starttime") Date startTime,
+                             @Param("endtime") Date endTime) throws Exception;
+
+    IPage<AlarmSnap> pageQueryAll(Page page,
+                                  @Param("stid") String stationId,
+                                  @Param("wtid") String windturbineId,
+                                  @Param("category1") String category1,
+                                  @Param("category2") String category2,
+                                  @Param("rank") String rank,
+                                  @Param("modelid") String modelid,
+                                  @Param("isopened") Integer isopened,
+                                  @Param("keyword") String keyword,
+                                  @Param("starttime") Date startTime,
+                                  @Param("endtime") Date endTime) throws Exception;
+
+
+    int batchInsert(List<AlarmSnap> list);
+
+    void batchUpdate(List<AlarmSnap> list);
+
+    AlarmSnap findByWindturbineIdAndAlertValue(@Param("windturbineid") String windturbineid,
+                                               @Param("alertvalue") int alertvalue);
+
+    AlarmSnap findByStationIdAndAlertValue(@Param("stationid") String stationId,
+                                           @Param("alertvalue") int alertvalue);
+
+    AlarmSnap findByTestingpointkey(@Param("testingpointkey") String testingpointkey);
+
+    List<AlarmSnap> getTopNumAlarm(@Param("category1") String category1,
+                                   @Param("topnum") int topnum);
+
+    List<AlarmSnap> getRecentAlarm(@Param("category1") String category1,
+                                   @Param("lastupdatetime") Date lastUpdateTime);
+
+
+    List<AlarmSnapInfo> getLatest(@Param("ruleIdList") List<String> ruleIdList, @Param("ruleType") String ruleType, @Param("lastDateTime") Date lastDateTime);
+}
+

+ 14 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskHistoryMapper.java

@@ -0,0 +1,14 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.RiskHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Mapper
+public interface RiskHistoryMapper extends BaseMapper<RiskHistory> {
+}

+ 28 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskModelMapper.java

@@ -0,0 +1,28 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.RiskModel;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Mapper
+public interface RiskModelMapper extends BaseMapper<RiskModel> {
+
+    @Select("select * from RISKMODEL")
+    @Results({
+            @Result(id = true, column = "id", property = "id"),
+            @Result(
+                    property = "ruleList",
+                    column = "id",
+                    javaType = List.class,
+                    many = @Many(select = "com.gyee.wisdom.riskcalc.mapper.RiskModelRuleMapper.findByRiskModelId")
+
+            )})
+     List<RiskModel> getRiskModel();
+}

+ 20 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskModelRuleMapper.java

@@ -0,0 +1,20 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.RiskModelRule;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Mapper
+public interface RiskModelRuleMapper extends BaseMapper<RiskModelRule> {
+
+
+    @Select("select * from RISKMODELRULE where  RISKMODELID=#{riskModeId}")
+    List<RiskModelRule> findByRiskModelId(@Param("riskModeId") String riskModeId);
+}

+ 14 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/RiskSnapMapper.java

@@ -0,0 +1,14 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.RiskSnap;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Mapper
+public interface RiskSnapMapper extends BaseMapper<RiskSnap> {
+}

+ 21 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/WindPowerStationMapper.java

@@ -0,0 +1,21 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.WindPowerStation;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author:Wanghs
+ * @date:2019-12-06
+ */
+@Mapper
+public interface WindPowerStationMapper extends BaseMapper<WindPowerStation> {
+    List<WindPowerStation> getStationAll(@Param("idString") String idString);
+
+    WindPowerStation selectByid(@Param("station")String station);
+
+    WindPowerStation getStationByid(@Param("id") String id);
+}

+ 22 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/mapper/WindturbineMapper.java

@@ -0,0 +1,22 @@
+package com.gyee.wisdom.riskcalc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.riskcalc.entity.Windturbine;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+@Mapper
+public interface WindturbineMapper extends BaseMapper<Windturbine> {
+    List<Windturbine> selectWindturbines();
+
+    Windturbine selectByPrimaryKey(@Param("id")String id);
+
+    List<Windturbine> selectWindturbineByCondition(@Param("stationId") String stationId,
+                                        @Param("modelId") String modelId);
+
+    List<Windturbine> selectWindturbineByCondition2(@Param("stationId") String stationId);
+
+}

+ 25 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/AlarmSnapService.java

@@ -0,0 +1,25 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnap;
+import com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo;
+import com.gyee.wisdom.riskcalc.mapper.AlarmSnapMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-07
+ */
+@Service
+public class AlarmSnapService extends ServiceImpl<AlarmSnapMapper, AlarmSnap> {
+
+    public List<AlarmSnapInfo> getLatestAlarmSnap(List<String> ruleIdList, String ruleType, Date lastDateTime){
+        List<AlarmSnapInfo> latestList = baseMapper.getLatest(ruleIdList, ruleType, lastDateTime);
+        return latestList;
+
+    }
+}

+ 15 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskHistoryService.java

@@ -0,0 +1,15 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.RiskHistory;
+import com.gyee.wisdom.riskcalc.mapper.RiskHistoryMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Service
+public class RiskHistoryService  extends ServiceImpl<RiskHistoryMapper, RiskHistory> {
+}

+ 15 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskModelRuleService.java

@@ -0,0 +1,15 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.RiskModelRule;
+import com.gyee.wisdom.riskcalc.mapper.RiskModelRuleMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Service
+public class RiskModelRuleService extends ServiceImpl<RiskModelRuleMapper, RiskModelRule> {
+}

+ 25 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskModelService.java

@@ -0,0 +1,25 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.RiskModel;
+import com.gyee.wisdom.riskcalc.mapper.RiskModelMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Service
+public class RiskModelService extends ServiceImpl<RiskModelMapper, RiskModel> {
+
+
+    public List<RiskModel> getRiskModel(){
+
+        List<RiskModel> riskModelList = baseMapper.getRiskModel();
+
+        return riskModelList;
+    }
+}

+ 39 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/RiskSnapService.java

@@ -0,0 +1,39 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.RiskHistory;
+import com.gyee.wisdom.riskcalc.entity.RiskSnap;
+import com.gyee.wisdom.riskcalc.mapper.RiskHistoryMapper;
+import com.gyee.wisdom.riskcalc.mapper.RiskSnapMapper;
+import com.gyee.wisdom.riskcalc.util.SnowflakeGenerator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-09-06
+ */
+@Service
+public class RiskSnapService extends ServiceImpl<RiskSnapMapper, RiskSnap> {
+
+    @Autowired
+    private RiskHistoryService riskHistoryService;
+
+    public boolean saveRiskSnap(List<RiskSnap> list) {
+        boolean saveSnap = saveOrUpdateBatch(list);
+        List<RiskHistory> historyList = new ArrayList<>();
+        list.forEach(s -> {
+            RiskHistory h = new RiskHistory().setId(String.valueOf(SnowflakeGenerator.generateId()))
+                    .setSnapId(s.getId())
+                    .setRiskTime(s.getLastUpdateTime())
+                    .setDataInfo("");
+            historyList.add(h);
+        });
+        boolean saveHistory = riskHistoryService.saveBatch(historyList);
+        return saveSnap && saveHistory;
+    }
+}

+ 23 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/WindpowerstationService.java

@@ -0,0 +1,23 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.gyee.wisdom.riskcalc.entity.WindPowerStation;
+import com.gyee.wisdom.riskcalc.mapper.WindPowerStationMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class WindpowerstationService {
+    @Autowired
+    private WindPowerStationMapper windPowerStationMapper;
+
+    public WindPowerStation getAllWindPowerStation(String id) {
+        return windPowerStationMapper.getStationByid(id);
+    }
+
+    public List<WindPowerStation> getAllStation(String id){
+        List<WindPowerStation> stationAll = windPowerStationMapper.getStationAll(id);
+        return stationAll;
+    }
+}

+ 62 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/service/WindturbineService.java

@@ -0,0 +1,62 @@
+package com.gyee.wisdom.riskcalc.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.riskcalc.entity.Windturbine;
+import com.gyee.wisdom.riskcalc.mapper.WindturbineMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Wang Jiawen
+ * @purpose
+ * @date 2019-08-30 16:45
+ */
+@Service
+@Slf4j
+public class WindturbineService extends ServiceImpl<WindturbineMapper, Windturbine> {
+      @Autowired
+      private WindturbineMapper windturbineMapper;
+      public List<Windturbine> windturbineList(){
+         return windturbineMapper.selectWindturbines();
+      }
+
+
+    public List< Windturbine> selectWindturbineByStationid(String stationId) {
+        List<Windturbine> lst = windturbineMapper.selectWindturbineByCondition2(stationId);
+        Map<Integer, Windturbine> map = new HashMap<>();
+        if (lst.size()<=0) {
+            return lst;
+        }
+        for(int i = 0;i<lst.size();i++) {
+            String s = lst.get(i).getName();
+            String regEx = "[^0-9]";
+            Pattern p = Pattern.compile(regEx);
+            Matcher m = p.matcher(s);
+            String trim = m.replaceAll("").trim();
+            int i1 = Integer.parseInt(trim);
+            map.put(i1,lst.get(i));
+        }
+        List<Map.Entry<Integer, Windturbine>> entryList1 = new ArrayList<Map.Entry<Integer, Windturbine>>(map.entrySet());
+        Collections.sort(entryList1, new Comparator<Map.Entry<Integer, Windturbine>>() {
+            @Override
+            public int compare(Map.Entry<Integer, Windturbine> o1, Map.Entry<Integer, Windturbine> o2) {
+                return o1.getKey().compareTo(o2.getKey()); // 升序排序
+            }
+        });
+        List<Windturbine> list = new ArrayList<>();
+        for (int i = 0;i<entryList1.size();i++){
+            Map.Entry<Integer, Windturbine> maps = entryList1.get(i);
+            list.add(maps.getValue());
+        }
+        return list;
+    }
+
+    public Windturbine selectWindturbineByWindturbineid(String windturbineid) {
+        return windturbineMapper.selectById(windturbineid);
+    }
+}

+ 161 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/util/SnowflakeGenerator.java

@@ -0,0 +1,161 @@
+package com.gyee.wisdom.riskcalc.util;
+
+/**
+ * Twitter_Snowflake<br>
+ * SnowFlake的结构如下(每部分用-分开):<br>
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br>
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0<br>
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截)
+ * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br>
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId<br>
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号<br>
+ * 加起来刚好64位,为一个Long型。<br>
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。
+ */
+public class SnowflakeGenerator {
+
+    // ==============================Fields===========================================
+    /** 开始时间截 (2015-01-01) */
+    private final long twepoch = 1420041600000L;
+
+    /** 机器id所占的位数 */
+    private final long workerIdBits = 5L;
+
+    /** 数据标识id所占的位数 */
+    private final long datacenterIdBits = 5L;
+
+    /** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */
+    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
+
+    /** 支持的最大数据标识id,结果是31 */
+    private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
+
+    /** 序列在id中占的位数 */
+    private final long sequenceBits = 12L;
+
+    /** 机器ID向左移12位 */
+    private final long workerIdShift = sequenceBits;
+
+    /** 数据标识id向左移17位(12+5) */
+    private final long datacenterIdShift = sequenceBits + workerIdBits;
+
+    /** 时间截向左移22位(5+5+12) */
+    private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
+
+    /** 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) */
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits);
+
+    /** 工作机器ID(0~31) */
+    private long workerId;
+
+    /** 数据中心ID(0~31) */
+    private long datacenterId;
+
+    /** 毫秒内序列(0~4095) */
+    private long sequence = 0L;
+
+    /** 上次生成ID的时间截 */
+    private long lastTimestamp = -1L;
+
+    //==============================Constructors=====================================
+    /**
+     * 构造函数
+     * @param workerId 工作ID (0~31)
+     * @param datacenterId 数据中心ID (0~31)
+     */
+    public SnowflakeGenerator(long workerId, long datacenterId) {
+        if (workerId > maxWorkerId || workerId < 0) {
+            throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
+        }
+        if (datacenterId > maxDatacenterId || datacenterId < 0) {
+            throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
+        }
+        this.workerId = workerId;
+        this.datacenterId = datacenterId;
+    }
+
+    // ==============================Methods==========================================
+    /**
+     * 获得下一个ID (该方法是线程安全的)
+     * @return SnowflakeId
+     */
+    public synchronized long nextId() {
+        long timestamp = timeGen();
+
+        //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
+        if (timestamp < lastTimestamp) {
+            throw new RuntimeException(
+                    String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+        }
+
+        //如果是同一时间生成的,则进行毫秒内序列
+        if (lastTimestamp == timestamp) {
+            sequence = (sequence + 1) & sequenceMask;
+            //毫秒内序列溢出
+            if (sequence == 0) {
+                //阻塞到下一个毫秒,获得新的时间戳
+                timestamp = tilNextMillis(lastTimestamp);
+            }
+        }
+        //时间戳改变,毫秒内序列重置
+        else {
+            sequence = 0L;
+        }
+
+        //上次生成ID的时间截
+        lastTimestamp = timestamp;
+
+        //移位并通过或运算拼到一起组成64位的ID
+        return ((timestamp - twepoch) << timestampLeftShift) //
+                | (datacenterId << datacenterIdShift) //
+                | (workerId << workerIdShift) //
+                | sequence;
+    }
+
+    /**
+     * 阻塞到下一个毫秒,直到获得新的时间戳
+     * @param lastTimestamp 上次生成ID的时间截
+     * @return 当前时间戳
+     */
+    protected long tilNextMillis(long lastTimestamp) {
+        long timestamp = timeGen();
+        while (timestamp <= lastTimestamp) {
+            timestamp = timeGen();
+        }
+        return timestamp;
+    }
+
+    /**
+     * 返回以毫秒为单位的当前时间
+     * @return 当前时间(毫秒)
+     */
+    protected long timeGen() {
+        return System.currentTimeMillis();
+    }
+
+
+    private static SnowflakeGenerator idWorker = null;
+
+    public synchronized static SnowflakeGenerator getIdWorker() {
+
+        if (idWorker == null)
+            idWorker = new SnowflakeGenerator(2, 3);
+
+        return idWorker;
+    }
+
+    public static long generateId() {
+        //if (idWorker == null)
+            //idWorker = new SnowflakeGenerator(0, 0);
+
+        //return idWorker.nextId();
+        SnowflakeGenerator snowflakeGenerator = getIdWorker();
+
+        return snowflakeGenerator.nextId();
+//        for (int i = 0; i < 1000; i++) {
+//            long id = idWorker.nextId();
+//            System.out.println(Long.toBinaryString(id));
+//            System.out.println(id);
+//        }
+    }
+}

+ 62 - 0
risk-calc/src/main/java/com/gyee/wisdom/riskcalc/util/SpringContextUtils.java

@@ -0,0 +1,62 @@
+package com.gyee.wisdom.riskcalc.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringContextUtils implements ApplicationContextAware {
+
+    /**
+     * 上下文对象实例
+     */
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        this.applicationContext = applicationContext;
+    }
+
+    /**
+     * 获取applicationContext
+     *
+     * @return
+     */
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    /**
+     * 通过name获取 Bean.
+     *
+     * @param name
+     * @return
+     */
+    public static Object getBean(String name) {
+        return getApplicationContext().getBean(name);
+    }
+
+    /**
+     * 通过class获取Bean.
+     *
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(Class<T> clazz) {
+        return getApplicationContext().getBean(clazz);
+    }
+
+    /**
+     * 通过name,以及Clazz返回指定的Bean
+     *
+     * @param name
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(String name, Class<T> clazz) {
+        return getApplicationContext().getBean(name, clazz);
+    }
+}

+ 91 - 0
risk-calc/src/main/resources/application.yaml

@@ -0,0 +1,91 @@
+server:
+  port: 8061
+
+spring:
+  application:
+    name: risk-calc
+  datasource:
+#    driver-class-name: oracle.jdbc.OracleDriver
+#    url: jdbc:oracle:thin:@10.83.68.165:1521:gdsj
+#    username: gdprod
+#    password: gd123
+    driver-class-name: com.mysql.jdbc.Driver
+    url: jdbc:mysql://123.60.219.66/wisdom_cs?useUnicode=true&characterEncoding=UTF-8
+    username: root
+    password: gyeepd@123
+#    driver-class-name: org.postgresql.Driver
+#    url: jdbc:postgresql://123.60.219.66:5432/wisdom_cs
+#    username: postgres
+#    password: gyeepd@123
+#    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      max-active: 20
+      initial-size: 1
+      min-idle: 3
+      max-wait: 60000
+      time-between-eviction-runs-millis: 60000
+      min-evictable-idle-time-millis: 300000
+      test-while-idle: true
+      test-on-borrow: false
+      test-on-return: false
+
+
+mybatis-plus:
+  typeAliasesPackage: com.gyee.wisdom.riskcalc.entity
+  mapper-locations: classpath:mappers/*.xml
+  global-config:
+    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+    id-type: 3
+    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+    field-strategy: 2
+    #驼峰下划线转换
+    db-column-underline: true
+    #mp2.3+ 全局表前缀 mp_
+    #table-prefix: mp_
+    #刷新mapper 调试神器
+    #refresh-mapper: true
+    #数据库大写下划线转换
+    #capital-mode: true
+    # Sequence序列接口实现类配置
+    key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
+    #逻辑删除配置(下面3个配置)
+    logic-delete-value: 1
+    logic-not-delete-value: 0
+    #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
+    #自定义填充策略接口实现
+    #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
+  configuration:
+    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
+    map-underscore-to-camel-case: true
+    cache-enabled: true
+    #配置JdbcTypeForNull, oracle数据库必须配置
+    jdbc-type-for-null: 'null'
+    callSettersOnNulls: true
+
+logging:
+  level:
+    com:
+      gyee:
+        wisdom:
+          alarm:
+            sharding:
+              mapper: debug
+              service: info
+
+calculate:
+  config:
+    #服务地址  ws://localhost:8011/wisdom
+    serviceUrl: http://10.83.68.205:8011/ts
+    #服务地址  ws://localhost:8011/wisdom
+    shardingServiceUrl: http://123.60.219.66:8075
+    #扫描线程轮询时间(单位:毫秒)
+    readThreadInterval: 1000
+    #计算线程轮询时间(单位:毫秒)
+    calcThreadInterval: 1000
+    #规则解析线程池大小
+    maxThreadCount: 4
+  cron:
+   #每天2点0分进行报警规则重新加载
+   CacheRefresh: 0 0 2 ? * *
+
+

+ 7 - 0
risk-calc/src/main/resources/banner.txt

@@ -0,0 +1,7 @@
+██████  ██ ███████ ██   ██        ██████  █████  ██       ██████
+██   ██ ██ ██      ██  ██        ██      ██   ██ ██      ██
+██████  ██ ███████ █████   █████ ██      ███████ ██      ██
+██   ██ ██      ██ ██  ██        ██      ██   ██ ██      ██
+██   ██ ██ ███████ ██   ██        ██████ ██   ██ ███████  ██████
+
+

+ 64 - 0
risk-calc/src/main/resources/log4j2.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN">
+    <Properties>
+        <Property name="Pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %t %M(%F:%L) %m%n</Property>
+    </Properties>
+    <Filter type="ThresholdFilter" level="INFO"/>
+
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="${Pattern}"/>
+        </Console>
+        <RollingFile name="RollingFileInfo" fileName="logs/info.log"
+                     filePattern="logs/%d{yyyy-MM}/info-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <DefaultRolloverStrategy>
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log" />
+                    <IfLastModified age="24H" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+        <RollingFile name="RollingFileWarn" fileName="logs/warn.log"
+                     filePattern="logs/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <DefaultRolloverStrategy>
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log" />
+                    <IfLastModified age="24H" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+        <RollingFile name="RollingFileError" fileName="logs/error.log"
+                     filePattern="logs/%d{yyyy-MM}/error-%d{yyyy-MM-dd}.%i.log">
+            <PatternLayout pattern="${Pattern}"/>
+            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
+            <Policies>
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <DefaultRolloverStrategy>
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log" />
+                    <IfLastModified age="24H" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+    </Appenders>
+
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+         <!-- <appender-ref ref="RollingFileInfo"/>
+            <appender-ref ref="RollingFileWarn"/>-->
+            <appender-ref ref="RollingFileError"/>
+        </Root>
+    </Loggers>
+</Configuration>

+ 174 - 0
risk-calc/src/main/resources/mappers-oracle/AlarmSnapMapper.xml

@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.AlarmSnapMapper">
+
+    <select id="queryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2, CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT, MODELID, TESTINGPOINTKEY, DATAINFO )
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+                #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
+                #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
+                #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
+                #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
+                #{item.testingpointKey},#{item.dataInfo}
+            from dual )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
+            UPDATE alarmsnap
+            <set>
+                <if test="item.isOpened != null">ISOPENED = #{item.isOpened},</if>
+                <if test="item.lastUpdateTime != null">LASTUPDATETIME = #{item.lastUpdateTime},</if>
+                <if test="item.category3 != null">CATEGORY3 = #{item.category3},</if>
+                <if test="item.dataInfo != null">DATAINFO = #{item.dataInfo}</if>
+            </set>
+            <where>
+                <if test="item.id != null">
+                    and id = #{item.id}
+                </if>
+            </where>
+        </foreach>
+    </update>
+
+    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.stationid=#{stationid} and a.alertvalue = #{alertvalue}  and rownum = 1
+        </where>
+    </select>
+
+    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue}  and rownum = 1
+        </where>
+    </select>
+
+    <select id="findByTestingpointkey" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.testingpointkey=#{testingpointkey} and rownum = 1
+        </where>
+    </select>
+
+    <select id="getTopNumAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ( select * from alarmsnap h
+        <if test="category1!= null and category1!=''">
+            <if test="category1=='SYZ'">
+                where h.lastupdatetime >(select sysdate-14 from dual)
+            </if>
+
+        </if>
+        order by h.lastupdatetime desc) t
+        where t.category1 = #{category1}  and rownum &lt;= #{topnum}
+    </select>
+
+    <select id="getRecentAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        SELECT * FROM alarmsnap
+        WHERE category1 = #{category1} and lastupdatetime >= #{lastupdatetime}
+        order by lastupdatetime desc
+    </select>
+    <select id="getLatest" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo">
+        SELECT
+        s.id as id,
+        s.alerttext as alertText,
+        s.stationid as stationId,
+        s.alertvalue as alertValue,
+        s.stationname as stationName,
+        s.windturbineid  as windturbineId,
+        s.isopened as isOpened,
+        s.lastupdatetime as lastUpdateTime,
+        s.rank as rank,
+        r.id as ruleId
+        from
+        alarmsnap s
+        left join alertrule2 r on s.alertvalue = r.ednavalue
+        where
+        1=1
+        <if test="ruleType!= null">
+            and s.category1 =#{ruleType}
+        </if>
+        <if test="category1 !=null and category1 !=''">
+            and r.id in
+            <foreach item="item" index="index" collection="ruleIdList"  open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="lastDateTime!= null">
+            and s.lastupdatetime &gt;= #{lastDateTime,jdbcType=DATE}
+        </if>
+
+    </select>
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-oracle/RiskHistoryMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskHistoryMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-oracle/RiskModelMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-oracle/RiskModelRuleMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelRuleMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-oracle/RiskSnapMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskSnapMapper">
+</mapper>

+ 29 - 0
risk-calc/src/main/resources/mappers-oracle/WindPowerStationMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindPowerStationMapper">
+
+    <select id="getStationAll" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="idString !=null and idString !=''">
+                and a.id like '%${idString}%'
+            </if>
+        </where>
+    </select>
+
+    <select id="getStationByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="id !=null and id !=''">
+                and a.id =#{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation">
+        select * from  windpowerstation a where a.id=#{station}
+    </select>
+
+</mapper>

+ 101 - 0
risk-calc/src/main/resources/mappers-oracle/WindturbineMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindturbineMapper">
+    <resultMap id="BaseResultMap" type="com.gyee.wisdom.riskcalc.entity.Windturbine">
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="code" jdbcType="VARCHAR" property="code" />
+        <result column="windpowerstationid" jdbcType="VARCHAR" property="windpowerstationid" />
+        <result column="longitude" jdbcType="DECIMAL" property="longitude" />
+        <result column="latitude" jdbcType="DECIMAL" property="latitude" />
+        <result column="modelid" jdbcType="VARCHAR" property="modelid" />
+        <result column="status" jdbcType="VARCHAR" property="status" />
+        <result column="projectid" jdbcType="VARCHAR" property="projectid" />
+        <result column="lineid" jdbcType="VARCHAR" property="lineid" />
+        <result column="firstintegratedtime" jdbcType="TIMESTAMP" property="firstintegratedtime" />
+        <result column="photo" jdbcType="VARCHAR" property="photo" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="standardid" jdbcType="INTEGER" property="standardid" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,
+       	  	      	code,
+       	  	      	windpowerstationid,
+       	  	      	longitude,
+       	  	      	latitude,
+       	  	      	modelid,
+       	  	      	status,
+       	  	      	projectid,
+       	  	      	lineid,
+       	  	      	firstintegratedtime,
+       	  	      	photo,
+       	  	      	name,
+       	  	    	  	standardid
+    </sql>
+
+    <select id="selectWindturbines" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine
+    </select>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from windturbine
+        where id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="selectWindturbineByCondition" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+
+        <where>
+            1=1
+            <if test="stationId !=null and stationId !=''">
+                and a.windpowerstationid = #{stationId}
+            </if>
+            <if test="modelId !=null and modelId !=''">
+                and a.modelId = #{modelId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectWindturbineByCondition2" parameterType="java.util.Map"  resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+        <where>
+            <if test="stationId !=null and stationId !=''">
+                 a.windpowerstationid = #{stationId}
+            </if>
+        </where>
+    </select>
+
+
+
+    <sql id="Example_Where_Clause">
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
+            </foreach>
+        </where>
+    </sql>
+</mapper>

+ 167 - 0
risk-calc/src/main/resources/mappers-postgresql/AlarmSnapMapper.xml

@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.AlarmSnapMapper">
+
+    <select id="queryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2, CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT, MODELID, TESTINGPOINTKEY, DATAINFO )
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+                #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
+                #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
+                #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
+                #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
+                #{item.testingpointKey},#{item.dataInfo}
+            from dual )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            UPDATE ALARMSNAP
+            <set>
+                <if test="item.isOpened != null">ISOPENED = #{item.isOpened}</if>
+                <if test="item.lastUpdateTime != null">,LASTUPDATETIME = #{item.lastUpdateTime}</if>
+                <if test="item.category3 != null">,CATEGORY3 = #{item.category3}</if>
+                <if test="item.dataInfo != null">,DATAINFO = #{item.dataInfo}</if>
+            </set>
+            <where>
+                <if test="item.id != null">
+                    and id = #{item.id}
+                </if>
+            </where>
+        </foreach>
+    </update>
+
+    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.stationid=#{stationid} and a.alertvalue = #{alertvalue}  limit 1
+        </where>
+    </select>
+
+    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue}  limit  1
+        </where>
+    </select>
+
+    <select id="findByTestingpointkey" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.testingpointkey=#{testingpointkey}  limit  1
+        </where>
+    </select>
+
+    <select id="getTopNumAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ( select * from alarmsnap h order by h.lastupdatetime desc) t
+        where t.category1 = #{category1}  limit 0 OFFSET #{topnum}
+    </select>
+
+    <select id="getRecentAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        SELECT * FROM alarmsnap
+        WHERE category1 = #{category1} and lastupdatetime >= #{lastupdatetime}
+        order by lastupdatetime desc
+    </select>
+    <select id="getLatest" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo">
+        SELECT
+        s.id as id,
+        s.alerttext as alertText,
+        s.stationid as stationId,
+        s.alertvalue as alertValue,
+        s.stationname as stationName,
+        s.windturbineid as windturbineId,
+        s.isopened as isOpened,
+        s.lastupdatetime as lastUpdateTime,
+        s.rank as rank,
+        r.id as ruleId
+        from
+        alarmsnap s
+        left join alertrule2 r on s.alertvalue = r.ednavalue
+        where
+        1=1
+        <if test="ruleType!= null">
+            and s.category1 =#{ruleType}
+        </if>
+        <if test="category1 !=null and category1 !=''">
+            and r.id in
+            <foreach item="item" index="index" collection="ruleIdList"  open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="lastDateTime!= null">
+            and s.lastupdatetime &gt;= #{lastDateTime,jdbcType=DATE}
+        </if>
+
+    </select>
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-postgresql/RiskHistoryMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskHistoryMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-postgresql/RiskModelMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-postgresql/RiskModelRuleMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelRuleMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers-postgresql/RiskSnapMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskSnapMapper">
+</mapper>

+ 29 - 0
risk-calc/src/main/resources/mappers-postgresql/WindPowerStationMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindPowerStationMapper">
+
+    <select id="getStationAll" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="idString !=null and idString !=''">
+                and a.id like '%${idString}%'
+            </if>
+        </where>
+    </select>
+
+    <select id="getStationByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="id !=null and id !=''">
+                and a.id =#{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation">
+        select * from  windpowerstation a where a.id=#{station}
+    </select>
+
+</mapper>

+ 100 - 0
risk-calc/src/main/resources/mappers-postgresql/WindturbineMapper.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindturbineMapper">
+    <resultMap id="BaseResultMap" type="com.gyee.wisdom.riskcalc.entity.Windturbine">
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="code" jdbcType="VARCHAR" property="code" />
+        <result column="windpowerstationid" jdbcType="VARCHAR" property="windpowerstationid" />
+        <result column="longitude" jdbcType="DECIMAL" property="longitude" />
+        <result column="latitude" jdbcType="DECIMAL" property="latitude" />
+        <result column="modelid" jdbcType="VARCHAR" property="modelid" />
+        <result column="status" jdbcType="VARCHAR" property="status" />
+        <result column="projectid" jdbcType="VARCHAR" property="projectid" />
+        <result column="lineid" jdbcType="VARCHAR" property="lineid" />
+        <result column="firstintegratedtime" jdbcType="TIMESTAMP" property="firstintegratedtime" />
+        <result column="photo" jdbcType="VARCHAR" property="photo" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="standardid" jdbcType="INTEGER" property="standardid" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,
+       	  	      	code,
+       	  	      	windpowerstationid,
+       	  	      	longitude,
+       	  	      	latitude,
+       	  	      	modelid,
+       	  	      	status,
+       	  	      	projectid,
+       	  	      	lineid,
+       	  	      	firstintegratedtime,
+       	  	      	photo,
+       	  	      	name,
+       	  	    	  	standardid
+    </sql>
+
+    <select id="selectWindturbines" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine
+    </select>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from windturbine
+        where id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="selectWindturbineByCondition" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+
+        <where>
+            1=1
+            <if test="stationId !=null and stationId !=''">
+                and a.windpowerstationid = #{stationId}
+            </if>
+            <if test="modelId !=null and modelId !=''">
+                and a.modelId = #{modelId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectWindturbineByCondition2" parameterType="java.util.Map"  resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+        <where>
+            <if test="stationId !=null and stationId !=''">
+                 a.windpowerstationid = #{stationId}
+            </if>
+        </where>
+    </select>
+
+
+    <sql id="Example_Where_Clause">
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
+            </foreach>
+        </where>
+    </sql>
+</mapper>

+ 187 - 0
risk-calc/src/main/resources/mappers/AlarmSnapMapper.xml

@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.AlarmSnapMapper">
+
+
+    <select id="queryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime desc
+    </select>
+
+    <select id="pageQueryAll" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime desc
+    </select>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2,
+        CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT,
+        MODELID, TESTINGPOINTKEY, DATAINFO )
+        <foreach collection="list" item="item" index="index" separator="union all">
+            ( select
+            #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
+            #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
+            #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
+            #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
+            #{item.testingpointKey},#{item.dataInfo}
+            from dual )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            UPDATE ALARMSNAP
+            <set>
+                <if test="item.isOpened != null">ISOPENED = #{item.isOpened}</if>
+                <if test="item.lastUpdateTime != null">,LASTUPDATETIME = #{item.lastUpdateTime}</if>
+                <if test="item.category3 != null">,CATEGORY3 = #{item.category3}</if>
+                <if test="item.dataInfo != null">,DATAINFO = #{item.dataInfo}</if>
+            </set>
+            <where>
+                <if test="item.id != null">
+                    and id = #{item.id}
+                </if>
+            </where>
+        </foreach>
+    </update>
+
+    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ALARMSNAP a
+        <where>
+            a.stationid=#{stationid} and a.alertvalue = #{alertvalue} limit 1
+        </where>
+    </select>
+
+    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ALARMSNAP a
+        <where>
+            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue} limit 1
+        </where>
+    </select>
+
+    <select id="findByTestingpointkey" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ALARMSNAP a
+        <where>
+            a.testingpointkey=#{testingpointkey} limit 1
+        </where>
+    </select>
+
+    <select id="getTopNumAlarm" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        select * from ( select * from alarmsnap h
+
+        order by h.lastupdatetime desc) t
+        where t.category1 = #{category1} limit 0,#{topnum}
+    </select>
+
+    <select id="getRecentAlarm" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnap">
+        SELECT * FROM alarmsnap
+        WHERE category1 = #{category1} and lastupdatetime >= #{lastupdatetime}
+        order by lastupdatetime desc
+    </select>
+
+    <select id="getLatest" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.AlarmSnapInfo">
+        SELECT
+        s.id as id,
+        s.alerttext as alertText,
+        s.stationid as stationId,
+        s.alertvalue as alertValue,
+        s.stationname as stationName,
+        s.windturbineid as windturbineId,
+        s.category1 as alarmType,
+        s.isopened as isOpened,
+        s.lastupdatetime as lastUpdateTime,
+        s.rank as rank,
+        r.id as ruleId
+        from
+        alarmsnap s
+        <if test="ruleType !=null and ruleType !=''">
+            <if test="ruleType=='custom'">
+                left join alertrule2 r on CONVERT(s.alertvalue,SIGNED) = r.ednavalue
+            </if>
+            <if test="ruleType=='windturbine'">
+                left join warning2 r on s.alertvalue = r.ednavalue
+            </if>
+        </if>
+        where
+        1=1
+        <if test="ruleType!= null">
+            and s.category1 =#{ruleType}
+        </if>
+        <if test="ruleIdList !=null and ruleIdList.size>0">
+            and r.id in
+            <foreach item="item" index="index" collection="ruleIdList"  open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="lastDateTime!= null">
+            and s.lastupdatetime &gt;= #{lastDateTime,jdbcType=DATE}
+        </if>
+
+    </select>
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers/RiskHistoryMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskHistoryMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers/RiskModelMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers/RiskModelRuleMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskModelRuleMapper">
+</mapper>

+ 4 - 0
risk-calc/src/main/resources/mappers/RiskSnapMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.RiskSnapMapper">
+</mapper>

+ 29 - 0
risk-calc/src/main/resources/mappers/WindPowerStationMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindPowerStationMapper">
+
+    <select id="getStationAll" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="idString !=null and idString !=''">
+                and a.id like '%${idString}%'
+            </if>
+        </where>
+    </select>
+
+    <select id="getStationByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="id !=null and id !=''">
+                and a.id =#{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByid" resultType="com.gyee.wisdom.riskcalc.entity.WindPowerStation">
+        select * from  windpowerstation a where a.id=#{station}
+    </select>
+
+</mapper>

+ 101 - 0
risk-calc/src/main/resources/mappers/WindturbineMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.riskcalc.mapper.WindturbineMapper">
+    <resultMap id="BaseResultMap" type="com.gyee.wisdom.riskcalc.entity.Windturbine">
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="code" jdbcType="VARCHAR" property="code" />
+        <result column="windpowerstationid" jdbcType="VARCHAR" property="windpowerstationid" />
+        <result column="longitude" jdbcType="DECIMAL" property="longitude" />
+        <result column="latitude" jdbcType="DECIMAL" property="latitude" />
+        <result column="modelid" jdbcType="VARCHAR" property="modelid" />
+        <result column="status" jdbcType="VARCHAR" property="status" />
+        <result column="projectid" jdbcType="VARCHAR" property="projectid" />
+        <result column="lineid" jdbcType="VARCHAR" property="lineid" />
+        <result column="firstintegratedtime" jdbcType="TIMESTAMP" property="firstintegratedtime" />
+        <result column="photo" jdbcType="VARCHAR" property="photo" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="standardid" jdbcType="INTEGER" property="standardid" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,
+       	  	      	code,
+       	  	      	windpowerstationid,
+       	  	      	longitude,
+       	  	      	latitude,
+       	  	      	modelid,
+       	  	      	status,
+       	  	      	projectid,
+       	  	      	lineid,
+       	  	      	firstintegratedtime,
+       	  	      	photo,
+       	  	      	name,
+       	  	    	  	standardid
+    </sql>
+
+    <select id="selectWindturbines" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine
+    </select>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from windturbine
+        where id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="selectWindturbineByCondition" parameterType="java.util.Map" resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+
+        <where>
+            1=1
+            <if test="stationId !=null and stationId !=''">
+                and a.windpowerstationid = #{stationId}
+            </if>
+            <if test="modelId !=null and modelId !=''">
+                and a.modelId = #{modelId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectWindturbineByCondition2" parameterType="java.util.Map"  resultType="com.gyee.wisdom.riskcalc.entity.Windturbine"  >
+        select * from windturbine a
+        <where>
+            <if test="stationId !=null and stationId !=''">
+                 a.windpowerstationid = #{stationId}
+            </if>
+        </where>
+    </select>
+
+
+
+    <sql id="Example_Where_Clause">
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
+            </foreach>
+        </where>
+    </sql>
+</mapper>

+ 2 - 1
schedule-job/alarm-schedule/build.gradle

@@ -19,6 +19,7 @@ apply plugin: "io.spring.dependency-management"
 
 
 dependencies {
+    implementation fileTree(dir: "src/main/lib", include: "*.jar")
     implementation project(":common:utils")
     implementation("$bootGroup:spring-boot-starter-web")
     implementation("$bootGroup:spring-boot-starter-undertow")
@@ -27,7 +28,7 @@ dependencies {
     implementation("org.apache.logging.log4j:log4j-jul:$log4jVersion")
     implementation("org.apache.logging.log4j:log4j-api:$log4jVersion")
     implementation("org.apache.logging.log4j:log4j-slf4j-impl:$log4jVersion")
-    implementation ("mysql:mysql-connector-java:$mysqlConnectorVersion")
+  //  implementation ("mysql:mysql-connector-java:$mysqlConnectorVersion")
     implementation ("com.alibaba:druid:$alibabaDruidVersion")
     implementation ("com.alibaba:fastjson:$fastjsonVersion")
 

+ 1 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportTask.java

@@ -59,6 +59,7 @@ public class EarlyReportTask implements Callable<TaskResult> {
                 .setReportDate(new Date())
                 .setStationId(stationId)
                 .setStationName(StationCache.getStationName(stationId))
+                .setRelatedParts(reportParam.getWindturbineParts())
                 .setReportName(StationCache.getStationName(stationId)+"风机"+reportParam.getAnalysisName()+"诊断报告")
                 .setStatStartDate(statStartTime)
                 .setStatEndDate(statEndTime)

+ 3 - 3
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlertRule2.java

@@ -45,9 +45,9 @@ public class AlertRule2 implements Serializable {
     @ChineseDes("类别")
     @TableField("category")
     private String category;
-    @ChineseDes("range范围")
-    @TableField("`range`")
-    private String range;
+//    @ChineseDes("range范围")
+//    @TableField("`range`")
+//    private String range;
     @ChineseDes("场站")
     @TableField("station")
     private String station;

+ 3 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReport.java

@@ -38,6 +38,9 @@ public class EarlyReport {
     @TableField("STATIONNAME")
     private String stationName;
 
+    @TableField("RELATEDPARTS")
+    private String relatedParts;
+
     //分析起始日期
     @TableField("STATSTARTDATE")
     private Date statStartDate;

+ 5 - 1
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportWindturbine.java

@@ -31,7 +31,7 @@ public class EarlyReportWindturbine {
     private String windturbineCode;
 
     //风机型号
-    @TableField("model")
+    @TableField("MODEL")
     private String model;
 
     //是否为对比数据(本周数据与上周数据对比)如果是对比数据,则需要将上次报告的所罗列的风机 针对本周数据进行计算
@@ -50,6 +50,10 @@ public class EarlyReportWindturbine {
     @TableField("REPORTID")
     private String reportId;
 
+    //是否已审核
+    @TableField("VERIFIED")
+    private boolean verified;
+
     @TableField(exist = false)
     private List<EarlyReportAlarm> alarmInfoList;
 }

+ 19 - 1
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/job/EarlyReportHandler.java

@@ -46,7 +46,25 @@ public class EarlyReportHandler {
      * @author Wanghs
      * @description 生成风机诊断报告方法
      * xxl-job参数为json格式
-     * {"customRuleId":["qwe","123"],"interval":14,"resultLimit":3,"windturbineRuleId":["daf","456"]}
+     *
+     * {
+     *     "reportName":"主轴隐患感知",
+     *     "windturbineParts":"CLX",
+     *     "interval": 7,
+     *     "customRuleId":
+     *     [
+     *         "ZX051NSSUP82",
+     *         "ZX534NSSUP82",
+     *         "ZX085NSSUP82"
+     *     ],
+     *     "windturbineRuleId":
+     *     [],
+     *     "resultLimit": 3,
+     *     "stationId": "NSS_FDC",
+     *     "model": "UP82"
+     * }
+     *
+     *
      * customRuleId为自定义报警规则id 对应alertrule2
      * windturbineRuleId风机报警id 对应warning2
      * interval 为分析时间区间,执行时以当天0点,前推相应天数

+ 2 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/EarlyReportParam.java

@@ -13,6 +13,8 @@ import java.util.List;
 @Data
 public class EarlyReportParam implements Serializable {
 
+    //部件编码  CLX,FDJ等
+    private String windturbineParts;
     //分析名称(部件名称)
     private String analysisName;
     //时间间隔(天),即从当日0点,向前间隔天数,为计算区间

BIN
schedule-job/alarm-schedule/src/main/lib/ojdbc6.jar


+ 9 - 5
schedule-job/alarm-schedule/src/main/resources/application.yaml

@@ -9,10 +9,14 @@ spring:
   application:
     name: alarm-schedule
   datasource:
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://123.60.219.66/wisdom_cs?useUnicode=true&characterEncoding=UTF-8
-    username: root
-    password: gyeepd@123
+#    driver-class-name: com.mysql.jdbc.Driver
+#    url: jdbc:mysql://123.60.219.66/wisdom_cs?useUnicode=true&characterEncoding=UTF-8
+#    username: root
+#    password: gyeepd@123
+    driver-class-name: oracle.jdbc.OracleDriver
+    url: jdbc:oracle:thin:@123.60.213.70:1521:gdnxfd
+    username: nxfdprod
+    password: gdnxfd123
     # ----------------------------------------------------------------
     type: com.alibaba.druid.pool.DruidDataSource
     druid:
@@ -106,7 +110,7 @@ knife4j:
 xxl:
   job:
     admin:
-      addresses: http://localhost:8080/xxl-job-admin
+      addresses: http://localhost:8081/xxl-job-admin
     accessToken:
     executor:
       appname: alarm-schedule

+ 167 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmCountMapper.xml

@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper">
+
+    <resultMap type="com.gyee.wisdom.alarm.schedule.entity.AlarmCount" id="myAlarmCount">
+        <result property="id" column="id"/>
+        <result property="alarmDate" column="alarmDate"/>
+        <result property="snapId" column="snapId"/>
+        <result property="count" column="count"/>
+        <result property="time" column="time"/>
+        <result property="alertValue" column="alertValue"/>
+        <result property="windturbineId" column="windturbineId"/>
+    </resultMap>
+
+    <insert id="singleInsert" >
+        insert into alarmcount (id, alarmdate, snapid, count)
+        values
+        (#{item.id}, #{item.alarmdate}, #{item.snapId}, #{item.count})
+    </insert>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into alarmcount ( ID, alarmdate, snapid, count,time )
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate}, #{item.snapId}, #{item.count} ,#{item.time}
+            from dual )
+        </foreach>
+    </insert>
+
+
+
+    <select id="selectAlarmHistoryBySnapid" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmHistory"  >
+             select * from ${alarmhistory} where snapid = #{snapid}
+             and alerttime &gt;= #{startdate,jdbcType=DATE} and alerttime &lt; #{enddate,jdbcType=DATE} order by alerttime asc
+    </select>
+
+
+
+
+    <select id="statAlarmCount1" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat1"  >
+        select t.*, s.stationid, s.windturbineid, s.alerttext from (
+            select snapid, sum(count) as count,sum(time) time from alarmcount a
+            left join alarmsnap ss on a.snapid = ss.id
+            where ss.stationid = #{stationid} and ss.windturbineid is not null
+            and alarmdate &gt;= #{startdate,jdbcType=DATE} and alarmdate &lt; #{enddate,jdbcType=DATE}
+            group by snapid ) t
+        left join alarmsnap s on t.snapid = s.id
+        order by s.windturbineid
+    </select>
+
+    <select id="statAlarmCount5" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat1"  >
+        select * from alarmcount a
+            LEFT JOIN alarmsnap s on a.snapid = s.id
+        <where>
+            1=1
+            <if test="startdate !=null and enddate !=null">
+                and a.alarmdate &gt;= #{startdate,jdbcType=DATE} and a.alarmdate &lt;= #{enddate,jdbcType=DATE}
+            </if>
+            <if test="stationid !=null and stationid !=''">
+                and s.stationid=#{stationid}
+            </if>
+            <if test="windturbineid !=null and windturbineid !=''">
+                and s.windturbineid=#{windturbineid}
+            </if>
+        </where>
+    </select>
+
+    <select id="statAlarmCount" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat"  >
+        select t.snapid, t.count as sum, t.times as times, s.windturbineid as wtnum, s.alerttext as text from (
+        select snapid, sum(count)  as count, sum(time) as times  from alarmcount a
+        left join alarmsnap ss on a.snapid = ss.id
+        where ss.stationid = #{stationid} and ss.windturbineid is not null
+        and alarmdate >= #{startdate,jdbcType=DATE} and alarmdate &lt;= #{enddate,jdbcType=DATE}
+        group by snapid ) t
+        left join alarmsnap s on t.snapid = s.id
+        order by s.windturbineid
+    </select>
+
+    <select id="statAlarmCount3" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat"  >
+        select t.snapid, t.count as sum, t.times as times, s.windturbineid as wtnum, s.alerttext as text from (
+            select snapid, sum(count)  as count, sum(time) as times  from alarmcount a
+            left join alarmsnap ss on a.snapid = ss.id
+        <where>
+        1=1
+            <if test="startdate !=null and enddate !=null">
+                and a.alarmdate &gt;= #{startdate,jdbcType=DATE} and a.alarmdate &lt;= #{enddate,jdbcType=DATE}
+            </if>
+            <if test="stationid !=null and stationid !=''">
+                and ss.stationid=#{stationid}
+            </if>
+            <if test="windturbineid !=null and windturbineid !=''">
+                and ss.windturbineid=#{windturbineid}
+            </if>
+        </where>
+            group by snapid ) t
+            left join alarmsnap s on t.snapid = s.id
+        order by s.windturbineid
+    </select>
+
+    <select id="statAlarmCountByName" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat"  >
+        select t.count as sum, s.windturbineid as wtnum, s.alerttext as text from (
+        select snapid, sum(count)  as count  from alarmcount a
+        left join alarmsnap ss on a.snapid = ss.id
+        where ss.alerttext=#{name} and ss.stationid = #{stationid} and ss.windturbineid is not null
+        and alarmdate >= #{startdate,jdbcType=DATE} and alarmdate &lt;= #{enddate,jdbcType=DATE}
+        group by snapid ) t
+        left join alarmsnap s on t.snapid = s.id
+        order by s.windturbineid
+    </select>
+
+    <select id="selectAlertRuleNames" resultType="com.gyee.wisdom.alarm.schedule.model.CodeValue" >
+        select name as code, description as value from alertrule2 group by name, description
+    </select>
+
+
+    <select id="statAlarmCount2" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmStat1">
+        select t.*, s.stationid, s.windturbineid, s.alerttext from (
+            select snapid, sum(count) as count,sum(time) time from alarmcount a
+            left join alarmsnap ss on a.snapid = ss.id
+            where
+            ss.windturbineid is not null
+            and a.alarmdate &gt;= #{currentDate,jdbcType=DATE}
+            <if test="stationid !=null and stationid !=''">
+                and  ss.stationid = #{stationid}
+            </if>
+            group by snapid ) t
+        left join alarmsnap s on t.snapid = s.id
+        order by s.windturbineid
+    </select>
+
+    <select id="getAlarmCountInfo" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmCountInfo">
+        SELECT
+            a.id, a.alarmdate,a.snapid,a.count, a.time,
+            s.ALERTTEXT, s.WINDTURBINEID, s.RANK,
+            r.id as alertruleid, r.relatedParts, r.PROJECT
+        FROM
+            alarmcount a
+        LEFT JOIN alarmsnap s ON a.snapid = s.id
+        LEFT JOIN alertrule2 r ON s.ALERTVALUE = r.ednaValue
+        WHERE
+            a.alarmdate = #{currentDate}
+        AND s.windturbineid = #{windturbineid}
+    </select>
+
+
+
+    <select id="getAlarmCountBySnapIdList" parameterType="java.util.Map" resultMap="myAlarmCount">
+        SELECT
+        a.id as id, a.alarmdate as alarmDate,a.snapid as snapId,a.count as count, a.time as time, s.alertvalue as alertValue, s.windturbineid as windturbineId
+        FROM
+        alarmcount a
+        LEFT JOIN alarmsnap s ON a.snapid = s.id
+        WHERE
+        1=1
+        <if test="startTime !=null and endTime !=null">
+            and a.alarmdate &gt;= #{startTime,jdbcType=DATE} and a.alarmdate &lt;#{endTime,jdbcType=DATE}
+        </if>
+        <if test="snapIdList !=null and snapIdList.size > 0">
+            and a.snapid in
+            <foreach collection="snapIdList" item="snapId" index="index" open="(" close=")" separator=",">
+                #{snapId}
+            </foreach>
+        </if>
+
+    </select>
+
+</mapper>

+ 203 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmHistoryMapper.xml

@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlarmHisotryMapper">
+
+    <insert id="singleInsert" >
+        insert into ${tbName} (id, alerttime, messagetype,snapid, datainfo)
+        values
+        (#{item.id}, #{item.alertTime}, #{item.messageType},#{item.snapId},#{item.dataInfo})
+    </insert>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into ${tbName} ( ID, ALERTTIME, MESSAGETYPE, SNAPID, DATAINFO,ALERTTEXTLAST)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alertTime}, #{item.messageType},#{item.snapId},#{item.dataInfo},#{item.alertTextLast}
+            from dual )
+        </foreach>
+    </insert>
+
+    <!--<insert id="batchInsert" useGeneratedKeys="false">-->
+        <!--INSERT ALL-->
+        <!--<foreach item="item" index="index" collection="list">-->
+            <!--into ${tbName}-->
+            <!--values-->
+            <!--(#{item.id}, #{item.alertTime}, #{item.messageType},#{item.snapId},#{item.dataInfo})-->
+        <!--</foreach>-->
+        <!--SELECT 1 FROM DUAL-->
+    <!--</insert>-->
+
+    <!-- 单表查询 -->
+    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.model.AlarmHistoryInfo">
+        select a.*,
+        b.stationid,
+        b.windturbineid,
+        b.projectid,
+        b.lineid,
+        b.alertvalue,
+        b.category1,
+        b.category2,
+        b.category3,
+        b.rank,
+        b.stationname,
+        b.projectname,
+        b.linename,
+        b.windturbinename,
+        b.alerttext,
+        b.modelid
+        from ${tbName} a
+        left join alarmsnap b on a.snapid = b.id
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and a.alerttime &gt;= #{starttime} and a.alerttime &lt;= #{endtime}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and b.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and b.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and b.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and b.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and b.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and b.modelid=#{modelid}
+            </if>
+            <if test="snapid !=null ">
+                and a.snapid=#{snapid}
+            </if>
+            <if test="messagetype !=null ">
+                and a.messagetype=#{messagetype}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and b.alerttext like #{keyword}
+            </if>
+        </where>
+        order by a.alerttime  desc
+    </select>
+
+
+    <!-- 联合查询 -->
+    <select id="pageQueryAll2" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.model.AlarmHistoryInfo">
+        select a.*,
+        b.stationid,
+        b.windturbineid,
+        b.projectid,
+        b.lineid,
+        b.alertvalue,
+        b.category1,
+        b.category2,
+        b.category3,
+        b.rank,
+        b.stationname,
+        b.projectname,
+        b.linename,
+        b.windturbinename,
+        b.alerttext,
+        b.modelid
+        from (select * from alarmhistory_by_${yearmonth}) a
+        left join alarmsnap b on a.snapid = b.id
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and a.alerttime &gt;= #{starttime,jdbcType=DATE} and a.alerttime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and b.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and b.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and b.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and b.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and b.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and b.modelid=#{modelid}
+            </if>
+            <if test="snapid !=null ">
+                and a.snapid=#{snapid}
+            </if>
+            <if test="messagetype !=null ">
+                and a.messagetype=#{messagetype}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and b.alerttext like #{keyword}
+            </if>
+        </where>
+        order by a.alerttime  desc
+    </select>
+
+    <select id="selectSnapCount" parameterType="java.util.Map" resultType="java.lang.Integer">
+        select count(*) from ${tbName} where snapid = #{snapid}
+            and messagetype = '1'
+            and alerttime &gt;= #{starttime,jdbcType=DATE} and alerttime &lt; #{endtime,jdbcType=DATE}
+    </select>
+
+
+    <select id="selectHistoryAlarmSnapAndWarning"
+            resultType="com.gyee.wisdom.alarm.schedule.entity.FaultWarning">
+
+        select h.id,
+        a.stationid,
+        h.snapid,
+        a.windturbineid,
+        a.windturbinename,
+        a.lastupdatetime,
+        w.ednavalue,
+        h.alerttime,
+        w.warningtypeid
+        from ${tbName} h
+        left join alarmsnap a on h.snapid = a.id
+        left join warning2 w on a.alertvalue = w.ednavalue
+        and a.modelid = w.modelid
+        <where>
+            and a.category1 = 'windturbine'
+            and h.messagetype = '1'
+            and
+            <if test="starttime !=null and endtime !=null">
+                h.alerttime  &gt;= #{starttime,jdbcType=DATE} and h.alerttime  &lt; #{endtime,jdbcType=DATE}
+            </if>
+        </where>
+
+
+    </select>
+
+    <update id="timedCreatTable">
+        CREATE TABLE alarmhistory_${stationname}_${yearmonth} (
+                                                   `ID` decimal(65,0) NOT NULL,
+                                                   `ALERTTIME` datetime(6) NOT NULL,
+                                                   `MESSAGETYPE` char(1) NOT NULL,
+                                                   `SNAPID` decimal(65,0) NOT NULL,
+                                                   `DATAINFO` text,
+                                                   `ALERTTEXTLAST` varchar(50)
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    </update>
+    <update id="timedAlterTable">
+        alter table alarmhistory_${stationname}_${yearmonth}
+            add primary key (`id`)
+    </update>
+    <update id="timedCreatAlerttimeIndex">
+        create index IX_AH_${stationname}_${yearmonth}_ALARMTIME on alarmhistory_${stationname}_${yearmonth} (alerttime)
+    </update>
+    <update id="timedCreatSnapidIndex">
+        create index IX_AH_${stationname}_${yearmonth}_SNAPID on alarmhistory_${stationname}_${yearmonth} (snapid)
+    </update>
+    <select id="isHasTable" resultType="java.lang.Integer">
+        select count(*) from information_schema.TABLES where table_name =upper('ALARMHISTORY_${stationname}_${yearmonth}')
+    </select>
+
+
+</mapper>

+ 137 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlarmSnapMapper.xml

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlarmSnapMapper">
+
+    <select id="queryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            1=1
+            <if test="starttime !=null and endtime !=null">
+                and lastupdatetime &gt;= #{starttime,jdbcType=DATE} and lastupdatetime &lt;= #{endtime,jdbcType=DATE}
+            </if>
+            <if test="stid !=null and stid !=''">
+                and a.stationid=#{stid}
+            </if>
+            <if test="wtid !=null and wtid !=''">
+                and a.windturbineid=#{wtid}
+            </if>
+            <if test="category1 !=null and category1 !=''">
+                and a.category1=#{category1}
+            </if>
+            <if test="category2 !=null and category2 !=''">
+                and a.category2=#{category2}
+            </if>
+            <if test="rank !=null and rank !=''">
+                and a.rank=#{rank}
+            </if>
+            <if test="modelid !=null and modelid !=''">
+                and a.modelid=#{modelid}
+            </if>
+            <if test="isopened !=null ">
+                and a.isopened=#{isopened}
+            </if>
+            <if test="keyword !=null and keyword !=''">
+                and a.alerttext like '%${keyword}%'
+            </if>
+        </where>
+        order by a.lastupdatetime  desc
+    </select>
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2, CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT, MODELID, TESTINGPOINTKEY, DATAINFO )
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+                #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
+                #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
+                #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
+                #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
+                #{item.testingpointKey},#{item.dataInfo}
+            from dual )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            UPDATE alarmsnap
+            <set>
+                <if test="item.isOpened != null">ISOPENED = #{item.isOpened},</if>
+                <if test="item.lastUpdateTime != null">LASTUPDATETIME = #{item.lastUpdateTime},</if>
+                <if test="item.category3 != null">CATEGORY3 = #{item.category3},</if>
+                <if test="item.dataInfo != null">DATAINFO = #{item.dataInfo},</if>
+            </set>
+            <where>
+                <if test="item.id != null">
+                    and id = #{item.id}
+                </if>
+            </where>
+        </foreach>
+    </update>
+
+    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.stationid=#{stationid} and a.alertvalue = #{alertvalue}  limit 1
+        </where>
+    </select>
+
+    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue}  limit  1
+        </where>
+    </select>
+
+    <select id="findByTestingpointkey" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from  ALARMSNAP a
+        <where>
+            a.testingpointkey=#{testingpointkey}  limit  1
+        </where>
+    </select>
+
+    <select id="getTopNumAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        select * from ( select * from alarmsnap h order by h.lastupdatetime desc) t
+        where t.category1 = #{category1}  limit 0,#{topnum}
+    </select>
+
+    <select id="getRecentAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.AlarmSnap">
+        SELECT * FROM alarmsnap
+        WHERE category1 = #{category1} and lastupdatetime >= #{lastupdatetime}
+        order by lastupdatetime desc
+    </select>
+
+</mapper>

+ 5 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/AlertRule2Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlertRule2Mapper">
+
+</mapper>

+ 7 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportAlarmMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportAlarmMapper">
+
+
+
+</mapper>

+ 7 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportConclusionMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportConclusionMapper">
+
+
+
+</mapper>

+ 7 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportMapper">
+
+
+
+</mapper>

+ 7 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyReportWindturbineMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportWindturbineMapper">
+
+
+
+</mapper>

+ 17 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/EarlyWarnScoreMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyWarnScoreMapper">
+
+
+    <select id="getListEarlyWarnScore" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.EarlyWarnScore">
+        select * from earlywarnscore e
+        <where>
+            1=1
+            <if test="windturbineid !=null and windturbineid !=''">
+                and e.windturbineid = #{windturbineid}
+            </if>
+        </where>
+    </select>
+
+
+</mapper>

+ 35 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/FaultStatisticWindturbineMapper.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.FaultStatisticWindturbineMapper">
+
+
+    <select id="selectFaultStatisticWindturbineByyearandmonth"
+            resultType="com.gyee.wisdom.alarm.schedule.entity.FaultStatisticWindturbine">
+
+        select *
+        from FaultStatisticWindturbine
+        <where>
+
+            <if test="year !=null and year !=''">
+                and year = #{year}
+            </if>
+
+            <if test="month !=null and month !=''">
+                and month = #{month}
+            </if>
+
+            <if test="warningtype !=null and warningtype !=''">
+                and warningtype =#{warningtype}
+            </if>
+            <if test="windturbineId !=null and windturbineId !=''">
+                and windturbineId = #{windturbineId}
+            </if>
+
+            <if test="stationid !=null and stationid !=''">
+                and windpowerstationid = #{stationid}
+            </if>
+
+        </where>
+
+    </select>
+</mapper>

+ 34 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/Warning2Mapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.Warning2Mapper">
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.Warning2">
+        select * from WARNING2 a
+        <where>
+            1=1
+            <if test="modelId !=null and modelId !=''">
+                and a.MODELID like '%${modelId}%'
+            </if>
+            <if test="name !=null and name !=''">
+                and a.CHINESETEXT like '%${name}%'
+            </if>
+            <if test="isLeaf !=null and isLeaf !=''">
+                and a.ISLEAF = #{isLeaf}
+            </if>
+        </where>
+    </select>
+    <select id="getMaxIdByModelId" parameterType="java.util.Map" resultType="java.lang.String">
+        select Max(ID) from WARNING2 a
+        <where>
+            1=1
+            <if test="modelId !=null and modelId !=''">
+                and a.ID like '%${modelId}%'
+            </if>
+
+        </where>
+    </select>
+
+    <select id="selectGroupType" resultType="java.lang.String">
+         select warningtypeid  as type from   warning2  group by warningtypeid
+    </select>
+</mapper>

+ 29 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/WindPowerStationMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.WindPowerStationMapper">
+
+    <select id="getStationAll" resultType="com.gyee.wisdom.alarm.schedule.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="idString !=null and idString !=''">
+                and a.id like '%${idString}%'
+            </if>
+        </where>
+    </select>
+
+    <select id="getStationByid" resultType="com.gyee.wisdom.alarm.schedule.entity.WindPowerStation" >
+        select * from windpowerstation a
+        <where>
+            1=1
+            <if test="id !=null and id !=''">
+                and a.id =#{id}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByid" resultType="com.gyee.wisdom.alarm.schedule.entity.WindPowerStation">
+        select * from  windpowerstation a where a.id=#{station}
+    </select>
+
+</mapper>

+ 69 - 0
schedule-job/alarm-schedule/src/main/resources/mappers-oracle/WindturbineMapper.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.WindturbineMapper">
+    <resultMap id="BaseResultMap" type="com.gyee.wisdom.alarm.schedule.entity.Windturbine">
+        <result column="id" jdbcType="VARCHAR" property="id" />
+        <result column="code" jdbcType="VARCHAR" property="code" />
+        <result column="windpowerstationid" jdbcType="VARCHAR" property="windpowerstationid" />
+        <result column="longitude" jdbcType="DECIMAL" property="longitude" />
+        <result column="latitude" jdbcType="DECIMAL" property="latitude" />
+        <result column="modelid" jdbcType="VARCHAR" property="modelid" />
+        <result column="status" jdbcType="VARCHAR" property="status" />
+        <result column="projectid" jdbcType="VARCHAR" property="projectid" />
+        <result column="lineid" jdbcType="VARCHAR" property="lineid" />
+        <result column="firstintegratedtime" jdbcType="TIMESTAMP" property="firstintegratedtime" />
+        <result column="photo" jdbcType="VARCHAR" property="photo" />
+        <result column="name" jdbcType="VARCHAR" property="name" />
+        <result column="standardid" jdbcType="INTEGER" property="standardid" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,
+       	  	      	code,
+       	  	      	windpowerstationid,
+       	  	      	longitude,
+       	  	      	latitude,
+       	  	      	modelid,
+       	  	      	status,
+       	  	      	projectid,
+       	  	      	lineid,
+       	  	      	firstintegratedtime,
+       	  	      	photo,
+       	  	      	name,
+       	  	    	  	standardid
+    </sql>
+
+    <select id="selectWindturbines" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.Windturbine"  >
+        select * from windturbine
+    </select>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from windturbine
+        where id = #{id,jdbcType=VARCHAR}
+    </select>
+
+    <select id="selectWindturbineByCondition" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.schedule.entity.Windturbine"  >
+        select * from windturbine a
+
+        <where>
+            1=1
+            <if test="stationId !=null and stationId !=''">
+                and a.windpowerstationid = #{stationId}
+            </if>
+            <if test="modelId !=null and modelId !=''">
+                and a.modelId = #{modelId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectWindturbineByCondition2" parameterType="java.util.Map"  resultType="com.gyee.wisdom.alarm.schedule.entity.Windturbine"  >
+        select * from windturbine a
+        <where>
+            <if test="stationId !=null and stationId !=''">
+                 a.windpowerstationid = #{stationId}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 1 - 0
settings.gradle

@@ -15,4 +15,5 @@ include "alarm:custom"
 include "alarm:windturbinenew"
 include "alarm:scadasnew"
 include "data-adapter"
+include 'risk-calc'
 

+ 106 - 33
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/biz/InspectOrderBiz.java

@@ -1,6 +1,7 @@
 package com.gyee.wisdom.alarm.sharding.biz;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -141,9 +142,8 @@ public class InspectOrderBiz {
         IPage<InspectOrder> pageResult = inspectOrderService.page(page, wrapper);
 
 
-
         if (pageResult.getRecords().size() > 0) {
-            List<EarlyReportWindturbine> reportWindturbineById = earlyReportWindturbineService.getReportWindturbineById(pageResult.getRecords().stream().map(s -> s.getReportWindturbineId()).collect(Collectors.toList()));
+            List<EarlyReportWindturbine> reportWindturbineById = earlyReportWindturbineService.getReportWindturbineByIds(pageResult.getRecords().stream().map(s -> s.getReportWindturbineId()).collect(Collectors.toList()));
             pageResult.getRecords().forEach(s -> {
                 Optional<EarlyReportWindturbine> first = reportWindturbineById.stream().filter(k -> k.getId().equals(s.getReportWindturbineId())).findFirst();
                 if (first.isPresent())
@@ -171,20 +171,26 @@ public class InspectOrderBiz {
         ResponseWrapper wrapper = null;
         //代表为 报告评审环节,因此需要 向InspectOrder表中新增数据
         if (StringUtils.isBlank(dto.getId())) {
-
-            InspectOrder order = new InspectOrder();
-            order.setId(String.valueOf(SnowflakeGenerator.generateId()))
-                    .setVerifyTime(new Date())
-                    .setVerifyUser(user)
-                    .setVerifyView(dto.getVerifyView())
-                    .setVerifyResult(dto.isVerifyResult())
-                    .setClosed(dto.isClosed());
-
-            boolean save = inspectOrderService.save(order);
-            if (save)
-                wrapper = ResponseWrapper.success("评审成功");
-            else
-                wrapper = ResponseWrapper.error("评审失败");
+            try {
+                InspectOrder order = new InspectOrder();
+                order.setId(String.valueOf(SnowflakeGenerator.generateId()))
+                        .setVerifyTime(new Date())
+                        .setVerifyUser(user)
+                        .setVerifyView(dto.getVerifyView())
+                        .setVerifyResult(dto.isVerifyResult())
+                        .setWindturbineId(dto.getWindturbineId())
+                        .setReportWindturbineId(dto.getReportWindturbineId())
+                        .setClosed(dto.isClosed());
+                boolean saveInspectOrder = inspectOrderService.saveInspectOrder(order);
+                if (saveInspectOrder)
+                    wrapper = ResponseWrapper.success("评审成功");
+                else
+                    wrapper = ResponseWrapper.error("评审失败");
+            } catch (Exception e) {
+                wrapper = ResponseWrapper.error("评审失败,数据异常", JSON.toJSONString(e.getStackTrace()));
+            } finally {
+                return wrapper;
+            }
         } else {
             InspectOrder order = inspectOrderService.getById(dto.getId());
 
@@ -192,21 +198,22 @@ public class InspectOrderBiz {
                 wrapper = ResponseWrapper.error("找不到对应的巡检单");
             } else {
                 //计划环节
-                if (dto.getCreatePlanTime() != null) {
+                if (order.getCreatePlanTime() == null && order.getInspectTime() == null) {
                     order.setCreatePlanUser(user)
-                            .setCreatePlanTime(dto.getCreatePlanTime())
+                            .setCreatePlanTime(dto.getCreatePlanTime() == null ? new Date() : dto.getCreatePlanTime())
                             .setPlanStartTime(dto.getPlanStartTime())
                             .setPlanEndTime(dto.getPlanEndTime());
                 }
                 //巡检环节
-                if (dto.getInspectTime() != null) {
+                else if (order.getInspectTime() == null && order.getCreatePlanTime() != null) {
                     order.setInspectUser(user)
-                            .setInspectTime(dto.getInspectTime())
+                            .setInspectTime(dto.getInspectTime() == null ? new Date() : dto.getInspectTime())
                             .setInspectView(dto.getInspectView())
                             .setAccordreport(dto.isAccordreport())
                             .setClosed(dto.isClosed());
+                } else {
+                    return ResponseWrapper.error("系统异常,请联系管理员");
                 }
-
                 boolean b = inspectOrderService.updateById(order);
                 if (b)
                     wrapper = ResponseWrapper.success("更新成功");
@@ -223,25 +230,67 @@ public class InspectOrderBiz {
         Map<String, Integer> inspectOrderCount = getInspectOrderCount(stationId);
         Map<String, Integer> noVerifyReport = getNoVerifyReport(stationId);
 
-      String dicString="";
-        JSONObject orderObject = new JSONObject();
-        JSONObject reportObject = new JSONObject();
-        for (Map.Entry<String, Integer> entry :
-                inspectOrderCount.entrySet()) {
-            orderObject.put(entry.getKey(), entry.getValue());
-        }
+
+        JSONArray jsonArray = new JSONArray();
+        int wshCount = 0;
         for (Map.Entry<String, Integer> entry :
                 noVerifyReport.entrySet()) {
-            reportObject.put(entry.getKey(), entry.getValue());
+            JSONObject reportObject = new JSONObject();
             String partName = DataDictionaryCache.getPartName(entry.getKey());
-          dicString=dicString+","+entry.getKey()+"-"+partName;
+            reportObject.put("code", entry.getKey());
+            reportObject.put("name", partName);
+            reportObject.put("count", entry.getValue());
+            wshCount = wshCount + entry.getValue();
+
+            jsonArray.add(reportObject);
+        }
+
+        List<String> collect = noVerifyReport.keySet().stream().collect(Collectors.toList());
+
+        if (collect.size() < 4) {
+
+            if (!collect.contains("CLX")) {
+                JSONObject reportObject = new JSONObject();
+                reportObject.put("code", "CLX");
+                reportObject.put("name", "齿轮箱");
+                reportObject.put("count", 0);
+                jsonArray.add(reportObject);
+            }
+            if (!collect.contains("FDJ")) {
+                JSONObject reportObject = new JSONObject();
+                reportObject.put("code", "FDJ");
+                reportObject.put("name", "发电机");
+                reportObject.put("count", 0);
+                jsonArray.add(reportObject);
+            }
+            if (!collect.contains("BJXT")) {
+                JSONObject reportObject = new JSONObject();
+                reportObject.put("code", "BJXT");
+                reportObject.put("name", "变桨系统");
+                reportObject.put("count", 0);
+                jsonArray.add(reportObject);
+            }
+            if (!collect.contains("CDL")) {
+                JSONObject reportObject = new JSONObject();
+                reportObject.put("code", "CDL");
+                reportObject.put("name", "传动链");
+                reportObject.put("count", 0);
+                jsonArray.add(reportObject);
+            }
         }
-        dicString=dicString+",YSH-已审核,WJH-未计划,YJH-已计划,DXJ-待巡检,YXJ-已巡检";
 
+
+        JSONObject orderObject = new JSONObject();
+        for (Map.Entry<String, Integer> entry :
+                inspectOrderCount.entrySet()) {
+            orderObject.put(entry.getKey(), entry.getValue());
+        }
+        orderObject.put("WSH", wshCount);
+        String dicString = "WSH-未审核,YSH-已审核,WJH-未计划,YJH-已计划,DXJ-待巡检,YXJ-已巡检";
         JSONObject resultObject = new JSONObject();
-        resultObject.put("report", reportObject);
+        resultObject.put("report", jsonArray);
         resultObject.put("order", orderObject);
-        resultObject.put("dic",dicString);
+        resultObject.put("dic", dicString);
         return resultObject;
     }
 
@@ -305,4 +354,28 @@ public class InspectOrderBiz {
 
         return resultMap;
     }
+
+    public List<InspectOrderDto> getOrderDtoList(Date startTime, Date endTime) {
+
+        QueryWrapper<InspectOrder> wrapper = new QueryWrapper<>();
+        if (startTime != null)
+            wrapper.gt("VERIFYTIME", startTime);
+        if (endTime != null)
+            wrapper.lt("VERIFYTIME", endTime);
+        wrapper.eq("VERIFYRESULT", true);
+
+        List<InspectOrder> list = inspectOrderService.list(wrapper);
+        List<InspectOrderDto> orderDtoList = packInspectOrderInspectOrderDto(list);
+        if (orderDtoList.size() > 0) {
+            List<EarlyReportWindturbine> reportWindturbineById = earlyReportWindturbineService.getReportWindturbineByIds(list.stream().map(s -> s.getReportWindturbineId()).collect(Collectors.toList()));
+            orderDtoList.forEach(s -> {
+                Optional<EarlyReportWindturbine> first = reportWindturbineById.stream().filter(k -> k.getId().equals(s.getReportWindturbineId())).findFirst();
+                if (first.isPresent())
+                    s.setEarlyReportWindturbine(first.get());
+            });
+        }
+        return orderDtoList;
+    }
+
+
 }

+ 2 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/config/MybatisPlusConfig.java

@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @Configuration
+@EnableTransactionManagement
 public class MybatisPlusConfig {
 
     /*

+ 3 - 6
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/HomeController.java

@@ -2,12 +2,10 @@ package com.gyee.wisdom.alarm.sharding.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gyee.wisdom.alarm.sharding.biz.InspectOrderBiz;
-import com.gyee.wisdom.alarm.sharding.entity.Alertrule2;
 import com.gyee.wisdom.alarm.sharding.model.AlarmCountStat;
 import com.gyee.wisdom.alarm.sharding.model.AlarmHome;
+import com.gyee.wisdom.alarm.sharding.model.HiddeDanger;
 import com.gyee.wisdom.alarm.sharding.service.AlarmCountService;
 import com.gyee.wisdom.alarm.sharding.service.AlarmSnapService;
 import com.gyee.wisdom.alarm.sharding.service.Alertrule2Service;
@@ -17,7 +15,6 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -115,8 +112,8 @@ public class HomeController {
 
         ResponseWrapper wrapper = null;
         try {
-            Map<String, Double> map = alarmCountService.hiddeDanger();
-            wrapper = ResponseWrapper.success("请求成功", map);
+            List<HiddeDanger> list= alarmCountService.hiddeDanger();
+            wrapper = ResponseWrapper.success("请求成功", list);
         } catch (Exception ex) {
             wrapper = ResponseWrapper.error("请求失败", JSON.toJSONString(ex.getStackTrace()));
         }

+ 12 - 3
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/InspectOrderController.java

@@ -2,7 +2,6 @@ package com.gyee.wisdom.alarm.sharding.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gyee.wisdom.alarm.sharding.biz.InspectOrderBiz;
-import com.gyee.wisdom.alarm.sharding.entity.Alertrule2;
 import com.gyee.wisdom.alarm.sharding.model.InspectOrderDto;
 import com.gyee.wisdom.alarm.sharding.util.ResponseWrapper;
 import com.gyee.wisdom.alarm.sharding.util.TokenUtil;
@@ -11,7 +10,6 @@ import io.jsonwebtoken.Claims;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -60,7 +58,7 @@ public class InspectOrderController {
             @Parameter(name = "stationId", description = "场站id") @RequestParam(value = "stationId", required = false) String stationId,
             @Parameter(name = "windturbineId", description = "风机编号") @RequestParam(value = "windturbineId", required = false) String windturbineId
     ) {
-        List<InspectOrderDto> inspectOrderDtoPage = inspectOrderBiz.getInspectOrderDtoPage(stationId,windturbineId);
+        List<InspectOrderDto> inspectOrderDtoPage = inspectOrderBiz.getInspectOrderDtoPage(stationId, windturbineId);
         ResponseWrapper wrapper = ResponseWrapper.success("请求成功", inspectOrderDtoPage);
         return wrapper;
     }
@@ -81,4 +79,15 @@ public class InspectOrderController {
     }
 
 
+    @Operation(description = "第三方系统获取巡检单")
+    @GetMapping("/order/list")
+    public ResponseWrapper getInspectOrderList(@Parameter(name = "startTime", description = "起始时间") @RequestParam(value = "startTime", required = true) long startTime,
+                                               @Parameter(name = "endTime", description = "结束时间") @RequestParam(value = "endTime", required = true) long endTime
+
+    ) {
+        ResponseWrapper wrapper = null;
+        List<InspectOrderDto> orderDtoList = inspectOrderBiz.getOrderDtoList(new Date(startTime), new Date(endTime));
+        wrapper = new ResponseWrapper<>().success("请求成功", orderDtoList);
+        return wrapper;
+    }
 }

+ 7 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/AlarmStat.java

@@ -25,4 +25,11 @@ public class AlarmStat implements Serializable{
 
     private String windturbineCode;
 
+    //alertvalue
+    private Integer alertvalue;
+    //部件
+    private String parts;
+    //风机名称
+    private String wname;
+
 }

+ 18 - 4
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/InspectOrder.java

@@ -3,7 +3,10 @@ package com.gyee.wisdom.alarm.sharding.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -74,17 +77,28 @@ public class InspectOrder implements Serializable {
     private EarlyReportWindturbine earlyReportWindturbine;
 
     @TableField(exist = false)
+    @Getter(AccessLevel.NONE)
+    @Setter(AccessLevel.NONE)
     private String step;
 
-    private String getStep() {
+    @TableField(exist = false)
+    private int stepMark;
+
+    public void setStep(String step) {
+        this.step = step;
+    }
+    public String getStep() {
+        //节点 1-待审核,2-已审核,3-未计划,4-已计划,5-未巡检,6-已巡检
         String result = "";
         if (inspectTime != null && createPlanTime != null && verifyTime != null) {
             result = "已巡检";
+            stepMark=6;
         } else if (inspectTime == null && createPlanTime != null && verifyTime != null) {
-            result = "待巡检";
-
+            result = "已计划,未巡检";
+            stepMark=5;
         } else if (inspectTime == null && createPlanTime == null && verifyTime != null && verifyResult == true) {
-            result = "未计划";
+            result = "已评审,未计划";
+
         } else if (inspectTime == null && createPlanTime == null && verifyTime != null && verifyResult == false) {
             result="审核不通过";
         }else{

+ 3 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/AlarmCountMapper.java

@@ -61,4 +61,7 @@ public interface AlarmCountMapper extends BaseMapper<AlarmCount> {
     AlarmCount selectBySnapId(@Param("id") long id,
                                      @Param("dtStart") Date dtStart,
                                      @Param("dtEnd") Date dtEnd);
+
+    List<AlarmStat> selectAlarmCountBydate(@Param("dtStart") Date dtStart,
+                              @Param("dtEnd") Date dtEnd);
 }

+ 1 - 1
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/Alertrule2Mapper.java

@@ -24,7 +24,7 @@ public interface Alertrule2Mapper extends BaseMapper<Alertrule2> {
                                    @Param("rank")String rank,
                                    @Param("category")String category,
                                    @Param("enabled") String enabled,
-                                   @Param("relatedParts")String relatedparts);
+                                   @Param("relatedparts")String relatedparts);
 
     Integer getMaxEdnaValue();
 

+ 12 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/model/HiddeDanger.java

@@ -0,0 +1,12 @@
+package com.gyee.wisdom.alarm.sharding.model;
+
+import lombok.Data;
+
+//隐患分布查询返回包装类
+@Data
+public class HiddeDanger {
+    private String code;
+    private String codeName;
+    private int count;
+    private double time;
+}

+ 20 - 13
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/model/InspectOrderDto.java

@@ -5,7 +5,11 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.gyee.wisdom.alarm.sharding.entity.EarlyReport;
 import com.gyee.wisdom.alarm.sharding.entity.EarlyReportAlarm;
 import com.gyee.wisdom.alarm.sharding.entity.EarlyReportWindturbine;
+import com.gyee.wisdom.alarm.sharding.entity.InspectOrder;
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -59,31 +63,34 @@ public class InspectOrderDto implements Serializable {
 
     private EarlyReportWindturbine earlyReportWindturbine;
 
-    private String step;
 
-    private String getStep() {
-        String result = "";
+    @Getter(AccessLevel.NONE)
+    @Setter(AccessLevel.NONE)
+    private String step;
 
-        if(earlyReport){
-            result="待审核";
-        }else{
+    public InspectOrderDto setStep(String step) {
+        this.step = step;
+        return this;
+    }
+    public String getStep() {
+        if (earlyReport) {
+            step = "待审核";
+        } else {
             if (inspectTime != null && createPlanTime != null && verifyTime != null) {
-                result = "已巡检";
+                step = "已巡检";
             } else if (inspectTime == null && createPlanTime != null && verifyTime != null) {
-                result = "待巡检";
+                step = "待巡检";
 
             } else if (inspectTime == null && createPlanTime == null && verifyTime != null && verifyResult == true) {
-                result = "未计划";
+                step = "未计划";
             } else if (inspectTime == null && createPlanTime == null && verifyTime != null && verifyResult == false) {
-                result="审核不通过";
-            }else{
+                step = "审核不通过";
+            } else {
                 return "";
             }
         }
-
         return step;
     }
 
 
-
 }

+ 62 - 50
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmCountService.java

@@ -3,6 +3,7 @@ package com.gyee.wisdom.alarm.sharding.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.sharding.cache.DataDictionaryCache;
 import com.gyee.wisdom.alarm.sharding.cache.WindturbineCache;
 import com.gyee.wisdom.alarm.sharding.entity.*;
 import com.gyee.wisdom.alarm.sharding.mapper.AlarmCountMapper;
@@ -10,6 +11,7 @@ import com.gyee.wisdom.alarm.sharding.mapper.AlarmHisotryMapper;
 import com.gyee.wisdom.alarm.sharding.model.AlarmCountStat;
 import com.gyee.wisdom.alarm.sharding.model.AlarmHistoryInfo;
 import com.gyee.wisdom.alarm.sharding.model.CodeValue;
+import com.gyee.wisdom.alarm.sharding.model.HiddeDanger;
 import com.gyee.wisdom.alarm.sharding.util.ResponseWrapper;
 import com.gyee.wisdom.alarm.sharding.util.SnowflakeGenerator;
 import com.gyee.wisdom.common.utils.DateUtil;
@@ -62,7 +64,7 @@ public class AlarmCountService extends ServiceImpl<AlarmCountMapper, AlarmCount>
     @Value("${homestat.alertIds}")
     private String alertIds;
 
-    public List<AlarmSnap> getAllSnap(){
+    public List<Integer> getEdnValue(){
         //分解规则id
         String[] split = alertIds.split(",");
         List<Alertrule2> alertrule2s = new ArrayList<>();
@@ -72,34 +74,49 @@ public class AlarmCountService extends ServiceImpl<AlarmCountMapper, AlarmCount>
                 alertrule2s.add(alertrule2);
             }
         }
-        //根据alertrule2的alertvalue得到alarmsnap
-        List<AlarmSnap> alarmSnaps = new ArrayList<>();
+        List<Integer> list = new ArrayList<>();
         for (Alertrule2 alertrule2 :alertrule2s){
-            alarmSnaps.addAll(alarmSnapService.selectByAlertValue(alertrule2.getEdnaValue()));
+            list.add(alertrule2.getEdnaValue());
         }
-        return alarmSnaps;
+        return list;
     }
 
-    public Map<String,Double> hiddeDanger(){
+    public List<HiddeDanger> hiddeDanger(){
         try {
-            Map<String,Double> doubleMap =new HashMap<>();
-            List<AlarmSnap> alarmSnaps = getAllSnap();
+            List<Integer> list = getEdnValue();
+            List<HiddeDanger> hiddeDangerList =new ArrayList<>();
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             String strDate = sdf.format(DateUtil.addDays(new Date(),-1));
             Date dtStart = sdf.parse(strDate);
             Date dtEnd = DateUtil.addDays(dtStart, 1);
-            Map<String,List<AlarmSnap>> map = alarmSnaps.stream().collect(Collectors.groupingBy(AlarmSnap::getCategory3));
-            for (Map.Entry<String,List<AlarmSnap>> stringListMap : map.entrySet()){
+            List<AlarmStat> alarmStats = alarmCountMapper.selectAlarmCountBydate(dtStart, dtEnd);
+            List<AlarmStat> alarmStatList = new ArrayList<>();
+            for (AlarmStat alarmStat : alarmStats){
+                for (Integer s : list){
+                    if (alarmStat.getAlertvalue() != null &&(alarmStat.getAlertvalue().equals(s))){
+                        alarmStatList.add(alarmStat);
+                    }
+                }
+            }
+            //根据部件分组
+            Map<String,List<AlarmStat>> map = alarmStatList.stream().collect(Collectors.groupingBy(AlarmStat::getParts));
+            for (Map.Entry<String,List<AlarmStat>> stringListMap : map.entrySet()){
                 double time = 0;
-                for (AlarmSnap alarmSnap : stringListMap.getValue()){
-                    AlarmCount alarmCount = alarmCountMapper.selectBySnapId(alarmSnap.getId(), dtStart, dtEnd);
-                    if (alarmCount != null){
-                        time = time + alarmCount.getTime();
+                int count = 0;
+                for (AlarmStat alarmStat : stringListMap.getValue()){
+                    if (alarmStat != null){
+                        time = time + alarmStat.getTimes();
+                        count = count + alarmStat.getSum();
                     }
                 }
-                doubleMap.put(stringListMap.getKey(),time);
+                HiddeDanger hiddeDanger = new HiddeDanger();
+                hiddeDanger.setCode(stringListMap.getKey());
+                hiddeDanger.setCodeName(DataDictionaryCache.getPartName(stringListMap.getKey()));
+                hiddeDanger.setCount(count);
+                hiddeDanger.setTime(time);
+                hiddeDangerList.add(hiddeDanger);
             }
-            return doubleMap;
+            return hiddeDangerList;
         }catch (Exception ex) {
             log.error(ex.getMessage());
             log.error(ex.getStackTrace().toString());
@@ -109,56 +126,51 @@ public class AlarmCountService extends ServiceImpl<AlarmCountMapper, AlarmCount>
 
     public List<AlarmCountStat> selectTotalDuration() {
         try {
-            List<AlarmSnap> alarmSnaps = getAllSnap();
+            List<Integer> integers = getEdnValue();
+            List<AlarmCountStat> alarmCountStatList = new ArrayList<>();
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             String strDate = sdf.format(DateUtil.addDays(new Date(),-1));
             Date dtStart = sdf.parse(strDate);
             Date dtEnd = DateUtil.addDays(dtStart, 1);
-            List<AlarmCountStat> oldList = new ArrayList<>();
-            for (AlarmSnap alarmSnap : alarmSnaps){
-                AlarmCount alarmCount = selectBySnapId(alarmSnap.getId(), dtStart, dtEnd);
-                if (alarmCount != null){
-                    AlarmCountStat alarmCountStat = new AlarmCountStat();
-                    alarmCountStat.setWindturbineId(alarmSnap.getWindturbineId());
-                    alarmCountStat.setWindturbineName(alarmSnap.getWindturbineName());
-                    alarmCountStat.setCount(alarmCount.getCount());
-                    alarmCountStat.setTime(alarmCount.getTime());
-                    oldList.add(alarmCountStat);
+            List<AlarmStat> alarmStats = alarmCountMapper.selectAlarmCountBydate(dtStart, dtEnd);
+            List<AlarmStat> alarmStatList = new ArrayList<>();
+            for (AlarmStat alarmStat : alarmStats){
+                for (Integer s : integers){
+                    if (alarmStat.getAlertvalue() != null &&(alarmStat.getAlertvalue().equals(s))){
+                        alarmStatList.add(alarmStat);
+                    }
                 }
-
             }
-            //对重复的风机号进行合并
-            List<AlarmCountStat> newList = new ArrayList<>();
-            for (AlarmCountStat oldAlarmCountStat : oldList) {
-                // 遍历新的List,看是否存在,存在则相加,不存在则放入新的List
-                boolean flag = false;
-                if (newList.size() > 0){
-                    for (AlarmCountStat newAlarmCountStat : newList) {
-                        if (newAlarmCountStat.getWindturbineId().equals(oldAlarmCountStat.getWindturbineId())) {
-                            newAlarmCountStat.setCount(newAlarmCountStat.getCount()+oldAlarmCountStat.getCount());
-                            newAlarmCountStat.setTime(newAlarmCountStat.getTime()+oldAlarmCountStat.getTime());
-                            flag = true;
-                        }
+            //根据风机号分组
+            Map<String,List<AlarmStat>> map = alarmStatList.stream().collect(Collectors.groupingBy(AlarmStat::getWtnum));
+            for (Map.Entry<String,List<AlarmStat>> stringListMap : map.entrySet()){
+                double time = 0;
+                int count = 0 ;
+                String wname = null;
+                for (AlarmStat alarmStat : stringListMap.getValue()){
+                    if (alarmStat != null){
+                        time = time + alarmStat.getTimes();
+                        count = count + alarmStat.getSum();
+                        wname = alarmStat.getWname();
                     }
                 }
-                if (!flag){
-                    AlarmCountStat alarmCountStat = new AlarmCountStat();
-                    alarmCountStat.setWindturbineId(oldAlarmCountStat.getWindturbineId());
-                    alarmCountStat.setWindturbineName(oldAlarmCountStat.getWindturbineName());
-                    alarmCountStat.setCount(oldAlarmCountStat.getCount());
-                    alarmCountStat.setTime(oldAlarmCountStat.getTime());
-                    newList.add(alarmCountStat);
-                }
+                AlarmCountStat alarmCountStat = new AlarmCountStat();
+                alarmCountStat.setCount(count);
+                alarmCountStat.setTime(time);
+                alarmCountStat.setWindturbineId(stringListMap.getKey());
+                alarmCountStat.setWindturbineName(wname);
+                alarmCountStatList.add(alarmCountStat);
             }
+
             //对集合进行降序排序,取前十个
-            Collections.sort(newList,new Comparator<AlarmCountStat>(){
+            Collections.sort(alarmCountStatList,new Comparator<AlarmCountStat>(){
                 @Override
                 public int compare(AlarmCountStat o1, AlarmCountStat o2) {
                 //会把集合里面的对象两两传进方法里面比较,这里比较age,降序就O2-O1,升序就O1-O2
                     return (int) (o2.getTime()-o1.getTime());
                 }
             });
-            List<AlarmCountStat> limitlist = newList.stream().limit(10).collect(Collectors.toList());
+            List<AlarmCountStat> limitlist = alarmCountStatList.stream().limit(10).collect(Collectors.toList());
         return limitlist;
     }catch (Exception ex) {
             log.error(ex.getMessage());

+ 3 - 3
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmSnapService.java

@@ -556,10 +556,10 @@ public class AlarmSnapService extends ServiceImpl<AlarmSnapMapper, AlarmSnap> {
         return alarmSnaps;
     }
 
-    public List<AlarmSnap> selectByAlertValue(int alertValue) {
+    public List<AlarmSnap> selectByAlertValue(List<Integer> list) {
         QueryWrapper<AlarmSnap> wrapper = new QueryWrapper<>();
-        if (StringUtil.isNotBlank(alertValue+""))
-            wrapper.eq("ALERTVALUE", alertValue);
+        if (list.size() > 0)
+            wrapper.in("ALERTVALUE", list);
         List<AlarmSnap> alarmSnaps = baseMapper.selectList(wrapper);
         return alarmSnaps;
     }

+ 1 - 1
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/EarlyReportService.java

@@ -64,7 +64,7 @@ public class EarlyReportService extends ServiceImpl<EarlyReportMapper, EarlyRepo
 
             List<String> oldReportWindturbineIdList = collect.stream().map(s -> s.getCompareId()).collect(Collectors.toList());
 
-            List<EarlyReportWindturbine> oldReportWindturbineList = earlyReportWindturbineService.getReportWindturbineById(oldReportWindturbineIdList);
+            List<EarlyReportWindturbine> oldReportWindturbineList = earlyReportWindturbineService.getReportWindturbineByIds(oldReportWindturbineIdList);
 
             report.getReportWindturbineInfoList().forEach(s -> {
                 if (s.isCompared() && StringUtil.isNotBlank(s.getCompareId())) {

+ 1 - 1
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/EarlyReportWindturbineService.java

@@ -23,7 +23,7 @@ public class EarlyReportWindturbineService extends ServiceImpl<EarlyReportWindtu
         return b;
     }
 
-    public List<EarlyReportWindturbine> getReportWindturbineById(List<String> idList) {
+    public List<EarlyReportWindturbine> getReportWindturbineByIds(List<String> idList) {
         List<EarlyReportWindturbine> reportWindturbineList = this.baseMapper.findByIds(idList);
         return reportWindturbineList;
 

+ 27 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/InspectOrderService.java

@@ -1,9 +1,12 @@
 package com.gyee.wisdom.alarm.sharding.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.sharding.entity.EarlyReportWindturbine;
 import com.gyee.wisdom.alarm.sharding.entity.InspectOrder;
 import com.gyee.wisdom.alarm.sharding.mapper.InspectOrderMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @description:
@@ -13,4 +16,28 @@ import org.springframework.stereotype.Service;
 @Service
 public class InspectOrderService extends ServiceImpl<InspectOrderMapper, InspectOrder> {
 
+    @Autowired
+    private EarlyReportWindturbineService earlyReportWindturbineService;
+
+    @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
+    public boolean saveInspectOrder(InspectOrder order) {
+
+        boolean saveOrder = false;
+        boolean updateReport = false;
+
+        saveOrder = this.save(order);
+        EarlyReportWindturbine verifyReport = earlyReportWindturbineService.getById(order.getReportWindturbineId());
+
+        if (verifyReport != null) {
+            verifyReport.setVerified(true);
+            updateReport = earlyReportWindturbineService.updateById(verifyReport);
+        }
+        if (saveOrder && updateReport)
+            return true;
+        else {
+            throw new RuntimeException();
+        }
+
+    }
+
 }

+ 0 - 0
warning-web/src/main/resources/application.yaml


Some files were not shown because too many files changed in this diff