拆分后台工单查询服务
This commit is contained in:
@@ -15,16 +15,12 @@ import {
|
||||
deductPendingDepositUnfreeze,
|
||||
deleteWorkOrder,
|
||||
getWorkerUserById,
|
||||
getWorkOrderStatistics,
|
||||
getWorkOrderByOrderItemId,
|
||||
listWorkOrders,
|
||||
listWorkOrderEventsByOrderId,
|
||||
listWorkProductRules,
|
||||
listWorkProductRuleMappings,
|
||||
listWorkerUsers,
|
||||
listWorkOrderShares,
|
||||
listWorkOrderSharesByOrderIds,
|
||||
sumPendingUnfreezeByOrderIds,
|
||||
resolveProblemWorkOrder,
|
||||
reopenCancelledWorkOrder,
|
||||
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
|
||||
@@ -40,7 +36,7 @@ import type { OrderItemRow, OrderRow } from '../../types/repository/rows.js'
|
||||
import { createHttpError } from '../../utils/http.js'
|
||||
import { randomId } from '../../utils/random.js'
|
||||
import { nowIso } from '../../utils/time.js'
|
||||
import { normalizePage, normalizePageSize, safeParseJson } from '../admin/admin-query-utils.js'
|
||||
import { safeParseJson } from '../admin/admin-query-utils.js'
|
||||
import { getWorkerFinanceConfig } from './worker-finance-config-service.js'
|
||||
import { getWorkerProductMatchConfig } from './worker-product-match-config-service.js'
|
||||
import { getWorkerHallConfig, saveWorkerHallConfig } from './worker-hall-config-service.js'
|
||||
@@ -72,11 +68,9 @@ import {
|
||||
normalizeProblemResolutionAction,
|
||||
normalizeRequirementFields,
|
||||
normalizeRequirementFieldsFromPayload,
|
||||
normalizeStatuses,
|
||||
normalizeSubmittedFields,
|
||||
normalizeUploadedFiles,
|
||||
resolveFreezeDepositAmount,
|
||||
mapWorkOrderEvents,
|
||||
resolveMatchingProductRuleDecision,
|
||||
resolveKuaishouWorkProductMatchContext,
|
||||
resolveRequirementFields,
|
||||
@@ -229,64 +223,7 @@ function resolveAssignedDeadlineAt(timeoutMinutes: number, now: string): string
|
||||
return new Date(new Date(now).getTime() + timeoutMinutes * 60 * 1000).toISOString()
|
||||
}
|
||||
|
||||
export async function getAdminWorkOrderEvents(workOrderId: number | string) {
|
||||
await getRequiredWorkOrder(workOrderId)
|
||||
const events = await listWorkOrderEventsByOrderId(workOrderId)
|
||||
return { items: await mapWorkOrderEvents(events, { includeWorkerSummary: true }) }
|
||||
}
|
||||
|
||||
export async function listAdminWorkOrders(query: JsonObject = {}) {
|
||||
const page = normalizePage(query.page)
|
||||
const pageSize = normalizePageSize(query.pageSize)
|
||||
const workOrderId = normalizeOptionalId(query.workOrderId ?? query.work_order_id) || 0
|
||||
const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0
|
||||
const workerLevelIds = normalizeStatuses(query.workerLevelIds ?? query.worker_level_ids)
|
||||
.map(normalizeOptionalId)
|
||||
.filter((levelId): levelId is number => levelId !== null)
|
||||
const statuses = normalizeStatuses(query.status)
|
||||
const vipEvidencePending = normalizeBoolean(query.vipEvidencePending, false)
|
||||
const { items, total } = await listWorkOrders({
|
||||
page,
|
||||
pageSize,
|
||||
statuses,
|
||||
workOrderId,
|
||||
keyword: String(query.keyword || '').trim(),
|
||||
workerSharingId: workerId,
|
||||
workerLevelIds,
|
||||
vipEvidencePending,
|
||||
useOperationalStatus: true,
|
||||
})
|
||||
const statistics = await getWorkOrderStatistics({
|
||||
statuses,
|
||||
workOrderId,
|
||||
keyword: String(query.keyword || '').trim(),
|
||||
workerSharingId: workerId,
|
||||
workerLevelIds,
|
||||
vipEvidencePending,
|
||||
useOperationalStatus: true,
|
||||
})
|
||||
const pendingUnfreezeByOrderId = await sumPendingUnfreezeByOrderIds(
|
||||
items.map((item) => Number(item.id)),
|
||||
)
|
||||
const shares = await listWorkOrderSharesByOrderIds(items.map((item) => Number(item.id)))
|
||||
const sharesByOrderId = new Map<number, typeof shares>()
|
||||
for (const share of shares) {
|
||||
const workOrderId = Number(share.work_order_id)
|
||||
const current = sharesByOrderId.get(workOrderId) || []
|
||||
current.push(share)
|
||||
sharesByOrderId.set(workOrderId, current)
|
||||
}
|
||||
return {
|
||||
items: items.map((item) => {
|
||||
return {
|
||||
...mapWorkOrderAdmin(item, sharesByOrderId.get(Number(item.id)) || []),
|
||||
pendingUnfreezeAmount: pendingUnfreezeByOrderId.get(Number(item.id)) || 0,
|
||||
}
|
||||
}),
|
||||
pagination: { page, pageSize, total },
|
||||
statistics,
|
||||
}
|
||||
}
|
||||
export { getAdminWorkOrderEvents, listAdminWorkOrders } from './admin-work-order-query-service.js'
|
||||
|
||||
export async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
|
||||
const status = String(query.status || 'pending').trim()
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
import {
|
||||
getWorkOrderStatistics,
|
||||
listWorkOrderEventsByOrderId,
|
||||
listWorkOrderSharesByOrderIds,
|
||||
listWorkOrders,
|
||||
sumPendingUnfreezeByOrderIds,
|
||||
} from '../../repositories/worker-platform/index.js'
|
||||
import type { JsonObject } from '../../types/json.js'
|
||||
import { normalizePage, normalizePageSize } from '../admin/admin-query-utils.js'
|
||||
import {
|
||||
mapWorkOrderAdmin,
|
||||
mapWorkOrderEvents,
|
||||
normalizeBoolean,
|
||||
normalizeOptionalId,
|
||||
normalizeStatuses,
|
||||
} from './mappers.js'
|
||||
import { getRequiredWorkOrder } from './worker-session-context-service.js'
|
||||
|
||||
export async function getAdminWorkOrderEvents(workOrderId: number | string) {
|
||||
await getRequiredWorkOrder(workOrderId)
|
||||
const events = await listWorkOrderEventsByOrderId(workOrderId)
|
||||
return { items: await mapWorkOrderEvents(events, { includeWorkerSummary: true }) }
|
||||
}
|
||||
|
||||
export async function listAdminWorkOrders(query: JsonObject = {}) {
|
||||
const page = normalizePage(query.page)
|
||||
const pageSize = normalizePageSize(query.pageSize)
|
||||
const workOrderId = normalizeOptionalId(query.workOrderId ?? query.work_order_id) || 0
|
||||
const workerId = normalizeOptionalId(query.workerId ?? query.worker_id) || 0
|
||||
const workerLevelIds = normalizeStatuses(query.workerLevelIds ?? query.worker_level_ids)
|
||||
.map(normalizeOptionalId)
|
||||
.filter((levelId): levelId is number => levelId !== null)
|
||||
const statuses = normalizeStatuses(query.status)
|
||||
const vipEvidencePending = normalizeBoolean(query.vipEvidencePending, false)
|
||||
const filters = {
|
||||
statuses,
|
||||
workOrderId,
|
||||
keyword: String(query.keyword || '').trim(),
|
||||
workerSharingId: workerId,
|
||||
workerLevelIds,
|
||||
vipEvidencePending,
|
||||
useOperationalStatus: true,
|
||||
}
|
||||
const { items, total } = await listWorkOrders({ page, pageSize, ...filters })
|
||||
const statistics = await getWorkOrderStatistics(filters)
|
||||
const pendingUnfreezeByOrderId = await sumPendingUnfreezeByOrderIds(
|
||||
items.map((item) => Number(item.id)),
|
||||
)
|
||||
const shares = await listWorkOrderSharesByOrderIds(items.map((item) => Number(item.id)))
|
||||
const sharesByOrderId = new Map<number, typeof shares>()
|
||||
for (const share of shares) {
|
||||
const orderId = Number(share.work_order_id)
|
||||
const current = sharesByOrderId.get(orderId) || []
|
||||
current.push(share)
|
||||
sharesByOrderId.set(orderId, current)
|
||||
}
|
||||
return {
|
||||
items: items.map((item) => ({
|
||||
...mapWorkOrderAdmin(item, sharesByOrderId.get(Number(item.id)) || []),
|
||||
pendingUnfreezeAmount: pendingUnfreezeByOrderId.get(Number(item.id)) || 0,
|
||||
})),
|
||||
pagination: { page, pageSize, total },
|
||||
statistics,
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ export * from './admin-worker-catalog-service.js'
|
||||
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 './worker-product-match-config-service.js'
|
||||
export * from './worker-announcement-config-service.js'
|
||||
export * from './worker-hall-config-service.js'
|
||||
|
||||
Reference in New Issue
Block a user