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

60 lines
4.0 KiB
Markdown
Raw Permalink 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.
### 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.py`
- `MingDaoYunClient`aiohttp 异步客户端)
- `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_map``plate_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_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` 补齐跨表解析与字段属性化提取策略。