拆分后台拼单配置服务
This commit is contained in:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user