diff --git a/apps/backend/src/repositories/worker-platform/types.ts b/apps/backend/src/repositories/worker-platform/types.ts index 2cc65932..770f30b8 100644 --- a/apps/backend/src/repositories/worker-platform/types.ts +++ b/apps/backend/src/repositories/worker-platform/types.ts @@ -82,7 +82,8 @@ export type WorkerCancelRequestRow = { created_at: string reviewed_at: string | null updated_at: string - work_order_no?: string + platform_order_id?: string + shop_name?: string product_name?: string worker_username?: string worker_display_name?: string @@ -103,6 +104,7 @@ export type WorkerOrderFeedbackRow = { updated_at: string work_order_no?: string product_name?: string + shop_name?: string worker_username?: string worker_display_name?: string share_quantity?: number | null diff --git a/apps/backend/src/repositories/worker-platform/work-order-repo.ts b/apps/backend/src/repositories/worker-platform/work-order-repo.ts index 807a1f3d..606fe5b6 100644 --- a/apps/backend/src/repositories/worker-platform/work-order-repo.ts +++ b/apps/backend/src/repositories/worker-platform/work-order-repo.ts @@ -63,13 +63,22 @@ const WORK_ORDER_SHARE_SELECT = ` const WORKER_CANCEL_REQUEST_SELECT = ` SELECT cr.*, - wo.work_order_no, + COALESCE(NULLIF(BTRIM(wo.platform_order_id), ''), o.platform_order_id, ft.platform_order_id, '') AS platform_order_id, + COALESCE( + NULLIF(BTRIM(o.shop_name), ''), + NULLIF(BTRIM(o.shop_id), ''), + NULLIF(BTRIM(ft.shop_name), ''), + NULLIF(BTRIM(ft.shop_id), ''), + '' + ) AS shop_name, wo.product_name, wu.username AS worker_username, wu.display_name AS worker_display_name, wos.quantity AS share_quantity FROM worker_order_cancel_requests cr INNER JOIN work_orders wo ON wo.id = cr.work_order_id + LEFT JOIN orders o ON o.id = wo.order_id + LEFT JOIN fulfillment_tasks ft ON ft.id = wo.task_id INNER JOIN worker_users wu ON wu.id = cr.worker_id LEFT JOIN work_order_shares wos ON wos.id = cr.work_order_share_id ` @@ -79,11 +88,20 @@ const WORKER_ORDER_FEEDBACK_SELECT = ` wf.*, COALESCE(NULLIF(BTRIM(wo.platform_order_id), ''), wo.work_order_no) AS work_order_no, wo.product_name, + COALESCE( + NULLIF(BTRIM(o.shop_name), ''), + NULLIF(BTRIM(o.shop_id), ''), + NULLIF(BTRIM(ft.shop_name), ''), + NULLIF(BTRIM(ft.shop_id), ''), + '' + ) AS shop_name, wu.username AS worker_username, wu.display_name AS worker_display_name, wos.quantity AS share_quantity FROM worker_order_feedbacks wf INNER JOIN work_orders wo ON wo.id = wf.work_order_id + LEFT JOIN orders o ON o.id = wo.order_id + LEFT JOIN fulfillment_tasks ft ON ft.id = wo.task_id INNER JOIN worker_users wu ON wu.id = wf.worker_id LEFT JOIN work_order_shares wos ON wos.id = wf.work_order_share_id ` diff --git a/apps/backend/src/services/admin/admin-notification-service.ts b/apps/backend/src/services/admin/admin-notification-service.ts index 5c345a0c..204bbba9 100644 --- a/apps/backend/src/services/admin/admin-notification-service.ts +++ b/apps/backend/src/services/admin/admin-notification-service.ts @@ -99,7 +99,7 @@ export async function createWorkerAcceptanceAdminNotification(input: { export async function createWorkerCancelRequestAdminNotification(input: { requestId: number workOrderId: number - workOrderNo: string + platformOrderId: string productName: string workerName: string reason: string @@ -112,7 +112,7 @@ export async function createWorkerCancelRequestAdminNotification(input: { dedupeKey: `worker_cancel_request:${input.requestId}`, title: '有打手撤单申请待审核', body: [ - `订单:${input.workOrderNo || input.workOrderId}`, + `订单:${input.platformOrderId || input.workOrderId}`, `商品:${input.productName || '-'}`, `打手:${input.workerName || '-'}`, `原因:${input.reason || '-'}`, diff --git a/apps/backend/src/services/worker-platform/admin-service.ts b/apps/backend/src/services/worker-platform/admin-service.ts index 5a362ca3..cf60179f 100644 --- a/apps/backend/src/services/worker-platform/admin-service.ts +++ b/apps/backend/src/services/worker-platform/admin-service.ts @@ -1798,7 +1798,9 @@ export async function submitAdminWorkOrderMaterial( }, } const nextStatus = - hasActiveShares || workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS + hasActiveShares || + workOrder.status === WORK_ORDER_STATUS.OPEN || + workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS ? workOrder.status : complete ? WORK_ORDER_STATUS.UNASSIGNED @@ -1814,7 +1816,9 @@ export async function submitAdminWorkOrderMaterial( actorType: 'admin', actorId: actorName, eventType: - hasActiveShares || workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS + hasActiveShares || + workOrder.status === WORK_ORDER_STATUS.OPEN || + workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS ? 'material_updated' : 'material_completed', fromStatus: workOrder.status, diff --git a/apps/backend/src/services/worker-platform/mappers.ts b/apps/backend/src/services/worker-platform/mappers.ts index 29083f78..b375968c 100644 --- a/apps/backend/src/services/worker-platform/mappers.ts +++ b/apps/backend/src/services/worker-platform/mappers.ts @@ -281,8 +281,8 @@ export function mapWorkerCancelRequest(request: { reviewed_by: string created_at: string reviewed_at: string | null - work_order_no?: string - product_name?: string + platform_order_id?: string + shop_name?: string worker_username?: string worker_display_name?: string share_quantity?: number | null @@ -292,8 +292,8 @@ export function mapWorkerCancelRequest(request: { workOrderId: Number(request.work_order_id), shareId: request.work_order_share_id ? Number(request.work_order_share_id) : null, workerId: Number(request.worker_id), - workOrderNo: String(request.work_order_no || ''), - productName: String(request.product_name || ''), + platformOrderId: String(request.platform_order_id || ''), + shopName: String(request.shop_name || ''), workerName: String(request.worker_display_name || request.worker_username || ''), shareQuantity: request.share_quantity ? Number(request.share_quantity) : null, reason: String(request.reason || ''), @@ -318,6 +318,7 @@ export function mapWorkerOrderFeedback(feedback: { handled_at: string | null work_order_no?: string product_name?: string + shop_name?: string worker_username?: string worker_display_name?: string share_quantity?: number | null @@ -329,6 +330,7 @@ export function mapWorkerOrderFeedback(feedback: { workerId: Number(feedback.worker_id), workOrderNo: String(feedback.work_order_no || ''), productName: String(feedback.product_name || ''), + shopName: String(feedback.shop_name || ''), workerName: String(feedback.worker_display_name || feedback.worker_username || ''), shareQuantity: feedback.share_quantity ? Number(feedback.share_quantity) : null, content: String(feedback.content || ''), @@ -481,8 +483,8 @@ export function mapWorkOrderAdmin(workOrder: WorkOrderRow, shares?: WorkOrderSha canUpdateMaterial: workOrder.status === WORK_ORDER_STATUS.PENDING_MATERIAL || workOrder.status === WORK_ORDER_STATUS.UNASSIGNED || - workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS || - (workOrder.status === WORK_ORDER_STATUS.OPEN && hasActiveShares), + workOrder.status === WORK_ORDER_STATUS.OPEN || + workOrder.status === WORK_ORDER_STATUS.IN_PROGRESS, canAccept: status === WORK_ORDER_STATUS.PENDING_ACCEPTANCE, canMarkProblem: status === WORK_ORDER_STATUS.IN_PROGRESS || status === WORK_ORDER_STATUS.PENDING_ACCEPTANCE, diff --git a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts index bf9500d9..429f0d54 100644 --- a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts +++ b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts @@ -773,6 +773,10 @@ test('mapWorkOrderForWorker 使用个人拼单份数、金额、状态和接单 }) test('后台拼单聚合状态同时收敛筛选语义和操作能力', () => { + const waitingForClaim = mapWorkOrderAdmin(buildWorkOrderRow({ status: 'open' })) + assert.equal(waitingForClaim.status, 'open') + assert.equal(waitingForClaim.capabilities.canUpdateMaterial, true) + const partial = mapWorkOrderAdmin( buildWorkOrderRow({ status: 'open', diff --git a/apps/backend/src/services/worker-platform/worker-service.ts b/apps/backend/src/services/worker-platform/worker-service.ts index c51cfabe..06eef685 100644 --- a/apps/backend/src/services/worker-platform/worker-service.ts +++ b/apps/backend/src/services/worker-platform/worker-service.ts @@ -1867,7 +1867,7 @@ export async function submitWorkerCancelRequest( await createWorkerCancelRequestAdminNotification({ requestId: Number(result.request.id), workOrderId: Number(result.request.work_order_id), - workOrderNo: result.request.work_order_no || '', + platformOrderId: result.request.platform_order_id || '', productName: result.request.product_name || '', workerName: worker.display_name || worker.username, reason, diff --git a/apps/frontend/src/pages/admin/panels/CancelRequestsPanel.tsx b/apps/frontend/src/pages/admin/panels/CancelRequestsPanel.tsx index 356a0906..9e13c1eb 100644 --- a/apps/frontend/src/pages/admin/panels/CancelRequestsPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/CancelRequestsPanel.tsx @@ -82,12 +82,12 @@ export default function CancelRequestsPanel() { const columns: TableColumnsType = [ { - title: '订单', + title: '订单号 / 店铺', width: 260, render: (_, request) => (
- {request.productName || '-'} - {request.workOrderNo || '-'} + {request.platformOrderId || '-'} + {request.shopName || '-'}
), }, diff --git a/apps/frontend/src/pages/admin/panels/FeedbacksPanel.tsx b/apps/frontend/src/pages/admin/panels/FeedbacksPanel.tsx index ebe85322..482ea13e 100644 --- a/apps/frontend/src/pages/admin/panels/FeedbacksPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/FeedbacksPanel.tsx @@ -68,6 +68,7 @@ export default function FeedbacksPanel() {
{feedback.productName || '-'} {feedback.workOrderNo || '-'} + {feedback.shopName || '-'}
), }, diff --git a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx index 5dccf123..9ca46fd9 100644 --- a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx @@ -919,7 +919,7 @@ export default function WorkOrdersPanel() { ) : null} {row.capabilities?.canUpdateMaterial ? ( ) : null} {row.capabilities?.canPublish ? ( @@ -1571,7 +1571,11 @@ export default function WorkOrdersPanel() { { setMaterialOrder(null) diff --git a/apps/frontend/src/types/worker-platform.ts b/apps/frontend/src/types/worker-platform.ts index 5f1ab025..fba07244 100644 --- a/apps/frontend/src/types/worker-platform.ts +++ b/apps/frontend/src/types/worker-platform.ts @@ -107,8 +107,8 @@ export type WorkerCancelRequest = { workOrderId: number shareId: number | null workerId: number - workOrderNo: string - productName: string + platformOrderId: string + shopName: string workerName: string shareQuantity: number | null reason: string @@ -134,6 +134,7 @@ export type WorkerOrderFeedback = { workerId: number workOrderNo: string productName: string + shopName: string workerName: string shareQuantity: number | null content: string