Files
smart_grid_iot/.trae/specs/add-icc-customer-sync/tasks.md
T

3.4 KiB
Raw Blame History

Tasks

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