75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # 组合包处理器说明
 | |||
|  | 
 | |||
|  | ## 🚀 动态组合包机制
 | |||
|  | 
 | |||
|  | 从现在开始,组合包支持**动态处理机制**,大大简化了组合包的开发和维护工作。 | |||
|  | 
 | |||
|  | ## 📋 工作原理
 | |||
|  | 
 | |||
|  | ### 1. 自动识别
 | |||
|  | - 所有以 `COMB` 开头的API编码会被自动识别为组合包 | |||
|  | - 系统会自动调用通用组合包处理器处理请求 | |||
|  | 
 | |||
|  | ### 2. 处理流程
 | |||
|  | 1. **优先级检查**:首先检查是否有注册的自定义处理器 | |||
|  | 2. **通用处理**:如果没有自定义处理器,且API编码以COMB开头,使用通用处理器 | |||
|  | 3. **数据库驱动**:根据数据库中的组合包配置自动调用相应的子产品处理器 | |||
|  | 
 | |||
|  | ## 🛠️ 使用方式
 | |||
|  | 
 | |||
|  | ### 普通组合包(无自定义逻辑)
 | |||
|  | **只需要在数据库配置,无需编写任何代码!** | |||
|  | 
 | |||
|  | 1. 在 `products` 表中创建组合包产品: | |||
|  |    ```sql | |||
|  |    INSERT INTO products (code, name, is_package, ...)  | |||
|  |    VALUES ('COMB1234', '新组合包', true, ...); | |||
|  |    ``` | |||
|  | 
 | |||
|  | 2. 在 `product_package_items` 表中配置子产品: | |||
|  |    ```sql | |||
|  |    INSERT INTO product_package_items (package_id, product_id, sort_order)  | |||
|  |    VALUES  | |||
|  |    ('组合包产品ID', '子产品1ID', 1), | |||
|  |    ('组合包产品ID', '子产品2ID', 2); | |||
|  |    ``` | |||
|  | 
 | |||
|  | 3. **直接调用**:无需任何额外编码,API立即可用! | |||
|  | 
 | |||
|  | ### 自定义组合包(有特殊逻辑)
 | |||
|  | 如果需要对组合包结果进行后处理,才需要编写代码: | |||
|  | 
 | |||
|  | 1. **创建处理器文件**:`combXXXX_processor.go` | |||
|  | 2. **注册处理器**:在 `api_request_service.go` 中注册 | |||
|  | 3. **实现自定义逻辑**:在处理器中实现特殊业务逻辑 | |||
|  | 
 | |||
|  | ## 📁 现有组合包示例
 | |||
|  | 
 | |||
|  | ### COMB86PM(自定义处理器)
 | |||
|  | ```go | |||
|  | // 有自定义逻辑:重命名子产品ApiCode | |||
|  | for _, resp := range combinedResult.Responses { | |||
|  |     if resp.ApiCode == "FLXGBC21" { | |||
|  |         resp.ApiCode = "FLXG54F5" | |||
|  |     } | |||
|  | } | |||
|  | ``` | |||
|  | 
 | |||
|  | ### COMB298Y(通用处理器)
 | |||
|  | - **无需编码**:已删除专门的处理器文件 | |||
|  | - **自动处理**:通过数据库配置自动工作 | |||
|  | 
 | |||
|  | ## ✅ 优势
 | |||
|  | 
 | |||
|  | 1. **零配置**:普通组合包只需数据库配置,无需编码 | |||
|  | 2. **灵活性**:特殊需求仍可通过自定义处理器实现 | |||
|  | 3. **维护性**:减少重复代码,统一处理逻辑 | |||
|  | 4. **扩展性**:新增组合包极其简单,配置即用 | |||
|  | 
 | |||
|  | ## 🔧 开发建议
 | |||
|  | 
 | |||
|  | 1. **优先使用通用处理器**:除非有特殊业务逻辑,否则不要编写自定义处理器 | |||
|  | 2. **命名规范**:组合包编码必须以 `COMB` 开头 | |||
|  | 3. **数据库配置**:确保组合包在数据库中正确配置了 `is_package=true` 和子产品关系 | |||
|  | 4. **排序控制**:通过 `sort_order` 字段控制子产品在响应中的顺序 |