소스 검색

隐患分布和明细分析接口优化

‘xugp 2 년 전
부모
커밋
288b2ab6c5

+ 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;
+
 }

+ 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);
 }

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

@@ -62,7 +62,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,29 +72,37 @@ 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(){
         try {
+            List<Integer> list = getEdnValue();
             Map<String,Double> doubleMap =new HashMap<>();
-            List<AlarmSnap> alarmSnaps = getAllSnap();
             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();
+                for (AlarmStat alarmStat : stringListMap.getValue()){
+                    if (alarmStat != null){
+                        time = time + alarmStat.getTimes();
                     }
                 }
                 doubleMap.put(stringListMap.getKey(),time);
@@ -109,56 +117,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;
     }

+ 11 - 0
warning-web/src/main/resources/mappers-oracle/AlarmCountMapper.xml

@@ -144,4 +144,15 @@
             </if>
         </where>
     </select>
+
+    <select id="selectAlarmCountBydate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmStat">
+        select s.id as snapid, s.category3 as parts,t.count as sum,t.times as times, s.windturbineid as wtnum,s.windturbinename as wname, s.alerttext as text,s.alertValue as alertvalue 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.windturbineid is not null
+            and alarmdate >= #{dtStart,jdbcType=DATE} and alarmdate &lt;= #{dtEnd,jdbcType=DATE}
+            group by snapid ) t
+            left join alarmsnap s on t.snapid = s.id
+
+    </select>
 </mapper>

+ 10 - 0
warning-web/src/main/resources/mappers-postgresql/AlarmCountMapper.xml

@@ -145,4 +145,14 @@
         </where>
     </select>
 
+    <select id="selectAlarmCountBydate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmStat">
+        select s.id as snapid, s.category3 as parts,t.count as sum,t.times as times, s.windturbineid as wtnum,s.windturbinename as wname, s.alerttext as text,s.alertValue as alertvalue 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.windturbineid is not null
+            and alarmdate >= #{dtStart,jdbcType=DATE} and alarmdate &lt;= #{dtEnd,jdbcType=DATE}
+            group by snapid ) t
+            left join alarmsnap s on t.snapid = s.id
+
+    </select>
 </mapper>

+ 11 - 0
warning-web/src/main/resources/mappers/AlarmCountMapper.xml

@@ -145,4 +145,15 @@
         </where>
     </select>
 
+    <select id="selectAlarmCountBydate" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmStat">
+        select s.id as snapid, s.category3 as parts,t.count as sum,t.times as times, s.windturbineid as wtnum,s.windturbinename as wname, s.alerttext as text,s.alertValue as alertvalue 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.windturbineid is not null
+            and alarmdate >= #{dtStart,jdbcType=DATE} and alarmdate &lt;= #{dtEnd,jdbcType=DATE}
+            group by snapid ) t
+            left join alarmsnap s on t.snapid = s.id
+
+    </select>
+
 </mapper>