拆分后台拼单配置服务
This commit is contained in:
@@ -55,7 +55,6 @@ import {
|
|||||||
mapWorkOrderAdmin,
|
mapWorkOrderAdmin,
|
||||||
mapWorkOrderShare,
|
mapWorkOrderShare,
|
||||||
normalizeAmountFen,
|
normalizeAmountFen,
|
||||||
normalizeBoolean,
|
|
||||||
normalizeInteger,
|
normalizeInteger,
|
||||||
normalizeOptionalId,
|
normalizeOptionalId,
|
||||||
normalizePositiveInteger,
|
normalizePositiveInteger,
|
||||||
@@ -77,7 +76,6 @@ import {
|
|||||||
import { ensureWorkerPlatformDefaults } from './worker-platform-defaults.js'
|
import { ensureWorkerPlatformDefaults } from './worker-platform-defaults.js'
|
||||||
import { normalizeWorkOrderTimeoutPolicy } from './work-order-timeout-policy.js'
|
import { normalizeWorkOrderTimeoutPolicy } from './work-order-timeout-policy.js'
|
||||||
import { getRequiredWorkOrder, getRequiredWorker } from './worker-session-context-service.js'
|
import { getRequiredWorkOrder, getRequiredWorker } from './worker-session-context-service.js'
|
||||||
import { resolveSharingQuantity } from './admin-worker-catalog-service.js'
|
|
||||||
import {
|
import {
|
||||||
getKuaishouIndustrySourceConfig,
|
getKuaishouIndustrySourceConfig,
|
||||||
listKuaishouIndustryShopConfigs,
|
listKuaishouIndustryShopConfigs,
|
||||||
@@ -285,77 +283,10 @@ export async function deductAdminWorkOrderPendingDeposit(
|
|||||||
return { deductedAmount: result.deductedAmount }
|
return { deductedAmount: result.deductedAmount }
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAdminWorkOrderSharing(workOrderId: number | string) {
|
export {
|
||||||
const workOrder = await getRequiredWorkOrder(workOrderId)
|
getAdminWorkOrderSharing,
|
||||||
const shares = await listWorkOrderShares(workOrder.id)
|
updateAdminWorkOrderSharing,
|
||||||
return {
|
} from './admin-work-order-sharing-service.js'
|
||||||
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 async function submitAdminWorkOrderMaterial(
|
export async function submitAdminWorkOrderMaterial(
|
||||||
workOrderId: number | string,
|
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-work-order-query-service.js'
|
||||||
export * from './admin-worker-feedback-service.js'
|
export * from './admin-worker-feedback-service.js'
|
||||||
export * from './admin-worker-cancel-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-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