Files
order_site/apps/backend/src/routes/admin/orders.ts
T
yml2213 b82f9c4063 fix(worker-platform): 补齐拼单份额超时自动处置机制与退回大厅流程
- 根因排查:此前超时扫描仅针对整单 in_progress,而拼单母单为 open 且 deadline_at 为空,导致打手超时的拼单份额无法被定时扫描命中与释放;
- 定时扫描:在 settleOverdueWorkOrders 中引入 listOverdueWorkOrderShares,自动扫描超时未提交资料的拼单份额(joined);
- 超时处置:新增 settleOverdueWorkOrderShare 事务处理,按母单 timeout_policy 释放或扣除押金,份额标记 cancelled,母单保持或恢复 open 状态重回抢单大厅,记录 timeout 事件并推送实时变更;
- 提交防呆:在打手提交拼单验收时检测个人份额是否已超时,超时则立即执行处置并拦截提交;
- 倒计时展示:在 mapWorkOrderForWorker 中根据 myShare.created_at + timeout_minutes 为拼单打手计算并展示个人履约截止时间;
- 质量验证:补齐拼单截止时间计算与处置链路测试,全量 676 个测试均通过,通过 npm run check 校验。
2026-10-11 14:53:56 +08:00

89 lines
2.8 KiB
TypeScript

import { Router } from 'express'
import { getAdminOrderDetail, getAdminOrders } from '../../services/admin/admin-read-service.js'
import { resendAdminOrderKuaishouIndustryVoucherCodes } from '../../services/admin/write/kuaishou-industry-actions.js'
import {
updateAdminOrderClaimStatus,
type UpdateOrderClaimStatusPayload,
} from '../../services/admin/write/order-actions.js'
import { createJsonHandler, requireAdminRoles } from './session.js'
import type { AdminOrderRouteParams, AdminOrderRouteQuery } from '../../types/admin/route-inputs.js'
const router = Router()
router.use('/orders', requireAdminRoles(['admin', 'operator', 'support']))
router.get(
'/orders',
createJsonHandler((req) => getAdminOrders(req.query as AdminOrderRouteQuery), {
successMessage: 'ok',
errorMessage: '读取订单列表失败',
scope: '[admin/orders]',
}),
)
router.get(
'/orders/:orderId',
createJsonHandler(
(req) =>
getAdminOrderDetail(
String((req.params as AdminOrderRouteParams).orderId || ''),
req.adminSession || null,
),
{
successMessage: 'ok',
errorMessage: '读取订单详情失败',
scope: '[admin/orders/:orderId]',
},
),
)
router.post(
'/orders/:orderId/claim-status',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) =>
updateAdminOrderClaimStatus(
String((req.params as AdminOrderRouteParams).orderId || ''),
req.body as UpdateOrderClaimStatusPayload,
req.adminSession || null,
),
{
successMessage: '订单兑换状态已更新',
errorMessage: '更新订单兑换状态失败',
scope: '[admin/orders/:orderId/claim-status]',
audit: (req, data) => ({
action: 'order_claim_status_update',
targetType: 'order',
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/orders/:orderId/kuaishou-industry/resend-code',
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) =>
resendAdminOrderKuaishouIndustryVoucherCodes(
String((req.params as AdminOrderRouteParams).orderId || ''),
req.adminSession || null,
),
{
successMessage: '电子凭证发码回调已重发',
errorMessage: '重发电子凭证发码回调失败',
scope: '[admin/orders/:orderId/kuaishou-industry/resend-code]',
audit: (req, data) => ({
action: 'order_kuaishou_industry_resend_code',
targetType: 'order',
targetId: String((req.params as AdminOrderRouteParams).orderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
export default router