# 业务处理阶段说明 ## 阶段概述 业务处理阶段是网关调度的核心业务逻辑执行环节,负责创建数据流、加载配置、权限校验并最终调用下游微服务。通过ApiServiceSMOImpl实现完整的业务处理流程。 ## 核心组件 - **ApiServiceSMOImpl**: 业务处理核心实现类 - **ApiDataFlow**: 数据流处理对象 - **AppService**: 应用服务配置 - **dealCmd方法**: 微服务调用方法 ## 处理流程 ### 1. 数据流创建 - 创建ApiDataFlow数据流对象 - 初始化请求数据和头信息 - 设置业务处理上下文 ### 2. 配置加载 - 加载应用路由配置信息 - 根据服务编码找到对应的AppService - 解析服务映射关系 ### 3. 权限校验 - 在业务层面进行最终权限验证 - 验证用户在当前业务上下文中的权限 - 检查数据权限范围 ### 4. 微服务调用 - 通过dealCmd方法调用下游微服务 - 传递数据流对象到业务系统 - 处理业务逻辑执行 ## 代码示例 ### ApiServiceSMOImpl核心实现 ```java @Component public class ApiServiceSMOImpl implements IApiServiceSMO { @Override public ResponseEntity service(String reqJson, Map headers) { try { // 1. 创建数据流对象 ApiDataFlow dataFlow = new ApiDataFlow(); dataFlow.setReqData(reqJson); dataFlow.setHeaders(headers); // 2. 解密请求报文(POST/PUT方法) if (isEncryptedRequest(headers)) { dataFlow.setReqData(decrypt(reqJson, headers)); } // 3. 加载配置信息 loadAppRouteConfig(dataFlow); // 4. 权限校验 validateBusinessPermission(dataFlow); // 5. 调用下游业务系统 return callMicroService(dataFlow); } catch (Exception e) { logger.error("业务处理失败", e); return ResultVo.error("业务处理异常: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } private void loadAppRouteConfig(ApiDataFlow dataFlow) { // 根据服务编码加载应用路由配置 String service = dataFlow.getHeaders().get(CommonConstant.HTTP_SERVICE); AppService appService = appRouteConfig.getAppService(service); dataFlow.setAppService(appService); } private ResponseEntity callMicroService(ApiDataFlow dataFlow) { // 调用下游微服务的dealCmd方法 AppService appService = dataFlow.getAppService(); return appService.dealCmd(dataFlow); } } ``` ### 数据流对象定义 ```java public class ApiDataFlow { private String reqData; // 请求数据 private Map headers; // 请求头信息 private AppService appService; // 应用服务配置 private Object responseData; // 响应数据 // getter和setter方法 } ``` ### 应用服务配置 ```java public class AppService { private String serviceCode; // 服务编码 private String serviceName; // 服务名称 private String targetService; // 目标服务 private String targetMethod; // 目标方法 public ResponseEntity dealCmd(ApiDataFlow dataFlow) { // 调用具体微服务的业务逻辑 // 返回处理结果 } } ``` ## 关键配置 ### 服务编码映射配置 ```yaml app-routes: services: user.listUser: targetService: service-user targetMethod: listUser community.queryCommunities: targetService: service-community targetMethod: queryCommunities ``` ### 数据流配置 ```java // 数据流处理配置 dataFlow.setTimeout(30000); // 超时时间30秒 dataFlow.setRetryCount(3); // 重试次数 ``` ## 业务处理机制 ### 1. 服务编码解析 - 解析 `资源.操作` 格式的服务编码 - 映射到具体的微服务和操作方法 - 支持服务版本管理 ### 2. 请求数据解密 - 对加密的POST/PUT请求进行解密 - 支持多种加密算法 - 密钥管理机制 ### 3. 配置动态加载 - 支持热更新的路由配置 - 服务发现和负载均衡 - 故障转移机制 ### 4. 业务权限验证 - 验证用户在具体业务中的权限 - 数据权限范围控制 - 业务规则校验 ## 异常处理 ### 配置加载异常 ```java try { loadAppRouteConfig(dataFlow); } catch (InitConfigDataException e) { logger.error("配置加载失败", e); return ResultVo.error("服务配置异常", HttpStatus.INTERNAL_SERVER_ERROR); } ``` ### 业务权限异常 ```java try { validateBusinessPermission(dataFlow); } catch (BusinessPermissionException e) { logger.error("业务权限验证失败", e); return ResultVo.error("业务权限不足", HttpStatus.FORBIDDEN); } ``` ### 微服务调用异常 ```java try { return callMicroService(dataFlow); } catch (ServiceTimeoutException e) { logger.error("服务调用超时", e); return ResultVo.error("服务响应超时", HttpStatus.REQUEST_TIMEOUT); } ``` ## 技术要点 1. **数据流模式**: 通过ApiDataFlow对象传递处理上下文 2. **配置驱动**: 基于配置的服务路由机制 3. **插件架构**: 支持可扩展的业务处理插件 4. **事务管理**: 分布式事务支持 ## 性能优化 - 路由配置缓存 - 连接池复用 - 请求数据压缩 - 异步处理支持