1
0
forked from erp-dev/erp
Files
erpnew/docs/2025-12-17.md

4.0 KiB
Raw Blame History

2025-12-17 工作总结flower.utils 重构)

目标

  • 降低 flower.utils 单文件复杂度:将明道云/同步相关能力拆分为可维护的模块化结构。
  • 保持向后兼容:不改动现有调用方(例如 api_v1/tasks.pyfrom flower.utils import fetch_products_from_mingdaoyun)。
  • 为后续“开版数据表”关联查询打基础:沉淀 worksheetId、rowId 查询封装、类型定义与测试。

主要改动

  • flower.utils 目录化(从单文件改为包)

    • 将原 flower/utils.py 拆分为 flower/utils/ 包,并删除旧文件。
    • 新增 flower/utils/__init__.py 作为兼容入口,继续导出原先常用符号。
    • 明道云相关实现统一放到 flower/utils/mingdaoyun/
  • 明道云客户端与拉取函数模块化

    • 新增客户端:flower/utils/mingdaoyun/client.py
      • MingDaoYunClientaiohttp 异步客户端)
      • get_default_mingdaoyun_client()(复用现有 appKey/sign 的默认构造)
    • 新增拉取函数:flower/utils/mingdaoyun/fetch.py
      • fetch_products_from_mingdaoyun / fetch_customers_from_mingdaoyun(保持原行为)
      • fetch_plate_orders_from_mingdaoyun:开版表拉取(先返回原始 rows dict不做字段映射
      • fetch_row_by_rowid_from_mingdaoyun:按 rowId 等值 filters 查询单条记录(后续关联表查询的通用工具)
  • 明道云映射与类型定义沉淀

    • flower/utils/mingdaoyun/mappings.py
      • 维护 worksheetId 常量与映射:产品/客户/面料/开版表
      • 补充开版表关联数据 worksheetId画图/调色/套纸样/改图/配色/照图开发
      • 新增 plate_order_related_worksheet_mapplate_order_related_worksheet_map_cn,便于后续跨表关联查询定位目标表
    • flower/utils/mingdaoyun/models.py
      • Pydantic 类型:Product/Customer/Fabric
      • 通用结构:MDYRelationItem/MDYAttachmentItem/MDYCollaboratorItem
      • 开版表类型占位:MDYPlateOrder(仅用于后续解析阶段)
    • flower/utils/mingdaoyun/parsers.py
      • pick_product/pick_customer/pick_fabric:保持现有同步风格的字段提取方法

测试与质量保障(与 utils 重构直接相关)

  • 新增独立单元测试api_v1/test_mingdaoyun_utils.py
    • 使用 mock避免真实网络请求。
    • 覆盖:
      • pick_* 解析与类型转换
      • fetch_* 请求 payload 组装与返回解析
      • fetch_row_by_rowid_from_mingdaoyun(以产品表 spmx 为例的 rowId 查询)
      • MingDaoYunClient.post 的认证参数合并与 header 透传
  • 运行方式(项目约定):
    • uv run python manage.py test api_v1.test_mingdaoyun_utils

配套改动(为开版同步做隔离暂存,不影响业务数据)

  • 新增暂存模型api_v1.models.MDYPlateOrderStaging
    • 仅保留mdy_rowid(唯一 + 索引)与 raw(JSON)(整行原始数据)
    • 迁移:api_v1/migrations/0004_mdy_plate_order_staging.py
    • admin 注册:api_v1/admin.py

穿插的测试修复(独立简述)

  • 问题api_v1 打印相关测试大量失败,根因是 stateflow.services.advance_to_next_stateBusinessObject.content_type/object_id 的强约束与部分“非标准创建路径”不兼容。
  • 修复:在 advance_to_next_state 内加入“自愈绑定”逻辑:当未绑定/解析不到 content_object 时,尝试通过 business_object.printing_job / plate_order 反向一对一关系推断真实业务对象并补齐绑定,再继续推进。
  • 结果uv run manage.py test api_v1 全绿(265 testsskipped=2expected failures=1)。

后续建议

  • 将明道云 appKey/sign 从硬编码迁移到环境变量或 Django settings避免泄露与便于多环境配置
  • 在“开版表关联查询”落地时,基于 plate_order_related_worksheet_map(_cn) + fetch_row_by_rowid_from_mingdaoyun 补齐跨表解析与字段属性化提取策略。