2 İşlemeler b31c89cc9e ... 42b3e76a0d

Yazar SHA1 Mesaj Tarih
  王苗苗 42b3e76a0d 小程序,真机调用失败,尝试修改 1 hafta önce
  王苗苗 314796be43 临时提交 1 hafta önce

+ 7 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/GRPCController.java

@@ -505,6 +505,13 @@ public class GRPCController extends BaseController {
 //        response.setContentType("text/plain");
         response.setContentType("text/event-stream");
         response.setCharacterEncoding("utf-8");
+        //2025年04月14日09:12:38 小程序,真机调用失败,尝试修改
+        // 1. 设置传输编码为chunked
+        response.setHeader("Transfer-Encoding", "chunked");
+        // 2. 禁用内容长度(否则会禁用chunked模式)
+        response.setHeader("Content-Length", null);
+
+
         //请求参数
         Integer module = chatReq.getModule();//来自那个模块
         Date reportDate = chatReq.getReportDate();//如果传过值来了 代表的是工单类型的问答

+ 68 - 166
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -40,6 +40,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.ParseException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.slibra.common.constant.MyConstants.*;
 import static com.slibra.common.enums.BusinessEnum.BigModelWarningTypeRemarkEnum.*;
@@ -1626,80 +1627,8 @@ public class AsyncTask {
             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();
@@ -1725,17 +1654,6 @@ public class AsyncTask {
             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();
         //下面是处理多个指标的 【断点】和 连续不变的报警
@@ -1810,28 +1728,6 @@ public class AsyncTask {
                 }
             }
         }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)){
                 //新增的断点的数据全部都报警
@@ -2027,28 +1923,6 @@ public class AsyncTask {
                 }
             }
         }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)){
                 //新增的断点的数据全部都报警
@@ -2178,52 +2052,13 @@ public class AsyncTask {
 
         //开始走正常的水质报警 + 突变
         //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()));
-
     }
 
 
@@ -5142,6 +4977,73 @@ public class AsyncTask {
 //        System.out.println(BigDecimal.valueOf(1).subtract(null));
         String s = "asd@@@1dsa@@@1111@@@1222".replaceAll("@@@1", "!");
         System.out.println(s);
+
+        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "fig", "grape");
+
+        // 默认分组(使用HashMap,无顺序保证)
+        Map<Integer, List<String>> lengthMap = words.stream()
+                .collect(Collectors.groupingBy(String::length));
+
+        System.out.println("默认分组(顺序不确定):");
+        lengthMap.forEach((k, v) -> System.out.println(k + ": " + v));
+
+        System.out.println();
+
+        // 按键自然顺序排序(升序)
+        Map<Integer, List<String>> sortedMap = words.stream()
+                .collect(Collectors.groupingBy(
+                        String::length,
+                        TreeMap::new,  // 使用TreeMap自动按键排序
+                        Collectors.toList()
+                ));
+
+        System.out.println("\n按键自然顺序排序(升序):");
+        sortedMap.forEach((k, v) -> System.out.println(k + ": " + v));
+
+        System.out.println();
+
+        // 按键反转排序(降序)
+        Map<Integer, List<String>> reversedMap = words.stream()
+                .collect(Collectors.groupingBy(
+                        String::length,
+                        () -> new TreeMap<>(Comparator.reverseOrder()),  // 使用反转比较器
+                        Collectors.toList()
+                ));
+
+        System.out.println("\n按键反转排序(降序):");
+        reversedMap.forEach((k, v) -> System.out.println(k + ": " + v));
+
+        System.out.println();
+
+        // 保持插入顺序
+        Map<Integer, List<String>> orderedMap = words.stream()
+                .collect(Collectors.groupingBy(
+                        String::length,
+                        LinkedHashMap::new,  // 使用LinkedHashMap保持插入顺序
+                        Collectors.toList()
+                ));
+
+        System.out.println("\n保持插入顺序:");
+        orderedMap.forEach((k, v) -> System.out.println(k + ": " + v));
+
+        System.out.println();
+
+        // 对已有结果按键排序
+        Map<Integer, List<String>> groupedMap = words.stream()
+                .collect(Collectors.groupingBy(String::length));
+
+        Map<Integer, List<String>> sortedAfter = new TreeMap<>(groupedMap);
+
+        System.out.println("\n对已有分组结果按键排序(升序):");
+        sortedAfter.forEach((k, v) -> System.out.println(k + ": " + v));
+
+        // 对已有结果按键反转排序
+        Map<Integer, List<String>> reversedAfter = new TreeMap<>(Comparator.reverseOrder());
+        reversedAfter.putAll(groupedMap);
+
+        System.out.println("\n对已有分组结果按键反转排序(降序):");
+        reversedAfter.forEach((k, v) -> System.out.println(k + ": " + v));
+
     }
 
     /**