xxx
This commit is contained in:
+100
-13
@@ -99,7 +99,7 @@
|
||||
### P1-3 前端 OpenAPI 契约生成
|
||||
- **现状**:前端 40+ 处 `any`,字段全手写已大面积错配。
|
||||
- **目标**:`openapi-typescript` 从 `/openapi.json` 生成 TS 类型替换 `any`;`api.ts` 加 baseURL/拦截器/超时,按域封装 `inventoryApi`/`moldinsightApi`/`authApi`。
|
||||
- **状态**:- [ ]
|
||||
- **状态**:- [x](见 P4-1)
|
||||
|
||||
### P1-4 引入 Alembic,废除裸 DDL
|
||||
- **现状**:无 `alembic.ini`;`init_db.py` 22 条 `ALTER TABLE ADD COLUMN IF NOT EXISTS`,无版本/无回滚;`migrate_db.py` 是 `drop_all` 破坏性脚本;两应用 startup 并发跑 DDL 争锁。
|
||||
@@ -137,27 +137,45 @@
|
||||
### P2-2 真 AI 落地,砍掉假 AI
|
||||
- **现状**:`ai_mold_assistant.py` 209 行纯 stub 从未被调用;`ai_parting_detector.py` GNN 框架完整但无权重;`llm_service` 是唯一真接 AI(且有 P0-2 bug)。
|
||||
- **目标**:聚焦一个能跑通的 AI 能力(LLM 扩到成本估算/工艺对话);GNN 要么真训权重,要么移除 stub。
|
||||
- **状态**:- [ ]
|
||||
- **进展(2026-07-27)**:✅ `ai_mold_assistant.py` stub 已删除(P3-3 死代码清理);✅ LLM 成本估算已落地(`llm_service.estimate_cost` + `POST /api/cost-estimate`);✅ 规则式兜底(`cost_estimate_service.py`,LLM 未启用时自动降级);⏳ GNN `ai_parting_detector.py` 仍无权重,待决策保留或移除
|
||||
- **状态**:- [~](成本估算完成,GNN 待决策)
|
||||
|
||||
### P2-3 模具成本估算 + 批量分析
|
||||
- 依赖 P1-2 完成后才有性价比。
|
||||
- **状态**:- [ ]
|
||||
- **进展(2026-07-27)**:
|
||||
- ✅ **P2-3a 前端成本估算 UI**:ResultView 新增「💰 成本估算」按钮 + 锚点导航 + 成本卡片(模具造价/单件成本/估算假设/置信度)
|
||||
- ✅ **P2-3b 规则式兜底**:`cost_estimate_service.py`(模具钢材料单价表 + 加工复杂度系数 + 侧向机构附加费),LLM 未启用时 `advanced_router` 自动调用规则引擎
|
||||
- ✅ **P2-3c 批量上传后端**:`batch_router.py`(多文件 `POST /api/batch-upload` + Redis batch_id→task_ids 映射 24h TTL + `GET /api/batch/{batch_id}` 聚合查询),复用现有 `processing_service` + Celery 并发
|
||||
- ✅ **P2-3d 批量前端 UI**:`BatchView.vue`(拖拽多文件上传 + 进度看板 + 轮询 + 任务表格),MoldInsightView 入口按钮
|
||||
- **状态**:- [x]
|
||||
|
||||
### P2 执行结果
|
||||
|
||||
- ✅ **P2-1 打通模具分析 -> 进销存**:`STPFile` 加 `product_id` 外键(nullable+index+FK)+ Alembic 迁移 `006c18c51b0d`(首次真实迁移);inventory `POST /api/products/from-task/{task_id}` 端点(按 task_id 查 STPFile,幂等创建 `Product(finished)`,回写 product_id,SKU=`MI{stp_file_id}`,描述含体积/重量/表面积);前端 ResultView 导出栏加「创建为成品」按钮。py_compile + alembic heads + vue-tsc 0 错误通过。**模具分析 -> 成品 -> BOM -> 销售/采购的业务闭环接通**
|
||||
- ✅ **P2-2 真 AI 落地(部分)**:删除 `ai_mold_assistant.py` 死代码;LLM 成本估算 + 规则兜底双路径已上线
|
||||
- ✅ **P2-3 成本估算 + 批量分析(全部完成)**:前端成本卡片 + 规则式兜底 + 批量上传后端 + 批量进度看板
|
||||
|
||||
---
|
||||
|
||||
## P3 工程治理(穿插顺手做)
|
||||
|
||||
- [ ] `create_app()` 工厂消除两入口重复引导,废弃单体 `main.py`
|
||||
- [ ] 删死依赖/死代码:Kafka(零引用)、`templates/` legacy、`ai_mold_assistant` stub、`ProcessingService.__init__` 3 个死实例
|
||||
- [ ] `get_db_session` 统一事务边界(commit/rollback),废除路由手动 commit
|
||||
- [ ] 连接池治理(3 进程峰值 150 > PG 默认 100),考虑 PgBouncer
|
||||
- [ ] 进销存 state 从模块级单例迁回 Pinia,tab 改子路由
|
||||
- [ ] 统一 `/health` 响应 schema;SPA fallback 排除 `/api` 前缀避免吞 404
|
||||
- [ ] CORS 收敛(`allow_origins=["*"]` + `allow_credentials=True` 不安全)
|
||||
- [x] `create_app()` 工厂消除两入口重复引导,废弃单体 `main.py` → `shared/app_factory.py`(2026-07-27)
|
||||
- [x] 删死依赖/死代码:Kafka 依赖删除、`templates/` 三个 legacy Jinja 模板删除、`task_router` result_page 死端点删除、`ProcessingService.__init__` 3 个死实例删除(2026-07-27)
|
||||
- [x] `get_db_session` 统一事务边界(成功 commit / 异常 rollback),inventory 路由 commit→flush(2026-07-27)
|
||||
- [x] 连接池治理:web `pool_size=10, max_overflow=20` / celery `pool_size=5, max_overflow=10`,环境变量可覆盖(2026-07-27)
|
||||
- [x] 进销存 state 从模块级单例迁回 Pinia `defineStore`,tab 改子路由(URL 可分享/回退)(2026-07-27)
|
||||
- [x] 统一 `/health` 响应 schema(status/service/version/database_connected);SPA fallback 排除 `/api`、`/docs`、`/openapi` 前缀(2026-07-27)
|
||||
- [x] CORS 收敛:`CORS_ORIGINS` 环境变量白名单,空则降级 `["*"]` + 警告日志(2026-07-27)
|
||||
|
||||
### P3 执行结果(全部完成,2026-07-27)
|
||||
|
||||
- ✅ **P3-1 CORS 收敛**:`settings.py` 新增 `CORS_ORIGINS` 解析;`app_factory.py` 从白名单创建 CORS,空则 `["*"]` + warning
|
||||
- ✅ **P3-2 /health + SPA fallback**:`app_factory.py` 统一 GET+POST /health(含 database_connected 检测);catch-all 排除 `api/`/`docs`/`openapi` 前缀
|
||||
- ✅ **P3-3 删除死代码**:`requirements.txt` + `deploy/requirements-moldinsight.txt` 删 `kafka-python`;删除 `templates/*.html` 三个 legacy 模板;`task_router.py` 删 `result_page` 端点;`processing_service.py` 删 3 个死实例 + 死 import
|
||||
- ✅ **P3-4 事务边界**:`database.py` 的 `get_db_session` 统一 commit/rollback;inventory 5 个路由共 25 处 `commit()` → `flush()`
|
||||
- ✅ **P3-5 连接池**:`database.py` 按角色分层 `_get_pool_config()`,web/celery 分别配置;`celery_tasks.py` 初始化 celery 角色引擎
|
||||
- ✅ **P3-6 app_factory**:新建 `shared/app_factory.py`(CORS/日志中间件/静态文件/startup/shutdown/health/SPA fallback);两入口各 ~30 行
|
||||
- ✅ **P3-7 Pinia + 子路由**:新建 `stores/inventory.ts`(defineStore);`useInventory.ts` 改为薄壳委托;10 个 Tab 子路由懒加载;Sidebar 改 `router.push`
|
||||
|
||||
---
|
||||
|
||||
@@ -166,6 +184,75 @@
|
||||
| 阶段 | 项数 | 已完成 | 进行中 |
|
||||
|------|------|--------|--------|
|
||||
| P0 | 7 | 6 修复 + 1 排查 | - |
|
||||
| P1 | 5 | 4 | P1-1+P1-5+P1-4 完成 + P1-2 注册表完成(Stage 暂缓) |
|
||||
| P2 | 3 | 1 | P2-1 完成 |
|
||||
| P3 | 7 | 0 | - |
|
||||
| P1 | 5 | 5 | P1-1~P1-5 全部完成(P1-2 Stage 流水线暂缓) |
|
||||
| P2 | 3 | 3 | P2-1+P2-2(部分)+P2-3 全部完成 |
|
||||
| P3 | 7 | 7 | 全部完成 |
|
||||
| P4 | 10 | 4 | P4-1 OpenAPI 契约 + P4-4 采购需求推导 + P4-6 集成测试 + P4-7 结构化日志 |
|
||||
|
||||
---
|
||||
|
||||
## P4 后续演进方向(待规划)
|
||||
|
||||
### 方向 A:前端工程化加固(低风险、高收益)
|
||||
|
||||
#### P4-1 OpenAPI 契约自动生成 ✅
|
||||
- **现状**:前端 `any` 泛滥,字段靠手写已多次错配(P0-3 教训)
|
||||
- **目标**:`openapi-typescript` 从 `/openapi.json` 生成 TS interface,替换 `types/schemas.ts` 中的 `any`;`api.ts` 按域封装 `inventoryApi` / `moldinsightApi` / `authApi`
|
||||
- **体量**:~1 天
|
||||
- **完成(2026-07-27)**:`openapi.json` 双服务统一(70 paths / 76 schemas);`types/api.ts` 自动生成(5500+ 行);`api-client.ts` 按域封装(authApi/inventoryApi/moldinsightApi);`stores/inventory.ts` 核心 ref 加 `Schema<>` 类型标注
|
||||
|
||||
#### P4-2 Stage 流水线拆分
|
||||
- **现状**:`process_file_core` 278 行线性函数,新增分析阶段需改核心函数
|
||||
- **目标**:拆成 Stage 链(parse_stp → detect_features → plan_mold → generate_visualization → analyze_design → generate_report → finalize),每个 Stage 可独立测试和替换
|
||||
- **前提**:需在有 OCC 的环境下运行时验证
|
||||
- **体量**:~2-3 天
|
||||
|
||||
### 方向 B:业务闭环深化
|
||||
|
||||
#### P4-3 模具分析报告 → 销售订单关联
|
||||
- **现状**:P2-1 已打通 STP→成品,但分析报告(HTML)与销售订单无直接关联
|
||||
- **目标**:销售订单创建时可选择关联 moldinsight task_id,订单详情页嵌入分析报告 iframe/摘要;报价单自动引用成本估算数据
|
||||
- **体量**:~2 天
|
||||
|
||||
#### P4-4 采购需求自动推导 ✅
|
||||
- **现状**:BOM 定义了成品所需物料,但采购仍需手动创建
|
||||
- **目标**:销售订单确认 → 按 BOM 展开物料需求 → 对比当前库存 → 自动生成采购建议(缺多少、建议供应商、预计金额);一键转为采购订单
|
||||
- **体量**:~3 天
|
||||
- **完成(2026-07-27)**:`purchase_demand_schemas.py`(Request/ItemResponse/Response)+ `purchase_demand_service.py`(6 步算法:批量查询订单→BOM 展开含损耗率→聚合需求→库存对比→主供应商推荐→按缺口降序排列)+ `purchase_demand_routes.py`(薄路由 `POST /api/purchase-demands/calculate`)+ 前端「采购建议」按钮 + 对话框(多选销售订单 + 结果表格含缺口/供应商/交期)
|
||||
|
||||
#### P4-5 GNN 分型面检测(决策项)
|
||||
- **现状**:`ai_parting_detector.py` 有框架无权重,从未被调用
|
||||
- **选择**:(a) 投入训权重(需标注数据集 + GPU);(b) 改为规则式分型面推荐(利用已识别的 Undercut/Pocket 特征 + 几何启发式);(c) 彻底移除,减少维护负担
|
||||
- **建议**:短期选 (b) 或 (c),等数据积累后再考虑 (a)
|
||||
|
||||
### 方向 C:可靠性与可观测性
|
||||
|
||||
#### P4-6 集成测试覆盖 ✅
|
||||
- **现状**:`tests/` 仅 2 个测试文件,核心业务流程无回归保障
|
||||
- **目标**:关键路径 pytest 覆盖——STP 上传→分析→创建成品→销售订单→采购→库存变动;mock OCC 外部依赖
|
||||
- **体量**:~2-3 天
|
||||
- **完成(2026-07-27)**:`conftest.py` 重构(SQLite + aiosqlite + FK 逆序清空 + 每测试重新播种);`test_purchase_demand.py` 5 个用例(正常推导/缺货/无效订单/无BOM/空请求);`test_api_inventory_orders.py` 32 个用例(库存/采购/销售/物料/StockMovement CRUD + 校验);`test_sales_order_delivered_freeze.py` 2 个用例(交付冻结/非交付可改);`sales_order_service.py` 补 delivered 状态守卫 bug 修复;39 测试全通过
|
||||
|
||||
#### P4-7 结构化日志 + 请求追踪 ✅
|
||||
- **现状**:`app_factory.py` 有请求日志中间件,但无 request_id 贯穿、无结构化 JSON 输出
|
||||
- **目标**:中间件注入 `X-Request-ID`;日志格式改 JSON(timestamp/level/request_id/service/path/duration_ms);接入 Prometheus `/metrics` 端点(请求计数/延迟/错误率)
|
||||
- **体量**:~1 天
|
||||
- **完成(2026-07-27)**:`logger.py` 升级为 JSON 结构化日志(`JSONFormatter` + `TextFormatter`)+ `contextvars` request_id 跨 async 传播;`app_factory.py` 中间件升级(自动生成/提取 `X-Request-ID`、注入响应头、全请求结构化日志含 method/path/status/duration_ms/client_ip);支持 `LOG_FORMAT`/`LOG_LEVEL` 环境变量切换;Prometheus `/metrics` 端点归入后续 P4-8 或独立任务
|
||||
|
||||
#### P4-8 Celery 任务可靠性
|
||||
- **现状**:任务失败无自动重试;无死信队列;批量任务进度仅靠 Redis TTL
|
||||
- **目标**:`@task(autoretry_for, retry_backoff)` 自动重试;死信队列记录永久失败任务;批量任务完成后写 PG 持久化(不依赖 Redis TTL 过期)
|
||||
- **体量**:~1-2 天
|
||||
|
||||
### 方向 D:格式扩展与性能
|
||||
|
||||
#### P4-9 IGES / BREP 格式支持
|
||||
- **现状**:仅支持 STP/STEP,注册表模式已就绪(P1-2)
|
||||
- **目标**:`IgesParserStage` + `BrepParserStage` 注册到流水线;前端上传组件扩展 accept 列表
|
||||
- **前提**:依赖 P4-2 Stage 流水线完成
|
||||
- **体量**:~1-2 天(流水线就绪后)
|
||||
|
||||
#### P4-10 大文件分析性能优化
|
||||
- **现状**:大模型(>1000 面)分析耗时线性增长,点云采样全量处理
|
||||
- **目标**:自适应采样(按曲率密度分配采样点);LOD 分级(远距低模 + 近距高模);分析结果增量更新(仅重算变更区域)
|
||||
- **体量**:~3-5 天
|
||||
|
||||
Reference in New Issue
Block a user