拆分后台拼单配置服务

This commit is contained in:
yml2213
2026-08-21 17:12:46 +08:00
parent 15379b20b9
commit 12e789affc
3 changed files with 96 additions and 73 deletions
@@ -55,7 +55,6 @@ import {
mapWorkOrderAdmin,
mapWorkOrderShare,
normalizeAmountFen,
normalizeBoolean,
normalizeInteger,
normalizeOptionalId,
normalizePositiveInteger,
@@ -77,7 +76,6 @@ import {
import { ensureWorkerPlatformDefaults } from './worker-platform-defaults.js'
import { normalizeWorkOrderTimeoutPolicy } from './work-order-timeout-policy.js'
import { getRequiredWorkOrder, getRequiredWorker } from './worker-session-context-service.js'
import { resolveSharingQuantity } from './admin-worker-catalog-service.js'
import {
getKuaishouIndustrySourceConfig,
listKuaishouIndustryShopConfigs,
@@ -285,77 +283,10 @@ export async function deductAdminWorkOrderPendingDeposit(
return { deductedAmount: result.deductedAmount }
}
export async function getAdminWorkOrderSharing(workOrderId: number | string) {
const workOrder = await getRequiredWorkOrder(workOrderId)
const shares = await listWorkOrderShares(workOrder.id)
return {
order: mapWorkOrderAdmin(workOrder, shares),
shares: shares.map(mapWorkOrderShare),
}
}
export async function updateAdminWorkOrderSharing(
workOrderId: number | string,
payload: JsonObject = {},
actorName = '',
) {
const workOrder = await getRequiredWorkOrder(workOrderId)
if (!mapWorkOrderAdmin(workOrder).capabilities.canConfigureSharing) {
throw createHttpError('只有待完善、未分配或待抢单的工单可以配置拼单', {
statusCode: 409,
errorCode: 'work_order_sharing_config_status_invalid',
})
}
const enabled = normalizeBoolean(
payload.enabled ?? payload.sharingEnabled ?? payload.sharing_enabled,
false,
)
const unitReward = normalizeAmountFen(
payload.unitReward ?? payload.sharingUnitReward ?? payload.sharingUnitRewardYuan,
0,
)
const totalAmount = normalizeAmountFen(
payload.totalAmount ?? payload.sharingTotalAmount ?? payload.sharingTotalAmountYuan,
0,
)
const totalQuantity = resolveSharingQuantity(
totalAmount,
normalizePositiveInteger(
payload.totalQuantity ?? payload.sharingTotalQuantity ?? payload.sharing_total_quantity,
1,
),
unitReward,
)
const resolvedTotalAmount = totalAmount > 0 ? totalAmount : unitReward * totalQuantity
const now = nowIso()
const updated = await updateWorkOrder(workOrder.id, {
sharing_enabled: enabled,
sharing_total_quantity: totalQuantity,
sharing_unit_reward: unitReward,
reward_amount: enabled ? resolvedTotalAmount : workOrder.reward_amount,
updated_at: now,
})
await createWorkOrderEvent({
workOrderId: workOrder.id,
actorType: 'admin',
actorId: actorName,
eventType: 'sharing_config_updated',
fromStatus: workOrder.status,
toStatus: updated?.status || workOrder.status,
payloadJson: JSON.stringify({
enabled,
totalQuantity,
unitReward,
totalAmount: resolvedTotalAmount,
}),
now,
})
publishWorkOrderRealtimeChange({
workOrderId: Number(workOrder.id),
hallChanged: workOrder.status === WORK_ORDER_STATUS.OPEN,
})
return { order: mapWorkOrderAdmin(updated || workOrder) }
}
export {
getAdminWorkOrderSharing,
updateAdminWorkOrderSharing,
} from './admin-work-order-sharing-service.js'
export async function submitAdminWorkOrderMaterial(
workOrderId: number | string,
@@ -0,0 +1,91 @@
import { WORK_ORDER_STATUS } from '../../domain/work-order-status.js'
import {
createWorkOrderEvent,
listWorkOrderShares,
updateWorkOrder,
} 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 { publishWorkOrderRealtimeChange } from '../realtime/realtime-event-service.js'
import {
mapWorkOrderAdmin,
mapWorkOrderShare,
normalizeAmountFen,
normalizeBoolean,
normalizePositiveInteger,
} from './mappers.js'
import { resolveSharingQuantity } from './admin-worker-catalog-service.js'
import { getRequiredWorkOrder } from './worker-session-context-service.js'
export async function getAdminWorkOrderSharing(workOrderId: number | string) {
const workOrder = await getRequiredWorkOrder(workOrderId)
const shares = await listWorkOrderShares(workOrder.id)
return {
order: mapWorkOrderAdmin(workOrder, shares),
shares: shares.map(mapWorkOrderShare),
}
}
export async function updateAdminWorkOrderSharing(
workOrderId: number | string,
payload: JsonObject = {},
actorName = '',
) {
const workOrder = await getRequiredWorkOrder(workOrderId)
if (!mapWorkOrderAdmin(workOrder).capabilities.canConfigureSharing) {
throw createHttpError('只有待完善、未分配或待抢单的工单可以配置拼单', {
statusCode: 409,
errorCode: 'work_order_sharing_config_status_invalid',
})
}
const enabled = normalizeBoolean(
payload.enabled ?? payload.sharingEnabled ?? payload.sharing_enabled,
false,
)
const unitReward = normalizeAmountFen(
payload.unitReward ?? payload.sharingUnitReward ?? payload.sharingUnitRewardYuan,
0,
)
const totalAmount = normalizeAmountFen(
payload.totalAmount ?? payload.sharingTotalAmount ?? payload.sharingTotalAmountYuan,
0,
)
const totalQuantity = resolveSharingQuantity(
totalAmount,
normalizePositiveInteger(
payload.totalQuantity ?? payload.sharingTotalQuantity ?? payload.sharing_total_quantity,
1,
),
unitReward,
)
const resolvedTotalAmount = totalAmount > 0 ? totalAmount : unitReward * totalQuantity
const now = nowIso()
const updated = await updateWorkOrder(workOrder.id, {
sharing_enabled: enabled,
sharing_total_quantity: totalQuantity,
sharing_unit_reward: unitReward,
reward_amount: enabled ? resolvedTotalAmount : workOrder.reward_amount,
updated_at: now,
})
await createWorkOrderEvent({
workOrderId: workOrder.id,
actorType: 'admin',
actorId: actorName,
eventType: 'sharing_config_updated',
fromStatus: workOrder.status,
toStatus: updated?.status || workOrder.status,
payloadJson: JSON.stringify({
enabled,
totalQuantity,
unitReward,
totalAmount: resolvedTotalAmount,
}),
now,
})
publishWorkOrderRealtimeChange({
workOrderId: Number(workOrder.id),
hallChanged: workOrder.status === WORK_ORDER_STATUS.OPEN,
})
return { order: mapWorkOrderAdmin(updated || workOrder) }
}
@@ -28,6 +28,7 @@ export * from './admin-worker-user-service.js'
export * from './admin-work-order-query-service.js'
export * from './admin-worker-feedback-service.js'
export * from './admin-worker-cancel-service.js'
export * from './admin-work-order-sharing-service.js'
export * from './worker-product-match-config-service.js'
export * from './worker-announcement-config-service.js'
export * from './worker-hall-config-service.js'