forked from erp-dev/erp
4.0 KiB
4.0 KiB
2025-12-17 工作总结(flower.utils 重构)
目标
- 降低
flower.utils单文件复杂度:将明道云/同步相关能力拆分为可维护的模块化结构。 - 保持向后兼容:不改动现有调用方(例如
api_v1/tasks.py中from 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.pyMingDaoYunClient(aiohttp 异步客户端)get_default_mingdaoyun_client()(复用现有 appKey/sign 的默认构造)
- 新增拉取函数:
flower/utils/mingdaoyun/fetch.pyfetch_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_map与plate_order_related_worksheet_map_cn,便于后续跨表关联查询定位目标表
flower/utils/mingdaoyun/models.py- Pydantic 类型:
Product/Customer/Fabric等 - 通用结构:
MDYRelationItem/MDYAttachmentItem/MDYCollaboratorItem - 开版表类型占位:
MDYPlateOrder(仅用于后续解析阶段)
- Pydantic 类型:
flower/utils/mingdaoyun/parsers.pypick_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_state对BusinessObject.content_type/object_id的强约束与部分“非标准创建路径”不兼容。 - 修复:在
advance_to_next_state内加入“自愈绑定”逻辑:当未绑定/解析不到content_object时,尝试通过business_object.printing_job / plate_order反向一对一关系推断真实业务对象并补齐绑定,再继续推进。 - 结果:
uv run manage.py test api_v1全绿(265 tests,skipped=2,expected failures=1)。
后续建议
- 将明道云
appKey/sign从硬编码迁移到环境变量或 Django settings(避免泄露与便于多环境配置)。 - 在“开版表关联查询”落地时,基于
plate_order_related_worksheet_map(_cn)+fetch_row_by_rowid_from_mingdaoyun补齐跨表解析与字段属性化提取策略。