拆分后台工单查询服务
This commit is contained in:
@@ -15,16 +15,12 @@ import {
|
|||||||
deductPendingDepositUnfreeze,
|
deductPendingDepositUnfreeze,
|
||||||
deleteWorkOrder,
|
deleteWorkOrder,
|
||||||
getWorkerUserById,
|
getWorkerUserById,
|
||||||
getWorkOrderStatistics,
|
|
||||||
getWorkOrderByOrderItemId,
|
getWorkOrderByOrderItemId,
|
||||||
listWorkOrders,
|
listWorkOrders,
|
||||||
listWorkOrderEventsByOrderId,
|
|
||||||
listWorkProductRules,
|
listWorkProductRules,
|
||||||
listWorkProductRuleMappings,
|
listWorkProductRuleMappings,
|
||||||
listWorkerUsers,
|
listWorkerUsers,
|
||||||
listWorkOrderShares,
|
listWorkOrderShares,
|
||||||
listWorkOrderSharesByOrderIds,
|
|
||||||
sumPendingUnfreezeByOrderIds,
|
|
||||||
resolveProblemWorkOrder,
|
resolveProblemWorkOrder,
|
||||||
reopenCancelledWorkOrder,
|
reopenCancelledWorkOrder,
|
||||||
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
|
listAdminWorkerCancelRequests as listWorkerCancelRequestsForAdmin,
|
||||||
@@ -40,7 +36,7 @@ import type { OrderItemRow, OrderRow } from '../../types/repository/rows.js'
|
|||||||
import { createHttpError } from '../../utils/http.js'
|
import { createHttpError } from '../../utils/http.js'
|
||||||
import { randomId } from '../../utils/random.js'
|
import { randomId } from '../../utils/random.js'
|
||||||
import { nowIso } from '../../utils/time.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 { getWorkerFinanceConfig } from './worker-finance-config-service.js'
|
||||||
import { getWorkerProductMatchConfig } from './worker-product-match-config-service.js'
|
import { getWorkerProductMatchConfig } from './worker-product-match-config-service.js'
|
||||||
import { getWorkerHallConfig, saveWorkerHallConfig } from './worker-hall-config-service.js'
|
import { getWorkerHallConfig, saveWorkerHallConfig } from './worker-hall-config-service.js'
|
||||||
@@ -72,11 +68,9 @@ import {
|
|||||||
normalizeProblemResolutionAction,
|
normalizeProblemResolutionAction,
|
||||||
normalizeRequirementFields,
|
normalizeRequirementFields,
|
||||||
normalizeRequirementFieldsFromPayload,
|
normalizeRequirementFieldsFromPayload,
|
||||||
normalizeStatuses,
|
|
||||||
normalizeSubmittedFields,
|
normalizeSubmittedFields,
|
||||||
normalizeUploadedFiles,
|
normalizeUploadedFiles,
|
||||||
resolveFreezeDepositAmount,
|
resolveFreezeDepositAmount,
|
||||||
mapWorkOrderEvents,
|
|
||||||
resolveMatchingProductRuleDecision,
|
resolveMatchingProductRuleDecision,
|
||||||
resolveKuaishouWorkProductMatchContext,
|
resolveKuaishouWorkProductMatchContext,
|
||||||
resolveRequirementFields,
|
resolveRequirementFields,
|
||||||
@@ -229,64 +223,7 @@ function resolveAssignedDeadlineAt(timeoutMinutes: number, now: string): string
|
|||||||
return new Date(new Date(now).getTime() + timeoutMinutes * 60 * 1000).toISOString()
|
return new Date(new Date(now).getTime() + timeoutMinutes * 60 * 1000).toISOString()
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAdminWorkOrderEvents(workOrderId: number | string) {
|
export { getAdminWorkOrderEvents, listAdminWorkOrders } from './admin-work-order-query-service.js'
|
||||||
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 async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
|
export async function listAdminWorkerCancelRequests(query: JsonObject = {}) {
|
||||||
const status = String(query.status || 'pending').trim()
|
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-kuaishou-match-service.js'
|
||||||
export * from './admin-worker-config-service.js'
|
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 './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