diff --git a/backend/app/services/task_service.py b/backend/app/services/task_service.py index c7cd2a2..eaf2535 100644 --- a/backend/app/services/task_service.py +++ b/backend/app/services/task_service.py @@ -217,6 +217,13 @@ async def _check_all_critical_children_completed( return len(incomplete) == 0, incomplete +def _admin_proxy_note(operator_id: str | None, task_assignee_id: str | None) -> str: + """检测管理员代办 → 返回审计标记后缀""" + if operator_id and task_assignee_id and operator_id != task_assignee_id: + return f" [管理员 {operator_id} 代办]" + return "" + + async def _create_task_log( db: AsyncSession, task_id: uuid.UUID, @@ -226,16 +233,12 @@ async def _create_task_log( task_assignee_id: str | None = None, ) -> TaskLog: """创建任务操作日志。自动检测管理员代办并拼接审计标记。""" - final_remark = remark or "" - # 管理员代办检测:操作人 ≠ 任务负责人 → 拼接审计追述 - if operator_id and task_assignee_id and operator_id != task_assignee_id: - proxy_note = f" [管理员 {operator_id} 代办操作]" - final_remark = (final_remark + proxy_note).strip() + final_remark = (remark or "") + _admin_proxy_note(operator_id, task_assignee_id) log = TaskLog( task_id=task_id, operator_id=operator_id, action_type=action_type, - remark=final_remark or None, + remark=final_remark.strip() or None, ) db.add(log) return log @@ -558,7 +561,9 @@ async def receive_task( remark=remark or f"操作员确认接收任务「{task.task_name}」", task_assignee_id=task.assignee_id, ) - db.add(TaskRecord(task_id=task.id, remark=remark or f"[接收] 操作员已确认接收", images="[]")) + db.add(TaskRecord(task_id=task.id, + remark=(remark or f"[接收] 操作员已确认接收") + _admin_proxy_note(operator_id, task.assignee_id), + images="[]")) # 接收时同步产品位置到接收人 + 宏观状态同步 product_result = await db.execute(select(Product).where(Product.id == task.product_id)) @@ -760,7 +765,9 @@ async def transfer_task( remark=request.note or f"完成任务「{task.task_name}」,转交至下一道工序", task_assignee_id=task.assignee_id, ) - db.add(TaskRecord(task_id=task.id, remark=request.note or f"[完工转交] 移交下一工序", images="[]")) + db.add(TaskRecord(task_id=task.id, + remark=(request.note or f"[完工转交] 移交下一工序") + _admin_proxy_note(operator_id, task.assignee_id), + images="[]")) # --- 动作 2:解析下家 & 裂变 --- # 兼容新旧格式