拆分后台问题反馈服务

This commit is contained in:
yml2213
2026-08-21 17:06:25 +08:00
parent ce40997447
commit 91cd4cf280
3 changed files with 75 additions and 62 deletions
@@ -24,8 +24,6 @@ import {
resolveProblemWorkOrder,
reopenCancelledWorkOrder,
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
listAdminWorkerOrderFeedbacks as listWorkerOrderFeedbacksForAdmin,
resolveWorkerOrderFeedback,
reviewWorkerCancelRequest,
updateWorkOrder,
updateWorkOrderBasic,
@@ -59,7 +57,6 @@ import {
mapWorkOrderAdmin,
mapWorkOrderShare,
mapWorkerCancelRequest,
mapWorkerOrderFeedback,
normalizeAmountFen,
normalizeBoolean,
normalizeInteger,
@@ -233,65 +230,10 @@ export async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
}
}
export async function listAdminWorkerOrderFeedbacks(query: JsonObject = {}) {
const status = String(query.status || 'pending').trim()
const normalizedStatus = ['pending', 'resolved'].includes(status) ? status : 'pending'
return {
items: (await listWorkerOrderFeedbacksForAdmin(normalizedStatus)).map(mapWorkerOrderFeedback),
}
}
export async function resolveAdminWorkerOrderFeedback(
feedbackId: number | string,
payload: JsonObject = {},
actorName = '',
) {
const reply = String(payload.reply || '').trim()
if (!reply) {
throw createHttpError('请填写处理回复', {
statusCode: 400,
errorCode: 'worker_order_feedback_reply_required',
})
}
const result = await resolveWorkerOrderFeedback({
feedbackId: Number(feedbackId),
reply,
actorName,
now: nowIso(),
})
if (result.failureReason === 'not_found') {
throw createHttpError('问题反馈不存在', {
statusCode: 404,
errorCode: 'worker_order_feedback_not_found',
})
}
if (result.failureReason === 'not_pending') {
throw createHttpError('该问题反馈已处理,请刷新后重试', {
statusCode: 409,
errorCode: 'worker_order_feedback_not_pending',
})
}
if (!result.feedback || !result.order) {
throw createHttpError('问题反馈处理失败', {
statusCode: 409,
errorCode: 'worker_order_feedback_resolve_failed',
})
}
await resolveAdminNotificationEntity(
'worker_order_feedback',
Number(result.feedback.id),
'resolved',
)
const workerId = Number(result.feedback.worker_id)
publishWorkOrderRealtimeChange({
workOrderId: Number(result.order.id),
workerIds: workerId > 0 ? [workerId] : [],
})
return {
feedback: mapWorkerOrderFeedback(result.feedback),
order: mapWorkOrderAdmin(result.order),
}
}
export {
listAdminWorkerOrderFeedbacks,
resolveAdminWorkerOrderFeedback,
} from './admin-worker-feedback-service.js'
export async function reviewAdminWorkerCancelRequest(
requestId: number | string,
@@ -0,0 +1,70 @@
import {
listAdminWorkerOrderFeedbacks as listWorkerOrderFeedbacksForAdmin,
resolveWorkerOrderFeedback,
} 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 { publishWorkOrderRealtimeChange } from '../realtime/realtime-event-service.js'
import { mapWorkOrderAdmin, mapWorkerOrderFeedback } from './mappers.js'
export async function listAdminWorkerOrderFeedbacks(query: JsonObject = {}) {
const status = String(query.status || 'pending').trim()
const normalizedStatus = ['pending', 'resolved'].includes(status) ? status : 'pending'
return {
items: (await listWorkerOrderFeedbacksForAdmin(normalizedStatus)).map(mapWorkerOrderFeedback),
}
}
export async function resolveAdminWorkerOrderFeedback(
feedbackId: number | string,
payload: JsonObject = {},
actorName = '',
) {
const reply = String(payload.reply || '').trim()
if (!reply) {
throw createHttpError('请填写处理回复', {
statusCode: 400,
errorCode: 'worker_order_feedback_reply_required',
})
}
const result = await resolveWorkerOrderFeedback({
feedbackId: Number(feedbackId),
reply,
actorName,
now: nowIso(),
})
if (result.failureReason === 'not_found') {
throw createHttpError('问题反馈不存在', {
statusCode: 404,
errorCode: 'worker_order_feedback_not_found',
})
}
if (result.failureReason === 'not_pending') {
throw createHttpError('该问题反馈已处理,请刷新后重试', {
statusCode: 409,
errorCode: 'worker_order_feedback_not_pending',
})
}
if (!result.feedback || !result.order) {
throw createHttpError('问题反馈处理失败', {
statusCode: 409,
errorCode: 'worker_order_feedback_resolve_failed',
})
}
await resolveAdminNotificationEntity(
'worker_order_feedback',
Number(result.feedback.id),
'resolved',
)
const workerId = Number(result.feedback.worker_id)
publishWorkOrderRealtimeChange({
workOrderId: Number(result.order.id),
workerIds: workerId > 0 ? [workerId] : [],
})
return {
feedback: mapWorkerOrderFeedback(result.feedback),
order: mapWorkOrderAdmin(result.order),
}
}
@@ -26,6 +26,7 @@ export * from './admin-kuaishou-match-service.js'
export * from './admin-worker-config-service.js'
export * from './admin-worker-user-service.js'
export * from './admin-work-order-query-service.js'
export * from './admin-worker-feedback-service.js'
export * from './worker-product-match-config-service.js'
export * from './worker-announcement-config-service.js'
export * from './worker-hall-config-service.js'