wangmiaomiao пре 11 месеци
родитељ
комит
e64e010019

+ 44 - 5
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -1,27 +1,29 @@
 package com.slibra.web.controller.business;
 
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONWriter;
 import com.slibra.business.domain.TXinyiChatRecord;
 import com.slibra.business.domain.TXinyiWarningRecord;
 import com.slibra.business.mapper.*;
 import com.slibra.business.req.ChatReq;
-import com.slibra.business.req.DecisionReq;
 import com.slibra.business.service.IFrontService;
 import com.slibra.common.core.controller.BaseController;
 import com.slibra.common.core.domain.AjaxResult;
 import com.slibra.common.core.page.TableDataInfo;
 import com.slibra.common.exception.ServiceException;
+import com.slibra.common.utils.DateUtils;
 import com.slibra.common.utils.SecurityUtils;
 import com.slibra.common.utils.StringUtils;
 import com.slibra.common.utils.uuid.IdUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 import static com.slibra.common.constant.MyConstants.SUCCESS;
+import static com.slibra.common.constant.MyConstants.MAX_COUNT;
 
 /**
  * 前端用户相关接口
@@ -170,10 +172,13 @@ public class FrontController extends BaseController {
     {
         log.info("进入了 报警+预警记录列表分页 接口");
         startPage();
-        return getDataTable(xinyiWarningRecordMapper.selectTXinyiWarningRecordList(tXinyiWarningRecord));
+        List<TXinyiWarningRecord> tXinyiWarningRecords = xinyiWarningRecordMapper.selectTXinyiWarningRecordList(tXinyiWarningRecord);
+        this.handleWarningCounts(tXinyiWarningRecords);
+        return getDataTable(tXinyiWarningRecords);
     }
 
 
+
     //报警+预警记录列表不分页 【水质报警  1生化报警 2预测报警】
     /**
      * 报警+预警记录列表不分页
@@ -184,10 +189,31 @@ public class FrontController extends BaseController {
     public AjaxResult noPageList(TXinyiWarningRecord tXinyiWarningRecord)
     {
         log.info("进入了 报警+预警记录列表不分页 接口");
-        return AjaxResult.success(xinyiWarningRecordMapper.selectTXinyiWarningRecordList(tXinyiWarningRecord));
+        List<TXinyiWarningRecord> tXinyiWarningRecords = xinyiWarningRecordMapper.selectTXinyiWarningRecordList(tXinyiWarningRecord);
+        this.handleWarningCounts(tXinyiWarningRecords);
+        return AjaxResult.success(tXinyiWarningRecords);
     }
 
 
+    private void handleWarningCounts(List<TXinyiWarningRecord> tXinyiWarningRecords) {
+        if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+            for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningRecords) {
+                Date endDate = null;
+                //判断类型 如果结束了 截止时间就是告警截止时间;  如果正在报警 截止时间就是当前时间
+                if(0 == tXinyiWarningRecord.getStatus() || 3 == tXinyiWarningRecord.getStatus())
+                    endDate = DateUtils.getNowDate();
+                else
+                    endDate = tXinyiWarningRecord.getOffTime();
+                //防止 之前程序处理错误  理论上不再报警了,一定有截止时间的
+                if(Objects.isNull(endDate)){
+                    log.error("xxxxxxxxx:之前处理告警结束的逻辑异常,没有更新截止时间");
+                    endDate = DateUtils.getNowDate();
+                }
+                tXinyiWarningRecord.setCounts(Math.min(DateUtils.differentHoursByMillisecond(tXinyiWarningRecord.getTime(), endDate) + 1, MAX_COUNT));
+            }
+        }
+    }
+
     /**
      * 获取 后台配置的智能助手列表
      * @return
@@ -250,6 +276,19 @@ public class FrontController extends BaseController {
     }
 
 
+
+    /**
+     * 人工处理告警接口(是否采用大模型问答  是否转应急  归档/上传地址)
+     * @return
+     */
+    @PutMapping("/bigModel/warning/handleWarningByMan")
+    public AjaxResult handleWarningByMan(@RequestBody TXinyiWarningRecord warningRecord)
+    {
+        log.info("进入了 人工处理告警接口  接口");
+        return AjaxResult.success(frontService.handleWarningByMan(warningRecord));
+    }
+
+
     //--------------------下面是测试的方法--------------------
     /*@GetMapping("/test/data")
     public void testData(){

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

@@ -18,6 +18,7 @@ import com.slibra.common.enums.BusinessEnum;
 import com.slibra.common.utils.DateUtils;
 import com.slibra.common.utils.SecurityUtils;
 import com.slibra.common.utils.StringUtils;
+import com.slibra.common.utils.ip.IpUtils;
 import com.slibra.common.utils.uuid.IdUtils;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
@@ -226,6 +227,7 @@ public class GRPCController extends BaseController {
         String sessionId = chatReq.getSessionId();
         String question = chatReq.getQuestion();
         Integer module = chatReq.getModule();//来自那个模块
+        String ipAddr = IpUtils.getIpAddr();//获取用户的ip地址 传给大模型
         int isStrong = Objects.isNull(chatReq.getIsStrong()) ? 0 : chatReq.getIsStrong();
         int counts = 1;//默认是第一次
         List<String> historyDates = new ArrayList<>();
@@ -257,7 +259,7 @@ public class GRPCController extends BaseController {
                     .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\":{},\"strengthen\":" + (isStrong == 1) + "}";
+            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\":" + (isStrong == 1) + "}";
             log.info("请求大模型的问答参数为{}", dataJson);
             PredictionsRequest request = PredictionsRequest.newBuilder()
                     .setModelName("slibra_bot")

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

@@ -27,6 +27,6 @@ public class MyConstants {
     public static final String DEFAULT_ID_IDENTIFIER = "@@id@@";
 
 
-    public static final int maxCount = 30;
+    public static final int MAX_COUNT = 30;
 
 }

+ 1 - 3
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -15,7 +15,6 @@ 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.common.utils.SecurityUtils;
 import com.slibra.common.utils.uuid.IdUtils;
 import com.slibra.framework.datasource.DynamicDataSourceContextHolder;
 import inference.InferenceAPIsServiceGrpc;
@@ -29,7 +28,6 @@ import org.springframework.stereotype.Component;
 import com.slibra.common.utils.StringUtils;
 import org.springframework.util.CollectionUtils;
 
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
@@ -546,7 +544,7 @@ public class RyTask
         basic.put("报警值", tXinyiWarningRecord.getWarningVal());
         basic.put("标准值", tXinyiWarningRecord.getDesignVal());
         basic.put("管控值", tXinyiWarningRecord.getControlVal());
-        basic.put("报警次数", Math.min(count, maxCount));
+        basic.put("报警次数", Math.min(count, MAX_COUNT));
         if(tXinyiWarningRecord.getType() != 2)
             basic.put("状态", status == 0 ? "告警中" : status == 1 ? "用户关闭" : status == 2 ? "系统自动关闭" : "用户转为应急处理中");
         else

+ 8 - 1
slibra-system/src/main/java/com/slibra/business/domain/TXinyiWarningRecord.java

@@ -38,7 +38,7 @@ public class TXinyiWarningRecord extends BaseEntity
     private String category;
 
     /** 发生时间/预计超标时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
     @Excel(name = "发生时间/预计超标时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date time;
 
@@ -98,4 +98,11 @@ public class TXinyiWarningRecord extends BaseEntity
     @Excel(name = "乐观锁")
     private Long revision;
 
+
+    //2024年5月26日18:17:45  额外返回给前端的字段
+    private int counts;//报警次数。
+
+    //请求参数
+    private Integer warningStatus;//告警状态 0告警中  1历史告警
+
 }

+ 2 - 0
slibra-system/src/main/java/com/slibra/business/service/IFrontService.java

@@ -28,4 +28,6 @@ public interface IFrontService
     TXinyiChatRecord qaDetailByWarningId(String warningId);
 
     String isSatisfiedAnswer(ChatReq chatReq);
+
+    String handleWarningByMan(TXinyiWarningRecord warningRecord);
 }

+ 19 - 3
slibra-system/src/main/java/com/slibra/business/service/impl/FrontServiceImpl.java

@@ -73,12 +73,14 @@ public class FrontServiceImpl implements IFrontService {
 
     @Override
     public List<String> warningCount() {
-        ArrayList<String> result = new ArrayList<>(2);
+        ArrayList<String> result = new ArrayList<>();
         //获取告警的统计数量
         int count = this.xinyiWarningRecordMapper.getWarningCountByType(1);
-        result.add(WARNING_TEMPLATE.replace("#", String.valueOf(count)));
+        if(count > 0)//2024年5月26日19:01:39  有告警记录再返回
+            result.add(WARNING_TEMPLATE.replace("#", String.valueOf(count)));
         //获取报警警的统计数量
-        count = this.xinyiWarningRecordMapper.getWarningCountByType(2);
+        if(count > 0)//2024年5月26日19:01:39  有告警记录再返回
+            count = this.xinyiWarningRecordMapper.getWarningCountByType(2);
         result.add(FORECAST_WARNING_TEMPLATE.replace("#", String.valueOf(count)));
         return result;
     }
@@ -115,6 +117,20 @@ public class FrontServiceImpl implements IFrontService {
         return "操作成功";
     }
 
+    @Override
+    public String handleWarningByMan(TXinyiWarningRecord warningRecordReq) {
+        Long id = warningRecordReq.getId();
+        if(Objects.isNull(id))
+            throw new ServiceException("请输入告警记录id");
+        TXinyiWarningRecord tXinyiWarningRecord = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordById(id);
+        if(Objects.isNull(tXinyiWarningRecord))
+            throw new ServiceException("请输入正确的告警记录id");
+        warningRecordReq.setUpdateBy(SecurityUtils.getUsername());
+        warningRecordReq.setUpdateTime(DateUtils.getNowDate());
+        xinyiWarningRecordMapper.updateTXinyiWarningRecord(warningRecordReq);
+        return "操作成功";
+    }
+
     private XinyiIndustrySimple calculateData(XinyiIndustrySimple xinyiIndustrySimple, LocalDateTime nowTime) {
         LocalDateTime yesterdaySameTime = nowTime.plusDays(-1);
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateUtils.YYYYMMDDHH_TS);

+ 10 - 0
slibra-system/src/main/resources/mapper/business/TXinyiWarningRecordMapper.xml

@@ -54,6 +54,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="review != null  and review != ''"> and review = #{review}</if>
             <if test="useRecommend != null "> and use_recommend = #{useRecommend}</if>
             <if test="revision != null "> and revision = #{revision}</if>
+            <if test="warningStatus != null ">
+                <choose>
+                    <when test="warningStatus == 0">
+                        and status in(0, 3)
+                    </when>
+                    <otherwise>
+                        and status in(1, 2)
+                    </otherwise>
+                </choose>
+             </if>
         </where>
         and del_flag = 0 order by id desc
     </select>