39 lines
3.4 KiB
Markdown
39 lines
3.4 KiB
Markdown
# Tasks
|
||
|
||
- [x] Task 1: customer 表新增 icc_code 字段(数据库层)
|
||
- [x] 新建迁移文件 `database/migrations/20261016_icc_customer_sync.sql`:`ALTER TABLE customer ADD COLUMN icc_code`(幂等)+ 唯一索引
|
||
- [x] 同步更新 `database/db_init.sql` 中 customer 建表结构(含 icc_code 与唯一索引),保持幂等一致
|
||
- [x] Task 2: customer 实体新增 iccCode 字段
|
||
- [x] `server/src/entity/customer.entity.ts` 增加 `iccCode`(STRING(64),field=icc_code,不设 unique 避免与迁移脚本索引重复)
|
||
- [x] Task 3: ICC OAuth2 鉴权客户端
|
||
- [x] 封装公钥获取(GET `/evo-apigw/evo-oauth/{version}/oauth/public-key`)
|
||
- [x] 封装 RSA/ECB/PKCS1 分块加密(Node `crypto.publicEncrypt`,块长 117,Base64 输出,对齐文档 Java 示例)— 已冒烟验证加解密往返一致
|
||
- [x] 封装 token 获取(POST `/evo-apigw/evo-oauth/{version}/oauth/extend/token`),进程内缓存 access_token,按 expires_in 过期自动续签
|
||
- [x] Task 4: ICC 客户字段映射器
|
||
- [x] `server/src/task/icc_customer_mapper.ts`:集中配置接口端点、org_base 过滤条件、字段映射(orgCode→iccCode、orgName→customerName、province/city/county)、PageVO 解析 — 修复读取 bug 后冒烟验证通过
|
||
- [x] Task 5: IccCustomerSyncService 同步服务
|
||
- [x] `server/src/service/icc_customer_sync.service.ts`:读取 `.env` 配置(缺失视为失败仅记日志)
|
||
- [x] 分页全量拉取(maxRangeId=0,pageSize=1000,循环至末页),过滤 orgType=org_base
|
||
- [x] 预取现有客户 icc_code 映射,按 iccCode 幂等 upsert:先比较 customer_name/province/city/district 四个映射字段,仅任一字段不一致才 update,一致则跳过;新增客户复用 CustomerService.generateCustomerNo(已改 public,KH+YYYYMMDD+3位序号);其余字段(status/salesman_id/联系方式等)不动
|
||
- [x] 每次同步写 `icc_sync_log`(sync_type=customer,status/record_count/error_message);失败仅记录不抛出
|
||
- [x] Task 6: 定时任务注册与调度器接线
|
||
- [x] `server/src/task/icc_customer_sync.task.ts`:jobKey=`icc_customer_sync`,默认 cron `*/10 * * * *`
|
||
- [x] `server/src/task/job_registry.ts`:注册到 BUILTIN_JOBS,JobRuntime 增加 syncIccCustomers
|
||
- [x] `server/src/service/job_scheduler.service.ts`:buildRuntime 增加 `syncIccCustomers`,经匿名上下文注入 IccCustomerSyncService
|
||
- [x] `database/db_seed.sql` 新增 sys_job 种子(job_key=icc_customer_sync,按 job_key 幂等)
|
||
- [x] Task 7: .env 配置
|
||
- [x] `server/.env` 增加 ICC_BASE_URL / ICC_VERSION / ICC_CLIENT_ID / ICC_CLIENT_SECRET / ICC_USERNAME / ICC_PASSWORD(凭据取自接口文档)
|
||
- [x] Task 8: 编译与运行验证
|
||
- [x] `server` 目录执行 `yarn build` 通过(修复 mapper 后复验通过)
|
||
- [x] 冒烟验证:RSA 分块加解密往返一致、映射器字段映射与分页解析正确(无副作用,未连库);端到端写库同步需在部署环境首次执行时由真实 ICC 接口 + 数据库实际确认
|
||
|
||
# Task Dependencies
|
||
- [Task 1] 无依赖,可先行
|
||
- [Task 2] 依赖 [Task 1](字段定义与库结构一致)
|
||
- [Task 3] 无依赖,可与 [Task 1] 并行
|
||
- [Task 4] 依赖 [Task 3](需确认响应结构/鉴权头),也可并行开发
|
||
- [Task 5] 依赖 [Task 1][Task 2][Task 3][Task 4]
|
||
- [Task 6] 依赖 [Task 5]
|
||
- [Task 7] 依赖 [Task 3](凭据键名一致),可并行
|
||
- [Task 8] 依赖全部前置任务
|