Sfoglia il codice sorgente

增加准确率统计,故障点关联

chenminghua 2 anni fa
parent
commit
d8d1760d01

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

@@ -61,6 +61,6 @@ public interface IAdapterService {
      * @param thingId 风机(或其他)ID
      * @return 历史数据列表
      */
-    @RequestLine("GET /ts/history/snap?uniformCode={uniformCode}&startTs={startTs}&endTs={endTs}&thingType=windturbine&thingId={thingId}&interval=10")
+    @RequestLine("GET /ts/history/snap?uniformCode={uniformCode}&startTs={startTs}&endTs={endTs}&thingType=windturbine&thingId={thingId}&interval=1")
     List<PointData> getHistoryByUniformCode(@Param(value = "uniformCode") String uniformCode, @Param("startTs") String startTs, @Param("endTs") String endTs, @Param("thingId") String thingId);
 }

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

@@ -25,9 +25,6 @@ import java.util.*;
 @RequestMapping("/api/warning")
 public class AlarmHistoryController {
 
-
-    @Autowired
-    private RemoteServiceBuilder remoteService;
     @Autowired
     private AlarmService alarmService;
 
@@ -40,17 +37,7 @@ public class AlarmHistoryController {
         if (StringUtils.isEmpty(station) || StringUtils.isEmpty(wtId) || StringUtils.isEmpty(faultTime)){
             return JsonResult.error(ResultCode.PARAM_NOT_VALID);
         }
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(DateUtil.parseStrtoDate(faultTime, DateUtil.YYYY_MM_DD_HH_MM_SS));
-        cal.add(Calendar.HOUR, -10);
-        String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
-        cal.add(Calendar.HOUR, 12);
-        String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
-
-        JSONObject data = remoteService.sharding().getAlertHistory("windturbine", st, et, station, wtId, 1);
-        JSONArray records = data.getJSONArray("records");
-        List<AlertHistory> list = JSONArray.parseArray(records.toString(), AlertHistory.class);
+        List<AlertHistory> list = alarmService.getAlarmInfo(station, wtId, faultTime);
 
         return JsonResult.successData(ResultCode.SUCCESS, list);
     }
@@ -64,7 +51,6 @@ public class AlarmHistoryController {
         if (StringUtils.isEmpty(station) || StringUtils.isEmpty(wtId) || StringUtils.isEmpty(faultTime)){
             return JsonResult.error(ResultCode.PARAM_NOT_VALID);
         }
-
         Map<String, Object> map = alarmService.getAlarmTree(station, wtId, faultTime);
 
         return JsonResult.successData(ResultCode.SUCCESS, map);

+ 42 - 15
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/DiagnoseReportController.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
 import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.diagnose.DataInfo;
 import com.gyee.impala.model.custom.diagnose.PointData;
 import com.gyee.impala.model.master.Casefaultalg;
 import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
@@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,15 +47,26 @@ public class DiagnoseReportController {
     @GetMapping("/item")
     public JSONObject getOne(String id){
         Casefaultalg fault = casefaultalgService.getById(id);
-        List<Diagnosetrainhistory> info = InitialRunner.historyModelMap.get(fault.getStationen() + "_" + fault.getModel())
+        List<Diagnosetrainhistory> history = InitialRunner.historyModelMap.get(fault.getStationen() + "_" + fault.getModel())
                 .stream().filter(a -> a.isEnable()).collect(Collectors.toList());
 
-        Map<String, List<PointData>> mappoint = diagnosereportService.getpointweightDataList(fault.getStationen(), fault.getModel(), fault.getWindturbineid(), fault.getStarttime(),info.get(0).getPointweight());
+        Calendar cal = Calendar.getInstance();
+        DataInfo info = new DataInfo();
+        info.setStationId(fault.getStationen());
+        info.setModelId(fault.getModel());
+        info.setThingId(fault.getWindturbineid());
+        info.setFaultType(fault.getDiagnosecode());
+        cal.setTime(DateUtil.parseStrtoDate(fault.getStarttime(), DateUtil.YYYY_MM_DD_HH_MM_SS));
+        cal.add(Calendar.MINUTE, -10);
+        info.setStartTs(cal.getTimeInMillis() + "");
+        cal.add(Calendar.MINUTE, 15);
+        info.setEndTs(cal.getTimeInMillis() + "");
+        Map<String, List<PointData>> mappoint = diagnosereportService.getpointweightDataList(info, history.get(0).getPointweight());
         Map<String, Object> alarm = alarmService.getAlarmTree(fault.getStationen(), fault.getWindturbineid(), fault.getStarttime());
 
         Map<String, Object> map = new HashMap<>();
         map.put("fault", fault);
-        map.put("info", info);
+        map.put("info", history);
         map.put("alarm", alarm);
         map.put("curve",mappoint);
         return JsonResult.successData(ResultCode.SUCCESS, map);
@@ -69,18 +83,6 @@ public class DiagnoseReportController {
         return JsonResult.successData(ResultCode.SUCCESS, info);
     }
 
-    /** 获取故障时刻的测点数据
-     * @param id
-     * @param pointName
-     * @return
-     */
-    @GetMapping("/pointName")
-    public JSONObject getPointName(String id,String pointName) {
-        Casefaultalg fault = casefaultalgService.getById(id);
-        Map<String, List<PointData>> list = diagnosereportService.getpointweightData(fault.getStationen(), fault.getModel(), fault.getWindturbineid(), fault.getStarttime(),pointName);
-        return JsonResult.successData(ResultCode.SUCCESS, list);
-
-    }
 
     /**
      * 获取故障时刻斜率最大的三个测点曲线数据
@@ -91,6 +93,31 @@ public class DiagnoseReportController {
     public JSONObject getbigRising(String id) {
         String code = diagnosereportService.getbigRising(id);
         return JsonResult.successData(ResultCode.SUCCESS, code);
+    }
+
 
+    /**
+     * 梯度计算前三个测点数据上升
+     * @param time 故障时间
+     * @return
+     */
+    @GetMapping("/grads")
+    public JSONObject getGrads(String station, String model, String wtId, String time){
+        List<Diagnosetrainhistory> collect = InitialRunner.historyModelMap.get(station + "_" + model)
+                .stream().filter(a -> a.isEnable()).collect(Collectors.toList());
+
+        Calendar cal = Calendar.getInstance();
+        DataInfo info = new DataInfo();
+        info.setStationId(station);
+        info.setModelId(model);
+        info.setThingId(wtId);
+        cal.setTime(DateUtil.parseStrtoDate(time, DateUtil.YYYY_MM_DD_HH_MM_SS));
+        cal.add(Calendar.MINUTE, -10);
+        info.setStartTs(cal.getTimeInMillis() + "");
+        cal.add(Calendar.MINUTE, 10);
+        info.setEndTs(cal.getTimeInMillis() + "");
+        Map<String, List<PointData>> map = diagnosereportService.getpointweightDataList(info, collect.get(0).getPointweight());
+
+        return JsonResult.successData(ResultCode.SUCCESS, map);
     }
 }

+ 16 - 7
gyee-sample-impala/src/main/java/com/gyee/impala/controller/diagnose/DiagnosetrainhistoryController.java

@@ -3,12 +3,17 @@ package com.gyee.impala.controller.diagnose;
 import com.alibaba.fastjson.JSONObject;
 import com.gyee.impala.common.result.JsonResult;
 import com.gyee.impala.common.result.ResultCode;
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.common.util.DateUtil;
+import com.gyee.impala.model.custom.diagnose.DataInfo;
 import com.gyee.impala.model.master.diagnose.Diagnosetrainhistory;
 import com.gyee.impala.service.master.diagnose.DiagnosetrainhistoryService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 
@@ -25,19 +30,23 @@ public class DiagnosetrainhistoryController {
 
 
     /**
-     * @param enable 模型是否启用
+     * @param enable 模型列表 是否启用
      * @param name   模型名称
      * @param code   模型代码
      * @return
      */
     @GetMapping("/getHistoryList")
     public JSONObject getDiagnosetrainhistoryList(Boolean enable, String name, String code, String model) {
-        try {
-            List<Diagnosetrainhistory> list = diagnosetrainhistoryService.getList(enable, name, code, model);
-            return JsonResult.successData(ResultCode.SUCCESS, list);
-        } catch (Exception e) {
-            return JsonResult.error(ResultCode.ERROR);
-        }
+        List<Diagnosetrainhistory> collect = diagnosetrainhistoryService.getList(enable, name, code, model);
+        List<Diagnosetrainhistory> list = new ArrayList<>();
+        collect.stream().forEach(a -> {
+            for (Diagnosetrainhistory h : InitialRunner.historyList) {
+                if (a.getCode().equals(h.getCode())) {
+                    list.add(h);
+                }
+            }
+        });
+        return JsonResult.successData(ResultCode.SUCCESS, list);
     }
 
 

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

@@ -12,6 +12,8 @@ public class DataInfo {
     private String modelId;
     private String stationId;
     private String faultTime;
+    private String faultType;
+
     /**
      * 标签
      */
@@ -80,4 +82,12 @@ public class DataInfo {
     public void setFaultTime(String faultTime) {
         this.faultTime = faultTime;
     }
+
+    public String getFaultType() {
+        return faultType;
+    }
+
+    public void setFaultType(String faultType) {
+        this.faultType = faultType;
+    }
 }

+ 6 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/model/master/diagnose/Diagnosepoint.java

@@ -40,6 +40,12 @@ public class Diagnosepoint {
     //排序
     private int ordernum;
 
+    //部件
+    private String widget;
+
+    //部件code
+    private String widgetcode;
+
 
     //由于前端选择数据需要展示预测列,需新增故障类型  补到最后一条
     public Diagnosepoint faultType(){

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

@@ -1,6 +1,7 @@
 package com.gyee.impala.model.master.diagnose;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
@@ -66,4 +67,22 @@ public class Diagnosetrainhistory extends Model<Diagnosetrainhistory> {
      * 训练测点
      */
     private String point;
+
+    /**
+     * 样本数量
+     */
+    @TableField(exist = false)
+    private int samplecount;
+
+    /**
+     * 执行数量
+     */
+    @TableField(exist = false)
+    private int allcount;
+
+    /**
+     * 准确率
+     */
+    @TableField(exist = false)
+    private double precision;
 }

+ 41 - 0
gyee-sample-impala/src/main/java/com/gyee/impala/schdule/TaskStatistic.java

@@ -0,0 +1,41 @@
+package com.gyee.impala.schdule;
+
+import com.gyee.impala.common.spring.InitialRunner;
+import com.gyee.impala.model.master.Casefaultalg;
+import com.gyee.impala.service.master.CasefaultalgService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class TaskStatistic {
+
+    @Autowired
+    private CasefaultalgService casefaultalgService;
+
+    /**
+     * 统计算法准确率
+     */
+    @Scheduled(initialDelay = 20 * 1000, fixedRate = 1 * 60 * 60 * 1000)
+    public void accuracyStatisticTask() {
+        if (0 == InitialRunner.historyList.size())
+            return;
+
+        InitialRunner.historyList.stream().forEach(h -> {
+            List<Casefaultalg> list = casefaultalgService.getAll(null, null, null, null, null, null, null, null, h.getCode(), null);
+            int size = list.size();
+            int count = list.stream().filter(f -> f.getConfirm() &&
+                    !StringUtils.isEmpty(f.getDiagnosecode())
+                    && !StringUtils.isEmpty(f.getFaultcode())
+                    && f.getDiagnosecode().equalsIgnoreCase(f.getFaultcode())).collect(Collectors.toList()).size();
+            double precision = (double) size > 0 ? (double) count / (double) size : 0;
+            h.setSamplecount(count);
+            h.setAllcount(size);
+            h.setPrecision(precision);
+        });
+    }
+}

+ 19 - 2
gyee-sample-impala/src/main/java/com/gyee/impala/service/custom/diagnose/AlarmService.java

@@ -20,16 +20,33 @@ import java.util.stream.Collectors;
 @Component
 public class AlarmService {
 
+
     @Autowired
     RemoteServiceBuilder remoteService;
 
 
+    public List<AlertHistory> getAlarmInfo(String station, String wtId, String faultTime){
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(DateUtil.parseStrtoDate(faultTime, DateUtil.YYYY_MM_DD_HH_MM_SS));
+        cal.add(Calendar.HOUR, -5);
+        String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
+        cal.add(Calendar.HOUR, 6);
+        String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
+
+        JSONObject data = remoteService.sharding().getAlertHistory("windturbine", st, et, station, wtId, 1);
+        JSONArray records = data.getJSONArray("records");
+        List<AlertHistory> list = JSONArray.parseArray(records.toString(), AlertHistory.class);
+
+        return list;
+    }
+
+
     public Map<String, Object> getAlarmTree(String station, String wtId, String faultTime){
         Calendar cal = Calendar.getInstance();
         cal.setTime(DateUtil.parseStrtoDate(faultTime, DateUtil.YYYY_MM_DD_HH_MM_SS));
-        cal.add(Calendar.HOUR, -10);
+        cal.add(Calendar.HOUR, -5);
         String st = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
-        cal.add(Calendar.HOUR, 12);
+        cal.add(Calendar.HOUR, 6);
         String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
 
         JSONObject data = remoteService.sharding().getAlertHistory("windturbine", st, et, station, wtId, 1);

+ 7 - 39
gyee-sample-impala/src/main/java/com/gyee/impala/service/impl/master/diagnose/DiagnosereportServiceImpl.java

@@ -77,23 +77,11 @@ public class DiagnosereportServiceImpl extends ServiceImpl<DiagnosereportMapper,
     }
 
     @Override
-    public Map<String, List<PointData>> getpointweightDataList(String stationen, String model, String wtId, String faultTime, String pointweight) {
-
-        Calendar cal = Calendar.getInstance();
-        DataInfo info = new DataInfo();
-        info.setStationId(stationen);
-        info.setModelId(model);
-        info.setThingId(wtId);
-
-        cal.setTime(DateUtil.parseStrtoDate(faultTime, DateUtil.YYYY_MM_DD_HH_MM_SS));
-        cal.add(Calendar.MINUTE, -10);
-        info.setStartTs(cal.getTimeInMillis() + "");
-        cal.add(Calendar.MINUTE, 15);
-        info.setEndTs(cal.getTimeInMillis() + "");
-
-        List<Diagnosepoint> point = InitialRunner.mapPoint.get(stationen).get(model).stream().filter(CollectUtil.distinctByKey(Diagnosepoint::getUniformcode)).collect(Collectors.toList());
-//        Map<String, String> map = point.stream().collect(Collectors.toMap(Diagnosepoint::getName, Diagnosepoint::getUniformcode));
+    public Map<String, List<PointData>> getpointweightDataList(DataInfo info, String pointweight) {
+        List<Diagnosepoint> point = InitialRunner.mapPoint.get(info.getStationId()).get(info.getModelId()).stream()
+                .filter(CollectUtil.distinctByKey(Diagnosepoint::getUniformcode)).collect(Collectors.toList());
         Map<String, Diagnosepoint> map = point.stream().collect(Collectors.toMap(Diagnosepoint::getUniformcode,d->d,(k1, k2)->k2));
+
         JSONArray jarr = JSONArray.parseArray(pointweight);
         List<Diagnosepoint> newpoint = new ArrayList<>();
         for (Iterator iterator = jarr.iterator(); iterator.hasNext(); ) {
@@ -103,8 +91,9 @@ public class DiagnosereportServiceImpl extends ServiceImpl<DiagnosereportMapper,
             if(importance<1){
                 continue;
             }
-            //System.out.println(pointname+"|"+map.get(pointname));
-            if (null !=map.get(uniformCode) ){
+
+            Diagnosepoint pt = map.get(uniformCode);
+            if (null != pt && (info.getFaultType().equalsIgnoreCase(pt.getWidgetcode()) || pt.getWidgetcode().equalsIgnoreCase("QT"))){
                 newpoint.add(map.get(uniformCode));
             }
         }
@@ -113,27 +102,6 @@ public class DiagnosereportServiceImpl extends ServiceImpl<DiagnosereportMapper,
         return pairs;
     }
 
-    @Override
-    public Map<String, List<PointData>> getpointweightData(String stationen, String model, String wtId, String faultTime, String pointName) {
-        Calendar cal = Calendar.getInstance();
-        DataInfo info = new DataInfo();
-        info.setStationId(stationen);
-        info.setModelId(model);
-        info.setThingId(wtId);
-
-        cal.setTime(DateUtil.parseStrtoDate(faultTime, DateUtil.YYYY_MM_DD_HH_MM_SS));
-        cal.add(Calendar.MINUTE, -10);
-        info.setStartTs(cal.getTimeInMillis() + "");
-        cal.add(Calendar.MINUTE, 15);
-        info.setEndTs(cal.getTimeInMillis() + "");
-
-        Map<String,List<Diagnosepoint>> points = InitialRunner.mapPoint.get(stationen).get(model).stream().
-                filter(CollectUtil.distinctByKey(Diagnosepoint::getUniformcode)).collect(Collectors.groupingBy(Diagnosepoint::getName));
-
-        dataPointService.formatUniformcode(points.get(pointName));
-        Map<String, List<PointData>> pairs = dataPointService.getData(info, false);
-        return pairs;
-    }
 
     @Override
     public String getbigRising(String id) {

+ 2 - 17
gyee-sample-impala/src/main/java/com/gyee/impala/service/master/diagnose/DiagnosereportService.java

@@ -1,6 +1,7 @@
 package com.gyee.impala.service.master.diagnose;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.impala.model.custom.diagnose.DataInfo;
 import com.gyee.impala.model.custom.diagnose.PointData;
 import com.gyee.impala.model.master.diagnose.Diagnosereport;
 
@@ -29,26 +30,10 @@ public interface DiagnosereportService extends IService<Diagnosereport> {
 
 
     /**
-     * @param stationen   场站
-     * @param model       机型
-     * @param wtId        风机编号
-     * @param faultTime   报警时间点
      * @param pointweight 权重测点(json字符串)
      * @return
      */
-    Map<String, List<PointData>> getpointweightDataList(String stationen, String model, String wtId, String faultTime, String pointweight);
-
-
-    /**
-     * @param stationen   场站
-     * @param model       机型
-     * @param wtId        风机编号
-     * @param faultTime   报警时间点
-     * @param pointName 权重测点(单独测点名)
-     * @return
-     */
-    Map<String, List<PointData>> getpointweightData(String stationen, String model, String wtId, String faultTime, String pointName);
-
+    Map<String, List<PointData>> getpointweightDataList(DataInfo info, String pointweight);
 
 
     String getbigRising(String id);

+ 0 - 65
gyee-sample-impala/src/main/java/com/gyee/impala/service/task/BigRisingTask.java

@@ -1,65 +0,0 @@
-package com.gyee.impala.service.task;
-
-
-import com.gyee.impala.common.config.GyeeConfig;
-import com.gyee.impala.common.util.JudeSystem;
-import com.gyee.impala.model.master.Casefaultalg;
-import com.gyee.impala.service.master.CasefaultalgService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Service;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.List;
-
-
-@Service
-@EnableScheduling
-public class BigRisingTask {
-
-
-    @Autowired
-    private CasefaultalgService casefaultalgService;
-    /**
-     * 保存脚本的位置
-     */
-    @Autowired
-    private GyeeConfig gyeeConfig;
-
-    @Scheduled(cron = "0 0/10 * * * ?")
-//    @Scheduled(fixedRate=1000)
-    private void getBigRisingTasks() {
-
-        List<Casefaultalg> list =  casefaultalgService.getListRemarkIsNull();
-        System.out.println(list.size());
-        list.stream().forEach(l->{
-            System.out.println(l.getId()+"|"+l.getRemark());
-            try {
-                //组装调用脚本命令
-                String name = "grad";
-                String cmdPath = gyeeConfig.getDiagnosePath();
-                String inst = JudeSystem.isWindows() ? "cmd" : "/bin/sh";
-                String c = JudeSystem.isWindows() ? "/c" : "-c";
-                String[] cmd = {inst, c, "python " + cmdPath + name + ".py " + l.getId()};
-                Process p;
-                System.out.println(cmd[0] + " " + cmd[1] + " " + cmd[2]);
-                //执行脚本
-                p = Runtime.getRuntime().exec(cmd);
-                p.waitFor();
-                Thread.sleep(100);
-            } catch (IOException e) {
-                e.printStackTrace();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }finally {
-
-            }
-        });
-
-
-
-    }
-}

+ 2 - 0
gyee-sample-impala/src/main/resources/mapper/master/DiagnosepointMapper.xml

@@ -13,6 +13,8 @@
         <result column="unit" property="unit" />
         <result column="remark" property="remark" />
         <result column="ordernum" property="ordernum" />
+        <result column="widget" property="widget" />
+        <result column="widgetcode" property="widgetcode" />
     </resultMap>
 
     <!-- 通用查询结果列 -->