|
@@ -1566,6 +1566,667 @@ public class AsyncTask {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /***
|
|
|
+ *2025年04月10日16:11:24 生化报警逻辑调整:
|
|
|
+ * -- 部分报警不再报警
|
|
|
+ * -- 报警规则不再是单纯的超标准或者超管控
|
|
|
+ * -- 不再单独的是超标多少,而是多种情况都会报警(前提是超标准)
|
|
|
+ * -- 除了开始的 数据断点、连续不变、单点突变(异常升高)、高低值设备报警【此次新增】、超标准报警,且报警顺序按照这个顺序处理
|
|
|
+ * @param tXinyiIndustry
|
|
|
+ * @param normConfig
|
|
|
+ */
|
|
|
+ public void handleSZWarningNew(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
|
|
|
+ //出水相关
|
|
|
+ //出水COD报警
|
|
|
+ //2025年02月14日10:22:05 计算出相应的超污染物限制 和 超污染物负荷值,然后传到下一个方法,否则下一个方法很多判断
|
|
|
+ BigDecimal csCod = tXinyiIndustry.getCsCod();
|
|
|
+ BigDecimal cscodBzz = normConfig.getCscodBzz();
|
|
|
+ BigDecimal cscodGkz = normConfig.getCscodGkz();
|
|
|
+ BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
|
|
|
+ BigDecimal jsslSjz = normConfig.getJsslSjz();
|
|
|
+ BigDecimal cszlBzz = normConfig.getCszlBzz();
|
|
|
+ BigDecimal cszlGkz = normConfig.getCszlGkz();
|
|
|
+ BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+ BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+ BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+ BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+ BigDecimal csSSBzz = normConfig.getCsssBzz();
|
|
|
+ BigDecimal csssGkz = normConfig.getCsssGkz();
|
|
|
+ BigDecimal jszlSjz = normConfig.getJszlSjz();
|
|
|
+ BigDecimal jszdSjz = normConfig.getJszdSjz();
|
|
|
+ BigDecimal jscodSjz = normConfig.getJscodSjz();
|
|
|
+ BigDecimal jsadSjz = normConfig.getJsadSjz();
|
|
|
+ BigDecimal jsSSSjz = normConfig.getJsssSjz();
|
|
|
+
|
|
|
+ //2025年02月20日11:19:17 累计的断点数量
|
|
|
+ int breakpointCount = 0;
|
|
|
+ int noChange = 0;
|
|
|
+ List<TXinyiWarningRecord> breakPointList = new ArrayList<>();//断点集合
|
|
|
+ List<TXinyiWarningRecord> noChangeList = new ArrayList<>();//连续不变集合
|
|
|
+ //2025年02月27日16:17:47 标识进出水的指标是否可以进行后续的报警
|
|
|
+ boolean csCodExecute = true;
|
|
|
+ boolean csZLExecute = true;
|
|
|
+ boolean csZDExecute = true;
|
|
|
+ boolean csADExecute = true;
|
|
|
+ boolean csSSExecute = true;
|
|
|
+ boolean jsZLExecute = true;
|
|
|
+ boolean jsCodExecute = true;
|
|
|
+ boolean jsZDExecute = true;
|
|
|
+ boolean jsADExecute = true;
|
|
|
+ boolean jsSSExecute = true;
|
|
|
+
|
|
|
+ //出水cod超标报警
|
|
|
+ WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水总磷超标报警
|
|
|
+ BigDecimal csTp = tXinyiIndustry.getCsTp();
|
|
|
+ warningMoreExceed = handleXinYiWarningsCsMore(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //出水总氮超标报警
|
|
|
+ BigDecimal csTn = tXinyiIndustry.getCsTn();
|
|
|
+ warningMoreExceed = handleXinYiWarningsCsMore(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水氨氮超标报警
|
|
|
+ BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
|
|
|
+ warningMoreExceed = handleXinYiWarningsCsMore(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水SS超标报警
|
|
|
+ BigDecimal csSS = tXinyiIndustry.getCsSs();
|
|
|
+ warningMoreExceed = handleXinYiWarningsCsMore(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //进水相关报警
|
|
|
+ //进水总磷超标报警
|
|
|
+ BigDecimal jsTp = tXinyiIndustry.getJsTp();
|
|
|
+ warningMoreExceed = handleXinYiWarningRecordJSMore(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水COD超标报警
|
|
|
+ BigDecimal jsCod = tXinyiIndustry.getJsCod();
|
|
|
+ warningMoreExceed = handleXinYiWarningRecordJSMore(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水总氮超标报警
|
|
|
+ BigDecimal jsTn = tXinyiIndustry.getJsTn();
|
|
|
+ warningMoreExceed = handleXinYiWarningRecordJSMore(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水氨氮超标报警
|
|
|
+ BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
|
|
|
+ warningMoreExceed = handleXinYiWarningRecordJSMore(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水SS超标报警
|
|
|
+ BigDecimal jsSS = tXinyiIndustry.getJsSs();
|
|
|
+ warningMoreExceed = handleXinYiWarningRecordJSMore(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+ if(warningMoreExceed.isBreakpoint()){
|
|
|
+ breakpointCount++;
|
|
|
+ breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
|
|
|
+ }
|
|
|
+ if(warningMoreExceed.isNoChange()){
|
|
|
+ noChange++;
|
|
|
+ noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
|
|
|
+ }
|
|
|
+
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ //下面是处理多个指标的 【断点】和 连续不变的报警
|
|
|
+ //断点
|
|
|
+ //2025年02月28日13:45:49 逻辑调整:多指标断点/联系不变 也要记录对应的化验类型 所以下面可以查询出来多个
|
|
|
+ TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);
|
|
|
+ if(breakpointCount < 1){//恢复正常 关闭多个断点报警
|
|
|
+ //关闭之前的多个 多指标断点报警
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningRecords) {
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(breakpointCount == 1){//只有单个的断点
|
|
|
+ TXinyiWarningRecord warningRecordBreakPointOne = breakPointList.get(0);
|
|
|
+ String category = warningRecordBreakPointOne.getCategory();
|
|
|
+ TXinyiWarningRecord warningRecordReq = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiBreakPointSingleWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordReq);
|
|
|
+ //关闭同类型的其他报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
|
|
|
+ //触发报警 并且模拟大模型返回决策问答数据
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiBreakPointSingleWarningRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordBreakPointOne);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByBreakPointsSingle(warningRecordBreakPointOne, tXinyiIndustry, normConfig, category);
|
|
|
+ }else{
|
|
|
+ log.info("工业库报警的时候,发现存在仪表故障(断点不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ //2025年03月06日10:52:57 逻辑调整:更新一直报警的那条记录的显示值
|
|
|
+ TXinyiWarningRecord xinyiWarningRecord = tXinyiBreakPointSingleWarningRecords.get(0);
|
|
|
+ xinyiWarningRecord.setWarningVal(warningRecordBreakPointOne.getWarningVal());
|
|
|
+ xinyiWarningRecord.setTime(warningRecordBreakPointOne.getTime());
|
|
|
+ xinyiWarningRecord.setUpdateTime(nowDate);
|
|
|
+ xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ //2024年7月31日09:20:47 报警的原因(超标还是超管控也需要更新)
|
|
|
+ xinyiWarningRecord.setReason(warningRecordBreakPointOne.getReason());
|
|
|
+ //更新数据库
|
|
|
+ this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
|
|
|
+ //继续调用决策【本地模拟的决策】
|
|
|
+ addChatRecordByBreakPointsSingle(xinyiWarningRecord, tXinyiIndustry, normConfig, category);
|
|
|
+ }
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭之前的多个 多指标断点报警
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningRecords) {
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //将其他类型的报警全部关闭
|
|
|
+ //2025年02月27日17:09:56 此场景不关闭其他报警
|
|
|
+// closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ //再新增新的类型的报警
|
|
|
+ /*if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ warningRecord.setType(0);
|
|
|
+ String msg = BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getMsg();
|
|
|
+ warningRecord.setCategory(msg);
|
|
|
+ warningRecord.setTime(nowDate);
|
|
|
+ warningRecord.setReason(msg);
|
|
|
+ warningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ warningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ warningRecord.setCreateTime(nowDate);
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByBreakPointsMore(warningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }else{
|
|
|
+ log.info("工业库报警的时候,发现存在仪表故障(断点多个指标)的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ }
|
|
|
+ log.info("工业库报警的时候,发现存在仪表故障(断点多个指标)的报警,其他报警不再处理");
|
|
|
+ return;*/
|
|
|
+ //逻辑调整:要按指标报多指标断点 需要当前的集合和原来的集合判断,新的报警增加,如果之前有了报警则不处理
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ //新增的断点的数据全部都报警
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : breakPointList) {
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ //判断那些指标不能再次执行
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭该指标的其他类型的报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ //原来集合里存放的都是单指标异常 下面2个值需要重新赋值
|
|
|
+ tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getMsg());
|
|
|
+ tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }else{//之前存在报警了 所以需要2个集合数据进行匹配,如果新的和原来的一样则不用做任何操作【持续报警】;如果不一样,则新的要报警,老报警要关闭
|
|
|
+ List<TXinyiWarningRecord> breakPointListNew = new ArrayList<>(breakPointList);//断点集合[需要新增的]
|
|
|
+ breakPointListNew.removeAll(tXinyiWarningRecords);
|
|
|
+ List<TXinyiWarningRecord> breakPointListClose = new ArrayList<>(tXinyiWarningRecords);//断点集合[需要关闭的] 还有2这重叠的,这种重叠的,是不需要做任何操作的,持续报警
|
|
|
+ breakPointListClose.removeAll(breakPointList);
|
|
|
+ //插入新的报警
|
|
|
+ if(!CollectionUtils.isEmpty(breakPointListNew)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : breakPointListNew) {
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ //判断那些指标不能再次执行
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭该指标的其他类型的报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ //新插入
|
|
|
+ //原来集合里存放的都是单指标异常 下面2个值需要重新赋值
|
|
|
+ tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getMsg());
|
|
|
+ tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //关闭老的报警
|
|
|
+ if(!CollectionUtils.isEmpty(breakPointListClose)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : breakPointListClose) {
|
|
|
+ //老的报警,新的没有出现,关闭
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //2025年03月06日10:56:41 需要额外记录哪些是历史报警,现在仍然报警的,这种的更新部分信息,更新决策内容
|
|
|
+ List<TXinyiWarningRecord> breakPointListContinue = new ArrayList<>(tXinyiWarningRecords);
|
|
|
+ breakPointListContinue.removeAll(breakPointListNew);
|
|
|
+ if(!CollectionUtils.isEmpty(breakPointListContinue)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : breakPointListContinue) {
|
|
|
+ //2025年03月06日10:52:57 逻辑调整:更新一直报警的那条记录的显示值
|
|
|
+ //需要匹配新的报警中的最新的值
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecordContinue = tXinyiWarningRecord;//兜底处理
|
|
|
+ Optional<TXinyiWarningRecord> optional = breakPointListNew.stream().filter(r -> category.equals(r.getCategory())).findAny();
|
|
|
+ if(optional.isPresent()){
|
|
|
+ tXinyiWarningRecordContinue = optional.get();
|
|
|
+ log.info("存在之前多指标断点,现在仍然断点的数据{}", JSON.toJSONString(tXinyiWarningRecordContinue));
|
|
|
+ }
|
|
|
+ tXinyiWarningRecord.setWarningVal(tXinyiWarningRecordContinue.getWarningVal());
|
|
|
+ tXinyiWarningRecord.setTime(tXinyiWarningRecordContinue.getTime());
|
|
|
+ tXinyiWarningRecord.setUpdateTime(nowDate);
|
|
|
+ tXinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ //从单指标变成多指标 这个不可以修改
|
|
|
+// tXinyiWarningRecord.setReason(tXinyiWarningRecordContinue.getReason());
|
|
|
+ //更新数据库
|
|
|
+ this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策【本地模拟的决策】
|
|
|
+ addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果出现多指标问题,后续的报警不再处理
|
|
|
+// return;
|
|
|
+ //2025年03月03日16:07:09 不是其他报警都不执行,只是出现异常的问题不再进行报警,其他的还需要再次报警
|
|
|
+ }
|
|
|
+
|
|
|
+ //连续不变
|
|
|
+ TXinyiWarningRecord warningRecordNoChangeMore = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiWarningNoChangeMoreRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordNoChangeMore);
|
|
|
+ if(noChange < 1){//恢复正常,关闭多个连续不变报警
|
|
|
+ //关闭之前的多个 多指标断点报警
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningNoChangeMoreRecords) {
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(noChange == 1){
|
|
|
+ TXinyiWarningRecord noChangeWarningRecord = noChangeList.get(0);
|
|
|
+ String category = noChangeWarningRecord.getCategory();
|
|
|
+ TXinyiWarningRecord warningRecordReq = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_SINGLE.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiNoChangeSingleWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordReq);
|
|
|
+ //关闭同类型的其他报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_LX_SINGLE.getCode());
|
|
|
+ //触发报警 并且模拟大模型返回决策问答数据
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiNoChangeSingleWarningRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(noChangeWarningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByNoChangeSingle(noChangeWarningRecord, tXinyiIndustry, normConfig, category);
|
|
|
+ }else{
|
|
|
+ log.info("工业库报警的时候,发现存在仪表故障(连续不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ //2025年03月06日10:52:57 逻辑调整:更新一直报警的那条记录的显示值
|
|
|
+ TXinyiWarningRecord xinyiWarningRecord = tXinyiNoChangeSingleWarningRecords.get(0);
|
|
|
+ xinyiWarningRecord.setWarningVal(noChangeWarningRecord.getWarningVal());
|
|
|
+ xinyiWarningRecord.setTime(noChangeWarningRecord.getTime());
|
|
|
+ xinyiWarningRecord.setUpdateTime(nowDate);
|
|
|
+ xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ //2024年7月31日09:20:47 报警的原因(超标还是超管控也需要更新)
|
|
|
+ xinyiWarningRecord.setReason(noChangeWarningRecord.getReason());
|
|
|
+ //更新数据库
|
|
|
+ this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
|
|
|
+ //继续调用决策【本地模拟的决策】
|
|
|
+ addChatRecordByNoChangeSingle(xinyiWarningRecord, tXinyiIndustry, normConfig, category);
|
|
|
+ }
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭之前的多个 多指标断点报警
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningNoChangeMoreRecords) {
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //将其他类型的报警全部关闭
|
|
|
+ //2025年02月27日17:09:56 此场景不关闭其他报警
|
|
|
+// closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ //触发 多个连续不变报警
|
|
|
+ /*if(CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ warningRecordNoChangeMore.setType(0);
|
|
|
+ String msg = BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getMsg();
|
|
|
+ warningRecordNoChangeMore.setCategory(msg);
|
|
|
+ warningRecordNoChangeMore.setTime(nowDate);
|
|
|
+ warningRecordNoChangeMore.setReason(msg);
|
|
|
+ warningRecordNoChangeMore.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ warningRecordNoChangeMore.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ warningRecordNoChangeMore.setCreateTime(nowDate);
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordNoChangeMore);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByNoChangeMore(warningRecordNoChangeMore, tXinyiIndustry, normConfig);
|
|
|
+ }else{
|
|
|
+ log.info("工业库报警的时候,发现存在仪表故障(连续不变多个指标)的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ }
|
|
|
+ log.info("发现存在仪表故障(连续不变多个指标)的报警,其他报警不再处理");
|
|
|
+ return;*/
|
|
|
+ //逻辑调整:要按指标报多指标断点 需要当前的集合和原来的集合判断,新的报警增加,如果之前有了报警则不处理
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
|
|
|
+ //新增的断点的数据全部都报警
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : noChangeList) {
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ //判断那些指标不能再次执行
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭该指标的其他类型的报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ //原来集合里存放的都是单指标异常 下面2个值需要重新赋值
|
|
|
+ tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getMsg());
|
|
|
+ tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByNoChangeMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }else{//之前存在报警了 所以需要2个集合数据进行匹配,如果新的和原来的一样则不用做任何操作【持续报警】;如果不一样,则新的要报警,老报警要关闭
|
|
|
+ List<TXinyiWarningRecord> noChangeListNew = new ArrayList<>(noChangeList);//断点集合[需要新增的]
|
|
|
+ noChangeListNew.removeAll(tXinyiWarningNoChangeMoreRecords);
|
|
|
+ List<TXinyiWarningRecord> noChangeListClose = new ArrayList<>(tXinyiWarningNoChangeMoreRecords);//断点集合[需要关闭的] 还有2这重叠的,这种重叠的,是不需要做任何操作的,持续报警
|
|
|
+ noChangeListClose.removeAll(noChangeList);
|
|
|
+ //插入新的报警
|
|
|
+ if(!CollectionUtils.isEmpty(noChangeListNew)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : noChangeListNew) {
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ //判断那些指标不能再次执行
|
|
|
+ //额外判断当前的异常是哪个指标,并处理标识
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
+ csCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
|
|
|
+ csZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
|
|
|
+ csZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
|
|
|
+ csADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
|
|
|
+ csSSExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
|
|
|
+ jsZLExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
|
|
|
+ jsCodExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
|
|
|
+ jsZDExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
|
|
|
+ jsADExecute = false;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
|
|
|
+ jsSSExecute = false;
|
|
|
+ }else{
|
|
|
+ log.error("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
|
|
|
+ }
|
|
|
+ //关闭该指标的其他类型的报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ //新插入
|
|
|
+ //原来集合里存放的都是单指标异常 下面2个值需要重新赋值
|
|
|
+ tXinyiWarningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getMsg());
|
|
|
+ tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByNoChangeMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //关闭老的报警
|
|
|
+ if(!CollectionUtils.isEmpty(noChangeListClose)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : noChangeListClose) {
|
|
|
+ //老的报警,新的没有出现,关闭
|
|
|
+ closeWarning(tXinyiWarningRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //2025年03月06日10:56:41 需要额外记录哪些是历史报警,现在仍然报警的,这种的更新部分信息,更新决策内容
|
|
|
+ List<TXinyiWarningRecord> noChangeListContinue = new ArrayList<>(tXinyiWarningRecords);
|
|
|
+ noChangeListContinue.removeAll(noChangeListNew);
|
|
|
+ if(!CollectionUtils.isEmpty(noChangeListContinue)){
|
|
|
+ for (TXinyiWarningRecord tXinyiWarningRecord : noChangeListContinue) {
|
|
|
+ //2025年03月06日10:52:57 逻辑调整:更新一直报警的那条记录的显示值
|
|
|
+ //需要匹配新的报警中的最新的值
|
|
|
+ String category = tXinyiWarningRecord.getCategory();
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecordContinue = tXinyiWarningRecord;//兜底处理
|
|
|
+ Optional<TXinyiWarningRecord> optional = noChangeListNew.stream().filter(r -> category.equals(r.getCategory())).findAny();
|
|
|
+ if(optional.isPresent()){
|
|
|
+ tXinyiWarningRecordContinue = optional.get();
|
|
|
+ log.info("存在之前多指标连续不变的数据,现在仍然连续不变的数据{}", JSON.toJSONString(tXinyiWarningRecordContinue));
|
|
|
+ }
|
|
|
+ tXinyiWarningRecord.setWarningVal(tXinyiWarningRecordContinue.getWarningVal());
|
|
|
+ tXinyiWarningRecord.setTime(tXinyiWarningRecordContinue.getTime());
|
|
|
+ tXinyiWarningRecord.setUpdateTime(nowDate);
|
|
|
+ tXinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ //从单指标变成多指标 这个不可以修改
|
|
|
+// tXinyiWarningRecord.setReason(tXinyiWarningRecordContinue.getReason());
|
|
|
+ //更新数据库
|
|
|
+ this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策【本地模拟的决策】
|
|
|
+ addChatRecordByNoChangeMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果出现多指标问题,后续的报警不再处理
|
|
|
+// return;
|
|
|
+ //2025年03月03日16:07:09 不是其他报警都不执行,只是出现异常的问题不再进行报警,其他的还需要再次报警
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始走正常的水质报警 + 突变
|
|
|
+ //2025年02月27日15:33:39 加上校验:此次的检查指标必须是不存在断点且不存在连续不变才执行下面的报警。
|
|
|
+
|
|
|
+ //没有断点,且没有连续不变,全部执行
|
|
|
+ /*if(breakpointCount < 1 && noChange < 1){
|
|
|
+ handleXinYiWarningsCsOrigin(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ handleXinYiWarningsCsOrigin(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ handleXinYiWarningsCsOrigin(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ handleXinYiWarningsCsOrigin(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ handleXinYiWarningsCsOrigin(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+ handleXinYiWarningRecordJSOrigin(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ handleXinYiWarningRecordJSOrigin(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ handleXinYiWarningRecordJSOrigin(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ handleXinYiWarningRecordJSOrigin(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ handleXinYiWarningRecordJSOrigin(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+ }*/
|
|
|
+ //如果只有单一的报警,只有该指标不再进行报警,其他的指标还是要报警的
|
|
|
+ /*if(breakpointCount == 1 && noChange == 0){//只有断点
|
|
|
+ }
|
|
|
+ if(breakpointCount == 0 && noChange == 1){//只有连续不变
|
|
|
+ }
|
|
|
+ if(breakpointCount == 1 && noChange == 1){//既有断点,又有连续不变 【可能是相同的指标,也可能是不同的指标】
|
|
|
+ }*/
|
|
|
+ //综合上面3中情况,断点和连续不变的,2个报警类型至少有一个报警,且只能有一个指标报警
|
|
|
+ //上述逻辑存在bug:如果是不同的指标 比如出水cod断点 出水ss连续不变 则无法处理。 所以决定进出水的指标是否报警,需要每个知道都要单独记录,只要存在异常项就不能再走 异常升高/偏低/普通的报警了
|
|
|
+
|
|
|
+ //后续的指标是否往下进行,用新的逻辑:
|
|
|
+ if(csCodExecute && !Objects.isNull(cscodBzz) && cscodBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cscodGkz) && cscodGkz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningsCsOrigin(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ if(csZLExecute && !Objects.isNull(cszlBzz) && cszlBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cszlGkz) && cszlGkz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningsCsOrigin(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ if(csZDExecute && !Objects.isNull(cszzBzz) && cszzBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cszzGkz) && cszzGkz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningsCsOrigin(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ if(csADExecute && !Objects.isNull(csadBzz) && csadBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(csadGkz) && csadGkz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningsCsOrigin(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ if(csSSExecute && !Objects.isNull(csSSBzz) && csSSBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(csssGkz) && csssGkz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningsCsOrigin(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+ if(jsZLExecute && !Objects.isNull(jszlSjz) && jszlSjz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningRecordJSOrigin(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ if(jsCodExecute && !Objects.isNull(jscodSjz) && jscodSjz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningRecordJSOrigin(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
|
|
|
+ if(jsZDExecute && !Objects.isNull(jszdSjz) && jszdSjz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningRecordJSOrigin(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ if(jsADExecute && !Objects.isNull(jsadSjz) && jsadSjz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningRecordJSOrigin(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ if(jsSSExecute && !Objects.isNull(jsSSSjz) && jsSSSjz.compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ handleXinYiWarningRecordJSOrigin(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public void handleSZWarning(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
|
|
|
//出水相关
|
|
|
//出水COD报警
|