# 业务处理阶段说明

## 阶段概述
业务处理阶段是网关调度的核心业务逻辑执行环节，负责创建数据流、加载配置、权限校验并最终调用下游微服务。通过ApiServiceSMOImpl实现完整的业务处理流程。

## 核心组件
- **ApiServiceSMOImpl**: 业务处理核心实现类
- **ApiDataFlow**: 数据流处理对象
- **AppService**: 应用服务配置
- **dealCmd方法**: 微服务调用方法

## 处理流程

### 1. 数据流创建
- 创建ApiDataFlow数据流对象
- 初始化请求数据和头信息
- 设置业务处理上下文

### 2. 配置加载
- 加载应用路由配置信息
- 根据服务编码找到对应的AppService
- 解析服务映射关系

### 3. 权限校验
- 在业务层面进行最终权限验证
- 验证用户在当前业务上下文中的权限
- 检查数据权限范围

### 4. 微服务调用
- 通过dealCmd方法调用下游微服务
- 传递数据流对象到业务系统
- 处理业务逻辑执行

## 代码示例

### ApiServiceSMOImpl核心实现
```java
@Component
public class ApiServiceSMOImpl implements IApiServiceSMO {
    
    @Override
    public ResponseEntity<String> service(String reqJson, Map<String, String> 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<String> callMicroService(ApiDataFlow dataFlow) {
        // 调用下游微服务的dealCmd方法
        AppService appService = dataFlow.getAppService();
        return appService.dealCmd(dataFlow);
    }
}
```

### 数据流对象定义
```java
public class ApiDataFlow {
    private String reqData;           // 请求数据
    private Map<String, String> 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<String> 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. **事务管理**: 分布式事务支持

## 性能优化
- 路由配置缓存
- 连接池复用
- 请求数据压缩
- 异步处理支持