Selaa lähdekoodia

进水氨氮显示值 拼接最近8小时的浓度处理

王苗苗 2 päivää sitten
vanhempi
commit
be92d5b994

+ 1 - 1
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -488,7 +488,7 @@ public class MyConstants {
     public static final String YCSG_ANSWER_THREE = ",建议检查仪表状态或进行人工取样校核。如果问题已经得到解决,请标记为已解决状态,无需进一步处理。但仍建议继续观察,以确保问题不再复发。";
     public static final String YCSG_ANSWER_REPLACE = "## 解决方案 ##\n" +
             "## 一、数据表现 ##\n" +
-            "**@@@0浓度**:`@@@1`mg/L\n" +
+            "**@@@0浓度**:`@@@1`\n" +
             "**@@@0变化趋势**:连续发生单点突变;\n" +
             "## 二、原因分析 ##\n" +
             "@@@0在线仪表水质数据发生突变,突变增幅{@@@2},突变前数据{@@@3}。\n" +

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

@@ -4095,15 +4095,18 @@ public class AsyncTask {
         }
         TXinyiIndustry tXinyiIndustry1 = tXinyiIndustries.get(INDEX_1);//前一个小时
 
+        //拼接决策的最近8小时的值
+        String last8Str = this.getJsNh3Str8(tXinyiIndustries);
+
         //单点突变-异常升高报警
-        if (existsJsNh3YCSG(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiIndustries, nowDate))
+        if (existsJsNh3YCSG(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiIndustries, nowDate, last8Str))
             return;
 
         //单点突变-异常偏低报警
         //2025年04月15日15:45:48 这种的暂时先不报
 
         //2025年04月16日14:35:48 新增高低值设备报警
-        if (existsJsNh3GDZ(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiIndustries, nowDate))
+        if (existsJsNh3GDZ(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiIndustries, nowDate, last8Str))
             return;
 
         //最开始的工艺报警  (超标准工艺报警) 2025年04月16日15:40:23 改成只有超标准才会报警,并且具体逻辑做拆分
@@ -4214,7 +4217,7 @@ public class AsyncTask {
         return tXinyiWarningRecord;
     }
 
-    private boolean existsJsNh3YCSG(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, Date nowDate) {
+    private boolean existsJsNh3YCSG(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, Date nowDate, String last8Str) {
         if(!CollectionUtils.isEmpty(tXinyiIndustries) && tXinyiIndustries.size() == INT_8){
             //查询同类型的历史报警
             TXinyiWarningRecord warningRecordYCSG = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode()).status(0).build();
@@ -4241,11 +4244,11 @@ public class AsyncTask {
                     warningRecordYCSG.setCwrwxz(getCwrwxzByDetail(currentVal, normConfig, category, true));//根据当前值和类型以及是否超标处理
                     this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordYCSG);
                     //同时处理决策 不用调用大模型,本地处理问答
-                    addChatRecordByYCSG(warningRecordYCSG, tXinyiIndustry, normConfig, category, exceedVal, resultMap.get(LASTVAL));
+                    addChatRecordByYCSGNew(warningRecordYCSG, tXinyiIndustry, normConfig, category, exceedVal, resultMap.get(LASTVAL), last8Str);
                 }else{
                     log.info("工业库报警的时候,发现存在异常升高的报警,并且已经有该类型报警了,不做任何处理");
                     //2025年04月16日15:56:47 这种的继续报警,所以决策还需要再次调用一次
-                    addChatRecordByYCSG(warningRecordYCSG, tXinyiIndustry, normConfig, category, exceedVal, resultMap.get(LASTVAL));
+                    addChatRecordByYCSGNew(warningRecordYCSG, tXinyiIndustry, normConfig, category, exceedVal, resultMap.get(LASTVAL), last8Str);
                 }
                 //后续的报警不再进行
                 log.info("工业库报警的时候,发现存在{}异常升高的报警,后续报警不再处理", category);
@@ -4260,7 +4263,7 @@ public class AsyncTask {
     }
 
 
-    private boolean existsJsNh3GDZ(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, Date nowDate) {
+    private boolean existsJsNh3GDZ(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, Date nowDate, String last8Str) {
         if(!CollectionUtils.isEmpty(tXinyiIndustries) && tXinyiIndustries.size() == INT_8){
             //查询同类型的历史报警
             TXinyiWarningRecord warningRecordGDZ = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.SJYC_GDZ.getCode()).status(0).build();
@@ -4269,8 +4272,6 @@ public class AsyncTask {
             Map<String, BigDecimal> resultMap = existsGdzJsNh3(currentVal, category, tXinyiIndustries);
             BigDecimal exceedVal = resultMap.get(EXCEEDVAL);
             if(!Objects.isNull(exceedVal)){//这里不能只返回一个布尔类型的结果,因为还要获取百分比的值
-                //拼接决策的最近8小时的值
-                String last8Str = this.getJsNh3Str8(tXinyiIndustries);
                 //关闭同类型的其他报警
                 closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.SJYC_GDZ.getCode());
                 //触发报警 并且模拟大模型返回决策问答数据
@@ -4314,7 +4315,7 @@ public class AsyncTask {
         for (int i = 0; i < size; i++) {
             TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(i);
             if(i < size - 1)
-                sb.append(tXinyiIndustry.getJsNh3()).append("mg/L、");
+                sb.append(DecimalUtils.getAbsAndScale(tXinyiIndustry.getJsNh3(), INT_2)).append("mg/L、");
             else
                 sb.append("mg/L");
         }
@@ -5701,6 +5702,32 @@ public class AsyncTask {
         this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
     }
 
+
+    private void addChatRecordByYCSGNew(TXinyiWarningRecord warningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, String category, BigDecimal exceedVal, BigDecimal lastVal, String last8Str) {
+        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.SJYC_YCSG.getMsg());//本地问题
+//        chatReq.setAnswer(category + YCSG_ANSWER_ONE + exceedVal.multiply(BigDecimal_100) + "%" + YCSG_ANSWER_TWO + warningRecord.getWarningVal() + YCSG_ANSWER_THREE);
+//        chatReq.setAnswer(YCSG_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", String.valueOf(DecimalUtils.getAbsAndScale(warningRecord.getWarningVal(), INT_2))).replaceAll("@@@2", DecimalUtils.getAbsAndScale(exceedVal.multiply(BigDecimal_100), INT_1) + "%").replace("@@@3", String.valueOf(DecimalUtils.getAbsAndScale(lastVal, INDEX_2))));
+        chatReq.setAnswer(YCSG_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", last8Str).replaceAll("@@@2", DecimalUtils.getAbsAndScale(exceedVal.multiply(BigDecimal_100), INT_1) + "%").replace("@@@3", String.valueOf(DecimalUtils.getAbsAndScale(lastVal, INDEX_2))));
+        chatReq.setWarningId(String.valueOf(warningRecord.getId()));
+        chatReq.setCounts(1);//问答次数
+
+        chatReq.setCreateBy(WARNING_DEFAULT_CREATE);
+        chatReq.setCreateTime(DateUtils.getNowDate());
+        this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
+    }
+
+
     private void addChatRecordByYCSG(TXinyiWarningRecord warningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, String category, BigDecimal exceedVal, BigDecimal lastVal) {
         ChatReq chatReq = new ChatReq();
         //保存聊天记录