Files
ccdi/docs/reports/implementation/2026-07-29-xinhua-enterprise-profile-implementation.md

71 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 新华社工商信息同步接入实施报告
## 1. 实施结果
已按同步接口契约完成新华社工商信息接入。开发环境通过 FastAPI Mock 联调,生产配置保留真实接口地址;代码、配置和 Mock 均未实现 `LSFXXHSResult``LSFXXHSstockrelation`
## 2. 主要改动
### 外部接口与日志
- `ccdi-lsfx` 新增新华社同步客户端、同步响应模型和不可变 `CallerContext`
- 重构共享 HTTP 工具统一记录调用人、URL、方法、请求头和参数、HTTP 状态、响应头、原始响应、异常堆栈和耗时。
- `sys_api_log` 使用独立事务写入HTTP 200 的业务失败仍按传输成功保存,业务失败信息保留在原始响应中。
- 恢复只读接口日志列表、详情 API 和页面,无删除、清空、导出能力。
### 缓存、解析与实体库
- 新增 180 天成功缓存,缓存保存同步接口完整原始 JSON。
- 新增工商字段解析、实体完整股东表和股东整体替换。
- 实体新增、导入、关系自动补全及名称变化后,在原事务提交后异步同步。
- 单批按企业名称去重,返回 `creditCode` 仅回写主键完全匹配的实体;同名不匹配实体保持不变。
- 手工刷新和历史补全使用 Redis 状态,不增加任务表。
### 项目对手方
- 新增项目对手方企业、股东、详情、刷新和历史补全能力。
- 流水上传、平台拉取及历史导入完成后按项目当前对手方集合 reconcile。
- 查询按每批 100 条执行,新华社查询共用最大并发数 3 的执行器。
- 项目删除直接清理项目工商数据,流水删除后按剩余流水同步,空集合不外呼。
### 前端与 Mock
- 实体详情新增注册资本、注册日期、区域、从业人数、同步时间和完整股东表。
- 流水对手方名称可打开本地工商详情,仅无数据或缓存过期时显示重新查询。
- Mock 覆盖公司、个体、空股东、多股东、HTTP 失败、超时、空响应、非法 JSON、外层失败、业务失败、结果缺失、名称不一致和信用代码缺失。
## 3. 数据库实施
- 新增迁移:`sql/migration/2026-07-29-xinhua-enterprise-profile.sql`
- 已通过 `bin/mysql_utf8_exec.sh` 连续执行两次,均成功。
- 已核对 5 张新增或校准表均为 `utf8mb4_general_ci`
- 已核对缓存 `query_result``LONGTEXT`,缓存唯一键为 `(query_param, query_type)`,项目唯一键为 `(project_id, counterparty_name)`
- 已核对实体工商扩展字段、菜单权限和管理员角色权限落库。
## 4. 自动化验证
- `python3 -m pytest tests/test_enterprise_api.py -v`:新华社 Mock 专项 4 项通过。
- `mvn -pl ccdi-info-collection -am test`构建成功覆盖新华社客户端、HTTP 日志、字段解析和信息采集模块回归。
- 项目模块定向测试53 项通过,覆盖上传、拉取、历史导入、项目删除及调用人传递。
- `mvn -pl ccdi-project -am -DskipTests compile`:构建成功。
- 前端在 Node 14.21.3 下执行 `npm run build:prod`:构建成功。
- `git diff --check`:通过。
全量项目测试当前仍有 3 个失败和 1 个错误,均位于既有结果总览和银行标签基线断言:按钮文案、规则数量、`modelParamService` 结构断言及对应未配置 Mock。本次新增链路的定向测试均通过未修改这些无关基线。
Mock 子项目全量 99 项测试为 75 项通过、24 项失败;失败用例均属于既有流水 Mock 链路,原因是测试尝试使用账号 `znsj` 从当前宿主连接 MySQL 时被拒绝。新华社工商专项 4 项不依赖该连接并全部通过。
## 5. 应用内浏览器验收
- 实体库真实页面成功展示接口返回的统一社会信用代码、注册资本、日期、区域、从业人数及 7 条完整股东。
- 新增同名但不同信用代码的实体后,确认该实体保持手工数据且无股东回写;缓存命中后新华社日志仍为 1 条。
- 补充验证同名未同步实体即使存在有效缓存仍可发起刷新,并明确返回“工商信用代码与实体主键不一致”;项目无本地记录时可复用有效缓存补齐,两种缓存命中均不新增接口日志。
- 流水明细真实页面确认对手方名称为本地详情入口,打开弹窗不触发新华社;无数据时显示重新查询。
- 对手方手工刷新后展示接口返回的信用代码、结构化工商字段和完整股东。
- 接口日志真实页面确认每次缓存未命中对应一条日志,详情包含调用账号、表单参数、`CCDI_GS_时间戳_UUID`、HTTP 状态、响应头和原始 JSON。
- 联调业务数据已清理;接口历史日志按设计保留。
## 6. 上线要求
生产环境不得配置或恢复异步结果查询。上线先使用一个已知企业完成单次烟测,逐项确认单次外呼、单条日志、原始缓存、`creditCode` 和股东落库一致;确认后才能启动实体和项目历史补全,失败时停止上线。