浏览代码

新增生化报警处理 调用决策接口新增预测参数配置

wangmiaomiao 11 月之前
父节点
当前提交
76d55ef8fd

+ 2 - 1
slibra-admin/src/main/java/com/slibra/web/controller/business/GRPCController.java

@@ -88,6 +88,7 @@ public class GRPCController extends BaseController {
         //决策和问答不一样 没有历史的概念 所以sessionId都是新的  次数都是1
         String sessionId = IdUtils.simpleUUID();
         String feedback = chatReq.getFeedback();
+        String simulate = chatReq.getSimulate();
         String warningId = String.valueOf(chatReq.getWarningId());
         //决策请求的业务参数
 //        List<HashMap<String, Object>> list = this.xinyiIndustryMapper.selectLast10RecordsForDecision();
@@ -134,7 +135,7 @@ public class GRPCController extends BaseController {
                     .usePlaintext()
                     .build();
             InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
-            dataJson = "{\"bot_id\":\"b00001\",\"exp_id\":\"721\",\"norm\":\"" + chatReq.getCategory() + "\",\"feedback\":" + feedback + ",\"session_id\":" + "\"" + sessionId + "\"" + ",\"generate_args\":{\"max_new_tokens\":1024,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{\"rows\":" +  rows + "}}";
+            dataJson = "{\"bot_id\":\"b00001\",\"exp_id\":\"721\",\"norm\":\"" + chatReq.getCategory() + "\",\"feedback\":" + feedback + "\",\"simulate\":" + simulate + ",\"session_id\":" + "\"" + sessionId + "\"" + ",\"generate_args\":{\"max_new_tokens\":1024,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{\"rows\":" +  rows + "}}";
             log.info("请求大模型的决策的参数为{}", dataJson);
             PredictionsRequest request = PredictionsRequest.newBuilder()
                     .setModelName("slibra_bot")

+ 10 - 0
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -61,4 +61,14 @@ public class MyConstants {
             "\n" +
             "出水  -  COD:#{31}mg/L  、 TN:#{32}mg/L 、TP:#{33}mg/L、NH3-N:#{34}mg/L、SS:#{35}mg/L";
 
+
+    /**
+     * 生化报警提示词
+     */
+    public static final String SH_WARNING_PROMPT = "作为污水处理行业的专家,请你协助我整合多个工艺工程师提供的污水处理决策方案\n" +
+            "\n" +
+            "       已知数据:#{0},标准值#{1}mg/L,管控值#{2}mg/L,报警值#{3}mg/L\n" +
+            "\n" +
+            "      根据已知数据生成超标解决方案,请输出一个解决方案,方案分为三部分,第一部分写问题总述,第二部分问题解决方案,第三部分用表格呈现与超标指标关系到的其他污水处理指标的处理的建议值、调整说明等内容。";
+
 }

+ 16 - 0
slibra-common/src/main/java/com/slibra/common/enums/BusinessEnum.java

@@ -8,6 +8,8 @@ public class BusinessEnum {
      */
     public enum WarningCategoryEnum
     {
+
+        //水质报警
         CS_COD("出水COD", "出水COD"),
         CS_SS("出水SS", "出水SS"),
         CS_ZD("出水总氮", "出水总氮"),
@@ -18,6 +20,20 @@ public class BusinessEnum {
         JS_ZD("进水总氮", "进水总氮"),
         JS_ZL("进水总磷", "进水总磷"),
         JS_AD("进水氨氮", "进水氨氮"),
+
+        //生化报警
+        NHLB("内回流比", "内回流比"),
+        WHLB("外回流比", "外回流比"),
+        WNND("污泥浓度", "污泥浓度"),
+        WNFH("污泥负荷", "污泥负荷"),
+        TDB("碳氮比", "碳氮比"),
+        TLB("碳磷比", "碳磷比"),
+        BODCODB("BOD比COD", "BOD比COD"),
+        YYQDO("厌氧区DO", "厌氧区DO"),
+        QYQDO("缺氧区DO", "缺氧区DO"),
+        HYQDO_ONE("好氧区DO#1", "好氧区DO#1"),
+        HYQDO_TWO("好氧区DO#2", "好氧区DO#2"),
+        QSB("气水比", "气水比"),
         ;
 
         private final String code;

+ 281 - 13
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -339,12 +339,274 @@ public class RyTask
         if(CollectionUtils.isEmpty(tXinyiNormConfigs))
             throw new RuntimeException("未查询到配置信息");
         TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
+
+        //水质报警
+        this.handleSZWarning(tXinyiIndustry, normConfig);
+
+        //2024年5月28日14:14:26  下面是新增的 生化报警处理
+        this.handleSHWarning(tXinyiIndustry, normConfig);
+
+        
+    }
+
+    private void handleSHWarning(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
+        //判断对应指标是否报警  然后调研大模型获取决策信息
+        BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
+        //内回流比报警
+        BigDecimal nhlbSjz = normConfig.getNhlbSjz();//400
+        BigDecimal nhlbnkSxz = normConfig.getNhlbnkSxz();//360
+        BigDecimal nhlbqdsl = normConfig.getNHLBQDSL();
+        BigDecimal nhlbdsjll = normConfig.getNHLBDSJLL();
+        BigDecimal nhlbgzxl = normConfig.getNHLBGZXL();
+        if(!Objects.isNull(jsSlq) && !Objects.isNull(nhlbnkSxz) && !Objects.isNull(nhlbqdsl)
+                && !Objects.isNull(nhlbdsjll) && !Objects.isNull(nhlbgzxl)){
+            BigDecimal divide = nhlbqdsl.multiply(nhlbdsjll).multiply(nhlbgzxl).divide(jsSlq, 4, RoundingMode.HALF_UP);
+            if(!Objects.isNull(nhlbSjz)){
+                handleXinYiWarningsSH(nhlbSjz, divide, nhlbnkSxz, BusinessEnum.WarningCategoryEnum.NHLB.getCode(), tXinyiIndustry, normConfig);
+            }
+        }
+
+        //外回流比报警
+        BigDecimal whlbqdsl = normConfig.getWHLBQDSL();
+        BigDecimal whlbdsjll = normConfig.getWHLBDSJLL();
+        BigDecimal whlbgzxl = normConfig.getWHLBGZXL();
+        BigDecimal whlbnkXxz = normConfig.getWhlbnkXxz();
+        BigDecimal whlbSjz = normConfig.getWhlbSjz();
+        if(!Objects.isNull(whlbqdsl) && !Objects.isNull(whlbdsjll) && !Objects.isNull(whlbgzxl)){
+            BigDecimal divide = whlbqdsl.multiply(whlbdsjll).multiply(whlbgzxl).divide(jsSlq, 4, RoundingMode.HALF_UP);
+            if(!Objects.isNull(whlbSjz)){
+                handleXinYiWarningsSH(whlbSjz, divide, whlbnkXxz, BusinessEnum.WarningCategoryEnum.WHLB.getCode(), tXinyiIndustry, normConfig);
+            }
+        }
+
+
+        //最新的一条日报数据
+        List<TXinyiDaily> tXinyiDailies = this.xinyiDailyMapper.selectTXinyiDailyList(null);
+        if(CollectionUtils.isEmpty(tXinyiDailies))
+            return;//肯定不会出现这种情况 因为有很多历史数据了
+        TXinyiDaily tXinyiDaily = tXinyiDailies.get(0);
+        log.info("生化报警获取日报的最新的一条数据为{}", JSON.toJSONString(tXinyiDaily));
+        BigDecimal jsBod5 = tXinyiDaily.getJsBod5();
+
+        //污泥负荷(需要从日报获取数据) 计算 + 部分数据从日报获取
+        //污泥负荷=[Ls]=24*([BOD_in]-[BOD_off])*[Q_in]/[MLSS]/([V_hao]+[V_que]+[V_yan])/2 kgBOD/(kgMLSS·d)
+        //todo  后面再加 计算太复杂
+
+        //碳氮比(需要从日报获取数据)
+        //进水碳氮比=[b]=[BOD_in]/[TN_in]
+        BigDecimal jsTn = tXinyiIndustry.getJsTn();
+        if(!Objects.isNull(jsBod5) && !Objects.isNull(jsTn)){
+            BigDecimal divide = jsBod5.divide(jsTn, 4, RoundingMode.HALF_UP);
+            BigDecimal jstdbnkzSxz = normConfig.getJstdbnkzSxz();
+            BigDecimal cstdbSjz = normConfig.getCstdbSjz();
+            if(!Objects.isNull(whlbSjz)){
+                handleXinYiWarningsSH(cstdbSjz, divide, jstdbnkzSxz, BusinessEnum.WarningCategoryEnum.TDB.getCode(), tXinyiIndustry, normConfig);
+            }
+        }
+
+        //碳磷比(需要从日报获取数据)
+        //进水碳磷比=[c]=[BOD_in]/[TP_in]
+        BigDecimal jsTp = tXinyiIndustry.getJsTp();
+        BigDecimal jstlbSjz = normConfig.getJstlbSjz();
+        if(!Objects.isNull(jsBod5) && !Objects.isNull(jsTp)){
+            BigDecimal divide = jsBod5.divide(jsTp, 4, RoundingMode.HALF_UP);
+            BigDecimal jstlbNkz = normConfig.getJstlbNkz();
+            if(!Objects.isNull(jstlbSjz)){
+                handleXinYiWarningsSH(jstlbSjz, divide, jstlbNkz, BusinessEnum.WarningCategoryEnum.TLB.getCode(), tXinyiIndustry, normConfig);
+            }
+        }
+
+        //BOD比COD(需要从日报获取数据)
+        //进水BOD与COD比值数据=[d]=[BOD_in]/[COD_in]
+        BigDecimal jsCod = tXinyiIndustry.getJsCod();
+        if(!Objects.isNull(jsBod5) && !Objects.isNull(jsCod)){
+            BigDecimal jsbodycodbzSzj = normConfig.getJsbodycodbzSzj();
+            String jsbodycodbzGkz = normConfig.getJsbodycodbzGkz();
+            if(StringUtils.isNotBlank(jsbodycodbzGkz) && jsbodycodbzGkz.contains("-")){
+                String[] split = jsbodycodbzGkz.split("-");
+                BigDecimal gkz = new BigDecimal(split[1]);
+                BigDecimal divide = jsBod5.divide(jsCod, 4, RoundingMode.HALF_UP);
+                handleXinYiWarningsSH(gkz, divide, jsbodycodbzSzj, BusinessEnum.WarningCategoryEnum.BODCODB.getCode(), tXinyiIndustry, normConfig);
+            }
+
+        }
+
+        //好氧区DO(一池)
+        BigDecimal shcHyOneDo = tXinyiIndustry.getOneHymdDo();
+        BigDecimal hycrjysjzSxz = normConfig.getHycrjysjzSxz();
+        BigDecimal hycrjyNkz = normConfig.getHycrjyNkz();
+        if(!Objects.isNull(shcHyOneDo) && !Objects.isNull(hycrjysjzSxz)){
+            handleXinYiWarningsSH(hycrjysjzSxz, shcHyOneDo, hycrjyNkz, BusinessEnum.WarningCategoryEnum.HYQDO_ONE.getCode(), tXinyiIndustry, normConfig);
+        }
+        //好氧区DO(二池)
+        BigDecimal shcHyTwoDo = tXinyiIndustry.getTwoHymdDo();
+        if(!Objects.isNull(shcHyTwoDo) && !Objects.isNull(hycrjysjzSxz)){
+            handleXinYiWarningsSH(hycrjysjzSxz, shcHyTwoDo, hycrjyNkz, BusinessEnum.WarningCategoryEnum.HYQDO_TWO.getCode(), tXinyiIndustry, normConfig);
+        }
+
+        //气水比(需要从日报获取数据)
+        BigDecimal gfjgzts = normConfig.getGFJGZTS();
+        BigDecimal gfjckll = normConfig.getGFJCKLL();
+        BigDecimal shcqbSjz = normConfig.getShcqbSjz();
+        if(!Objects.isNull(gfjgzts) && !Objects.isNull(gfjckll) && !Objects.isNull(shcqbSjz) && !Objects.isNull(jsSlq)){
+            BigDecimal qsb = gfjgzts.multiply(gfjckll).divide(jsSlq, 4, RoundingMode.HALF_UP);
+            BigDecimal shcqbNkz = normConfig.getShcqbNkz();
+            handleXinYiWarningsSH(shcqbSjz, qsb, shcqbNkz, BusinessEnum.WarningCategoryEnum.WHLB.getCode(), tXinyiIndustry, normConfig);
+        }
+    }
+
+
+    /**
+     * 处理信义生化报警的逻辑 统一处理
+     * @param bzz
+     * @param currentVal
+     * @param gkz
+     * @param category
+     * @param tXinyiIndustry
+     * @param normConfig
+     */
+    private void handleXinYiWarningsSH(BigDecimal bzz, BigDecimal currentVal, BigDecimal gkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
+        BigDecimal multiply = bzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
+        TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
+        /*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
+        tXinyiWarningRecord.setStatus(0);
+        tXinyiWarningRecord.setType(1);
+        tXinyiWarningRecord.setCategory(category);
+        tXinyiWarningRecord.setTime(DateUtils.getNowDate());
+        tXinyiWarningRecord.setWarningVal(currentVal);
+        tXinyiWarningRecord.setDesignVal(bzz);
+        tXinyiWarningRecord.setControlVal(gkz);
+        tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+        tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
+
+        //2024年5月25日17:52:33  如果工业库获取不到数据,也触发报警,但是不调用决策接口
+        if (Objects.isNull(currentVal)) {
+            tXinyiWarningRecord.setReason(category + EXCEPTION_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_NO_DATE);
+        } else if (currentVal.compareTo(multiply) > 0) {//一级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_ONE);
+        } else if (currentVal.compareTo(bzz) >= 0 && currentVal.compareTo(multiply) <= 0) {//二级
+            tXinyiWarningRecord.setReason(category + CHAOBIAO_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_TWO);
+        } else if (!Objects.isNull(gkz) && currentVal.compareTo(gkz) > 0) {
+            tXinyiWarningRecord.setReason(category + CHAOGUANKONG_WARNING);
+            tXinyiWarningRecord.setLevel(WARNING_LEVEL_THREE);
+        } else {
+            tXinyiWarningRecord = null;//这种的无需处理
+        }
+
+        //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(TXinyiWarningRecord.builder().delFlag(0).type(1).category(category).status(0).build());
+        if(Objects.isNull(tXinyiWarningRecord)){//数据正常,无告警信息
+            if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+                log.info( "{}:现在恢复正常,历史报警数据为{}", category,JSON.toJSONString(tXinyiWarningRecords));
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {
+                    xinyiWarningRecord.setStatus(2);
+                    Date nowDate = DateUtils.getNowDate();
+                    xinyiWarningRecord.setOffTime(nowDate);
+                    xinyiWarningRecord.setUpdateTime(nowDate);
+                    xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
+                    this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(xinyiWarningRecord);
+                }
+            }
+        }else{//有新的告警信息
+            if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
+                //保存到数据库中
+                this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
+                if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                    //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                    this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }else {
+                    //继续调用决策(普通问答)
+                    this.askBigModelForSHWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }
+            }else{
+                log.info("{}:之前已经有过告警记录了,且还是继续报警,无需重复添加报警,但是决策仍然要调用", category);
+                for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {//理论上只有一个的
+                    if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                        //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                        this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }else {
+                        //继续调用决策(普通问答)
+                        this.askBigModelForSHWarning(xinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }
+                }
+            }
+        }
+    }
+
+    private void askBigModelForSHWarning(TXinyiWarningRecord xinyiWarningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
+        log.info("进入了后台接口调⽤⼤模型获取问答结果处理");
+        StringBuilder sb = new StringBuilder();
+        String sessionId = IdUtils.simpleUUID();
+        ChatReq chatReq = new ChatReq();
+//        String ipAddr = IpUtils.getIpAddr();//获取用户的ip地址 传给大模型
+        String ipAddr = "";//获取用户的ip地址 传给大模型  定时任务获取不到ip地址
+        int counts = 1;//默认是第一次
+        //这种问答 没有历史问答的概念 直接把问题扔进去就行 无需查询历史记录
+        List<String> historyDates = new ArrayList<>();
+        //构建问题(替换提示词中的占位符)
+        String shWarningPrompt = SH_WARNING_PROMPT;
+        shWarningPrompt =shWarningPrompt.replace("#{0}", xinyiWarningRecord.getReason());
+        shWarningPrompt =shWarningPrompt.replace("#{1}", String.valueOf(xinyiWarningRecord.getDesignVal()));
+        shWarningPrompt =shWarningPrompt.replace("#{2}", String.valueOf(xinyiWarningRecord.getControlVal()));
+        shWarningPrompt =shWarningPrompt.replace("#{3}", String.valueOf(xinyiWarningRecord.getWarningVal()));
+        historyDates.add(shWarningPrompt);
+        // 获取输出流
+        ManagedChannel channel = null;
+        try {
+            channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
+                    .usePlaintext()
+                    .build();
+            InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
+            String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{ \"ip_address\": \"" + ipAddr  + "\" },\"strengthen\":" + (true) + "}";
+            log.info("请求大模型的问答参数为{}", dataJson);
+            PredictionsRequest request = PredictionsRequest.newBuilder()
+                    .setModelName("slibra_bot")
+                    .putInput("method", ByteString.copyFrom("infer_stream", "utf-8"))//推理
+                    .putInput("data", ByteString.copyFrom(dataJson, "utf-8"))
+                    .buildPartial();
+            Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
+            //将结果记录到问答表
+            while (predictions.hasNext()) {
+                String responseStr = predictions.next().getPrediction().toStringUtf8();
+                log.info("大模型问答返回的原始结果为{}", responseStr);
+                responseStr = JSON.parseObject(responseStr).getString("message");
+                if("complete".equals(responseStr)){
+                    log.info("结尾语句并且是非JSON,无需处理");
+                }else{
+                    sb.append(responseStr);
+                }
+            }
+            //将问答更新到数据库中
+            chatReq.setSessionId(sessionId);
+            chatReq.setType(2);//0问答 1决策 2本地
+            chatReq.setModule(3);//0专家问答 1智能工单 2智能体助手 3告警 4简报
+            String showVal = this.buildShowValue(xinyiWarningRecord, tXinyiIndustry, normConfig);
+            chatReq.setShowVal(showVal);
+            chatReq.setQuestion(shWarningPrompt);
+            chatReq.setAnswer(sb.toString());
+            chatReq.setCounts(counts);//问答次数
+            chatReq.setUserId(WARNING_DEFAULT_CREATE);
+            chatReq.setCreateBy(WARNING_DEFAULT_CREATE);
+            chatReq.setCreateTime(DateUtils.getNowDate());
+            this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            // 关闭输出流
+            channel.shutdown();
+        }
+    }
+
+    private void handleSZWarning(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
         //出水相关
         //出水COD报警
         BigDecimal csCod = tXinyiIndustry.getCsCod();
         BigDecimal cscodBzz = normConfig.getCscodBzz();
         BigDecimal cscodGkz = normConfig.getCscodGkz();
-        if(!Objects.isNull(csCod) && !Objects.isNull(cscodBzz)){
+        if(!Objects.isNull(cscodBzz)){
             handleXinYiWarningsCs(cscodBzz, csCod, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_COD.getCode(), tXinyiIndustry, normConfig);
         }
 
@@ -352,7 +614,7 @@ public class RyTask
         BigDecimal csTp = tXinyiIndustry.getCsTp();
         BigDecimal cszlBzz = normConfig.getCszlBzz();
         BigDecimal cszlGkz = normConfig.getCszlGkz();
-        if(!Objects.isNull(csTp) && !Objects.isNull(cszlBzz)){
+        if(!Objects.isNull(cszlBzz)){
             handleXinYiWarningsCs(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig);
         }
 
@@ -361,7 +623,7 @@ public class RyTask
         BigDecimal csTn = tXinyiIndustry.getCsTn();
         BigDecimal cszzBzz = normConfig.getCszzBzz();
         BigDecimal cszzGkz = normConfig.getCszzGkz();
-        if(!Objects.isNull(csTn) && !Objects.isNull(cszzBzz)){
+        if(!Objects.isNull(cszzBzz)){
             handleXinYiWarningsCs(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig);
         }
 
@@ -369,7 +631,7 @@ public class RyTask
         BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
         BigDecimal csadBzz = normConfig.getCsadBzz();
         BigDecimal csadGkz = normConfig.getCsadGkz();
-        if(!Objects.isNull(csNh3) && !Objects.isNull(csadBzz)){
+        if(!Objects.isNull(csadBzz)){
             handleXinYiWarningsCs(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig);
         }
 
@@ -377,7 +639,7 @@ public class RyTask
         BigDecimal csSS = tXinyiIndustry.getCsSs();
         BigDecimal csSSBzz = normConfig.getCsssBzz();
         BigDecimal csssGkz = normConfig.getCsssGkz();
-        if(!Objects.isNull(csSS) && !Objects.isNull(csSSBzz)){
+        if(!Objects.isNull(csSSBzz)){
             handleXinYiWarningsCs(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig);
         }
 
@@ -385,38 +647,37 @@ public class RyTask
         //进水总磷超标报警
         BigDecimal jsTp = tXinyiIndustry.getJsTp();
         BigDecimal jszlSjz = normConfig.getJszlSjz();
-        if(!Objects.isNull(jsTp) && !Objects.isNull(jszlSjz)){
+        if(!Objects.isNull(jszlSjz)){
             handleXinYiWarningRecordJS(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig);
         }
 
         //进水COD超标报警
         BigDecimal jsCod = tXinyiIndustry.getJsCod();
         BigDecimal jscodSjz = normConfig.getJscodSjz();
-        if(!Objects.isNull(jsCod) && !Objects.isNull(jscodSjz)){
+        if(!Objects.isNull(jscodSjz)){
             handleXinYiWarningRecordJS(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig);
         }
 
         //进水总氮超标报警
         BigDecimal jsTn = tXinyiIndustry.getJsTn();
         BigDecimal jszdSjz = normConfig.getJszdSjz();
-        if(!Objects.isNull(jsTn) && !Objects.isNull(jszdSjz)){
+        if(!Objects.isNull(jszdSjz)){
             handleXinYiWarningRecordJS(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig);
         }
 
         //进水氨氮超标报警
         BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
         BigDecimal jsadSjz = normConfig.getJsadSjz();
-        if(!Objects.isNull(jsNh3) && !Objects.isNull(jsadSjz)){
+        if(!Objects.isNull(jsadSjz)){
             handleXinYiWarningRecordJS(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig);
         }
 
         //进水SS超标报警
         BigDecimal jsSS = tXinyiIndustry.getJsSs();
         BigDecimal jsSSSjz = normConfig.getJsssSjz();
-        if(!Objects.isNull(jsSS) && !Objects.isNull(jsSSSjz)){
+        if(!Objects.isNull(jsSSSjz)){
             handleXinYiWarningRecordJS(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig);
         }
-        
     }
 
     /**
@@ -854,6 +1115,11 @@ public class RyTask
     }
 
 
+    /**
+     *
+     * 定时生成每日简报数据
+     *
+     */
     public void generageShortReport(){
         log.info("进入了定时生成每日简报数据");
         List<TXinyiDaily> dailyTwoRecords = this.xinyiDailyMapper.selectNRecords(2);
@@ -909,7 +1175,7 @@ public class RyTask
                     .usePlaintext()
                     .build();
             InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
-            String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{ \"ip_address\": \"" + ipAddr  + "\" },\"strengthen\":" + (false) + "}";
+            String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{ \"ip_address\": \"" + ipAddr  + "\" },\"strengthen\":" + (true) + "}";
             log.info("请求大模型的问答参数为{}", dataJson);
             PredictionsRequest request = PredictionsRequest.newBuilder()
                     .setModelName("slibra_bot")
@@ -933,7 +1199,7 @@ public class RyTask
             }
             //将问答更新到数据库中
             chatReq.setSessionId(sessionId);
-            chatReq.setType(0);//0问答 1决策
+            chatReq.setType(2);//0问答 1决策 2本地
             chatReq.setModule(4);//0专家问答 1智能工单 2智能体助手 3告警 4简报
             chatReq.setShowVal(showVal);
             chatReq.setQuestion(question);
@@ -1079,6 +1345,8 @@ public class RyTask
 
         String s = "2022/01/01".substring(5).replace("/", "月") + "日";
         System.out.println("s = " + s);
+
+        System.out.println(new BigDecimal("1").compareTo(null));//空指针 要判断
     }
 
 

+ 11 - 0
slibra-system/src/main/java/com/slibra/business/req/ChatReq.java

@@ -13,6 +13,9 @@ public class ChatReq extends TXinyiChatRecord {
     //决策里是否携带alert的
     private String feedback = "{}";
 
+    //2024年5月28日17:38:00 新增的请求参数 调用预测接口需要传该值
+    private String simulate = "{}";
+
     /** 告警记录ID */
     @Excel(name = "告警记录ID")
     private String warningId;
@@ -60,4 +63,12 @@ public class ChatReq extends TXinyiChatRecord {
     public void setRows(String rows) {
         this.rows = rows;
     }
+
+    public String getSimulate() {
+        return simulate;
+    }
+
+    public void setSimulate(String simulate) {
+        this.simulate = simulate;
+    }
 }