diff --git a/src/main/java/com/xly/exception/dto/BusinessException.java b/src/main/java/com/xly/exception/dto/BusinessException.java index d79e011..ebfdf5a 100644 --- a/src/main/java/com/xly/exception/dto/BusinessException.java +++ b/src/main/java/com/xly/exception/dto/BusinessException.java @@ -13,7 +13,6 @@ public class BusinessException extends BaseException { public BusinessException(ErrorCode errorCode) { super(errorCode); } - public BusinessException(ErrorCode errorCode, String message) { super(errorCode, message); } diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index 19cdf3f..c56ffea 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -219,7 +219,7 @@ public class XlyErpService { private void doCleanUserMemory(UserSceneSession session,String userId){ operableChatMemoryProvider.clearSpecifiedMemory(userId); session.setCurrentTool(null); - session.setSceneSelected(false); +// session.setSceneSelected(false); UserSceneSessionService.ERP_AGENT_CACHE.remove(userId); UserSceneSessionService.CHAT_AGENT_CACHE.remove(userId); session.setBCleanMemory(false); diff --git a/src/main/java/com/xly/tool/DynamicToolProvider.java b/src/main/java/com/xly/tool/DynamicToolProvider.java index 68de200..f58311e 100644 --- a/src/main/java/com/xly/tool/DynamicToolProvider.java +++ b/src/main/java/com/xly/tool/DynamicToolProvider.java @@ -576,7 +576,18 @@ public class DynamicToolProvider implements ToolProvider { sRowData = (List>) sRowDataMap.get("sRowData"); sHandleType = sRowDataMap.get("sHandleType").toString(); } - if((isConfirmed || 0== meta.getIActionType()) && 5!= meta.getIBizType()){ + //{"1":"存储过程","2":"SQL查询","3":"第三方API","4":"ERP未清","5":"ERP列表(报表)","6":"ERP单据","7":"其它","8":"自然语言TEXT2SQL"} + + if((isConfirmed && 4== meta.getIBizType()) + || 1== meta.getIBizType() + || 2== meta.getIBizType() + || 3== meta.getIBizType() + || 5== meta.getIBizType() + || 6== meta.getIBizType() + || 7== meta.getIBizType() + || 8== meta.getIBizType() + ) + { // 确认后必填项校验 List missingAfter = checkConfirmAfterParam(args, paramRuleData); if (!missingAfter.isEmpty()) { @@ -589,9 +600,10 @@ public class DynamicToolProvider implements ToolProvider { return executeTool(toolExecutionRequest, meta, args, paramRuleData, memoryId.toString(), session); } String askconfirmMsg =StrUtil.EMPTY; - if(0== meta.getIActionType() && 4!= meta.getIBizType() && 5!= meta.getIBizType()){ - askconfirmMsg = buildConfirmUserMessage(meta, args); - }else if(4== meta.getIBizType() || meta.getIBizType()==5){ +// if(0== meta.getIActionType() && 4!= meta.getIBizType() && 5!= meta.getIBizType()){ +// askconfirmMsg = buildConfirmUserMessage(meta, args); +// }else + if(4== meta.getIBizType() || meta.getIBizType()==5){ askconfirmMsg = doGetFromData( meta,args,session); // session.setSFunPrompts(askconfirmMsg); // operableChatMemoryProvider.get(memoryId).add(UserMessage.from("SYSTEM: 等待用户确认或选择部分数据操作")); @@ -867,7 +879,8 @@ public class DynamicToolProvider implements ToolProvider { String sReturn ="执行成功"; try{ sReturn = executeToolAfter(meta, args,toolExecutionRequest,paramRuleData,session); - }catch (Exception e) { + }catch (BusinessException e) { + return e.getMessage(); } if(meta.getIActionType()==1){ session.setBCleanMemory(true); @@ -892,17 +905,29 @@ public class DynamicToolProvider implements ToolProvider { args.put("sBrId", session.getSBrandsId()); args.put("sBrandsId", session.getSBrandsId()); args.put("sSuId", session.getSSubsidiaryId()); + args.put("sSrcFormId", meta.getSSrcFormId()); + args.put("sControlName", meta.getSControlName()); + args.put("iBizType", iBizType); args.put("sSubsidiaryId", session.getSSubsidiaryId()); + args.put("sToolId", meta.getSId()); if (iBizType == 1 || iBizType == 4) { Map data = new HashMap<>(args); data.put("sData", JSONObject.toJSONString(data)); + if(ObjectUtil.isEmpty(sBizContent) && iBizType == 4){ + sBizContent ="Sp_Ai_AddCommonAfter"; + }else{ + String sMsgText = "未配置业务处理逻辑的方法"; + session.setSFunPrompts(sMsgText); + throw new BusinessException(-1,sMsgText); + } Map searMap = this.dynamicExeDbService.getDoProMap(sBizContent, data); Map sReturn = this.dynamicExeDbService.getCallPro(searMap, sBizContent); Integer sCode = ObjectUtil.isNotEmpty(sReturn.get(ProcedureConstant.SCODE)) ? Integer.valueOf(sReturn.get(ProcedureConstant.SCODE).toString()) : 0; String sMsgText = ObjectUtil.isNotEmpty(sReturn.get(ProcedureConstant.SRETURN)) ? sReturn.get(ProcedureConstant.SRETURN).toString() : "操作成功"; if (sCode < 0) { - String msg = ObjectUtil.isEmpty(sMsgText) ? "调用过程sCode:" + Integer.valueOf(searMap.get(ProcedureConstant.SCODE).toString()) : sMsgText; - return String.valueOf(askUserResult(toolExecutionRequest, msg)); + sMsgText = ObjectUtil.isEmpty(sMsgText) ? "调用过程sCode:" + Integer.valueOf(searMap.get(ProcedureConstant.SCODE).toString()) : sMsgText; + session.setSFunPrompts(sMsgText); + throw new BusinessException(sCode,sMsgText); } session.setSFunPrompts(sMsgText); return sMsgText; @@ -933,8 +958,9 @@ public class DynamicToolProvider implements ToolProvider { } return String.valueOf(successResult(toolExecutionRequest, sb.toString())); } else { - session.setSFunPrompts("未找到对应的数据"); - return "未找到对应的数据"; + String sMsgText = "未找到对应的数据"; + session.setSFunPrompts(sMsgText); + throw new BusinessException(-1,sMsgText); } } } else if (iBizType == 3) { diff --git a/src/main/resources/templates/chat.html b/src/main/resources/templates/chat.html index 9f7f733..1b5aa92 100644 --- a/src/main/resources/templates/chat.html +++ b/src/main/resources/templates/chat.html @@ -468,8 +468,7 @@ let subsidiaryid= "1111111111"; let usertype= "sysadmin"; // let usertype= "General"; - let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1DD20808D80550B390B6BE6ECDCFF597F4D8668502224FF2D5675E74B8CDD2ABFB538155B7ADAEE71E899235DC1122F426"; - //"1EDB99C9BF070115F7A57AC43D8CB09F0B8C49F979DAB63A2AEA84B372B2B42BF3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1DC16A7526DEC4395CF09285C2BD330B9FD8668502224FF2D5675E74B8CDD2ABFB538155B7ADAEE71E899235DC1122F426"; + let authorization="CE444885A9BCFDDE1FD793F8A0931301E9D7DE6CEDD9DE4B83ECE2219C7829A8F3419238942A93E9AD666629E18D159AF7FE144A6407DE745BA0AEC8B235FC1DFAA0AB1345E95AFF7B0EAF75448070A329D9BB4A0103841ED6E33C9191B264BF538155B7ADAEE71E899235DC1122F426"; let hrefLock = window.location.origin+"/xlyAi"; // ==================== 配置部分 ==================== const CONFIG = {