forked from erp-dev/erp
feat: batch update for plate order
This commit is contained in:
59
docs/2025-12-17.md
Normal file
59
docs/2025-12-17.md
Normal file
@@ -0,0 +1,59 @@
|
||||
### 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` 补齐跨表解析与字段属性化提取策略。
|
||||
Reference in New Issue
Block a user