Commit Graph

38 Commits

Author SHA1 Message Date
de47d27cfb fix(backend): _recalc_product_location 修复 func.or_() → or_()
func 是 SQL 函数调用(如 func.now()),不能替代 WHERE 条件中的 or_ 运算符。
这会导致结束协助分支时 SQL 抛错 500。
2026-08-11 10:05:13 +08:00
718e205f53 feat(backend): 完工转交智能父节点继承算法
- complete_task: MAIN转交保持平级(parent_task_id),SPAWN转交认当前为父(task.id)
- 基因严格继承: task_type不会篡位成MAIN
2026-08-11 10:02:01 +08:00
e326f8d311 fix: 修复任务完工/结束 500 + 后端基因继承
- 移除 task.child_tasks 的 ORM 属性直接赋值(导致 SQLAlchemy 状态机崩溃)
- complete_task 创建 next_task 时补上 task_type=task.task_type 基因继承
2026-08-10 17:36:54 +08:00
2880ea6df7 fix: Grid回退grid-cols-12精确对齐+分组标题按device/order切换+宏观状态receive/transfer只主线 2026-08-10 10:58:33 +08:00
4854eb626e feat: 宏观状态只同步主线+删除5s倒计时+序列号确认+分组切换(订单/设备)+序列号列 2026-08-10 10:37:56 +08:00
ad9fb8d37e refactor: 位置回溯极简—只跟主干任务(WIP>PENDING>COMPLETED),无视协助分支 2026-08-09 18:49:59 +08:00
45b5376537 fix: 三致命Bug—macro_status预计算+排除已完工脏读+flush落盘+递归深度限制10 2026-08-09 18:23:55 +08:00
f33396b9f1 fix: 位置回溯父任务优先 + Tab筛选改为本地calcProductStatus过滤 2026-08-09 18:10:13 +08:00
3c4c16a1cc fix: 四Bug—权限互斥+中文姓名+记录弹窗+后端位置回溯(含RecordsModal) 2026-08-09 17:55:40 +08:00
65ff05fb2f feat: 状态渲染修复+中文姓名映射+SUPERVISOR/SUPER_ADMIN权限控制(前端+后端) 2026-08-07 17:26:14 +08:00
b71c5a2d07 feat: 双Token认证(Access 2h/Refresh 7d) + 通知系统(转交/驳回自动推送) 2026-08-07 11:44:04 +08:00
6a79e21302 闭环修复: transfer/spawn/receive补TaskRecord + reject加task_type + branchLabel只对SPAWN编号 2026-08-06 13:14:26 +08:00
0d323e8181 血缘锚定法: task_type字段+迁移+三大接口写入+TreeCanvas基于task_type布局 2026-08-06 13:03:25 +08:00
e5e2a395e7 撤回链式接力: CANCELED后生成WIP子任务还给操作人+TreeCanvas CANCELED视为串行换行 2026-08-06 12:53:23 +08:00
616638a6c8 撤回改为CANCELED状态标记+TaskRecord留痕+TreeCanvas灰度渲染+全部状态映射更新 2026-08-06 12:51:40 +08:00
eb97c12bed 修复撤回: 移除parent_task_id空校验+兼容无父任务场景(仅删除) 2026-08-06 12:39:47 +08:00
58cb9a23ef 修复撤回: transfer新任务parent_task_id=task.id(溯源链) + canRecall放宽(兼容旧数据) 2026-08-06 12:38:26 +08:00
67755c7847 修复撤回500: 先删task_logs+task_records再删task,加delete import 2026-08-06 11:41:45 +08:00
57884d7baa 撤回转交: recall接口删除子任务恢复父WIP + 前端canRecall判断 + 红色撤回按钮 2026-08-06 11:39:22 +08:00
b2cfa3871e 取消转交的协助分支阻塞: transfer_task移除_check_children_done,仅end_task保留 2026-08-06 11:29:58 +08:00
ef9e5bbae5 修复get_all_tasks: 改用_to_flat_response(不递归children)彻底消除MissingGreenlet 2026-08-06 11:19:19 +08:00
9846dd6c8f 修复: MissingGreenlet_product访问try/catch + spawn_subtask不再覆盖overall_status 2026-08-06 11:16:07 +08:00
e183ea5583 工业级重构: 用户Grid选择+工序由接收人定+隐藏结束按钮(次分支卡片内结束)+蓝图网格背景 2026-08-06 09:52:21 +08:00
eb52e2fd48 修复: create_task同步current_location_id到接收人 + receive_task兜底同步产品位置 2026-08-06 09:12:07 +08:00
f3fb000bda 产品宏观状态自动同步: create_task/transfer_task/spawn_subtask均更新overall_status 2026-08-06 09:06:07 +08:00
f665cf7e24 紧急修复: transfer中real_assignees→real_branches变量名 + SpawnRequest BaseModel导入 2026-08-05 18:16:07 +08:00
b547844dca 并发模型: spawn派发协助分支 + 转交简化为单线 + 子分支未完成拦截(409) 2026-08-05 18:01:14 +08:00
21aa608db3 工艺节点树: 新增结束分支(终止)接口 + 前端🏁结束分支按钮 + WIP可无下游完结 2026-08-05 16:37:05 +08:00
e2d9590c48 修复remark丢失(_to_response漏字段) + UI重构swiper专注卡片看板 2026-08-05 16:35:14 +08:00
4ee3cb7552 紧急修复: get_all_tasks移除parent_task_id过滤 — 子任务也能出现在我的任务列表 2026-08-05 16:30:45 +08:00
9978714d40 紧急修复: receive_task语法错误 — raise HTTPException括号未闭合导致后端启动失败 2026-08-05 16:25:34 +08:00
71e8eeb7e8 权限: receive/reject校验assignee_id匹配 + 前端myActiveTask只显示本人任务 + 403处理 2026-08-05 16:21:27 +08:00
62422e7558 全栈: 接收任务写入remark — 后端receive接口+Body参数+前端接收弹窗备注输入 2026-08-05 16:16:35 +08:00
353633f061 修复: 409错误提示可见 + PENDING状态拦截(必须先接收) + request.js显示409详情 2026-08-05 16:10:45 +08:00
4f14a40bd9 修复: 驳回返工任务追溯上一环转交人 — parent.assignee → TaskLog.operator_id 三层兜底 2026-08-05 16:03:33 +08:00
7810097b39 全栈修复: remark字段全链路打通 — TaskCreate+TransferRequest+transfer_task+前端Payload 2026-08-05 15:59:20 +08:00
1fed716829 feat(services): 核心业务逻辑 — 接收/返工/裂变/记录/标签打印
task_service:
- receive_task() — PENDING→WIP, 记录 received_at
- reject_task() — →REJECTED + 自动返工闭环
- transfer_task() — →COMPLETED + 多路裂变 + virtual_warehouse入库
- add_task_record() — 图文记录追加
- 全链路 selectinload(Task.records)
- 全部 now 改用 get_beijing_time()

product_service:
- create_product() — PG Sequence 自动生成16位HEX
- update_overall_status() — 宏观状态校验+更新
- 扫码返回完整 task_tree (含 records)
- order_no 自由文本→自动创建 ProductionOrder
- update_product() 支持 order_no 编辑

label_service:
- 480×360 工业级排版 (QR+名/规/单+底部通栏码)
- simhei.ttf 34px/28px + stroke_width 描边
- TSPL Socket 发送到打标机
2026-08-05 14:00:55 +08:00
8028be58c4 feat(services): 重写核心业务逻辑 — 接收/驳回返工/裂变转交
task_service 新增 3 个核心业务函数:
- receive_task(): PENDING→WIP, 记录 received_at, 仅 PENDING 状态可接收
- reject_task(): →REJECTED, 记录 reject_reason+completed_at,
  防呆闭环: 自动查找父任务负责人, 创建 is_rework=True 的返工任务
- transfer_task(): →COMPLETED, 记录 completed_at,
  裂变转交: 遍历 next_assignees 批量创建 PENDING 任务,
  多路裂变(>1)时子任务挂载形成树状分支,
  virtual_warehouse 入库逻辑更新 Product.current_location_id
- complete_task(): 保留兼容, 同步使用新状态常量 TASK_STATUS_*

product_service 重构:
- get_product_by_serial(): 新增 task_tree 返回完整递归任务树
- _load_task_tree(): 递归加载产品关联的所有任务嵌套关系
2026-08-04 17:03:37 +08:00