From ab8e9d2dc41eb0fe2efad4d3f9c0f58220a99349 Mon Sep 17 00:00:00 2001 From: zichun <26684461+reporkey@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:13:09 +0800 Subject: [PATCH] refactor: remove dead code (unused accessors/methods, exception dtos, ErrorCode trim) --- src/main/java/com/xly/agent/AgentIdentity.java | 34 +--------------------------------- src/main/java/com/xly/agent/Intent.java | 5 ----- src/main/java/com/xly/config/AgentFactory.java | 6 +++--- src/main/java/com/xly/constant/ErrorCode.java | 67 +++---------------------------------------------------------------- src/main/java/com/xly/exception/GlobalExceptionHandler.java | 7 ------- src/main/java/com/xly/exception/dto/BaseException.java | 37 ------------------------------------- src/main/java/com/xly/exception/dto/BusinessException.java | 26 -------------------------- src/main/java/com/xly/service/AuthzService.java | 26 ++++---------------------- src/main/java/com/xly/service/FormResolverService.java | 13 ------------- src/main/java/com/xly/service/SystemPromptService.java | 5 ----- src/main/java/com/xly/tool/FormCollectTool.java | 4 +--- src/main/java/com/xly/tool/ProposeWriteTool.java | 10 ---------- src/main/java/com/xly/web/AgentChatController.java | 3 +-- 13 files changed, 13 insertions(+), 230 deletions(-) delete mode 100644 src/main/java/com/xly/exception/dto/BaseException.java delete mode 100644 src/main/java/com/xly/exception/dto/BusinessException.java diff --git a/src/main/java/com/xly/agent/AgentIdentity.java b/src/main/java/com/xly/agent/AgentIdentity.java index ae85318..db1c885 100644 --- a/src/main/java/com/xly/agent/AgentIdentity.java +++ b/src/main/java/com/xly/agent/AgentIdentity.java @@ -17,20 +17,13 @@ public final class AgentIdentity { private final String token; private final String userId; - private final String userNo; private final String brandsId; - private final String subsidiaryId; - private final String userType; private final Set grantedModuleIds; // null = 全部(管理员) - public AgentIdentity(String token, String userId, String userNo, String brandsId, - String subsidiaryId, String userType, Set grantedModuleIds) { + public AgentIdentity(String token, String userId, String brandsId, Set grantedModuleIds) { this.token = token; this.userId = userId; - this.userNo = userNo; this.brandsId = brandsId; - this.subsidiaryId = subsidiaryId; - this.userType = userType; this.grantedModuleIds = grantedModuleIds; } @@ -39,39 +32,14 @@ public final class AgentIdentity { return token; } - public boolean hasUserToken() { - return token != null && !token.isBlank(); - } - public String userId() { return userId; } - public String userNo() { - return userNo; - } - public String brandsId() { return brandsId; } - public String subsidiaryId() { - return subsidiaryId; - } - - public String userType() { - return userType; - } - - /** null = 全部权限(管理员)。 */ - public Set grantedModuleIds() { - return grantedModuleIds; - } - - public boolean isAdminAll() { - return grantedModuleIds == null; - } - public boolean canAccessModule(String moduleId) { return grantedModuleIds == null || (moduleId != null && grantedModuleIds.contains(moduleId)); } diff --git a/src/main/java/com/xly/agent/Intent.java b/src/main/java/com/xly/agent/Intent.java index b233dc0..5d41096 100644 --- a/src/main/java/com/xly/agent/Intent.java +++ b/src/main/java/com/xly/agent/Intent.java @@ -41,11 +41,6 @@ public class Intent { public List entities = new ArrayList<>(); public List missing = new ArrayList<>(); // 完成该意图还缺的关键信息 - public boolean isWrite() { - return CREATE.equals(intent) || UPDATE.equals(intent) - || DELETE.equals(intent) || EXAMINE.equals(intent); - } - /** 取某业务角色的第一个实体值(如「客户」「产品」),没有则返回 null。 */ public String firstValueByRole(String role) { for (Entity e : entities) { diff --git a/src/main/java/com/xly/config/AgentFactory.java b/src/main/java/com/xly/config/AgentFactory.java index 227c869..297dbfc 100644 --- a/src/main/java/com/xly/config/AgentFactory.java +++ b/src/main/java/com/xly/config/AgentFactory.java @@ -102,13 +102,13 @@ public class AgentFactory { case WRITE: tools = new Object[]{skillTool, interactionTool, readTool, new ProposeWriteTool(erp, jdbc, ops, mapper, identity, resolver), - new FormCollectTool(erp, jdbc, resolver, identity, mapper)}; + new FormCollectTool(jdbc, resolver, identity, mapper)}; break; default: // FULL tools = new Object[]{kgQueryTool, skillTool, interactionTool, readTool, new ProposeWriteTool(erp, jdbc, ops, mapper, identity, resolver), new QueryTool(sqlModel, jdbc, audit, identity, resolver), - new FormCollectTool(erp, jdbc, resolver, identity, mapper)}; + new FormCollectTool(jdbc, resolver, identity, mapper)}; } return AiServices.builder(ReActAgent.class) @@ -126,7 +126,7 @@ public class AgentFactory { /** 供确定性「新增」路径直接构建 collectForm 表单(不经 LLM 工具选择)。 */ public FormCollectTool formCollectTool(AgentIdentity identity) { - return new FormCollectTool(erp, jdbc, resolver, identity, mapper); + return new FormCollectTool(jdbc, resolver, identity, mapper); } /** 供确定性「修改/作废/审核…」路径直接调 proposeWrite(不经 LLM 工具选择)。 */ diff --git a/src/main/java/com/xly/constant/ErrorCode.java b/src/main/java/com/xly/constant/ErrorCode.java index 40d303a..5de685b 100644 --- a/src/main/java/com/xly/constant/ErrorCode.java +++ b/src/main/java/com/xly/constant/ErrorCode.java @@ -2,66 +2,17 @@ package com.xly.constant; import lombok.Getter; -/*** - * @Author 钱豹 - * @Date 23:04 2026/1/30 - * @Param - * @return - * @Description 异常码枚举 - **/ +/** 异常码枚举(供 {@code GlobalExceptionHandler} 统一错误响应用)。 */ @Getter public enum ErrorCode { - // 成功 - SUCCESS(200, "操作成功"), - SUCCESSMSG(201, "成功"), - ERRORMSG(202, "失败"), - WFHYY(203, "未返回原因"), - - // 客户端错误 BAD_REQUEST(400, "请求参数错误"), - UNAUTHORIZED(401, "未授权"), - FORBIDDEN(403, "禁止访问"), NOT_FOUND(404, "资源不存在"), - - // 参数错误 PARAM_ERROR(40001, "参数错误"), - PARAM_REQUIRED(40002, "参数缺失"), - PARAM_TYPE_ERROR(40003, "参数类型错误"), - PARAM_FORMAT_ERROR(40004, "参数格式错误"), - - // 业务错误 - BUSINESS_ERROR(50001, "业务异常"), DATA_ERROR(50002, "数据异常"), - DATA_NOT_FOUND(50003, "数据不存在"), DATA_EXISTS(50004, "数据已存在"), - DATA_STATE_ERROR(50005, "数据状态异常"), - - // 用户相关 - USER_NOT_FOUND(60001, "用户不存在"), - USER_DISABLED(60002, "用户已禁用"), - USER_PASSWORD_ERROR(60003, "密码错误"), - USER_NOT_LOGIN(60004, "用户未登录"), - - // 权限相关 - PERMISSION_DENIED(70001, "权限不足"), - ROLE_NOT_FOUND(70002, "角色不存在"), - - // 系统错误 SYSTEM_ERROR(10000, "系统异常"), - SERVICE_UNAVAILABLE(10001, "服务不可用"), - DB_ERROR(10002, "数据库异常"), - NETWORK_ERROR(10003, "网络异常"), - THIRD_PARTY_ERROR(10004, "第三方服务异常"), - CONFIG_ERROR(10005, "配置错误"), - - // 文件相关 - FILE_UPLOAD_ERROR(80001, "文件上传失败"), - FILE_NOT_FOUND(80002, "文件不存在"), - FILE_TYPE_ERROR(80003, "文件类型错误"), - FILE_SIZE_ERROR(80004, "文件大小超限"), - - PYTHON_ERROR(9001, "Python脚本执行失败"); + DB_ERROR(10002, "数据库异常"); private final Integer code; private final String message; @@ -70,16 +21,4 @@ public enum ErrorCode { this.code = code; this.message = message; } - - /** - * 根据code获取ErrorCode - */ - public static ErrorCode getByCode(Integer code) { - for (ErrorCode errorCode : values()) { - if (errorCode.getCode().equals(code)) { - return errorCode; - } - } - return SYSTEM_ERROR; - } -} \ No newline at end of file +} diff --git a/src/main/java/com/xly/exception/GlobalExceptionHandler.java b/src/main/java/com/xly/exception/GlobalExceptionHandler.java index d269559..566cc60 100644 --- a/src/main/java/com/xly/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/xly/exception/GlobalExceptionHandler.java @@ -1,7 +1,6 @@ package com.xly.exception; import com.xly.constant.ErrorCode; -import com.xly.exception.dto.BusinessException; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.ConstraintViolationException; import lombok.extern.slf4j.Slf4j; @@ -40,12 +39,6 @@ public class GlobalExceptionHandler { return error(ErrorCode.SYSTEM_ERROR.getCode(), "系统异常: " + e.getMessage()); } - @ExceptionHandler(BusinessException.class) - public Map handleBusinessException(BusinessException e) { - log.warn("业务异常: {}", e.getMessage()); - return error(e.getCode(), e.getMessage()); - } - @ExceptionHandler(MethodArgumentNotValidException.class) public Map handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { List errors = e.getBindingResult().getFieldErrors() diff --git a/src/main/java/com/xly/exception/dto/BaseException.java b/src/main/java/com/xly/exception/dto/BaseException.java deleted file mode 100644 index 91cc300..0000000 --- a/src/main/java/com/xly/exception/dto/BaseException.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.xly.exception.dto; - -import com.xly.constant.ErrorCode; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/*** - * @Author 钱豹 - * @Date 23:13 2026/1/30 - * @Param - * @return - * @Description 基础异常定义 - **/ -@Data -@EqualsAndHashCode(callSuper = true) -public class BaseException extends RuntimeException { - private final Integer code; - private final String message; - - public BaseException(ErrorCode errorCode) { - super(errorCode.getMessage()); - this.code = errorCode.getCode(); - this.message = errorCode.getMessage(); - } - - public BaseException(ErrorCode errorCode, String message) { - super(message); - this.code = errorCode.getCode(); - this.message = message; - } - - public BaseException(Integer code, String message) { - super(message); - this.code = code; - this.message = message; - } -} \ No newline at end of file diff --git a/src/main/java/com/xly/exception/dto/BusinessException.java b/src/main/java/com/xly/exception/dto/BusinessException.java deleted file mode 100644 index ebfdf5a..0000000 --- a/src/main/java/com/xly/exception/dto/BusinessException.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.xly.exception.dto; - -import com.xly.constant.ErrorCode; - -/*** - * @Author 钱豹 - * @Date 23:13 2026/1/30 - * @Param - * @return - * @Description 业务异常 - **/ -public class BusinessException extends BaseException { - public BusinessException(ErrorCode errorCode) { - super(errorCode); - } - public BusinessException(ErrorCode errorCode, String message) { - super(errorCode, message); - } - - public BusinessException(Integer code, String message) { - super(code, message); - } -} - - - diff --git a/src/main/java/com/xly/service/AuthzService.java b/src/main/java/com/xly/service/AuthzService.java index f9715a7..b8d0736 100644 --- a/src/main/java/com/xly/service/AuthzService.java +++ b/src/main/java/com/xly/service/AuthzService.java @@ -43,12 +43,6 @@ public class AuthzService { this.jdbc = jdbc; } - /** 当前有效用户(本地=dev-login)能否访问该菜单/表单 id。 */ - public boolean canAccessModule(String moduleId) { - Set granted = grantedIds(resolveDevUserId(), devUserType, devBrand, devSub); - return isAllowed(granted, moduleId); - } - /** * 构造 dev-login(本地开发)身份:token 为空 → ErpClient 回退 dev-login;权限集按 dev 账号解析 * (admin → null = 全部)。 @@ -56,21 +50,21 @@ public class AuthzService { public com.xly.agent.AgentIdentity devIdentity() { String uid = devUserIdOverride != null && !devUserIdOverride.isBlank() ? devUserIdOverride : resolveDevUserId(); Set granted = grantedIds(uid, devUserType, devBrand, devSub); - return new com.xly.agent.AgentIdentity(null, uid, devUserNo, devBrand, devSub, devUserType, granted); + return new com.xly.agent.AgentIdentity(null, uid, devBrand, granted); } /** * 构造透传的真实用户身份:token = 用户浏览器里的 ERP 登录 token(转发给 ERP),权限集按该用户 * 真实授权({@code sAuthsId})解析。用于生产环境按各用户真实权限收紧。 */ - public com.xly.agent.AgentIdentity userIdentity(String token, String userId, String userNo, + public com.xly.agent.AgentIdentity userIdentity(String token, String userId, String brandsId, String subsidiaryId, String userType) { Set granted = grantedIds(userId, userType, brandsId, subsidiaryId); - return new com.xly.agent.AgentIdentity(token, userId, userNo, brandsId, subsidiaryId, userType, granted); + return new com.xly.agent.AgentIdentity(token, userId, brandsId, granted); } /** null = 全部(管理员);否则 = 有权的 id 集合。 */ - public Set grantedIds(String userId, String userType, String brandsId, String subsidiaryId) { + private Set grantedIds(String userId, String userType, String brandsId, String subsidiaryId) { if (isAdmin(userType)) { return null; // 超管全部权限 } @@ -118,18 +112,6 @@ public class AuthzService { return ids; } - public boolean isAllowed(Set granted, String... ids) { - if (granted == null) { - return true; // 管理员 - } - for (String id : ids) { - if (id != null && granted.contains(id)) { - return true; - } - } - return false; - } - private String resolveDevUserId() { return queryStr("SELECT sId FROM gdslogininfo WHERE sUserNo=? AND sBrandsId=? LIMIT 1", devUserNo, devBrand); } diff --git a/src/main/java/com/xly/service/FormResolverService.java b/src/main/java/com/xly/service/FormResolverService.java index 1568f22..f699662 100644 --- a/src/main/java/com/xly/service/FormResolverService.java +++ b/src/main/java/com/xly/service/FormResolverService.java @@ -83,19 +83,6 @@ public class FormResolverService { "ORDER BY iFormUses DESC LIMIT 1", table); } - /** 字段中文名 -> 技术列名(先精确、再模糊)。 */ - public String resolveField(String table, String fieldChinese) { - String f = queryOne( - "SELECT sField FROM viw_kg_field_dict WHERE sTable=? AND sChinese=? ORDER BY iFormUses DESC LIMIT 1", - table, fieldChinese.trim()); - if (f == null) { - f = queryOne( - "SELECT sField FROM viw_kg_field_dict WHERE sTable=? AND sChinese LIKE ? ORDER BY iFormUses DESC LIMIT 1", - table, "%" + fieldChinese.trim() + "%"); - } - return f; - } - // ERP 会自动注入 / 系统管理、不该让用户填的列(新增时排除)。 private static final Set SYS_EXACT = Set.of( "sId", "sBrandsId", "sSubsidiaryId", "sMakePerson", "sFormId", "sBillNo", "iIncrement", "iOrder", diff --git a/src/main/java/com/xly/service/SystemPromptService.java b/src/main/java/com/xly/service/SystemPromptService.java index 2f70b84..b3dd116 100644 --- a/src/main/java/com/xly/service/SystemPromptService.java +++ b/src/main/java/com/xly/service/SystemPromptService.java @@ -34,11 +34,6 @@ public class SystemPromptService { + "不要复述你在调用哪个工具、不要输出思考过程或过程性旁白。\n\n" + "你是「小羚羊」,小羚羊印刷 ERP 的智能助手,服务印刷/包装行业的企业用户,帮他们查询和操作 ERP 业务单据。\n"; - /** 兼容旧入口:默认给 FULL 版。 */ - public String buildSystemPrompt() { - return buildPrompt(ToolScope.FULL); - } - public String buildPrompt(ToolScope scope) { switch (scope) { case READ: diff --git a/src/main/java/com/xly/tool/FormCollectTool.java b/src/main/java/com/xly/tool/FormCollectTool.java index 36f7a6c..761e693 100644 --- a/src/main/java/com/xly/tool/FormCollectTool.java +++ b/src/main/java/com/xly/tool/FormCollectTool.java @@ -2,7 +2,6 @@ package com.xly.tool; import com.fasterxml.jackson.databind.ObjectMapper; import com.xly.agent.AgentIdentity; -import com.xly.service.ErpClient; import com.xly.service.FormResolverService; import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; @@ -39,8 +38,7 @@ public class FormCollectTool { private final AgentIdentity identity; private final ObjectMapper mapper; - /** {@code erp} 参数保留只为与其它按请求新建的工具签名一致;本工具只读元数据,不打 ERP API。 */ - public FormCollectTool(ErpClient erp, JdbcTemplate jdbc, FormResolverService resolver, + public FormCollectTool(JdbcTemplate jdbc, FormResolverService resolver, AgentIdentity identity, ObjectMapper mapper) { this.jdbc = jdbc; this.resolver = resolver; diff --git a/src/main/java/com/xly/tool/ProposeWriteTool.java b/src/main/java/com/xly/tool/ProposeWriteTool.java index 81d99ff..38ed5e3 100644 --- a/src/main/java/com/xly/tool/ProposeWriteTool.java +++ b/src/main/java/com/xly/tool/ProposeWriteTool.java @@ -625,16 +625,6 @@ public class ProposeWriteTool { return out; } - /** 外键兜底:该列现有的最常见非空值。列名来自 KG/info_schema(可信)。 */ - private String commonValue(String table, String col) { - try { - return queryOne("SELECT `" + col + "` FROM `" + table + "` WHERE `" + col + "` IS NOT NULL AND `" + col + - "`<>'' GROUP BY `" + col + "` ORDER BY COUNT(*) DESC LIMIT 1"); - } catch (Exception e) { - return null; - } - } - /** 定位实体的可写主表——统一走 FormResolverService(与 collectForm 同源,含从属/参数表排除)。 */ private Map resolveForm(String entityKeyword) { return resolver.resolveMasterForm(entityKeyword); diff --git a/src/main/java/com/xly/web/AgentChatController.java b/src/main/java/com/xly/web/AgentChatController.java index c940c82..9af1872 100644 --- a/src/main/java/com/xly/web/AgentChatController.java +++ b/src/main/java/com/xly/web/AgentChatController.java @@ -89,7 +89,6 @@ public class AgentChatController { public String conversationId; // 透传的 ERP 会话 token + 稳定身份(前端逐请求带上;token 绝不进 prompt) public String authorization; - public String username; public String brandsid; public String subsidiaryid; public String usertype; @@ -353,7 +352,7 @@ public class AgentChatController { private AgentIdentity resolveIdentity(ChatReq req) { try { if (req.authorization != null && !req.authorization.isBlank()) { - return authz.userIdentity(req.authorization.trim(), req.userid, req.username, + return authz.userIdentity(req.authorization.trim(), req.userid, req.brandsid, req.subsidiaryid, req.usertype); } } catch (Exception e) { -- libgit2 0.22.2