|
@@ -5,9 +5,15 @@ 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.TXinyiNormConfig;
|
|
|
import com.slibra.business.domain.TXinyiRobot;
|
|
|
+import com.slibra.business.domain.TXinyiWarningRecord;
|
|
|
import com.slibra.business.mapper.TXinyiIndustryMapper;
|
|
|
+import com.slibra.business.mapper.TXinyiNormConfigMapper;
|
|
|
import com.slibra.business.mapper.TXinyiRobotMapper;
|
|
|
+import com.slibra.business.mapper.TXinyiWarningRecordMapper;
|
|
|
+import com.slibra.common.constant.MyConstants;
|
|
|
+import com.slibra.common.enums.BusinessEnum;
|
|
|
import com.slibra.common.enums.DataSourceType;
|
|
|
import com.slibra.common.utils.DateUtils;
|
|
|
import com.slibra.framework.datasource.DynamicDataSourceContextHolder;
|
|
@@ -24,6 +30,8 @@ import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
+import static com.slibra.common.constant.MyConstants.*;
|
|
|
+
|
|
|
/**
|
|
|
* 定时任务调度测试
|
|
|
*
|
|
@@ -55,6 +63,14 @@ public class RyTask
|
|
|
|
|
|
@Autowired
|
|
|
private TXinyiRobotMapper xinyiRobotMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TXinyiNormConfigMapper xinyiNormConfigMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TXinyiWarningRecordMapper xinyiWarningRecordMapper;
|
|
|
+
|
|
|
+
|
|
|
// 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预测值_"};
|
|
|
|
|
@@ -294,6 +310,8 @@ public class RyTask
|
|
|
industry.setHycWnndAll(JSON.toJSONString(extraList));
|
|
|
//插入数据库
|
|
|
xinyiIndustryMapper.insertTXinyiIndustry(industry);
|
|
|
+ //判断是否触发告警、接触告警、保存决策等等
|
|
|
+ this.handleWarning(industry);
|
|
|
});
|
|
|
|
|
|
//执行完成 测试执行时间
|
|
@@ -302,6 +320,194 @@ public class RyTask
|
|
|
// System.out.println(watch.getLastTaskName() + " 执行耗时:" + watch.getLastTaskTimeMillis() + " ms");
|
|
|
}
|
|
|
|
|
|
+ private void handleWarning(TXinyiIndustry tXinyiIndustry) {
|
|
|
+ log.info("进入了定时任务保存工业库数据并触发报警操作");
|
|
|
+ //获取配置表
|
|
|
+ List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiNormConfigs))
|
|
|
+ throw new RuntimeException("未查询到配置信息");
|
|
|
+ TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
|
|
|
+ //出水相关
|
|
|
+ //出水COD报警
|
|
|
+ BigDecimal csCod = tXinyiIndustry.getCsCod();
|
|
|
+ BigDecimal cscodBzz = normConfig.getCscodBzz();
|
|
|
+ BigDecimal cscodGkz = normConfig.getCscodGkz();
|
|
|
+ if(!Objects.isNull(csCod) && !Objects.isNull(cscodBzz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cscodBzz, csCod, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水总磷超标报警
|
|
|
+ BigDecimal csTp = tXinyiIndustry.getCsTp();
|
|
|
+ BigDecimal cszlBzz = normConfig.getCszlBzz();
|
|
|
+ BigDecimal cszlGkz = normConfig.getCszlGkz();
|
|
|
+ if(!Objects.isNull(csTp) && !Objects.isNull(cszlBzz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //出水总氮超标报警
|
|
|
+ BigDecimal csTn = tXinyiIndustry.getCsTn();
|
|
|
+ BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+ BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+ if(!Objects.isNull(csTn) && !Objects.isNull(cszzBzz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水氨氮超标报警
|
|
|
+ BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
|
|
|
+ BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+ BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+ if(!Objects.isNull(csNh3) && !Objects.isNull(csadBzz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //出水SS超标报警
|
|
|
+ BigDecimal csSS = tXinyiIndustry.getCsSs();
|
|
|
+ BigDecimal csSSBzz = normConfig.getCsssBzz();
|
|
|
+ BigDecimal csssGkz = normConfig.getCsssGkz();
|
|
|
+ if(!Objects.isNull(csSS) && !Objects.isNull(csSSBzz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordCS(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水相关报警
|
|
|
+ //进水总磷超标报警
|
|
|
+ BigDecimal jsTp = tXinyiIndustry.getJsTp();
|
|
|
+ BigDecimal jszlSjz = normConfig.getJszlSjz();
|
|
|
+ if(!Objects.isNull(jsTp) && !Objects.isNull(jszlSjz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水COD超标报警
|
|
|
+ BigDecimal jsCod = tXinyiIndustry.getJsCod();
|
|
|
+ BigDecimal jscodSjz = normConfig.getJscodSjz();
|
|
|
+ if(!Objects.isNull(jsCod) && !Objects.isNull(jscodSjz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水总氮超标报警
|
|
|
+ BigDecimal jsTn = tXinyiIndustry.getJsTn();
|
|
|
+ BigDecimal jszdSjz = normConfig.getJszdSjz();
|
|
|
+ if(!Objects.isNull(jsTn) && !Objects.isNull(jszdSjz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水氨氮超标报警
|
|
|
+ BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
|
|
|
+ BigDecimal jsadSjz = normConfig.getJsadSjz();
|
|
|
+ if(!Objects.isNull(jsNh3) && !Objects.isNull(jsadSjz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ //进水SS超标报警
|
|
|
+ BigDecimal jsSS = tXinyiIndustry.getJsSs();
|
|
|
+ BigDecimal jsSSSjz = normConfig.getJsssSjz();
|
|
|
+ if(!Objects.isNull(jsSS) && !Objects.isNull(jsSSSjz)){
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = gettXinyiWarningRecordJS(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode());
|
|
|
+ //保存到数据库中
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
|
|
|
+ //继续调用决策 todo
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过输入的值 生成对应类型的报警对象(出水)
|
|
|
+ * @param csBzz
|
|
|
+ * @param currentVal
|
|
|
+ * @param csGkz
|
|
|
+ * @param category
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private TXinyiWarningRecord gettXinyiWarningRecordCS(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category) {
|
|
|
+ BigDecimal multiply = csBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
|
|
|
+ /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
|
|
|
+ tXinyiWarningRecord.setType(0);
|
|
|
+ tXinyiWarningRecord.setCategory(category);
|
|
|
+ tXinyiWarningRecord.setTime(DateUtils.getNowDate());
|
|
|
+ tXinyiWarningRecord.setWarningVal(currentVal);
|
|
|
+ tXinyiWarningRecord.setDesignVal(csBzz);
|
|
|
+ tXinyiWarningRecord.setControlVal(csGkz);
|
|
|
+ tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
|
|
|
+
|
|
|
+ if(currentVal.compareTo(multiply) > 0){//一级
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
|
|
|
+ }else if(currentVal.compareTo(csBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_TWO);
|
|
|
+ }else if(!Objects.isNull(csGkz) && currentVal.compareTo(csGkz) > 0){
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOGUANKONG_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_THREE);
|
|
|
+ }
|
|
|
+ return tXinyiWarningRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 通过输入的值 生成对应类型的报警对象(进水)
|
|
|
+ * @param jsBzz
|
|
|
+ * @param currentVal
|
|
|
+ * @param category
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private TXinyiWarningRecord gettXinyiWarningRecordJS(BigDecimal jsBzz, BigDecimal currentVal, String category) {
|
|
|
+ BigDecimal multiply = jsBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
|
|
|
+ TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
|
|
|
+ /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
|
|
|
+ tXinyiWarningRecord.setType(0);
|
|
|
+ tXinyiWarningRecord.setCategory(category);
|
|
|
+ tXinyiWarningRecord.setTime(DateUtils.getNowDate());
|
|
|
+ tXinyiWarningRecord.setWarningVal(currentVal);
|
|
|
+ tXinyiWarningRecord.setDesignVal(jsBzz);
|
|
|
+// tXinyiWarningRecord.setControlVal(csGkz);
|
|
|
+ tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
|
|
|
+
|
|
|
+ if(currentVal.compareTo(multiply) > 0){//一级
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
|
|
|
+ }else if(currentVal.compareTo(jsBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_TWO);
|
|
|
+ }
|
|
|
+ /*else if(!Objects.isNull(csGkz) && currentVal.compareTo(csGkz) > 0){
|
|
|
+ tXinyiWarningRecord.setReason(category + CHAOGUANKONG_WARNING);
|
|
|
+ tXinyiWarningRecord.setLevel(WARNING_LEVEL_THREE);
|
|
|
+ }*/
|
|
|
+ return tXinyiWarningRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 定时从sqlserver获取数据
|