瀏覽代碼

报警统计代码提交

‘xugp 2 年之前
父節點
當前提交
1c948a4a64
共有 17 個文件被更改,包括 499 次插入78 次删除
  1. 58 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/WindturbineAlarmPartsCountController.java
  2. 31 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/WindturbineAlarmIdCount.java
  3. 29 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/entity/WindturbineAlarmPartsCount.java
  4. 0 17
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/AlarmRuleCountMapper.java
  5. 16 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/WindturbineAlarmIdCountMapper.java
  6. 19 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/WindturbineAlarmPartsCountMapper.java
  7. 14 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/model/WindturbineAlarmDetail.java
  8. 60 53
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/schedule/AlarmCountPartsScheduled.java
  9. 2 5
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/Warning2Service.java
  10. 32 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/WindturbineAlarmIdCountService.java
  11. 126 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/WindturbineAlarmPartsCountService.java
  12. 3 3
      warning-web/src/main/resources/mappers/AlarmRuleCountMapper.xml
  13. 27 0
      warning-web/src/main/resources/mappers-oracle/WindturbineAlarmPartsCountMapper.xml
  14. 14 0
      warning-web/src/main/resources/mappers-postgresql/WindturbineAlarmIdCountMapper.xml
  15. 27 0
      warning-web/src/main/resources/mappers-postgresql/WindturbineAlarmPartsCountMapper.xml
  16. 14 0
      warning-web/src/main/resources/mappers/WindturbineAlarmIdCountMapper.xml
  17. 27 0
      warning-web/src/main/resources/mappers/WindturbineAlarmPartsCountMapper.xml

+ 58 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/controller/WindturbineAlarmPartsCountController.java

@@ -0,0 +1,58 @@
+package com.gyee.wisdom.alarm.sharding.controller;
+
+import com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmPartsCount;
+import com.gyee.wisdom.alarm.sharding.model.WindturbineAlarmDetail;
+import com.gyee.wisdom.alarm.sharding.service.WindturbineAlarmPartsCountService;
+import com.gyee.wisdom.alarm.sharding.util.ResponseWrapper;
+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.web.bind.annotation.*;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :xugp
+ * @date :Created in 2022/9/23 9:41
+ * @description:风机原始报警统计查询
+ * @modified By:
+ * @version: $
+ */
+@RestController
+@RequestMapping("/windturbineAlarmCount")
+@CrossOrigin
+@Tag(name = "风机原始报警统计查询")
+public class WindturbineAlarmPartsCountController {
+
+    @Autowired
+    private WindturbineAlarmPartsCountService windturbineAlarmPartsCountService;
+
+    @Operation(description = "根据场站查询风机原始报警统计")
+    @GetMapping("/query/list")
+    public ResponseWrapper getWinturbineAlarmCount(
+            @Parameter(name = "stationid", description = "场站id") @RequestParam(value = "stationid", required = false) String stationid,
+            @Parameter(name = "starttime", description = "起始时间")  @RequestParam(value = "starttime", required = false) String startTime,
+            @Parameter(name = "endtime", description = "结束时间")   @RequestParam(value = "endtime", required = false) String endTime
+
+    ) {
+
+        List<Map.Entry<String, List<WindturbineAlarmPartsCount>>> stringListMap = windturbineAlarmPartsCountService.getWindturbineAlarmPartsCount(stationid,startTime,endTime);
+        return ResponseWrapper.success("请求成功",stringListMap);
+    }
+
+    @Operation(description = "查询原始风机报警详细信息")
+    @GetMapping("/query/detail")
+    public ResponseWrapper getWinturbineAlarmDetail(
+            @Parameter(name = "stationid", description = "场站id") @RequestParam(value = "stationid", required = false) String stationid,
+            @Parameter(name = "windturbineid", description = "风机id") @RequestParam(value = "windturbineid", required = false) String windturbineid,
+            @Parameter(name = "parts", description = "部件") @RequestParam(value = "parts", required = false) String parts,
+            @Parameter(name = "starttime", description = "起始时间")  @RequestParam(value = "starttime", required = false) String startTime,
+            @Parameter(name = "endtime", description = "结束时间")   @RequestParam(value = "endtime", required = false) String endTime
+
+    ) {
+
+        List<WindturbineAlarmDetail> windturbineAlarmDetailList = windturbineAlarmPartsCountService.getWinturbineAlarmDetail(stationid,windturbineid,parts,startTime,endTime);
+        return ResponseWrapper.success("请求成功",windturbineAlarmDetailList);
+    }
+}

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

@@ -0,0 +1,31 @@
+package com.gyee.wisdom.alarm.sharding.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class WindturbineAlarmIdCount implements Serializable{
+
+    @TableId("ID")
+    private Long id;
+    @TableField("ALARMDATE")
+    private Date alarmDate;
+    @TableField("PARTS")
+    private String parts;
+    @TableField("PARTSNAME")
+    private String partsName;
+    @TableField("RULESID")
+    private String rulesId;
+    @TableField("COUNT")
+    private int count;
+    @TableField("WINDTURBINEID")
+    private String windturbineId;
+    @TableField("WINDPOWERSTATIONID")
+    private String windpowerstationId;
+
+
+}

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

@@ -0,0 +1,29 @@
+package com.gyee.wisdom.alarm.sharding.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class WindturbineAlarmPartsCount implements Serializable{
+
+    @TableId("ID")
+    private Long id;
+    @TableField("ALARMDATE")
+    private Date alarmDate;
+    @TableField("PARTS")
+    private String parts;
+    @TableField("COUNT")
+    private int count;
+    @TableField("WINDTURBINEID")
+    private String windturbineId;
+    @TableField("WINDPOWERSTATIONID")
+    private String windpowerstationId;
+    @TableField("PARTSNAME")
+    private String partsName;
+
+
+}

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

@@ -1,17 +0,0 @@
-package com.gyee.wisdom.alarm.sharding.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.gyee.wisdom.alarm.sharding.entity.AlarmPartsCount;
-import com.gyee.wisdom.alarm.sharding.entity.AlarmRuleCount;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-
-@Mapper
-public interface AlarmRuleCountMapper extends BaseMapper<AlarmRuleCount> {
-
-    void batchInsert(  @Param("list") List<AlarmRuleCount> alarmRuleCounts);
-
-}

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

@@ -0,0 +1,16 @@
+package com.gyee.wisdom.alarm.sharding.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.alarm.sharding.entity.*;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+@Mapper
+public interface WindturbineAlarmIdCountMapper extends BaseMapper<WindturbineAlarmIdCount> {
+
+    void batchInsert(  @Param("list") List<WindturbineAlarmIdCount> windturbineAlarmIdCounts);
+
+}

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

@@ -0,0 +1,19 @@
+package com.gyee.wisdom.alarm.sharding.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmIdCount;
+import com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmPartsCount;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+
+@Mapper
+public interface WindturbineAlarmPartsCountMapper extends BaseMapper<WindturbineAlarmPartsCount> {
+
+    void batchInsert(  @Param("list") List<WindturbineAlarmPartsCount> windturbineAlarmPartsCounts);
+
+    List<WindturbineAlarmPartsCount> findByDate(@Param("stationId") String stationId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+}

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

@@ -0,0 +1,14 @@
+package com.gyee.wisdom.alarm.sharding.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class WindturbineAlarmDetail {
+
+    private String windturbineId;
+    private String alarmName;
+    private Date alarmDate;
+    private int type;
+}

+ 60 - 53
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/schedule/AlarmCountPartsScheduled.java

@@ -1,8 +1,9 @@
 package com.gyee.wisdom.alarm.sharding.schedule;
 
+import com.gyee.wisdom.alarm.sharding.cache.DataDictionaryCache;
 import com.gyee.wisdom.alarm.sharding.entity.*;
-import com.gyee.wisdom.alarm.sharding.mapper.AlarmPartsCountMapper;
-import com.gyee.wisdom.alarm.sharding.mapper.AlarmRuleCountMapper;
+import com.gyee.wisdom.alarm.sharding.mapper.WindturbineAlarmIdCountMapper;
+import com.gyee.wisdom.alarm.sharding.mapper.WindturbineAlarmPartsCountMapper;
 import com.gyee.wisdom.alarm.sharding.service.*;
 import com.gyee.wisdom.alarm.sharding.util.SnowflakeGenerator;
 import com.gyee.wisdom.common.utils.DateUtil;
@@ -19,7 +20,7 @@ import java.util.stream.Collectors;
 /**
  * @author :xugp
  * @date :Created in 2022/9/8 10:15
- * @description:风机报警统计根据部件、规则发生报警次数
+ * @description:风机报警 统计根据部件、规则发生报警次数
  * @modified By:
  * @version: $
  */
@@ -35,10 +36,10 @@ public class AlarmCountPartsScheduled {
     private TableNameService tableNameService;
 
     @Autowired
-    private AlarmPartsCountMapper alarmPartsCountMapper;
+    private WindturbineAlarmIdCountMapper windturbineAlarmIdCountMapper;
 
     @Autowired
-    private AlarmRuleCountMapper alarmRuleCountMapper;
+    private WindturbineAlarmPartsCountMapper windturbineAlarmPartsCountMapper;
 
     @Autowired
     private Warning2Service warning2Service;
@@ -49,7 +50,7 @@ public class AlarmCountPartsScheduled {
 
     @Autowired
     private AlarmHistoryService alarmHistoryService;
-    /*@Scheduled(cron = "* 41 10 ? * 3")*/
+    /*@Scheduled(cron = "* 10 11 ? * 3")*/
     public boolean doTask() {
 
         try {
@@ -60,8 +61,8 @@ public class AlarmCountPartsScheduled {
             Date dtEnd = DateUtil.addDays(dtStart, 1);
             Date dtNow = new Date();
             while (dtEnd.getTime() < dtNow.getTime()) {
-                List<AlarmPartsCount> acList = new ArrayList<>();
-                List<AlarmRuleCount> alarmRuleCounts = new ArrayList<>();
+                List<WindturbineAlarmPartsCount> acList = new ArrayList<>();
+                List<WindturbineAlarmIdCount> alarmRuleCounts = new ArrayList<>();
                 Map<String,List<AlarmHistory>> map = new HashMap<>();
                 //根据windturbineid分组
                 Map<String,List<AlarmSnap>> maps = snapList.stream().collect(Collectors.groupingBy(AlarmSnap::getWindturbineId));
@@ -79,58 +80,64 @@ public class AlarmCountPartsScheduled {
                 for (Map.Entry<String,List<AlarmHistory>> entry : map.entrySet()){
                     Map<String,String> map1 = new HashMap<>();
                     List<AlarmHistory> value = entry.getValue();
-                    for (AlarmHistory alarmHistory : value){
-                        AlarmSnap alarmSnap = alarmSnapService.queryById(alarmHistory.getSnapId());
-                        Warning2 warning2 = warning2Service.selectByModelidAndEdnvalue(alarmSnap.getModelId(),alarmSnap.getAlertValue());
-                        String id = alarmHistory.getId() + "_" + alarmHistory.getSnapId();
-                        map1.put(id, warning2.getRelatedParts());
-                    }
-                    //分组转化为key:parts,value:snapId
-                    Map<String, List<Map.Entry<String,String>>> result = map1.entrySet().stream().collect(Collectors.groupingBy(c -> c.getValue()));
-                    for (Map.Entry<String, List<Map.Entry<String,String>>> entry1 : result.entrySet()) {
-                        List<Map.Entry<String, String>> listValue = entry1.getValue();
-                        int count = 0;
-                        List<String> list = new ArrayList<>();
-                        for (Map.Entry<String, String> map2 : listValue) {
-                            String[] split = map2.getKey().split("_");
-                            long l = Long.parseLong(split[1]);
-                            AlarmSnap alarmSnap = alarmSnapService.queryById(l);
-                            Warning2 warning2 = warning2Service.selectByModelidAndEdnvalue(alarmSnap.getModelId(), alarmSnap.getAlertValue());
-                            String tbName = tableNameService.getAlarmHistoryTableName(alarmSnap.getStationId(), dtStart);
-                            count = count + alarmHistoryService.selectAlarmSnapCount(tbName,Long.parseLong(split[0]));
-                            list.add(warning2.getId());
-                        }
-                        Map<String, Integer> mapCount = list.stream().collect(Collectors.toMap(key -> key, values -> 1, (value1,value2) ->value1 + value2));
-                        for(Map.Entry<String,Integer> entryString : mapCount.entrySet()){
-                            //统计某一种规则的报警次数
-                            AlarmRuleCount alarmRuleCount = new AlarmRuleCount();
-                            alarmRuleCount.setId(SnowflakeGenerator.generateId());
-                            alarmRuleCount.setAlarmDate(dtStart);
-                            alarmRuleCount.setParts(entry1.getKey());
-                            alarmRuleCount.setRulesId(entryString.getKey());
-                            alarmRuleCount.setCount(entryString.getValue());
-                            alarmRuleCount.setWindturbineId(entry.getKey());
-                            alarmRuleCount.setWindpowerstationId(windturbineService.selectWindturbineByWindturbineid(entry.getKey()).getWindpowerstationid());
-                            alarmRuleCounts.add(alarmRuleCount);
+                    if (value.size()>0) {
+                        for (AlarmHistory alarmHistory : value) {
+                            AlarmSnap alarmSnap = alarmSnapService.queryById(alarmHistory.getSnapId());
+                            Warning2 warning2 = warning2Service.selectByEdnvalue(alarmSnap.getAlertValue());
+                            if (warning2 != null){
+                                String id = alarmHistory.getId() + "_" + alarmHistory.getSnapId();
+                                map1.put(id, warning2.getRelatedParts());
+                            }
                         }
-                        if (count > 0) {
-                            //统计部件分类的部件次数
-                            AlarmPartsCount alarmPartsCount = new AlarmPartsCount();
-                            alarmPartsCount.setId(SnowflakeGenerator.generateId());
-                            alarmPartsCount.setAlarmDate(dtStart);
-                            alarmPartsCount.setParts(entry1.getKey());
-                            alarmPartsCount.setCount(count);
-                            alarmPartsCount.setWindturbineId(entry.getKey());
-                            alarmPartsCount.setWindpowerstationId(windturbineService.selectWindturbineByWindturbineid(entry.getKey()).getWindpowerstationid());
-                            acList.add(alarmPartsCount);
+                        //分组转化为key:parts,value:snapId
+                        Map<String, List<Map.Entry<String,String>>> result = map1.entrySet().stream().collect(Collectors.groupingBy(c -> c.getValue()));
+                        for (Map.Entry<String, List<Map.Entry<String,String>>> entry1 : result.entrySet()) {
+                            List<Map.Entry<String, String>> listValue = entry1.getValue();
+                            int count = 0;
+                            List<String> list = new ArrayList<>();
+                            for (Map.Entry<String, String> map2 : listValue) {
+                                String[] split = map2.getKey().split("_");
+                                long l = Long.parseLong(split[1]);
+                                AlarmSnap alarmSnap = alarmSnapService.queryById(l);
+                                Warning2 warning2 = warning2Service.selectByEdnvalue(alarmSnap.getAlertValue());
+                                String tbName = tableNameService.getAlarmHistoryTableName(alarmSnap.getStationId(), dtStart);
+                                count = count + alarmHistoryService.selectAlarmSnapCount(tbName,Long.parseLong(split[0]));
+                                list.add(warning2.getId());
+                            }
+                            Map<String, Integer> mapCount = list.stream().collect(Collectors.toMap(key -> key, values -> 1, (value1, value2) -> value1 + value2));
+                            for (Map.Entry<String, Integer> entryString : mapCount.entrySet()) {
+                                //统计某一种规则的报警次数
+                                WindturbineAlarmIdCount windturbineAlarmIdCount = new WindturbineAlarmIdCount();
+                                windturbineAlarmIdCount.setId(SnowflakeGenerator.generateId());
+                                windturbineAlarmIdCount.setAlarmDate(dtStart);
+                                windturbineAlarmIdCount.setParts(entry1.getKey());
+                                windturbineAlarmIdCount.setRulesId(entryString.getKey());
+                                windturbineAlarmIdCount.setCount(entryString.getValue());
+                                windturbineAlarmIdCount.setWindturbineId(entry.getKey());
+                                windturbineAlarmIdCount.setPartsName(DataDictionaryCache.getPartName(entry1.getKey()));
+                                windturbineAlarmIdCount.setWindpowerstationId(windturbineService.selectWindturbineByWindturbineid(entry.getKey()).getWindpowerstationid());
+                                alarmRuleCounts.add(windturbineAlarmIdCount);
+                            }
+                            if (count > 0) {
+                                //统计部件分类的部件次数
+                                WindturbineAlarmPartsCount windturbineAlarmPartsCount = new WindturbineAlarmPartsCount();
+                                windturbineAlarmPartsCount.setId(SnowflakeGenerator.generateId());
+                                windturbineAlarmPartsCount.setAlarmDate(dtStart);
+                                windturbineAlarmPartsCount.setParts(entry1.getKey());
+                                windturbineAlarmPartsCount.setCount(count);
+                                windturbineAlarmPartsCount.setPartsName(DataDictionaryCache.getPartName(entry1.getKey()));
+                                windturbineAlarmPartsCount.setWindturbineId(entry.getKey());
+                                windturbineAlarmPartsCount.setWindpowerstationId(windturbineService.selectWindturbineByWindturbineid(entry.getKey()).getWindpowerstationid());
+                                acList.add(windturbineAlarmPartsCount);
+                            }
                         }
                     }
                 }
                 if (alarmRuleCounts.size() > 0) {
-                    alarmRuleCountMapper.batchInsert(alarmRuleCounts);
+                    windturbineAlarmIdCountMapper.batchInsert(alarmRuleCounts);
                 }
                 if (acList.size() > 0) {
-                    alarmPartsCountMapper.batchInsert(acList);
+                    windturbineAlarmPartsCountMapper.batchInsert(acList);
                 }
                 dtStart = dtEnd;
                 dtEnd = DateUtil.addDays(dtStart, 1);

+ 2 - 5
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/Warning2Service.java

@@ -63,12 +63,9 @@ public class Warning2Service extends ServiceImpl<Warning2Mapper, Warning2> {
         return warning2Mapper.pageQueryAll(page, modelId, name, isLeaf);
     }
 
-    public Warning2 selectByModelidAndEdnvalue(String modelid,int ednValue) {
+    public Warning2 selectByEdnvalue(int ednValue) {
         QueryWrapper<Warning2> wrapper = new QueryWrapper<>();
-        if (StringUtil.isNotBlank(modelid))
-            wrapper.eq("MODELID", modelid);
-        if (StringUtil.isNotBlank(ednValue))
-            wrapper.eq("EDNAVALUE", ednValue);
+        wrapper.eq("EDNAVALUE", ednValue);
         Warning2 warning2 = baseMapper.selectOne(wrapper);
         return warning2;
     }

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

@@ -0,0 +1,32 @@
+package com.gyee.wisdom.alarm.sharding.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.sharding.entity.*;
+
+import com.gyee.wisdom.alarm.sharding.mapper.WindturbineAlarmIdCountMapper;
+import com.gyee.wisdom.alarm.sharding.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+@Service
+public class WindturbineAlarmIdCountService extends ServiceImpl<WindturbineAlarmIdCountMapper, WindturbineAlarmIdCount> {
+
+    @Autowired
+    private WindturbineAlarmIdCountMapper windturbineAlarmIdCountMapper;
+
+    public List<WindturbineAlarmIdCount> queryByPartsAndWid(String parts, String windturbineid) {
+        QueryWrapper<WindturbineAlarmIdCount> wrapper = new QueryWrapper<>();
+        if (StringUtil.isNotBlank(parts)) {
+            wrapper.eq("PARTS", parts);
+        }
+        if (StringUtil.isNotBlank(windturbineid)) {
+            wrapper.eq("WINDTURBINEID", windturbineid);
+        }
+        List<WindturbineAlarmIdCount> windturbineAlarmIdCounts = windturbineAlarmIdCountMapper.selectList(wrapper);
+        return windturbineAlarmIdCounts;
+    }
+}

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

@@ -0,0 +1,126 @@
+package com.gyee.wisdom.alarm.sharding.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.sharding.entity.*;
+import com.gyee.wisdom.alarm.sharding.mapper.WindturbineAlarmPartsCountMapper;
+import com.gyee.wisdom.alarm.sharding.model.WindturbineAlarmDetail;
+import com.gyee.wisdom.common.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class WindturbineAlarmPartsCountService extends ServiceImpl<WindturbineAlarmPartsCountMapper, WindturbineAlarmPartsCount> {
+
+
+    @Autowired
+    private AlarmSnapService alarmSnapService;
+
+    @Autowired
+    private Warning2Service warning2Service;
+
+    @Autowired
+    private TableNameService tableNameService;
+
+    @Autowired
+    private AlarmHistoryService alarmHistoryService;
+
+    @Autowired
+    private WindturbineAlarmIdCountService windturbineAlarmIdCountService;
+
+    public List<Map.Entry<String, List<WindturbineAlarmPartsCount>>> getWindturbineAlarmPartsCount(String stationId, String startTime, String endTime) {
+        try {
+            List<Map.Entry<String, List<WindturbineAlarmPartsCount>>> mapList = new ArrayList<>();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            Date dtStart = sdf.parse(startTime);
+            Date dtEnd = sdf.parse(endTime);
+            Map<String, List<WindturbineAlarmPartsCount>> collect = new HashMap<>();
+            if (StringUtil.isNotBlank(stationId) && dtEnd.after(dtStart)) {
+                List<WindturbineAlarmPartsCount> list = baseMapper.findByDate(stationId, dtStart, dtEnd);
+                collect = list.stream().collect(Collectors.groupingBy(c -> c.getWindturbineId()));
+                for (Map.Entry<String,List<WindturbineAlarmPartsCount>> listEntry : collect.entrySet()){
+                    for (int i = 0;i < listEntry.getValue().size();i++){
+                        for (int j = 1 + i;j < listEntry.getValue().size();j++){
+                           if (listEntry.getValue().get(i).getParts().equals(listEntry.getValue().get(j).getParts())){
+                               listEntry.getValue().get(i).setCount(listEntry.getValue().get(i).getCount() + listEntry.getValue().get(j).getCount());
+                               listEntry.getValue().remove(listEntry.getValue().get(j));
+                           }
+                        }
+                    }
+                }
+            }
+            //对风机号进行排序
+            mapList = new ArrayList<Map.Entry<String, List<WindturbineAlarmPartsCount>>>(collect.entrySet());
+            Collections.sort(mapList, new Comparator<Map.Entry<String, List<WindturbineAlarmPartsCount>>>() {
+                @Override
+                public int compare(Map.Entry<String, List<WindturbineAlarmPartsCount>> o1, Map.Entry<String, List<WindturbineAlarmPartsCount>> o2) {
+                    String[] num1Array = StringUtil.split(o1.getKey(), "_");
+                    String[] num2Array = StringUtil.split(o2.getKey(), "_");
+                    if (num1Array.length == 2 || num2Array.length == 2) {
+                        int comapreResult = 0;
+                        try {
+
+                            int num1 = Integer.valueOf(num1Array[1]);
+                            int num2 = Integer.valueOf(num2Array[1]);
+                            int diff = num1 - num2;
+                            if (diff > 0) {
+                                comapreResult = 1;
+                            } else if (diff < 0) {
+                                comapreResult = -1;
+                            } else {
+                                comapreResult = 0;
+                            }
+
+                        } catch (Exception ex) {
+
+                        } finally {
+                            return comapreResult;
+                        }
+                    } else {
+                        return 0;
+                    }
+
+                }
+            });
+            return mapList;
+        }catch (Exception ex){
+            log.error(ex.getMessage());
+            log.error(ex.getStackTrace().toString());
+            return null;
+        }
+    }
+
+
+    public List<WindturbineAlarmDetail> getWinturbineAlarmDetail(String stationid, String windturbineid, String parts, String startTime, String endTime) {
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            Date dtStart = sdf.parse(startTime);
+            Date dtEnd = sdf.parse(endTime);
+            List<WindturbineAlarmDetail> windturbineAlarmDetails = new ArrayList<>();
+            //得到该部件下所有的报警规则
+            List<WindturbineAlarmIdCount> windturbineAlarmIdCounts = windturbineAlarmIdCountService.queryByPartsAndWid(parts,windturbineid);
+            for(WindturbineAlarmIdCount windturbineAlarmIdCount : windturbineAlarmIdCounts){
+                Warning2 warning2 = warning2Service.getById(windturbineAlarmIdCount.getRulesId());
+                AlarmSnap alarmSnap = alarmSnapService.findByWindturbineIdAndAlertValue(windturbineid, warning2.getEdnaValue());
+                String tbName = tableNameService.getAlarmHistoryTableName(alarmSnap.getStationId(), dtStart);
+                List<AlarmHistory> alarmHistories = alarmHistoryService.selectAlarmHistory(tbName, alarmSnap.getId(), dtStart, dtEnd);
+                for (AlarmHistory alarmHistory : alarmHistories){
+                    WindturbineAlarmDetail windturbineAlarmDetail = new WindturbineAlarmDetail();
+                    windturbineAlarmDetail.setWindturbineId(alarmSnap.getWindturbineId());
+                    windturbineAlarmDetail.setAlarmDate(alarmHistory.getAlertTime());
+                    windturbineAlarmDetail.setAlarmName(alarmSnap.getAlertText());
+                    windturbineAlarmDetail.setType(alarmHistory.getMessageType());
+                    windturbineAlarmDetails.add(windturbineAlarmDetail);
+                }
+            }
+            return windturbineAlarmDetails;
+        }catch (Exception ex){
+            log.error(ex.getMessage());
+            log.error(ex.getStackTrace().toString());
+            return null;
+        }
+    }
+}

+ 3 - 3
warning-web/src/main/resources/mappers/AlarmRuleCountMapper.xml

@@ -1,12 +1,12 @@
 <?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.sharding.mapper.AlarmRuleCountMapper">
+<mapper namespace="com.gyee.wisdom.alarm.sharding.mapper.WindturbineAlarmIdCountMapper">
 
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
-        insert into alarmrulecount ( ID, alarmdate, parts,rulesid,count,windturbineid)
+        insert into Windturbine_Alarm_Id_Count ( ID, alarmdate, parts,partsname,rulesid,count,windturbineid,windpowerstationid)
         <foreach collection="list" item="item" index="index" separator="union all" >
             ( select
-            #{item.id}, #{item.alarmDate},#{item.parts},#{item.rulesId},#{item.count},#{item.windturbineId}
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.partsName},#{item.rulesId},#{item.count},#{item.windturbineId},#{item.windpowerstationId}
             from dual )
         </foreach>
     </insert>

+ 27 - 0
warning-web/src/main/resources/mappers-oracle/WindturbineAlarmPartsCountMapper.xml

@@ -0,0 +1,27 @@
+<?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.sharding.mapper.WindturbineAlarmPartsCountMapper">
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into Windturbine_Alarm_Parts_Count ( ID, alarmdate, parts,count,windturbineid,windpowerstationid,partsname)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.count},#{item.windturbineId},#{item.windpowerstationId},#{item.partsName}
+            from dual )
+        </foreach>
+    </insert>
+
+    <select id="findByDate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmPartsCount"  >
+        select * from Windturbine_Alarm_Parts_Count a
+        <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="stationId !=null and stationId !=''">
+                and a.windpowerstationId=#{stationId}
+            </if>
+        </where>
+    </select>
+
+</mapper>

+ 14 - 0
warning-web/src/main/resources/mappers-postgresql/WindturbineAlarmIdCountMapper.xml

@@ -0,0 +1,14 @@
+<?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.sharding.mapper.WindturbineAlarmIdCountMapper">
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into Windturbine_Alarm_Id_Count ( ID, alarmdate, parts,partsname,rulesid,count,windturbineid,windpowerstationid)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.partsName},#{item.rulesId},#{item.count},#{item.windturbineId},#{item.windpowerstationId}
+            from dual )
+        </foreach>
+    </insert>
+
+</mapper>

+ 27 - 0
warning-web/src/main/resources/mappers-postgresql/WindturbineAlarmPartsCountMapper.xml

@@ -0,0 +1,27 @@
+<?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.sharding.mapper.WindturbineAlarmPartsCountMapper">
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into Windturbine_Alarm_Parts_Count ( ID, alarmdate, parts,count,windturbineid,windpowerstationid,partsname)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.count},#{item.windturbineId},#{item.windpowerstationId},#{item.partsName}
+            from dual )
+        </foreach>
+    </insert>
+
+    <select id="findByDate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmPartsCount"  >
+        select * from Windturbine_Alarm_Parts_Count a
+        <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="stationId !=null and stationId !=''">
+                and a.windpowerstationId=#{stationId}
+            </if>
+        </where>
+    </select>
+
+</mapper>

+ 14 - 0
warning-web/src/main/resources/mappers/WindturbineAlarmIdCountMapper.xml

@@ -0,0 +1,14 @@
+<?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.sharding.mapper.WindturbineAlarmIdCountMapper">
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into Windturbine_Alarm_Id_Count ( ID, alarmdate, parts,partsname,rulesid,count,windturbineid,windpowerstationid)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.partsName},#{item.rulesId},#{item.count},#{item.windturbineId},#{item.windpowerstationId}
+            from dual )
+        </foreach>
+    </insert>
+
+</mapper>

+ 27 - 0
warning-web/src/main/resources/mappers/WindturbineAlarmPartsCountMapper.xml

@@ -0,0 +1,27 @@
+<?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.sharding.mapper.WindturbineAlarmPartsCountMapper">
+
+    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
+        insert into Windturbine_Alarm_Parts_Count ( ID, alarmdate, parts,count,windturbineid,windpowerstationid,partsname)
+        <foreach collection="list" item="item" index="index" separator="union all" >
+            ( select
+            #{item.id}, #{item.alarmDate},#{item.parts},#{item.count},#{item.windturbineId},#{item.windpowerstationId},#{item.partsName}
+            from dual )
+        </foreach>
+    </insert>
+
+    <select id="findByDate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.WindturbineAlarmPartsCount"  >
+        select * from Windturbine_Alarm_Parts_Count a
+        <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="stationId !=null and stationId !=''">
+                and a.windpowerstationId=#{stationId}
+            </if>
+        </where>
+    </select>
+
+</mapper>