修复接单平台并发、分页与补资料

This commit is contained in:
yml2213
2026-07-28 10:15:44 +08:00
parent a2587eda01
commit f0ba0fe17f
22 changed files with 1096 additions and 145 deletions
@@ -12,6 +12,7 @@ import {
listAdminWorkOrders,
markAdminWorkOrderProblem,
publishAdminWorkOrder,
resolveAdminProblemWorkOrder,
reviewAdminWorkerUser,
saveAdminWorkCategory,
saveAdminWorkProductRule,
@@ -117,7 +118,7 @@ router.get(
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => listAdminWorkerUsers(req.query), {
successMessage: 'ok',
errorMessage: '读取接单员列表失败',
errorMessage: '读取打手列表失败',
scope: '[admin/worker-platform/workers]',
}),
)
@@ -128,8 +129,8 @@ router.post(
createJsonHandler(
(req) => reviewAdminWorkerUser(String(req.params.workerId || ''), req.body || {}),
{
successMessage: '接单员审核状态已更新',
errorMessage: '审核接单员失败',
successMessage: '打手审核状态已更新',
errorMessage: '审核打手失败',
scope: '[admin/worker-platform/workers/:workerId/review]',
audit: (req, data) => ({
action: 'worker_reviewed',
@@ -147,7 +148,7 @@ router.post(
createJsonHandler(
(req) => creditAdminWorkerWallet(String(req.params.workerId || ''), req.body || {}),
{
successMessage: '接单员余额已增加',
successMessage: '打手余额已增加',
errorMessage: '人工充值失败',
scope: '[admin/worker-platform/workers/:workerId/wallet-credit]',
audit: (req, data) => ({
@@ -256,6 +257,25 @@ router.post(
),
)
router.post(
'/worker-platform/orders/:workOrderId/problem/resolve',
requireAdminRoles(['admin', 'operator']),
createJsonHandler(
(req) => resolveAdminProblemWorkOrder(String(req.params.workOrderId || ''), req.body || {}),
{
successMessage: '问题单已处置',
errorMessage: '处置问题单失败',
scope: '[admin/worker-platform/orders/:workOrderId/problem/resolve]',
audit: (req, data) => ({
action: 'work_order_problem_resolved',
targetType: 'work_order',
targetId: String(req.params.workOrderId || ''),
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
},
),
)
router.post(
'/worker-platform/orders/:workOrderId/accept',
requireAdminRoles(['admin', 'operator']),
+4 -1
View File
@@ -7,7 +7,10 @@ const router = Router()
router.get('/object', async (req, res) => {
try {
const object = await getStoredFileObject(req.query.key, req.query.variant)
const object = await getStoredFileObject(req.query.key, req.query.variant, {
expires: req.query.expires,
signature: req.query.signature,
})
res.setHeader('Content-Type', object.contentType || 'application/octet-stream')
res.setHeader('Cache-Control', 'private, max-age=300')
res.setHeader('X-Content-Type-Options', 'nosniff')
+4 -2
View File
@@ -10,11 +10,13 @@ import {
listWorkerHallOrders,
listWorkerMyOrders,
loginWorker,
logoutWorkerSession,
registerWorker,
submitWorkerOrderAcceptance,
} from '../services/worker-platform/worker-platform-service.js'
import { buildNotFoundPayload, createRouteHandler } from '../utils/http.js'
import {
extractOptionalWorkerBearerToken,
extractWorkerBearerToken,
getRequiredWorkerSession,
requireActiveWorker,
@@ -64,7 +66,7 @@ router.get(
router.post(
'/auth/logout',
createRouteHandler(() => ({ success: true }), {
createRouteHandler((req) => logoutWorkerSession(extractOptionalWorkerBearerToken(req)), {
successMessage: '已退出登录',
errorMessage: '退出失败',
scope: '[worker/auth/logout]',
@@ -77,7 +79,7 @@ router.get(
'/profile',
createRouteHandler((req) => getWorkerProfile(getRequiredWorkerSession(req)), {
successMessage: 'ok',
errorMessage: '读取接单员信息失败',
errorMessage: '读取打手信息失败',
scope: '[worker/profile]',
}),
)
+13 -8
View File
@@ -37,14 +37,19 @@ export function getRequiredWorkerSession(req: Request): WorkerSession {
}
export function extractWorkerBearerToken(req: Request): string {
const authorization = String(req.headers.authorization || '').trim()
const matched = authorization.match(/^Bearer\s+(.+)$/i)
if (!matched?.[1]) {
throw createHttpError('未登录或登录已失效', {
statusCode: 401,
errorCode: 'worker_auth_required',
})
const token = extractOptionalWorkerBearerToken(req)
if (token) {
return token
}
return matched[1].trim()
throw createHttpError('未登录或登录已失效', {
statusCode: 401,
errorCode: 'worker_auth_required',
})
}
export function extractOptionalWorkerBearerToken(req: Request): string {
const authorization = String(req.headers.authorization || '').trim()
const matched = authorization.match(/^Bearer\s+(.+)$/i)
return matched?.[1]?.trim() || ''
}