فهرست منبع

BigDecimal工具类编写 大模型返回error处理 获取告警的最后一条数据处理

wangmiaomiao 9 ماه پیش
والد
کامیت
a457588b91

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

@@ -122,6 +122,7 @@ public class GRPCController extends BaseController {
         List<DecisionReq> decisionReqs = getDecisionReqs();
         String rows = JSON.toJSONString(decisionReqs, JSONWriter.Feature.WriteNulls);
         String dataJson = "";
+        boolean needAdd = true;//标识变量是否可以保存
         try {
             channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
                     .usePlaintext()
@@ -155,7 +156,19 @@ public class GRPCController extends BaseController {
                     //结束语句也流式输出,但是并不记录下来  2024年5月24日11:15:23 也不返回前端
                     /*outputStream.write(responseStr.getBytes());
                     outputStream.flush();*/
-                }else{//其他 要么错误 要么alert 要么出的报告
+                //2024年6月23日14:55:19 如果大模型返回error了,不保存记录,并且提示一句错误语
+                }else if(BusinessEnum.BigModelBizEnum.ERROR.getCode().equalsIgnoreCase(biz)){
+                    log.info("调用大模型的时候,返回的是ERROR,返回数据为{}", responseStr);
+                    needAdd = false;
+                    //返回的是error 给前端返回一句话
+                    try {
+                        String errMsg = this.buildErrMsg();
+                        outputStream.write(errMsg.getBytes());
+                        outputStream.flush();
+                    } catch (IOException ex) {
+                        throw new RuntimeException(ex);
+                    }
+                } else{//其他 要么alert 要么出的报告
 //                    sb.append(responseStr);
                     if(StringUtils.isBlank(message)){
                         log.info("×××××××××××××××××××××××××××为空的数据暂时不返回×××××××××××××××××××××××××××");
@@ -181,7 +194,8 @@ public class GRPCController extends BaseController {
             log.info("sessionId是{}\n决策最终要保存的数据是{}", sessionId, JSON.toJSONString(resultData));
             //保存聊天记录
             //将问答更新到数据库中
-            addChatRecord(chatReq, sessionId, type, warningId, dataJson, resultData);
+            if(needAdd)
+                addChatRecord(chatReq, sessionId, type, warningId, dataJson, resultData);
             // 关闭输出流
             try {
                 outputStream.close();

+ 29 - 0
slibra-common/src/main/java/com/slibra/common/DecimalUtils.java

@@ -0,0 +1,29 @@
+package com.slibra.common;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Objects;
+
+public class DecimalUtils {
+
+
+    public static BigDecimal getAbs(BigDecimal req){
+        if(Objects.isNull(req))
+            return null;
+        return req.abs();
+    }
+
+
+    public static BigDecimal getAbsAndScale(BigDecimal req, int length){
+        if(Objects.isNull(req))
+            return null;
+        return req.abs().setScale(length, RoundingMode.HALF_UP);
+    }
+
+
+    public static void main(String[] args) {
+        System.out.println(getAbsAndScale(null, 3));
+        System.out.println(getAbsAndScale(new BigDecimal("33.33333"), 3));
+        System.out.println(getAbsAndScale(new BigDecimal("-33.33333"), 3));
+    }
+}

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

@@ -103,7 +103,7 @@ public class FrontServiceImpl implements IFrontService {
     @Override
     public TXinyiChatRecord qaDetailByWarningId(String warningId) {
         //2024年5月28日19:10:21 只获取决策的 因为决策和仿真预测是一个接口,所以通过类型区分
-        List<TXinyiChatRecord> tXinyiChatRecords = this.xinyiChatRecordMapper.selectTXinyiChatRecordList(TXinyiChatRecord.builder().warningId(warningId).build());
+        List<TXinyiChatRecord> tXinyiChatRecords = this.xinyiChatRecordMapper.selectTXinyiChatRecordList(TXinyiChatRecord.builder().warningId(warningId).type(1).build());
         return CollectionUtils.isEmpty(tXinyiChatRecords) ? null : tXinyiChatRecords.get(0);
     }