拆分后台撤单审核服务
This commit is contained in:
@@ -23,8 +23,6 @@ import {
|
|||||||
listWorkOrderShares,
|
listWorkOrderShares,
|
||||||
resolveProblemWorkOrder,
|
resolveProblemWorkOrder,
|
||||||
reopenCancelledWorkOrder,
|
reopenCancelledWorkOrder,
|
||||||
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
|
|
||||||
reviewWorkerCancelRequest,
|
|
||||||
updateWorkOrder,
|
updateWorkOrder,
|
||||||
updateWorkOrderBasic,
|
updateWorkOrderBasic,
|
||||||
type WorkOrderRow,
|
type WorkOrderRow,
|
||||||
@@ -56,7 +54,6 @@ import {
|
|||||||
DEFAULT_DEPOSIT_THRESHOLD_AMOUNT,
|
DEFAULT_DEPOSIT_THRESHOLD_AMOUNT,
|
||||||
mapWorkOrderAdmin,
|
mapWorkOrderAdmin,
|
||||||
mapWorkOrderShare,
|
mapWorkOrderShare,
|
||||||
mapWorkerCancelRequest,
|
|
||||||
normalizeAmountFen,
|
normalizeAmountFen,
|
||||||
normalizeBoolean,
|
normalizeBoolean,
|
||||||
normalizeInteger,
|
normalizeInteger,
|
||||||
@@ -222,78 +219,10 @@ function resolveAssignedDeadlineAt(timeoutMinutes: number, now: string): string
|
|||||||
|
|
||||||
export { getAdminWorkOrderEvents, listAdminWorkOrders } from './admin-work-order-query-service.js'
|
export { getAdminWorkOrderEvents, listAdminWorkOrders } from './admin-work-order-query-service.js'
|
||||||
|
|
||||||
export async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
|
|
||||||
const status = String(query.status || 'pending').trim()
|
|
||||||
const normalizedStatus = ['pending', 'approved', 'rejected'].includes(status) ? status : 'pending'
|
|
||||||
return {
|
|
||||||
items: (await listWorkerCancelRequestsForAdmin(normalizedStatus)).map(mapWorkerCancelRequest),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
listAdminWorkerOrderFeedbacks,
|
listAdminWorkerCancelRequests,
|
||||||
resolveAdminWorkerOrderFeedback,
|
reviewAdminWorkerCancelRequest,
|
||||||
} from './admin-worker-feedback-service.js'
|
} from './admin-worker-cancel-service.js'
|
||||||
|
|
||||||
export async function reviewAdminWorkerCancelRequest(
|
|
||||||
requestId: number | string,
|
|
||||||
payload: JsonObject = {},
|
|
||||||
actorName = '',
|
|
||||||
) {
|
|
||||||
const approved = payload.approved === true || String(payload.action || '').trim() === 'approve'
|
|
||||||
const reviewNote = String(payload.reviewNote || payload.note || '').trim()
|
|
||||||
if (!reviewNote) {
|
|
||||||
throw createHttpError('请填写审核备注', {
|
|
||||||
statusCode: 400,
|
|
||||||
errorCode: 'worker_cancel_request_review_note_required',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const result = await reviewWorkerCancelRequest({
|
|
||||||
requestId: Number(requestId),
|
|
||||||
approved,
|
|
||||||
reviewNote,
|
|
||||||
actorName,
|
|
||||||
now: nowIso(),
|
|
||||||
})
|
|
||||||
if (result.failureReason === 'request_not_found') {
|
|
||||||
throw createHttpError('撤单申请不存在', {
|
|
||||||
statusCode: 404,
|
|
||||||
errorCode: 'worker_cancel_request_not_found',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (result.failureReason === 'request_not_pending') {
|
|
||||||
throw createHttpError('该撤单申请已审核,请刷新后重试', {
|
|
||||||
statusCode: 409,
|
|
||||||
errorCode: 'worker_cancel_request_not_pending',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (!result.request || !result.order) {
|
|
||||||
throw createHttpError('订单状态已变化,无法审核该撤单申请', {
|
|
||||||
statusCode: 409,
|
|
||||||
errorCode: 'worker_cancel_request_target_changed',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
await resolveAdminNotificationEntity(
|
|
||||||
'worker_cancel_request',
|
|
||||||
Number(result.request.id),
|
|
||||||
approved ? 'approved' : 'rejected',
|
|
||||||
)
|
|
||||||
const workerId = Number(result.request.worker_id)
|
|
||||||
publishWorkOrderRealtimeChange({
|
|
||||||
workOrderId: Number(result.order.id),
|
|
||||||
workerIds: workerId > 0 ? [workerId] : [],
|
|
||||||
hallChanged: approved,
|
|
||||||
})
|
|
||||||
if (approved && workerId > 0) publishWorkerWalletRealtimeChange(workerId)
|
|
||||||
return {
|
|
||||||
request: mapWorkerCancelRequest(result.request),
|
|
||||||
order: mapWorkOrderAdmin(result.order),
|
|
||||||
approved,
|
|
||||||
releasedDepositAmount: result.releasedDepositAmount,
|
|
||||||
levelChanged: result.levelChanged,
|
|
||||||
accountDisabled: result.accountDisabled,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function deductAdminWorkOrderPendingDeposit(
|
export async function deductAdminWorkOrderPendingDeposit(
|
||||||
workOrderId: number | string,
|
workOrderId: number | string,
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
import {
|
||||||
|
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
|
||||||
|
reviewWorkerCancelRequest,
|
||||||
|
} from '../../repositories/worker-platform/index.js'
|
||||||
|
import type { JsonObject } from '../../types/json.js'
|
||||||
|
import { createHttpError } from '../../utils/http.js'
|
||||||
|
import { nowIso } from '../../utils/time.js'
|
||||||
|
import { resolveAdminNotificationEntity } from '../admin/admin-notification-service.js'
|
||||||
|
import {
|
||||||
|
publishWorkerWalletRealtimeChange,
|
||||||
|
publishWorkOrderRealtimeChange,
|
||||||
|
} from '../realtime/realtime-event-service.js'
|
||||||
|
import { mapWorkOrderAdmin, mapWorkerCancelRequest } from './mappers.js'
|
||||||
|
|
||||||
|
export async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
|
||||||
|
const status = String(query.status || 'pending').trim()
|
||||||
|
const normalizedStatus = ['pending', 'approved', 'rejected'].includes(status) ? status : 'pending'
|
||||||
|
return {
|
||||||
|
items: (await listWorkerCancelRequestsForAdmin(normalizedStatus)).map(mapWorkerCancelRequest),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function reviewAdminWorkerCancelRequest(
|
||||||
|
requestId: number | string,
|
||||||
|
payload: JsonObject = {},
|
||||||
|
actorName = '',
|
||||||
|
) {
|
||||||
|
const approved = payload.approved === true || String(payload.action || '').trim() === 'approve'
|
||||||
|
const reviewNote = String(payload.reviewNote || payload.note || '').trim()
|
||||||
|
if (!reviewNote) {
|
||||||
|
throw createHttpError('请填写审核备注', {
|
||||||
|
statusCode: 400,
|
||||||
|
errorCode: 'worker_cancel_request_review_note_required',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const result = await reviewWorkerCancelRequest({
|
||||||
|
requestId: Number(requestId),
|
||||||
|
approved,
|
||||||
|
reviewNote,
|
||||||
|
actorName,
|
||||||
|
now: nowIso(),
|
||||||
|
})
|
||||||
|
if (result.failureReason === 'request_not_found') {
|
||||||
|
throw createHttpError('撤单申请不存在', {
|
||||||
|
statusCode: 404,
|
||||||
|
errorCode: 'worker_cancel_request_not_found',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (result.failureReason === 'request_not_pending') {
|
||||||
|
throw createHttpError('该撤单申请已审核,请刷新后重试', {
|
||||||
|
statusCode: 409,
|
||||||
|
errorCode: 'worker_cancel_request_not_pending',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (!result.request || !result.order) {
|
||||||
|
throw createHttpError('订单状态已变化,无法审核该撤单申请', {
|
||||||
|
statusCode: 409,
|
||||||
|
errorCode: 'worker_cancel_request_target_changed',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
await resolveAdminNotificationEntity(
|
||||||
|
'worker_cancel_request',
|
||||||
|
Number(result.request.id),
|
||||||
|
approved ? 'approved' : 'rejected',
|
||||||
|
)
|
||||||
|
const workerId = Number(result.request.worker_id)
|
||||||
|
publishWorkOrderRealtimeChange({
|
||||||
|
workOrderId: Number(result.order.id),
|
||||||
|
workerIds: workerId > 0 ? [workerId] : [],
|
||||||
|
hallChanged: approved,
|
||||||
|
})
|
||||||
|
if (approved && workerId > 0) publishWorkerWalletRealtimeChange(workerId)
|
||||||
|
return {
|
||||||
|
request: mapWorkerCancelRequest(result.request),
|
||||||
|
order: mapWorkOrderAdmin(result.order),
|
||||||
|
approved,
|
||||||
|
releasedDepositAmount: result.releasedDepositAmount,
|
||||||
|
levelChanged: result.levelChanged,
|
||||||
|
accountDisabled: result.accountDisabled,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ export * from './admin-worker-config-service.js'
|
|||||||
export * from './admin-worker-user-service.js'
|
export * from './admin-worker-user-service.js'
|
||||||
export * from './admin-work-order-query-service.js'
|
export * from './admin-work-order-query-service.js'
|
||||||
export * from './admin-worker-feedback-service.js'
|
export * from './admin-worker-feedback-service.js'
|
||||||
|
export * from './admin-worker-cancel-service.js'
|
||||||
export * from './worker-product-match-config-service.js'
|
export * from './worker-product-match-config-service.js'
|
||||||
export * from './worker-announcement-config-service.js'
|
export * from './worker-announcement-config-service.js'
|
||||||
export * from './worker-hall-config-service.js'
|
export * from './worker-hall-config-service.js'
|
||||||
|
|||||||
Reference in New Issue
Block a user