Prechádzať zdrojové kódy

Merge branch 'master' into dev_streamapi_20250515

余尚辉 3 dní pred
rodič
commit
3bcc35e240

+ 321 - 15
slibra-admin/src/main/java/com/slibra/web/controller/business/HandleDataController.java

@@ -139,7 +139,7 @@ public class HandleDataController extends BaseController
        TXinyiIndustry tXinyiIndustry = this.xinyiIndustryMapper.selectTXinyiIndustryNewest();
        if(Objects.isNull(tXinyiIndustry))
            throw new RuntimeException("未查询到工业库信息");
-       asyncTask.handleSZWarning(tXinyiIndustry, normConfig);
+//       asyncTask.handleSZWarning(tXinyiIndustry, normConfig);
        return "success";
    }
 
@@ -2275,6 +2275,7 @@ public class HandleDataController extends BaseController
         BigDecimal cscodBzz = normConfig.getCscodBzz();
         BigDecimal cscodGkz = normConfig.getCscodGkz();
         BigDecimal jscodSjz = normConfig.getJscodSjz();
+        BigDecimal jszlSjz = normConfig.getJszlSjz();
         //进水总氮超标报警
         BigDecimal jsTn = tXinyiIndustry.getJsTn();
         //进水氨氮超标报警
@@ -2283,6 +2284,8 @@ public class HandleDataController extends BaseController
         BigDecimal jsCod = tXinyiIndustry.getJsCod();
         //出水Cod报警
         BigDecimal csCod = tXinyiIndustry.getCsCod();
+        //进水总磷
+        BigDecimal jsTp = tXinyiIndustry.getJsTp();
 
         if(!Objects.isNull(jszdSjz) && jszdSjz.compareTo(BigDecimal.ZERO) > 0)
             handleXinYiWarningRecordJSOriginZD(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
@@ -2292,9 +2295,161 @@ public class HandleDataController extends BaseController
             handleXinYiWarningsCsOriginCod(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
         if(!Objects.isNull(jscodSjz) && jscodSjz.compareTo(BigDecimal.ZERO) > 0)
             handleXinYiWarningRecordJSOriginCod(jscodSjz, jsCod, JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
+        if(!Objects.isNull(jszlSjz) && jszlSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOriginTp(jszlSjz, jsTp, JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, jsTp, jsslSjz, jszlSjz));
+    }
+
+
+    /**
+     * 不同指标报警规则不一样,全部区分开来处理,此方法为:进水tp
+     * 通过输入的值 生成对应类型的报警对象(进水)- 总磷
+     *
+     * @param jsBzz
+     * @param currentVal
+     * @param category
+     * @param tXinyiIndustry
+     * @param normConfig
+     * @param cwrwfhz
+     * @return
+     */
+    private void handleXinYiWarningRecordJSOriginTp(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
+
+        String testHour = tXinyiIndustry.getTestHour();
+        //这里也不能用当前日期,要用对应检测时间
+//        Date nowDate = DateUtils.getNowDate();
+        Date nowDate = DateUtils.parseDate(testHour);
+
+        List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(INT_8);
+        if(CollectionUtils.isEmpty(tXinyiIndustries) || tXinyiIndustries.size() < INT_8){
+            log.error("处理生化报警时,获取最近的8条工业库数据失败~~~~~~~");
+            return ;
+        }
+        //最开始的工艺报警  (超标准工艺报警) 2025年04月16日15:40:23 改成只有超标准才会报警,并且具体逻辑做拆分
+        normalIndustryWarningJsTp(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, nowDate, tXinyiIndustries);
+
+    }
+
+
+    /**
+     * 最开始的工艺报警  (超标准工艺报警) -- 进水tp
+     * @param jsBzz
+     * @param currentVal
+     * @param category
+     * @param tXinyiIndustry
+     * @param normConfig
+     * @param cwrwfhz
+     * @param nowDate
+     * @param tXinyiIndustries
+     */
+    private void normalIndustryWarningJsTp(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, Date nowDate, List<TXinyiIndustry> tXinyiIndustries) {
+        //新的判断进水氨氮是否超标
+        TXinyiWarningRecord tXinyiWarningRecord = existsNormalJsTp(jsBzz, currentVal, category, cwrwfhz, tXinyiIndustries, normConfig, nowDate);
+
+        //最近3条输出 连续升高趋势 和 新增的报警都需要
+        //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(TXinyiWarningRecord.builder().type(0).category(category).status(0).build());
+        if(Objects.isNull(tXinyiWarningRecord)){//数据正常,无告警信息
+            if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+                log.info( "{}:现在恢复正常,历史报警数据为{}", category,JSON.toJSONString(tXinyiWarningRecords));
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {
+                    closeWarning(xinyiWarningRecord);
+                }
+            }
+        }else{//有告警信息
+            if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
+                //保存到数据库中
+                //2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
+                tXinyiWarningRecord.setUpdateTime(nowDate);
+                this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+                //继续调用决策
+                this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig, false, nowDate);
+            }else{
+                log.info("{}:之前已经有过告警记录了,且还是继续报警,无需重复添加报警,但是决策仍然要调用", category);
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {//理论上只有一个的
+                    //2024年7月5日10:45:24 逻辑调整:更新一直报警的那条记录的显示值
+                    xinyiWarningRecord.setWarningVal(tXinyiWarningRecord.getWarningVal());
+//                        xinyiWarningRecord.setDesignVal(tXinyiWarningRecord.getDesignVal());
+//                        tXinyiWarningRecord.setControlVal(tXinyiWarningRecord.getControlVal());
+                    xinyiWarningRecord.setTime(tXinyiWarningRecord.getTime());
+                    xinyiWarningRecord.setUpdateTime(nowDate);
+                    xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
+                    //2024年7月15日11:07:33 报警的级别也要重新计算并更新
+                    xinyiWarningRecord.setLevel(tXinyiWarningRecord.getLevel());
+                    //2024年7月31日09:20:47 报警的原因(超标还是超管控也需要更新)
+                    xinyiWarningRecord.setReason(tXinyiWarningRecord.getReason());
+                    //更新数据库
+                    this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
+                    //继续调用决策
+                    this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig, false, nowDate);
+                }
+            }
+        }
     }
 
 
+
+    /**
+     * 根据新的规则,判断进水氨氮是否超标,超标了则返回报警对象;没有超标,返回空对象 -- 进水cod
+     *
+     * @param jsBzz
+     * @param currentVal
+     * @param category
+     * @param cwrwfhz
+     * @param tXinyiIndustries
+     * @param normConfig
+     * @param nowDate
+     * @return
+     */
+    private TXinyiWarningRecord existsNormalJsTp(BigDecimal jsBzz, BigDecimal currentVal, String category, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, TXinyiNormConfig normConfig, Date nowDate) {
+        boolean flag = false;
+        TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(INDEX_0);
+        BigDecimal jsTp0 = tXinyiIndustry.getJsTp();
+        BigDecimal jsTp1 = tXinyiIndustries.get(INDEX_1).getJsTp();
+        BigDecimal jsTp2 = tXinyiIndustries.get(INDEX_2).getJsTp();
+        BigDecimal jsTp3 = tXinyiIndustries.get(INDEX_3).getJsTp();
+        if(!Objects.isNull(jsTp0) && jsTp0.compareTo(jsBzz) > 0 && !Objects.isNull(jsTp1) && jsTp1.compareTo(jsBzz) > 0
+                && !Objects.isNull(jsTp2) && jsTp2.compareTo(jsBzz) > 0 && !Objects.isNull(jsTp3) && jsTp3.compareTo(jsBzz) > 0)
+            flag = true;//最近4个都超标
+        if(!Objects.isNull(jsTp0) && jsTp0.compareTo(jsBzz) > 0 && !Objects.isNull(jsTp1) && jsTp0.compareTo(jsTp1) >= 0
+                && !Objects.isNull(jsTp2) && jsTp1.compareTo(jsTp2) >= 0)
+            flag = true;//最新的超标了并且连续3个值都有升高趋势
+        BigDecimal jsCod = tXinyiIndustry.getJsCod();
+        BigDecimal jsTn = tXinyiIndustry.getJsTn();
+        BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
+        //在线仪表,一个进水总磷数据 > 7.1,并且 cod> 630 或当前进水总氮> 65 或 当前进水氨氮 >58
+        if(!Objects.isNull(jsTp0) && jsTp0.compareTo(jsBzz) > 0 && (!Objects.isNull(jsCod) && jsCod.compareTo(BigDecimal.valueOf(630)) > 0
+                || !Objects.isNull(jsTn) && jsTn.compareTo(BigDecimal.valueOf(65)) > 0 || !Objects.isNull(jsNh3) && jsNh3.compareTo(BigDecimal.valueOf(58)) > 0))
+            flag = true;
+        if(!flag)
+            return null;
+        //存在符合的报警情况,生成报警对象
+        TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
+        /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
+        tXinyiWarningRecord.setStatus(0);
+        tXinyiWarningRecord.setType(0);
+        tXinyiWarningRecord.setCategory(category);
+        tXinyiWarningRecord.setTime(nowDate);
+        tXinyiWarningRecord.setWarningVal(currentVal);
+        tXinyiWarningRecord.setDesignVal(jsBzz);
+//        tXinyiWarningRecord.setControlVal(csGkz);
+        tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+        tXinyiWarningRecord.setCreateTime(nowDate);
+        tXinyiWarningRecord.setRemark(ZERO_SZ_WARNING.getCode());
+        //2025年02月10日14:45:08 下面是新增加的字段
+        tXinyiWarningRecord.setWaterType(BusinessEnum.WaterTypeEnum.JS.getCode());
+        //超污染物限制:计算公式为:当前氨氮/氨氮设计值 或者 当前氨氮/氨氮管控值(智能工单使用)  这里是出水的 【需要根据超标还是超管控,具体计算】
+        //超污染物负荷值:计算公式为:当前水量与氨氮乘积  /  设计水量与设计进水氨氮的乘积(智能工单使用)
+        tXinyiWarningRecord.setCwrwfhz(cwrwfhz);//2025年02月14日10:48:32 具体的值由上游传过来
+        tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+        tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
+        tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.CBZZ.getCode());
+        tXinyiWarningRecord.setCwrwxz(getCwrwxzByDetail(currentVal, normConfig, category, true));//根据当前值和类型以及是否超标处理
+
+        return tXinyiWarningRecord;
+    }
+
+
+
     /**
      * 不同指标报警规则不一样,全部区分开来处理,此方法为:进水cod
      * 通过输入的值 生成对应类型的报警对象(进水)- cod
@@ -2309,16 +2464,16 @@ public class HandleDataController extends BaseController
      */
     private void handleXinYiWarningRecordJSOriginCod(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
 
-        Date nowDate = DateUtils.getNowDate();
+        String testHour = tXinyiIndustry.getTestHour();
+        //这里也不能用当前日期,要用对应检测时间
+//        Date nowDate = DateUtils.getNowDate();
+        Date nowDate = DateUtils.parseDate(testHour);
 
         List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(INT_8);
         if(CollectionUtils.isEmpty(tXinyiIndustries) || tXinyiIndustries.size() < INT_8){
             log.error("处理生化报警时,获取最近的8条工业库数据失败~~~~~~~");
             return ;
         }
-        //拼接决策的最近8小时的值
-        String last8Str = this.getJsCodStrByList(tXinyiIndustries);
-
 
         //最开始的工艺报警  (超标准工艺报警) 2025年04月16日15:40:23 改成只有超标准才会报警,并且具体逻辑做拆分
         normalIndustryWarningJsCod(jsBzz, currentVal, category, tXinyiIndustry, normConfig, cwrwfhz, nowDate, tXinyiIndustries);
@@ -2339,7 +2494,7 @@ public class HandleDataController extends BaseController
      */
     private void normalIndustryWarningJsCod(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, Date nowDate, List<TXinyiIndustry> tXinyiIndustries) {
         //新的判断进水氨氮是否超标
-        TXinyiWarningRecord tXinyiWarningRecord = existsNormalJsCod(jsBzz, currentVal, category, cwrwfhz, tXinyiIndustries, normConfig);
+        TXinyiWarningRecord tXinyiWarningRecord = existsNormalJsCod(jsBzz, currentVal, category, cwrwfhz, tXinyiIndustries, normConfig, nowDate);
 
         //最近3条输出 连续升高趋势 和 新增的报警都需要
         //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
@@ -2392,9 +2547,10 @@ public class HandleDataController extends BaseController
      * @param cwrwfhz
      * @param tXinyiIndustries
      * @param normConfig
+     * @param nowDate
      * @return
      */
-    private TXinyiWarningRecord existsNormalJsCod(BigDecimal jsBzz, BigDecimal currentVal, String category, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, TXinyiNormConfig normConfig) {
+    private TXinyiWarningRecord existsNormalJsCod(BigDecimal jsBzz, BigDecimal currentVal, String category, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, TXinyiNormConfig normConfig, Date nowDate) {
         boolean flag = false;
         TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(INDEX_0);
         BigDecimal jsCod0 = tXinyiIndustry.getJsCod();
@@ -2419,12 +2575,12 @@ public class HandleDataController extends BaseController
         tXinyiWarningRecord.setStatus(0);
         tXinyiWarningRecord.setType(0);
         tXinyiWarningRecord.setCategory(category);
-        tXinyiWarningRecord.setTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setTime(nowDate);
         tXinyiWarningRecord.setWarningVal(currentVal);
         tXinyiWarningRecord.setDesignVal(jsBzz);
 //        tXinyiWarningRecord.setControlVal(csGkz);
         tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
-        tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setCreateTime(nowDate);
         tXinyiWarningRecord.setRemark(ZERO_SZ_WARNING.getCode());
         //2025年02月10日14:45:08 下面是新增加的字段
         tXinyiWarningRecord.setWaterType(BusinessEnum.WaterTypeEnum.JS.getCode());
@@ -2471,7 +2627,11 @@ public class HandleDataController extends BaseController
      */
     private void handleXinYiWarningsCsOriginCod(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
 
-        Date nowDate = DateUtils.getNowDate();
+        String testHour = tXinyiIndustry.getTestHour();
+        //这里也不能用当前日期,要用对应检测时间
+//        Date nowDate = DateUtils.getNowDate();
+        Date nowDate = DateUtils.parseDate(testHour);
+
         List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(INT_4);
         if(CollectionUtils.isEmpty(tXinyiIndustries) || tXinyiIndustries.size() < INT_4){
             log.error("处理生化报警时,获取最近的4条工业库数据失败~~~~~~~");
@@ -2505,7 +2665,7 @@ public class HandleDataController extends BaseController
      */
     private void normalIndustryWarningCsCod(BigDecimal csBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, Date nowDate, List<TXinyiIndustry> tXinyiIndustries, BigDecimal csGkz) {
         //新的判断进水氨氮是否超标
-        TXinyiWarningRecord tXinyiWarningRecord = existsNormalCsCod(csBzz, currentVal, category, cwrwfhz, tXinyiIndustries, normConfig, csGkz);
+        TXinyiWarningRecord tXinyiWarningRecord = existsNormalCsCod(csBzz, currentVal, category, cwrwfhz, tXinyiIndustries, normConfig, csGkz, nowDate);
 
         //最近3条输出 连续升高趋势 和 新增的报警都需要
         //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
@@ -2558,9 +2718,10 @@ public class HandleDataController extends BaseController
      * @param cwrwfhz
      * @param tXinyiIndustries
      * @param normConfig
+     * @param nowDate
      * @return
      */
-    private TXinyiWarningRecord existsNormalCsCod(BigDecimal csBzz, BigDecimal currentVal, String category, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, TXinyiNormConfig normConfig, BigDecimal csGkz) {
+    private TXinyiWarningRecord existsNormalCsCod(BigDecimal csBzz, BigDecimal currentVal, String category, BigDecimal cwrwfhz, List<TXinyiIndustry> tXinyiIndustries, TXinyiNormConfig normConfig, BigDecimal csGkz, Date nowDate) {
         boolean flag = false;
         TXinyiIndustry tXinyiIndustry = tXinyiIndustries.get(INDEX_0);
         BigDecimal csCod0 = tXinyiIndustry.getCsCod();
@@ -2619,12 +2780,12 @@ public class HandleDataController extends BaseController
         tXinyiWarningRecord.setStatus(0);
         tXinyiWarningRecord.setType(0);
         tXinyiWarningRecord.setCategory(category);
-        tXinyiWarningRecord.setTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setTime(nowDate);
         tXinyiWarningRecord.setWarningVal(currentVal);
         tXinyiWarningRecord.setDesignVal(csBzz);
         tXinyiWarningRecord.setControlVal(csGkz);
         tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
-        tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setCreateTime(nowDate);
         tXinyiWarningRecord.setRemark(ZERO_SZ_WARNING.getCode());
         //2025年02月10日14:45:08 下面是新增加的字段
         tXinyiWarningRecord.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
@@ -3485,7 +3646,10 @@ public class HandleDataController extends BaseController
         //氨氮的标准值和管控值
         BigDecimal csadBzz = normConfig.getCsadBzz();
         BigDecimal csadGkz = normConfig.getCsadGkz();
-
+        //总磷的标准值和管控值
+        BigDecimal cszlBzz = normConfig.getCszlBzz();
+        BigDecimal cszlGkz = normConfig.getCszlGkz();
+        //进水量和进水流量设计值
         BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
         BigDecimal jsslSjz = normConfig.getJsslSjz();
 
@@ -3510,6 +3674,148 @@ public class HandleDataController extends BaseController
         if(!Objects.isNull(csadBzz)){
             handleXinYiWarningsRobotOriginCsAd(csadBzz, tenVals.get(INDEX_0), csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()), tXinyiRobots, tenVals);
         }
+
+        //二沉池正磷酸盐
+        if(!Objects.isNull(cszlBzz)){
+            handleXinYiWarningsRobotOriginCsTp(cszlBzz, tenVals.get(INDEX_0), cszlGkz, ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()), tXinyiRobots);
+        }
+    }
+
+
+    /**
+     * 通过输入的值 生成对应类型的报警对象(出水)- 二沉池正磷酸盐
+     *
+     * @param csBzz
+     * @param currentVal
+     * @param csGkz
+     * @param category
+     * @param tXinyiIndustry
+     * @param normConfig
+     * @param cwrwfhz
+     * @param tXinyiRobots
+     * @return
+     */
+    private void handleXinYiWarningsRobotOriginCsTp(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiRobot> tXinyiRobots) {
+
+        String testHour = tXinyiIndustry.getTestHour();
+        //这里也不能用当前日期,要用对应检测时间
+//        Date nowDate = DateUtils.getNowDate();
+        Date nowDate = DateUtils.parseDate(testHour);
+
+//        //单点突变-异常升高报警
+//        if (existsYcsgRobots(csBzz, currentVal, csGkz, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiRobots, nowDate))
+//            return;
+
+        //下面是最原始的处理 超标准 超管控报警
+        robotCsTpGybz(csBzz, currentVal, csGkz, category, tXinyiIndustry, normConfig, cwrwfhz, tXinyiRobots, nowDate);
+
+    }
+
+
+    /**
+     *
+     * 化验室-出水总磷(二沉池正磷酸盐) 的 超标准工艺报警
+     * @param csBzz
+     * @param currentVal
+     * @param csGkz
+     * @param category
+     * @param tXinyiIndustry
+     * @param normConfig
+     * @param cwrwfhz
+     * @param tXinyiRobots
+     * @param nowDate
+     */
+    private void robotCsTpGybz(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiRobot> tXinyiRobots, Date nowDate) {
+        TXinyiWarningRecord tXinyiWarningRecord = getRobotCsTpWarningBean(csBzz, currentVal, csGkz, category, normConfig, cwrwfhz, tXinyiRobots, nowDate);
+        //判断是否存在要报警的数据
+        //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(TXinyiWarningRecord.builder().delFlag(0).type(0).category(category).status(0).build());
+        if(Objects.isNull(tXinyiWarningRecord)){//数据正常,无告警信息
+            if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+                log.info( "{}:现在恢复正常,历史报警数据为{}", category,JSON.toJSONString(tXinyiWarningRecords));
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {
+                    this.closeWarning(xinyiWarningRecord);
+                }
+            }
+        }else{//有告警信息
+            if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
+                //保存到数据库中
+                //2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
+                tXinyiWarningRecord.setUpdateTime(nowDate);
+                this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+                //继续调用决策
+                this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig, true, nowDate);
+            }else{
+                log.info("{}:之前已经有过告警记录了,且还是继续报警,无需重复添加报警,但是决策仍然要调用", category);
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {//理论上只有一个的
+                    //2024年7月5日10:45:24 逻辑调整:更新一直报警的那条记录的显示值
+                    xinyiWarningRecord.setWarningVal(tXinyiWarningRecord.getWarningVal());
+//                        xinyiWarningRecord.setDesignVal(tXinyiWarningRecord.getDesignVal());
+//                        tXinyiWarningRecord.setControlVal(tXinyiWarningRecord.getControlVal());
+                    xinyiWarningRecord.setTime(tXinyiWarningRecord.getTime());
+                    xinyiWarningRecord.setUpdateTime(nowDate);
+                    xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
+                    //2024年7月15日11:07:33 报警的级别也要重新计算并更新
+                    xinyiWarningRecord.setLevel(tXinyiWarningRecord.getLevel());
+                    //2024年7月31日09:20:47 报警的原因(超标还是超管控也需要更新)
+                    xinyiWarningRecord.setReason(tXinyiWarningRecord.getReason());
+                    //更新数据库
+                    this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
+                    //继续调用决策
+                    this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig, true, nowDate);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 判断化验室的-出水氨氮是否存在报警,如果存在返回报警对象;如果不存在,返回null
+     *
+     * @param csBzz
+     * @param currentVal
+     * @param csGkz
+     * @param category
+     * @param normConfig
+     * @param cwrwfhz
+     * @param tXinyiRobots
+     * @param nowDate
+     * @return
+     */
+    private TXinyiWarningRecord getRobotCsTpWarningBean(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiNormConfig normConfig, BigDecimal cwrwfhz, List<TXinyiRobot> tXinyiRobots, Date nowDate) {
+        //判断是否存在
+        boolean flag1 = true;
+        for (TXinyiRobot xinyiRobot : tXinyiRobots) {
+            //是否连续6小时超标 正磷酸盐数据 > 0.5 and 连续6小时
+            BigDecimal val = xinyiRobot.getTpRccJqr();
+            if (!Objects.isNull(val) && val.compareTo(csBzz) <= 0) {
+                flag1 = false;
+                break;//只要出现一个不超标的就不算超标
+            }
+        }
+
+        //存放则返回对象,不存在,则返回null  2个条件都不满足报警,返回空对象
+        if(!flag1)
+            return null;
+        TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
+        tXinyiWarningRecord.setStatus(0);
+        tXinyiWarningRecord.setType(0);
+        tXinyiWarningRecord.setCategory(category);
+        tXinyiWarningRecord.setTime(nowDate);
+        tXinyiWarningRecord.setWarningVal(currentVal);
+        tXinyiWarningRecord.setDesignVal(csBzz);
+        tXinyiWarningRecord.setControlVal(csGkz);
+        tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+        tXinyiWarningRecord.setCreateTime(nowDate);
+        tXinyiWarningRecord.setRemark(THREE_HYS_WARNING.getCode());//化验室
+        tXinyiWarningRecord.setCwrwfhz(cwrwfhz);//2025年02月14日10:42:53 具体指标具体计算,由上游传过来。
+        //2025年02月17日13:53:49 化验室的报警都是对应的类型都是出水
+        tXinyiWarningRecord.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
+        tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+        tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
+        tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.CBZZ.getCode());
+        tXinyiWarningRecord.setCwrwxz(getCwrwxzByDetail(currentVal, normConfig, category, true));//根据当前值和类型以及是否超标处理
+        return tXinyiWarningRecord;
     }
 
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 743 - 714
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java


+ 0 - 398
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask_bak.java

@@ -1,398 +0,0 @@
-//package com.slibra.quartz.task;
-//
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.http.HttpRequest;
-//import com.alibaba.fastjson2.JSON;
-//import com.alibaba.fastjson2.JSONArray;
-//import com.slibra.business.domain.TXinyiIndustry;
-//import com.slibra.business.domain.TXinyiRobot;
-//import com.slibra.business.mapper.TXinyiIndustryMapper;
-//import com.slibra.business.mapper.TXinyiRobotMapper;
-//import com.slibra.common.enums.DataSourceType;
-//import com.slibra.common.utils.DateUtils;
-//import com.slibra.common.utils.StringUtils;
-//import com.slibra.framework.datasource.DynamicDataSourceContextHolder;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.CollectionUtils;
-//
-//import java.math.BigDecimal;
-//import java.time.LocalDateTime;
-//import java.time.format.DateTimeFormatter;
-//import java.util.*;
-//
-///**
-// * 定时任务调度测试
-// *
-// *
-// */
-//@Component("ryTask")
-//@Slf4j
-//public class RyTask_bak
-//{
-//    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
-//    {
-//        System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
-//    }
-//
-//    public void ryParams(String params)
-//    {
-//        System.out.println("执行有参方法:" + params);
-//    }
-//
-//    public void ryNoParams()
-//    {
-//        System.out.println("执行无参方法");
-//    }
-//
-//    //----------------------------------------------下面是新增的方法----------------------------------------------
-//
-//    @Autowired
-//    private TXinyiIndustryMapper xinyiIndustryMapper;
-//
-//    @Autowired
-//    private TXinyiRobotMapper xinyiRobotMapper;
-////    public final static StopWatch watch = new StopWatch("task");
-//    public static final String[] queryTags = {"信义污水厂JS_COD_Value","信义污水厂JS_PH_Value","信义污水厂JS_SS_Value","信义污水厂JS_ZL_Value","信义污水厂JS_ZA_Value","信义污水厂JS_AD_Value","信义污水厂JS_T_Value","信义污水厂进水泵房液位","信义污水厂出水瞬时流量","信义污水厂升级出水COD","信义污水厂升级出水PH","信义污水厂升级出水SS","信义污水厂升级出水TN","信义污水厂升级出水TP","信义污水厂升级出水氨氮","信义污水厂AIT202_Value","信义污水厂AIT203_Value","信义污水厂AIT207_Value","信义污水厂AIT206_Value","信义污水厂AIT209_Value","信义污水厂AIT210_Value","信义污水厂进水TDS","信义污水厂FT101_Value","信义污水厂SWCHHYHLB1_R_Value","信义污水厂SWCHHYHLB2_R_Value","信义污水厂SWCHHYHLB3_R_Value","信义污水厂SWCHHYHLB4_R_Value","信义污水厂SWCHHYHLB5_R_Value","信义污水厂SWCHHYHLB6_R_Value","信义污水厂SWCWNHLB1_R_Value","信义污水厂SWCWNHLB2_R_Value","信义污水厂SWCWNHLB3_R_Value","信义污水厂SWCWNHLB4_R_Value","信义污水厂SWCWNHLB5_R_Value","信义污水厂GFJ1_R_Value","信义污水厂GFJ2_R_Value","信义污水厂GFJ3_R_Value","信义污水厂GFJ4_R_Value","信义污水厂GFJ5_R_Value","信义污水厂GFJ6_R_Value","信义污水厂GFJ1_KQLL_Value","信义污水厂GFJ2_KQLL_Value","信义污水厂GFJ3_KQLL_Value","信义污水厂GFJ4_KQLL_Value","信义污水厂GFJ5_KQLL_Value","信义污水厂GFJ6_KQLL_Value","信义污水厂实际碳源加药量","信义污水厂除磷加药瞬时流量", "信义污水厂_除磷P04预测值_"};
-//
-//    /**
-//     * 定时从工业库获取数据
-//     *
-//     * 2024年4月17日17:44:15 调整逻辑:考虑到因断电等情况导致服务断电,所以不再同步最近一小时,而是同步从上次成功的最后一条数据开始。
-//     */
-//    public void getIndustryData(){
-//        log.info("进入了定时同步工业库数据的任务");
-//
-//        //耗时工具
-////        watch.start("parseJob");
-//
-//
-//        // 给定时间段的起始时间和结束时间
-//        LocalDateTime endTime =  LocalDateTime.now();
-//        //todo
-////        LocalDateTime startTime = endTime.plusMinutes(-60);
-//        //获取上次最后一条同步的数据的日期到 分钟维度
-//        String lastDateHour = this.xinyiIndustryMapper.getLastMinute();
-//        log.info("获取上次同步工业库的最后一条记录的时间是{}", lastDateHour);
-//        lastDateHour = lastDateHour + ":00";
-//        //开始时间
-//        LocalDateTime startTime = LocalDateTime.parse(lastDateHour.replaceAll("/", "-").replace(" ", "T"));
-//        startTime = startTime.plusMinutes(1L);//加一分钟  从上次最后一条记录的下一分钟开始
-//        /*LocalDateTime startTime = LocalDateTime.parse("2024-02-26T00:00:00");
-//        LocalDateTime endTime = LocalDateTime.parse("2024-02-27T00:00:00");*/
-//
-//        // 每个小时的时间格式
-//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-//
-//        // 循环按小时分割
-//        LocalDateTime currentHour = startTime;
-//        while (currentHour.isBefore(endTime)) {
-//            String begin = currentHour.format(formatter);
-//            String end = currentHour.plusMinutes(5).format(formatter);
-//            // 输出当前小时的起始时间和结束时间
-//            System.out.println("起始时间:" + begin);
-//            System.out.println("结束时间:" + end);
-//
-//            // 当前小时加一小时,作为下一个小时的起始时间
-//            currentHour = currentHour.plusMinutes(5);
-//
-//            //每个小时查询一次数据
-//            String url = INDUSTRY_INTERFACE_ADDR;
-//            HashMap<String, Object> req = new HashMap<>();
-//            req.put("tagNames", queryTags);
-//            req.put("startTime", begin);
-//            req.put("endTime", end);
-//            req.put("recordNumbers", 100000);
-//            String body = HttpRequest.post(url).header("Authorization", "c2E6c2E=").header("clientName", "hongshan").body(JSON.toJSONString(req)).execute().body();
-////            System.out.println("body = " + body);
-//            List<HashMap<String, String>> list = new ArrayList<>();
-//
-//            //行转列数据处理
-//            for (String queryTag : queryTags) {
-//                JSONArray array = JSON.parseObject(body).getJSONArray(queryTag);
-//                //特殊数据处理一
-//                if(Objects.isNull(array) || array.isEmpty()){
-//                    System.out.println(queryTag + "查询到了空的数据,跳过本次循环");
-//                    continue;
-//                }
-//                int size = array.size();
-//                //特殊数据处理二
-//                if("0".equals(array.get(1) + "")){
-//                    System.out.println(queryTag + "查询到了数据,但是数据集合只有一条,且都是0");
-//                    continue;
-//                }
-//                //结合至少62个数据才满足条件(有可能获取不到)
-//                /*if(size < 62){
-//                    System.out.println(queryTag + "查询到了不符合条件的数据,跳过本次循环");
-//                    continue;
-//                }*/
-//
-//                //存放的数据集
-//                //利用map去重
-//                HashMap<String, String> map = new LinkedHashMap<>();
-//                for (int i = 2; i < size; i++) {
-////            System.out.println(i + "" + array.get(i));
-//                    JSONArray oneRecord = JSON.parseArray(JSON.toJSONString(array.get(i)));
-//                    //处理为空或者为0的数据
-//                    Object timeStampValue = oneRecord.get(2);
-//                    if(Objects.isNull(timeStampValue) || "0".equals(timeStampValue + ""))
-//                        continue;
-//                    BigDecimal value = Objects.isNull(oneRecord.get(0)) ? null : new BigDecimal(oneRecord.get(0) + "");
-//                    long timestamp = (long) timeStampValue;
-//                    String format = DateUtil.format(new Date(timestamp), DateUtils.YYYYMMDDHHMM_TS);
-//                    map.put(format, queryTag + "-" + value);
-//                }
-//                list.add(map);
-//            }
-//
-//            Set<String> recordTimeSet = new HashSet<>();
-//            Map<String, TXinyiIndustry> recordMap = new HashMap<>();
-//            for (int i = 0; i < list.size(); i++) {
-//                HashMap<String, String> map = list.get(i);
-//                int finalJ = i;
-//                map.forEach((k, v) ->{
-//                    TXinyiIndustry industry = null;
-//                    if(!recordTimeSet.contains(k)){//第一次
-//                        industry = new TXinyiIndustry();
-//                        recordTimeSet.add(k);
-//                        recordMap.put(k, industry);
-//                    }else{
-//                        industry = recordMap.get(k);
-//                    }
-//                    industry.setTestTime(k);
-//                    //2024年4月15日11:19:52  额外增加2个字段
-//                    industry.setTestDate(k.substring(0,10));
-//                    industry.setTestHour(k.substring(0,13));
-//                    //解析值
-//                    String[] split = v.split("-");
-//                    String type = split[0];
-//                    BigDecimal value = new BigDecimal(split[1]);
-//                    if ("信义污水厂JS_COD_Value".equals(type)) {
-//                        industry.setJsCod(value);
-//                    } else if ("信义污水厂JS_PH_Value".equals(type)) {
-//                        industry.setJsPh(value);
-//                    } else if ("信义污水厂JS_SS_Value".equals(type)) {
-//                        industry.setJsSs(value);
-//                    } else if ("信义污水厂JS_ZL_Value".equals(type)) {
-//                        industry.setJsTp(value);
-//                    } else if ("信义污水厂JS_ZA_Value".equals(type)) {
-//                        industry.setJsTn(value);
-//                    } else if ("信义污水厂JS_AD_Value".equals(type)) {
-//                        industry.setJsNh3(value);
-//                    } else if ("信义污水厂JS_T_Value".equals(type)) {
-//                        industry.setJsSwPh(value);
-//                    } else if ("信义污水厂进水泵房液位".equals(type)) {
-//                        industry.setJsBfyw(value);
-//                    } else if ("信义污水厂出水瞬时流量".equals(type)) {
-//                        industry.setCsSlqc(value);
-//                    } else if ("信义污水厂升级出水COD".equals(type)) {
-//                        industry.setCsCod(value);
-//                    } else if ("信义污水厂升级出水PH".equals(type)) {
-//                        industry.setCsPh(value);
-//                    } else if ("信义污水厂升级出水SS".equals(type)) {
-//                        industry.setCsSs(value);
-//                    } else if ("信义污水厂升级出水TN".equals(type)) {
-//                        industry.setCsTn(value);
-//                    } else if ("信义污水厂升级出水TP".equals(type)) {
-//                        industry.setCsTp(value);
-//                    } else if ("信义污水厂升级出水氨氮".equals(type)) {
-//                        industry.setCsNh3(value);
-//                    } else if ("信义污水厂AIT202_Value".equals(type)) {
-//                        industry.setOneHyzdDo(value);
-//                    } else if ("信义污水厂AIT203_Value".equals(type)) {
-//                        industry.setOneHymdDo(value);
-//                    } else if ("信义污水厂AIT207_Value".equals(type)) {
-//                        industry.setTwoHyzdDo(value);
-//                    } else if ("信义污水厂AIT206_Value".equals(type)) {
-//                        industry.setTwoHymdDo(value);
-//                    } else if ("信义污水厂AIT209_Value".equals(type)) {
-//                        industry.setOneMlss(value);
-//                    } else if ("信义污水厂AIT210_Value".equals(type)) {
-//                        industry.setTwoMlss(value);
-//                    } else if ("信义污水厂进水TDS".equals(type)) {
-//                        industry.setJsTds(value);
-//                    } else if ("信义污水厂FT101_Value".equals(type)) {
-//                        industry.setJsSlq(value);
-//                    } else if ("信义污水厂SWCHHYHLB1_R_Value".equals(type)) {
-//                        industry.setNHlbOneGp(value);
-//                    } else if ("信义污水厂SWCHHYHLB2_R_Value".equals(type)) {
-//                        industry.setNHlbTwoGp(value);
-//                    } else if ("信义污水厂SWCHHYHLB3_R_Value".equals(type)) {
-//                        industry.setNHlbThreeGp(value);
-//                    } else if ("信义污水厂SWCHHYHLB4_R_Value".equals(type)) {
-//                        industry.setNHlbFourGp(value);
-//                    } else if ("信义污水厂SWCHHYHLB5_R_Value".equals(type)) {
-//                        industry.setNhlBFiveGp(value);
-//                    } else if ("信义污水厂SWCHHYHLB6_R_Value".equals(type)) {
-//                        industry.setNHlbSixGp(value);
-//                    } else if ("信义污水厂SWCWNHLB1_R_Value".equals(type)) {
-//                        industry.setWHlbOneGp(value);
-//                    } else if ("信义污水厂SWCWNHLB2_R_Value".equals(type)) {
-//                        industry.setWHlbTwoGp(value);
-//                    } else if ("信义污水厂SWCWNHLB3_R_Value".equals(type)) {
-//                        industry.setWHlbThreeGp(value);
-//                    } else if ("信义污水厂SWCWNHLB4_R_Value".equals(type)) {
-//                        industry.setWHlbFourGp(value);
-//                    } else if ("信义污水厂SWCWNHLB5_R_Value".equals(type)) {
-//                        industry.setWHlbFiveGp(value);
-//                    } else if ("信义污水厂GFJ1_R_Value".equals(type)) {
-//                        industry.setFjOne(value);
-//                    } else if ("信义污水厂GFJ2_R_Value".equals(type)) {
-//                        industry.setFjTwo(value);
-//                    } else if ("信义污水厂GFJ3_R_Value".equals(type)) {
-//                        industry.setFjThree(value);
-//                    } else if ("信义污水厂GFJ4_R_Value".equals(type)) {
-//                        industry.setFjFour(value);
-//                    } else if ("信义污水厂GFJ5_R_Value".equals(type)) {
-//                        industry.setFjFive(value);
-//                    } else if ("信义污水厂GFJ6_R_Value".equals(type)) {
-//                        industry.setFjSix(value);
-//                    } else if ("信义污水厂GFJ1_KQLL_Value".equals(type)) {
-//                        industry.setKqllOne(value);
-//                    } else if ("信义污水厂GFJ2_KQLL_Value".equals(type)) {
-//                        industry.setKqllTwo(value);
-//                    } else if ("信义污水厂GFJ3_KQLL_Value".equals(type)) {
-//                        industry.setKqllThree(value);
-//                    } else if ("信义污水厂GFJ4_KQLL_Value".equals(type)) {
-//                        industry.setKqllFour(value);
-//                    } else if ("信义污水厂GFJ5_KQLL_Value".equals(type)) {
-//                        industry.setKqllFive(value);
-//                    } else if ("信义污水厂GFJ6_KQLL_Value".equals(type)) {
-//                        industry.setKqllSix(value);
-//                    }else if ("信义污水厂实际碳源加药量".equals(type)) {
-//                        industry.setSJTYJLY(value);
-//                    }else if ("信义污水厂除磷加药瞬时流量".equals(type)) {
-//                        industry.setCLJYSSLL(value);
-//                    } else if ("信义污水厂_除磷P04预测值_".equals(type)) {
-//                        industry.setCLP04YCZ(value);
-//                    }
-//                    //只有最后一次才执行数据库添加
-//                    if(finalJ == list.size()-1){
-//                        //2024年4月22日15:45:24  额外保存两个字段 数组
-//                        List<BigDecimal> extraList = new ArrayList<>();
-//                        extraList.add(industry.getOneHymdDo());
-//                        extraList.add(industry.getTwoHymdDo());
-//                        industry.setHycRjyAll(JSON.toJSONString(extraList));
-//                        extraList.clear();
-//                        extraList.add(industry.getOneHyzdDo());
-//                        extraList.add(industry.getTwoHyzdDo());
-//                        industry.setHycRjyZdAll(JSON.toJSONString(extraList));
-//                        extraList.clear();
-//                        extraList.add(industry.getOneMlss());
-//                        extraList.add(industry.getTwoMlss());
-//                        industry.setHycWnndAll(JSON.toJSONString(extraList));
-//                        //插入数据库
-//                        xinyiIndustryMapper.insertTXinyiIndustry(industry);
-//                    }
-//                });
-//
-//            }
-//
-//        }
-//
-//        //执行完成 测试执行时间
-//        //计时结束
-////        watch.stop();
-////        System.out.println(watch.getLastTaskName() + " 执行耗时:" + watch.getLastTaskTimeMillis() + " ms");
-//    }
-//
-//
-//    /**
-//     * 定时从sqlserver获取数据
-//     */
-//    public void sqlserverData(){
-//        log.info("进入了定时同步SqlServer的任务");
-//        //主库获取上次最新的同步日期
-//        String lastTime = this.xinyiRobotMapper.selectLastTime();
-//        log.info("上次同步的日期是{}", lastTime);
-//        //从
-//        DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE.name());
-//        List<TXinyiRobot> tXinyiRobots = xinyiRobotMapper.selectTXinyiRobotListByTime(lastTime);
-//        DynamicDataSourceContextHolder.clearDataSourceType();
-////        System.out.println(JSON.toJSONString(tXinyiRobots));
-////        System.out.println("-------------");
-//        //主
-//        if(!CollectionUtils.isEmpty(tXinyiRobots)){
-//            for (TXinyiRobot tXinyiRobot : tXinyiRobots) {
-//                String date = handleDate(tXinyiRobot.getVDate().replaceAll(" ", ""));//有空格
-//                String time = handleDate(tXinyiRobot.getVTime().replaceAll(" ", ""));//有空格
-//                tXinyiRobot.setVDate(date);
-//                tXinyiRobot.setVTime(time);
-//                tXinyiRobot.setVDateTime(date + " " + time);
-//                //处理给前端展示的字段
-//                tXinyiRobot.setTestDate(date);//日期
-//                tXinyiRobot.setTestHour(date + " " + time.substring(0, 2));//小时
-//                tXinyiRobot.setTestTime(date + " " + time.substring(0, 5));//分钟
-//                tXinyiRobot.setCreatedTime(new Date());
-//                this.xinyiRobotMapper.insertTXinyiRobot(tXinyiRobot);
-//            }
-//        }
-//
-//    }
-//
-//
-//
-//    public static String handleDate(String str){
-//        StringBuilder sb = new StringBuilder();
-//        if(str.contains(" ")){//包含空格 就是年月日时分秒了
-//            String[] split = str.split(" ");
-//            addBeforeZero(sb, split[0], "/");
-//            sb.append(" ");
-//            addBeforeZero(sb, split[1], ":");
-//        }else{
-//            if(str.contains("/")){//年月日
-//                addBeforeZero(sb, str, "/");
-//            }else if(str.contains(":")){//时分秒
-//                addBeforeZero(sb, str, ":");
-//            }else {
-//                sb.append(str);
-//            }
-//        }
-//        return sb.toString();
-//    }
-//
-//    public static StringBuilder addBeforeZero(StringBuilder sb, String str, String tag){
-//        String[] split = str.split(tag);
-//        int length = split.length;
-//        for (int i = 0; i < length; i++) {
-//            String value = split[i];
-//            Integer intValue = Integer.parseInt(value);
-//            if(intValue < 10 && value.length() == 1){////防止有正确的情况 额外再补充字符串
-//                sb.append(0).append(value);
-//            }else{
-//                sb.append(value);
-//            }
-//            if(i < length-1){
-//                sb.append(tag);
-//            }
-//        }
-//        return sb;
-//    }
-//
-//    public static void main(String[] args) {
-//        /*LocalDateTime endTime = LocalDateTime.now();
-//        System.out.println("endTime = " + endTime);
-//        endTime = endTime.plusMinutes(60);
-//        System.out.println("endTime = " + endTime);*/
-//        /*String str = "2024/04/15 09:55";
-//        System.out.println(str);
-//        System.out.println(str.substring(0,10));
-//        System.out.println(str.substring(0,13));*/
-//
-//        /*String str = "2024/04/18 08:00";
-//        str = str + ":00";
-//        System.out.println(str);
-//        LocalDateTime startTime = LocalDateTime.parse(str.replaceAll("/", "-").replace(" ", "T"));
-//        System.out.println(startTime.plusMinutes(1L).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));*/
-//
-//        ArrayList<Integer> objects = new ArrayList<>();
-//        objects.add(1);
-//        objects.add(2);
-//        objects.add(3);
-//        System.out.println(objects);
-//        objects.clear();
-//        System.out.println(objects);
-//
-//    }
-//}

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov