审批通过同时选择工厂和司机时跳过待工厂节点,直接进入司机待接单
- ApproveOrderRequest 增加 factory_id/driver_id 字段(Pydantic 原来会丢弃) - approve_order 中同时有工厂和司机时在同一事务内创建物流任务,直接到 pending_driver - 小程序前端跳过重复的物流任务创建调用 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2df8341cd3
commit
2136d5a8ec
@ -269,6 +269,12 @@ class ApproveOrderRequest(BaseModel):
|
||||
approve_opinion: str | None = None
|
||||
"""审批意见"""
|
||||
|
||||
factory_id: int | None = None
|
||||
"""下发工厂 ID(审批通过时可选,同时选择工厂和司机可跳过待工厂节点)"""
|
||||
|
||||
driver_id: int | None = None
|
||||
"""司机 ID(审批通过时可选,同时选择工厂和司机可跳过待工厂节点)"""
|
||||
|
||||
|
||||
class SupplierTextRequest(BaseModel):
|
||||
"""获取供应商对账文本请求体。被 POST /api/orders/supplier-text 路由使用。"""
|
||||
|
||||
@ -633,8 +633,26 @@ class OrderService:
|
||||
else:
|
||||
target_status = "rejected"
|
||||
# 如果有工厂ID,设置到订单上
|
||||
if payload.get("factory_id") and target_status == "pending_factory":
|
||||
if payload.get("factory_id") and target_status in ("pending_factory",):
|
||||
order.factory_id = payload["factory_id"]
|
||||
# 同时选择了工厂和司机:在同一个事务内创建物流任务,直接进入待司机接单
|
||||
if payload.get("factory_id") and payload.get("driver_id") and target_status == "pending_factory":
|
||||
task = self.logistics_repository.create_task(
|
||||
session,
|
||||
{
|
||||
"task_no": f"LT{datetime.now().strftime('%Y%m%d%H%M%S')}",
|
||||
"order_id": order.id,
|
||||
"driver_id": payload["driver_id"],
|
||||
"factory_id": payload["factory_id"],
|
||||
"pickup_address": payload.get("pickup_address", ""),
|
||||
"delivery_address": payload.get("delivery_address", ""),
|
||||
"pickup_content": payload.get("pickup_content", ""),
|
||||
"quantity": payload.get("quantity", 1),
|
||||
"status": "pending",
|
||||
"created_by": current_user.get("user_id") if current_user else None,
|
||||
},
|
||||
)
|
||||
target_status = "pending_driver"
|
||||
self.order_repository.update_order_status(session, order, target_status)
|
||||
self.order_approve_log_repository.create_log(
|
||||
session,
|
||||
|
||||
@ -317,8 +317,9 @@ Page({
|
||||
url: targetUrl, method: "POST",
|
||||
data: payload,
|
||||
}).then(function () {
|
||||
// approve pass + driver_id: create logistics task (mirrors web flow)
|
||||
if (payload.approve_result === "pass" && payload.driver_id) {
|
||||
// 同时选择了工厂和司机时,后端已在审批事务内创建物流任务,无需再调用
|
||||
// 仅在未选工厂但选了司机的场景下才单独创建(理论上不会出现)
|
||||
if (payload.approve_result === "pass" && payload.driver_id && !payload.factory_id) {
|
||||
var orderData = that.data.orderInfo;
|
||||
return app.request({
|
||||
url: "/api/logistics/tasks",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user