diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/card/BusinessLicenseRecognizeController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/card/BusinessLicenseRecognizeController.java
index fcf49e7..224aa75 100644
--- a/api-web/api-interface/src/main/java/com/heyu/api/controller/card/BusinessLicenseRecognizeController.java
+++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/card/BusinessLicenseRecognizeController.java
@@ -1,36 +1,395 @@
package com.heyu.api.controller.card;
-import com.heyu.api.baidu.handle.certificate.BBusinessLicenseHandle;
-import com.heyu.api.baidu.request.certificate.BBusinessLicenseRequest;
-import com.heyu.api.controller.BaseController;
+import com.heyu.api.controller.AbstractRecognizeController;
+import com.heyu.api.controller.BaiduOcrError;
import com.heyu.api.data.annotation.CacheResult;
+import com.heyu.api.data.annotation.EbAuthentication;
import com.heyu.api.data.annotation.NotIntercept;
-import com.heyu.api.data.utils.ApiR;
+import com.heyu.api.data.constants.ApiConstants;
+import com.heyu.api.data.utils.ImageInputUtils;
+import com.heyu.api.data.utils.ImageInputUtils.ResolvedImageInput;
import com.heyu.api.data.utils.R;
+import com.heyu.api.data.utils.StringUtils;
import com.heyu.api.request.card.BusinessLicenseRecognizeRequest;
+import com.heyu.api.resp.card.BusinessLicenseRecognizeResp;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
+/**
+ * 营业执照识别控制器
+ *
+ * 接口背景:用于商户入驻、企业资质核验、开票信息录入等场景,将营业执照照片自动识别为结构化字段,
+ * 替代人工录入。底层对接百度智能云文字识别「营业执照识别」能力,由本服务完成参数校验、请求转发与字段映射。
+ *
+ *
+ * 支持识别:单位名称、统一社会信用代码、法人、公司类型、组成形式、注册资本、实收资本、经营范围、
+ * 成立日期、核准日期、有效期、登记机关、税务登记号、证件编号、公司地址等核心字段。
+ *
+ *
+ * 百度官方文档
+ *
+ * - 产品文档:营业执照识别
+ * - 接口地址:{@code POST https://aip.baidubce.com/rest/2.0/ocr/v1/business_license}
+ *
+ *
+ * 本服务接口
+ *
+ * - 路径:{@code POST /business/license/recognize}
+ * - Content-Type:{@code application/json}({@code @RequestBody})
+ * - 鉴权:{@link EbAuthentication}(Tencent 鉴权头,见项目网关配置)
+ * - 结果缓存:{@link CacheResult} 命中时不再调用平台,节省计费
+ *
+ *
+ * 请求参数({@link BusinessLicenseRecognizeRequest})
+ *
+ * - imageUrlOrBase64:HTTP(S) 链接或 Base64 字符串,服务端自动识别(支持 jpg/jpeg/png/bmp)
+ *
+ *
+ * 响应结构({@link BusinessLicenseRecognizeResp})
+ *
+ * - 主体:companyName 单位名称 / registerNumber 统一社会信用代码 / companyLegalPerson 法人
+ * - 资本:registerCapital 注册资本 / realCapital 实收资本
+ * - 经营:business 经营范围 / companyType 公司类型 / compositionType 组成形式
+ * - 日期:registerDate 成立日期 / approvalDate 核准日期 / validDateStart 有效期起 / validDateEnd 有效期止
+ * - 其它:companyAddress 地址 / registerOrgan 登记机关 / taxRegisterCode 税务登记号 / certificateNumber 证件编号
+ *
+ * 日期统一格式化为 {@code yyyyMMdd}(如 20250108);"长期"统一返回 {@code 29991231};百度未识别字段("无")统一返回 null。
+ *
+ * 返回约定(重要)
+ *
+ * - 一律 {@code R.ok()};入参校验失败、平台异常、识别结果为空等情况,将说明写入 {@code msg},
+ * {@code data} 可能为空或字段不全(对外不暴露「百度」字样,日志内可排查)
+ * - 入参校验失败时未调用百度、不计费
+ *
+ *
+ * @author heyu
+ * @since 1.0.0
+ * @see BusinessLicenseRecognizeRequest
+ * @see BusinessLicenseRecognizeResp
+ */
@Slf4j
@RestController
@RequestMapping("/business/license")
@NotIntercept
-public class BusinessLicenseRecognizeController extends BaseController {
+public class BusinessLicenseRecognizeController extends AbstractRecognizeController {
- @Autowired
- private BBusinessLicenseHandle bBusinessLicenseHandle;
+ /** 百度营业执照识别 API 路径 */
+ private static final String BUSINESS_LICENSE_URI = "/rest/2.0/ocr/v1/business_license";
- @RequestMapping("/recognize")
+ /** 营业执照识别无 side 概念,统一占位以复用父类上下文 */
+ private static final String SIDE_PLACEHOLDER = "business_license";
+
+ /** 百度对未识别字段返回的占位值,需在映射时清洗为 null */
+ private static final String BAIDU_EMPTY = "无";
+
+ /** "长期"有效期的统一表达 */
+ private static final String LONG_TERM_DATE = "29991231";
+
+ /**
+ * 营业执照识别
+ *
+ * @param request 营业执照识别请求
+ * @return {@link BusinessLicenseRecognizeResp}
+ */
+ @EbAuthentication(tencent = ApiConstants.TENCENT_AUTH)
@CacheResult
- public R recognize(BusinessLicenseRecognizeRequest request) {
- BBusinessLicenseRequest businessLicenseRequest = new BBusinessLicenseRequest();
- businessLicenseRequest.setImageUrl(request.getImageUrl());
- businessLicenseRequest.setImageBase64(request.getImageBase64());
- ApiR