diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/BaiduOcrErrorCode.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/BaiduOcrErrorCode.java new file mode 100644 index 0000000..ebab88e --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/BaiduOcrErrorCode.java @@ -0,0 +1,168 @@ +package com.heyu.api.controller; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + +/** + * 百度 OCR 平台全部错误码枚举。 + *
+ * 数据来源:百度 OCR 错误码文档 + *
+ *+ * 每个枚举项包含百度官方的 {@link #code}(错误码)、{@link #errorMsg}(英文错误信息) + * 和 {@link #description}(中文描述),方便本地校验场景仿照百度格式统一返回。 + *
+ * + *
+ * BaiduOcrErrorCode errorCode = BaiduOcrErrorCode.EMPTY_IMAGE;
+ * result.setCode(errorCode.getCode());
+ * result.setMsg(errorCode.getErrorMsg());
+ *
+ * // 根据百度返回的错误码查找
+ * BaiduOcrErrorCode fromPlatform = BaiduOcrErrorCode.fromCode("216200");
+ *
+ *
+ * @author zhengli
+ * @since 20260610_zl
+ */
+public enum BaiduOcrErrorCode {
+
+ // ===================== 系统级错误(1~19) =====================
+
+ UNKNOWN("1", "Unknown error", "未知错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队"),
+ SERVICE_UNAVAILABLE("2", "Service temporarily unavailable", "服务暂不可用,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队"),
+ UNSUPPORTED_METHOD("3", "Unsupported openapi method", "调用的API不存在,请检查请求URL后重新尝试"),
+ CLUSTER_LIMIT("4", "Open api request limit reached", "集群超限额,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队"),
+ NO_PERMISSION("6", "No permission to access data", "无接口调用权限,创建应用时未勾选相关文字识别接口"),
+ IAM_CERT_FAILED("14", "IAM Certification failed", "IAM鉴权失败,建议用户参照文档自查生成sign的方式是否正确"),
+ DAILY_LIMIT("17", "Open api daily request limit reached", "免费测试资源使用完毕,每天请求量超限额"),
+ QPS_LIMIT("18", "Open api qps request limit reached", "QPS超限额"),
+ TOTAL_LIMIT("19", "Open api total request limit reached", "请求总量超限额"),
+
+ // ===================== 鉴权错误(100~111) =====================
+
+ INVALID_PARAMETER("100", "Invalid parameter", "无效的access_token参数,token拉取失败"),
+ ACCESS_TOKEN_INVALID("110", "Access token invalid or no longer valid", "access_token无效"),
+ ACCESS_TOKEN_EXPIRED("111", "Access token expired", "access token过期"),
+
+ // ===================== 业务参数错误(216xxx) =====================
+
+ INVALID_PARAM("216100", "invalid param", "请求中包含非法参数,请检查后重新尝试"),
+ NOT_ENOUGH_PARAM("216101", "not enough param", "缺少必须的参数,请检查参数是否有遗漏"),
+ SERVICE_NOT_SUPPORT("216102", "service not support", "请求了不支持的服务,请检查调用的url"),
+ PARAM_TOO_LONG("216103", "param too long", "请求中某些参数过长,请检查后重新尝试"),
+ APPID_NOT_EXIST("216110", "appid not exist", "appid不存在,请重新核对信息"),
+
+ // ===================== 影像相关错误(2162xx) =====================
+
+ EMPTY_IMAGE("216200", "empty image", "图片为空,请检查后重新尝试"),
+ IMAGE_FORMAT_ERROR("216201", "image format error", "上传的图片格式错误,现阶段支持 PNG、JPG、JPEG、BMP"),
+ IMAGE_SIZE_ERROR("216202", "image size error", "上传的图片大小错误"),
+ INPUT_OVERSIZE("216205", "input oversize", "传入的请求体大小错误"),
+
+ // ===================== 文件/上传错误(2163xx) =====================
+
+ UPLOAD_FILE_ERROR("216306", "Upload file error", "上传文件失败,请检查提交请求接口的请求参数"),
+ IMAGE_ANALYSIS_ERROR("216307", "image analysis error", "请求数据解析异常,图片数据解析加载失败"),
+ PDF_FILE_NUM_EXCEED("216308", "Pdf_file_num exceeds the number of pdf pages", "参数pdf_file_num大于PDF文件实际页数"),
+
+ // ===================== 任务错误(2164xx) =====================
+
+ CREATE_TASK_FAILED("216401", "Create task failed", "提交请求失败"),
+ QUERY_TASK_FAILED("216402", "Query task failed", "获取结果失败"),
+
+ // ===================== PDF/配额错误(2166xx) =====================
+
+ CHECK_PDF_FAILED("216603", "Check pdf page num failed", "获取PDF文件页数失败"),
+ INSUFFICIENT_QUOTA("216604", "Insufficient available quota", "请求总量超限额"),
+ RECOGNIZE_ERROR("216630", "recognize error", "识别错误,请再次请求"),
+ RECOGNIZE_BANK_CARD_ERROR("216631", "recognize bank card error", "识别银行卡错误"),
+ RECOGNIZE_IDCARD_ERROR("216633", "recognize idcard error", "识别身份证错误"),
+ DETECT_ERROR("216634", "detect error", "检测错误,请再次请求"),
+
+ // ===================== 企业核验错误(216600~216602) =====================
+
+ BUSINESS_VERIFY_FAILED("216600", "business verify failed", "企业核验相关服务请求失败"),
+ BUSINESS_VERIFY_EMPTY("216601", "business verify result empty", "企业核验相关服务查询成功,但无查询结果"),
+ BUSINESS_VERIFY_TIMEOUT("216602", "business verify timeout", "企业核验相关服务接口超时"),
+
+ // ===================== 引擎内部错误(282xxx) =====================
+
+ INTERNAL_ERROR("282000", "internal error", "服务器内部错误"),
+ MISSING_PARAMETERS("282003", "missing parameters", "请求参数缺失"),
+ BATCH_PROCESSING_ERROR("282005", "batch processing error", "处理批量任务时发生部分或全部错误"),
+ BATCH_TASK_LIMIT("282006", "batch task limit reached", "批量任务处理数量超出限制"),
+ IMAGE_TRANSCODE_ERROR("282100", "image transcode error", "图片压缩转码错误"),
+ TARGET_DETECT_ERROR("282102", "target detect error", "未检测到图片中识别目标"),
+ TEMPLATE_MATCH_ERROR("282103", "recognize error, failed to match the template", "图片目标识别错误"),
+
+ // ===================== URL 相关错误(2821xx) =====================
+
+ URLS_NOT_EXIT("282110", "urls not exit", "URL参数不存在,请核对URL后再次提交"),
+ URL_FORMAT_ILLEGAL("282111", "url format illegal", "URL格式非法"),
+ URL_DOWNLOAD_TIMEOUT("282112", "url download timeout", "url下载超时"),
+ URL_RESPONSE_INVALID("282113", "url response invalid", "URL返回无效参数"),
+ URL_SIZE_ERROR("282114", "url size error", "URL长度超过1024字节或为0"),
+ IMAGE_FETCH_FAILED("282115", "image fetch failed", "通过URL获取图片失败"),
+
+ // ===================== 增值税发票验真错误(282134) =====================
+
+ OFFICIAL_WEB_EXCEPTION("282134", "officialWeb service exception", "国税局端网络超时"),
+
+ // ===================== 异步任务错误(2828xx) =====================
+
+ REQUEST_ID_NOT_EXIST("282808", "request id not exist", "request id 不存在"),
+ RESULT_TYPE_ERROR("282809", "result type error", "返回结果请求错误"),
+ IMAGE_RECOGNIZE_ERROR("282810", "image recognize error", "图像识别错误"),
+
+ // ===================== 行驶证核验错误(2821xx) =====================
+
+ DRIVING_LICENSE_RESOURCE_OVERRUN("282160", "driving license backend resource overrun", "后端资源超限"),
+ DRIVING_LICENSE_TOO_FREQUENT("282161", "driving license requests too frequently", "请求过于频繁"),
+ ;
+
+ private final String code;
+ private final String errorMsg;
+ private final String description;
+
+ private static final Mapdoc_classify 的 words_result 是 List,与 OCR 识别的 Map 结构不同,
diff --git a/api-web/api-interface/src/test/java/com/heyu/api/controller/doc/DocClassifyControllerTest.java b/api-web/api-interface/src/test/java/com/heyu/api/controller/doc/DocClassifyControllerTest.java
index cb26fb0..1bfa788 100644
--- a/api-web/api-interface/src/test/java/com/heyu/api/controller/doc/DocClassifyControllerTest.java
+++ b/api-web/api-interface/src/test/java/com/heyu/api/controller/doc/DocClassifyControllerTest.java
@@ -2,6 +2,7 @@ package com.heyu.api.controller.doc;
import com.ApiInterfaceApplicationTests;
import com.TestConstant;
+import com.heyu.api.controller.BaiduOcrErrorCode;
import com.heyu.api.data.utils.R;
import com.heyu.api.request.doc.DocClassifyRequest;
import com.heyu.api.resp.doc.DocClassifyResp;
@@ -26,33 +27,32 @@ public class DocClassifyControllerTest extends ApiInterfaceApplicationTests {
@Autowired
private DocClassifyController docClassifyController;
- // ===================== 参数校验场景 =====================
+ // ===================== 参数校验场景(仿照百度错误码返回) =====================
/**
* 假设(Given): 不传任何请求参数
* 当(When): 调用 classify 接口
- * 则(Then): 返回 code=200,data 不为 null,msg 含【文档分类·入参绑定失败】
+ * 则(Then): 返回 code=216101,msg=not enough param,data 为空 DocClassifyResp
*/
@Test
void classifyRequestNullTest() {
// Act
- R result = docClassifyController.recognize(null);
+ R