Browse Source

报警如果获取不到数据 特殊类型报警

wangmiaomiao 11 months ago
parent
commit
87826f37f4

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

@@ -225,7 +225,7 @@ public class GRPCController extends BaseController {
         String sessionId = chatReq.getSessionId();
         String question = chatReq.getQuestion();
         Integer module = chatReq.getModule();//来自那个模块
-        Integer isStrong = chatReq.getIsStrong();
+        int isStrong = Objects.isNull(chatReq.getIsStrong()) ? 0 : chatReq.getIsStrong();
         int counts = 1;//默认是第一次
         List<String> historyDates = new ArrayList<>();
         //查询历史数据,放入集合中

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

@@ -17,9 +17,12 @@ public class MyConstants {
 
     public static final String CHAOBIAO_WARNING = "超标报警";
     public static final String CHAOGUANKONG_WARNING = "超管控报警";
+    public static final String EXCEPTION_WARNING = "设备数据异常";
     public static final String WARNING_LEVEL_ONE = "一级";
     public static final String WARNING_LEVEL_TWO = "二级";
     public static final String WARNING_LEVEL_THREE = "三级";
+    public static final String WARNING_LEVEL_NO_DATE = "异常";
+    public static final String WARNING_DEFAULT_QUESTION= "在线仪表数据异常";
     public static final String WARNING_DEFAULT_CREATE = "task-job";
 
 

+ 59 - 11
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -655,7 +655,11 @@ public class RyTask
         tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
         tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
 
-        if(currentVal.compareTo(multiply) > 0){//一级
+        //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(csBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
@@ -685,13 +689,23 @@ public class RyTask
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
                 //保存到数据库中
                 this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
-                //继续调用决策
-                this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                    //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                    this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }else {
+                    //继续调用决策
+                    this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }
             }else{
                 log.info("{}:之前已经有过告警记录了,且还是继续报警,无需重复添加报警,但是决策仍然要调用", category);
                 for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {//理论上只有一个的
-                    //继续调用决策
-                    this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig);
+                    if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                        //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                        this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }else {
+                        //继续调用决策
+                        this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }
                 }
             }
         }
@@ -723,7 +737,11 @@ public class RyTask
         tXinyiWarningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
         tXinyiWarningRecord.setCreateTime(DateUtils.getNowDate());
 
-        if(currentVal.compareTo(multiply) > 0){//一级
+        //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(jsBzz) >= 0 && currentVal.compareTo(multiply) <= 0){//二级
@@ -754,19 +772,49 @@ public class RyTask
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
                 //保存到数据库中
                 this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
-                //继续调用决策
-                this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                    //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                    this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }else {
+                    //继续调用决策
+                    this.handleDecision(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                }
             }else{
                 log.info("{}:之前已经有过告警记录了,且还是继续报警,无需重复添加报警,但是决策仍然要调用", category);
                 for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {//理论上只有一个的
-                    //继续调用决策
-                    this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig);
+                    if(WARNING_LEVEL_NO_DATE.equals(tXinyiWarningRecord.getLevel())){
+                        //只保存一个普通的问答记录 不需要调用决策信息,但是实时数据还是要记录的
+                        this.addChatRecordByWarning(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }else {
+                        //继续调用决策
+                        this.handleDecision(xinyiWarningRecord, tXinyiIndustry, normConfig);
+                    }
                 }
             }
         }
     }
 
-
+    private void addChatRecordByWarning(TXinyiWarningRecord tXinyiWarningRecord, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig) {
+        ChatReq chatReq = new ChatReq();
+        //保存聊天记录
+        //将问答更新到数据库中
+        chatReq.setSessionId(IdUtils.simpleUUID());
+        chatReq.setType(2);//0问答 1决策 2本地
+        chatReq.setModule(3);
+            /*String userId = SecurityUtils.getUserId().toString();
+            String username = SecurityUtils.getUsername();*/
+        chatReq.setUserId(WARNING_DEFAULT_CREATE);
+        String showVal = this.buildShowValue(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+        chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
+        chatReq.setQuestion(WARNING_DEFAULT_QUESTION);//本地问题
+        chatReq.setAnswer(tXinyiWarningRecord.getReason() + ",请检查设备是否正常运行");
+        chatReq.setWarningId(String.valueOf(tXinyiWarningRecord.getId()));
+        chatReq.setCounts(1);//问答次数
+
+        chatReq.setCreateBy(WARNING_DEFAULT_CREATE);
+        chatReq.setCreateTime(DateUtils.getNowDate());
+        this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
+    }
 
 
     /**

+ 3 - 3
slibra-system/src/main/java/com/slibra/business/domain/TXinyiChatRecord.java

@@ -30,8 +30,8 @@ public class TXinyiChatRecord extends BaseEntity
     @Excel(name = "会话ID")
     private String sessionId;
 
-    /** 类型(0问答 1决策) */
-    @Excel(name = "类型", readConverterExp = "0=问答,1=决策")
+    /** 类型(0问答 1决策 2本地) */
+    @Excel(name = "类型", readConverterExp = "0=问答,1=决策,2=本地")
     private Integer type;
 
     /** 隶属哪个模块(0专家问答 1智能工单 2智能体助手 3告警) */
@@ -64,7 +64,7 @@ public class TXinyiChatRecord extends BaseEntity
 
     /** 是否使用搜索增强(0否 1是) */
     @Excel(name = "是否使用搜索增强", readConverterExp = "0=否,1=是")
-    private Integer isStrong = 0;//默认是不增强,防止空指针
+    private Integer isStrong;
 
     /** 回复是否满意(0否 1是 2默认:既不支持,也不反对) */
     @Excel(name = "回复是否满意", readConverterExp = "0否 1是 2默认:既不支持,也不反对")