|
@@ -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();
|
|
|
//保存聊天记录
|