Selaa lähdekoodia

化验室报警 处理本地决策优化

王苗苗 1 viikko sitten
vanhempi
commit
8dc11cae52

+ 66 - 9
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -6435,12 +6435,14 @@ public class AsyncTask {
 
     /**
      * 化验室报警:设备故障-本地决策-新 需要展示多个值
+     *
      * @param warningRecord
      * @param tXinyiIndustry
      * @param normConfig
      * @param category
+     * @param finalStr
      */
-    private void addChatRecordByBreakPointsSingleNew(TXinyiWarningRecord warningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, String category) {
+    private void robotDeviceErrorJCNew(TXinyiWarningRecord warningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, String category, String finalStr) {
         ChatReq chatReq = new ChatReq();
         //保存聊天记录
         //将问答更新到数据库中
@@ -6454,8 +6456,7 @@ public class AsyncTask {
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getMsg());//本地问题
 //        chatReq.setAnswer(SINGLE_BREAKPOINT_ANSWER_PREFIX + category + SINGLE_BREAKPOINT_ANSWER_SUFFIX);
-        //todo 改成真实值
-        chatReq.setAnswer(ROBOT_SJYC_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", "xxx"));
+        chatReq.setAnswer(ROBOT_SJYC_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", finalStr));
         chatReq.setWarningId(String.valueOf(warningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -6578,6 +6579,40 @@ public class AsyncTask {
         this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
     }
 
+
+    /**
+     * 化验室报警-多指标设备异常-本地决策处理
+     *
+     * @param warningRecord
+     * @param tXinyiIndustry
+     * @param normConfig
+     * @param category
+     * @param finalStr
+     */
+    private void robotDeviceErrorMore(TXinyiWarningRecord warningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, String category, String finalStr) {
+        ChatReq chatReq = new ChatReq();
+        //保存聊天记录
+        //将问答更新到数据库中
+        chatReq.setSessionId(IdUtils.simpleUUID());
+        chatReq.setType(1);//0问答 1决策 2本地 3仿真预测
+        chatReq.setModule(3);
+            /*String userId = SecurityUtils.getUserId().toString();
+            String username = SecurityUtils.getUsername();*/
+        chatReq.setUserId(WARNING_DEFAULT_CREATE);
+        String showVal = this.buildShowValue(warningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
+        chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
+        chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getMsg());//本地问题
+//        chatReq.setAnswer(MORE_BREAKPOINT_ANSWER);
+        chatReq.setAnswer(ROBOT_SJYC_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", finalStr));
+        chatReq.setWarningId(String.valueOf(warningRecord.getId()));
+        chatReq.setCounts(1);//问答次数
+
+        chatReq.setCreateBy(WARNING_DEFAULT_CREATE);
+        chatReq.setCreateTime(DateUtils.getNowDate());
+        this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
+    }
+
+
     private void addChatRecordByBreakPointsMore(TXinyiWarningRecord tXinyiWarningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
         ChatReq chatReq = new ChatReq();
         //保存聊天记录
@@ -7030,7 +7065,9 @@ public class AsyncTask {
         }
 
         String anDan10Str = getBigDecimalList(tenVals);
-
+        String hyXsy1Str = getBigDecimalList(tXinyiRobots6Lst.stream().map(TXinyiRobot::getNo3Hlj1Jqr).collect(Collectors.toList()));
+        String hyXsy2Str = getBigDecimalList(tXinyiRobots6Lst.stream().map(TXinyiRobot::getNo3Hlj2Jqr).collect(Collectors.toList()));
+        
         Date nowDate = DateUtils.getNowDate();
         //下面是处理多个指标的 【断点】报警
         //断点
@@ -7051,11 +7088,13 @@ public class AsyncTask {
             //关闭同类型的其他报警
             closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
             //触发报警 并且模拟大模型返回决策问答数据
+            //最终传递过去的N条数据
+            String finalStr = getStrByCategory(category, anDan10Str, hyXsy1Str, hyXsy2Str);
             if(CollectionUtils.isEmpty(tXinyiBreakPointSingleWarningRecords)){
                 //插入该类型报警
                 this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordBreakPointOne);
                 //同时处理决策 不用调用大模型,本地处理问答
-                addChatRecordByBreakPointsSingleNew(warningRecordBreakPointOne, tXinyiIndustry, normConfig, category);
+                robotDeviceErrorJCNew(warningRecordBreakPointOne, tXinyiIndustry, normConfig, category, finalStr);
             }else{
                 log.info("化验室报警的时候,发现存在仪表故障(断点不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
                 //2025年03月06日10:52:57 逻辑调整:更新一直报警的那条记录的显示值
@@ -7069,7 +7108,7 @@ public class AsyncTask {
                 //更新数据库
                 this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
                 //继续调用决策【本地模拟的决策】
-                addChatRecordByBreakPointsSingleNew(xinyiWarningRecord, tXinyiIndustry, normConfig, category);
+                robotDeviceErrorJCNew(xinyiWarningRecord, tXinyiIndustry, normConfig, category, finalStr);
             }
             //如果出现单指标报警  标识后续同指标是否可以继续报警
             if(ROBOT_XSY_1.getCode().equals(category))
@@ -7104,8 +7143,10 @@ public class AsyncTask {
                     tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getMsg());
                     tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getCode());
                     this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+                    //最终传递过去的N条数据
+                    String finalStr = getStrByCategory(category, anDan10Str, hyXsy1Str, hyXsy2Str);
                     //同时处理决策 不用调用大模型,本地处理问答
-                    addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                    robotDeviceErrorMore(tXinyiWarningRecord, tXinyiIndustry, normConfig, category, finalStr);
                 }
             }else{//之前存在报警了 所以需要2个集合数据进行匹配,如果新的和原来的一样则不用做任何操作【持续报警】;如果不一样,则新的要报警,老报警要关闭
                 List<TXinyiWarningRecord> breakPointListNew = new ArrayList<>(breakPointList);//断点集合[需要新增的]
@@ -7131,8 +7172,10 @@ public class AsyncTask {
                         tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getMsg());
                         tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getCode());
                         this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+                        //最终传递过去的N条数据
+                        String finalStr = getStrByCategory(category, anDan10Str, hyXsy1Str, hyXsy2Str);
                         //同时处理决策 不用调用大模型,本地处理问答
-                        addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                        robotDeviceErrorMore(tXinyiWarningRecord, tXinyiIndustry, normConfig, category, finalStr);
                     }
                 }
                 //关闭老的报警
@@ -7164,8 +7207,10 @@ public class AsyncTask {
 //                        tXinyiWarningRecord.setReason(tXinyiWarningRecordContinue.getReason());
                         //更新数据库
                         this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(tXinyiWarningRecord);
+                        //最终传递过去的N条数据
+                        String finalStr = getStrByCategory(category, anDan10Str, hyXsy1Str, hyXsy2Str);
                         //继续调用决策【本地模拟的决策】
-                        addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                        robotDeviceErrorMore(tXinyiWarningRecord, tXinyiIndustry, normConfig, category, finalStr);
                     }
                 }
             }
@@ -7198,6 +7243,18 @@ public class AsyncTask {
 
     }
 
+    private String getStrByCategory(String category, String anDan10Str, String hyXsy1Str, String hyXsy2Str) {
+        if(ROBOT_CS_AD.getCode().equals(category))
+            return anDan10Str;
+        else if(ROBOT_XSY_1.getCode().equals(category))
+            return hyXsy1Str;
+        else if(ROBOT_XSY_2.getCode().equals(category))
+            return hyXsy2Str;
+        else{
+            log.info("获取化验室报警,通过分类处理N条展示数据的时候,没有匹配到对应的类型");
+            return null;
+        }
+    }
 
 
     /**