优化
This commit is contained in:
@@ -35,23 +35,23 @@ async function loadFeeItem(context, direction) {
|
||||
const data = context.apiSuccess(MODULE, `读取 ${direction} ACTIVE 费用项目`, response, '', OPTIONS)
|
||||
return rows(data).find((item) => item?.status === 'ACTIVE' && (direction === 'RECEIVABLE'
|
||||
? item.warehouseReceivable === true
|
||||
: item.warehousePayable === true && /BOOKING|FREIGHT|OCEAN|SHIPPING|订舱|海运|运费/i.test(`${item.feeCode || item.code || ''} ${item.feeName || item.name || ''}`))) || null
|
||||
: item.warehousePayable === true)) || null
|
||||
}
|
||||
|
||||
async function loadActivePartner(context) {
|
||||
const response = await context.request('GET', '/api/platform/v1/suppliers?page=1&size=200&status=ACTIVE&category=BOOKING')
|
||||
const data = context.apiSuccess(MODULE, '读取 Warehouse ACTIVE 订舱供应商', response, 'category=BOOKING', OPTIONS)
|
||||
return rows(data).find((item) => item?.status === 'ACTIVE' && item?.category === 'BOOKING') || null
|
||||
async function loadActiveSupplier(context, category) {
|
||||
const suffix = category ? `&category=${encodeURIComponent(category)}` : ''
|
||||
const response = await context.request('GET', `/api/platform/v1/suppliers?page=1&size=200&status=ACTIVE${suffix}`)
|
||||
const data = context.apiSuccess(MODULE, '读取 Warehouse ACTIVE 供应商', response, category ? `category=${category}` : 'all categories', OPTIONS)
|
||||
return rows(data).find((item) => item?.status === 'ACTIVE' && (!category || item?.category === category)) || null
|
||||
}
|
||||
|
||||
async function createFee(context, resource, item, spec, partner) {
|
||||
async function createFee(context, resource, item, spec, supplier) {
|
||||
const base = `/api/platform/v1/inbounds/${encodeURIComponent(resource.inboundId)}/fee-details`
|
||||
const path = `${base}?accountId=${encodeURIComponent(resource.tenantId)}`
|
||||
const body = {
|
||||
feeItemId: Number(item.id), direction: spec.direction, businessDate: spec.businessDate,
|
||||
unitPrice: spec.amount, currency: 'CNY', amount: spec.amount, settlementIncluded: true,
|
||||
partnerId: spec.direction === 'PAYABLE' ? String(partner.id) : null,
|
||||
partnerName: spec.direction === 'PAYABLE' ? (partner.name || null) : null,
|
||||
unitPrice: spec.amount, currency: 'CNY', amount: spec.amount,
|
||||
supplierId: spec.direction === 'PAYABLE' ? String(supplier.id) : null,
|
||||
remark: `${FIXED_MARKER}-${spec.name}`,
|
||||
}
|
||||
const response = await request(context, 'POST', path, body, `create-${spec.name}`)
|
||||
@@ -127,10 +127,10 @@ export async function run(context) {
|
||||
|
||||
const receivableItem = await loadFeeItem(context, 'RECEIVABLE')
|
||||
const payableItem = await loadFeeItem(context, 'PAYABLE')
|
||||
const partner = await loadActivePartner(context)
|
||||
if (!receivableItem || !payableItem || !partner?.id) {
|
||||
const supplier = await loadActiveSupplier(context, payableItem?.supplierCategory || null)
|
||||
if (!receivableItem || !payableItem || !supplier?.id) {
|
||||
blocker(context, '费用状态矩阵前置主数据完整',
|
||||
`receivableFeeItem=${id(receivableItem?.id) || 'missing'}, payableFeeItem=${id(payableItem?.id) || 'missing'}, activePartner=${id(partner?.id) || 'missing'}`)
|
||||
`receivableFeeItem=${id(receivableItem?.id) || 'missing'}, payableFeeItem=${id(payableItem?.id) || 'missing'}, activeSupplier=${id(supplier?.id) || 'missing'}`)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ export async function run(context) {
|
||||
for (const [index, spec] of specs.entries()) {
|
||||
const resource = resources[index % resources.length]
|
||||
const fixture = await createFee(context, resource,
|
||||
spec.direction === 'RECEIVABLE' ? receivableItem : payableItem, spec, partner)
|
||||
spec.direction === 'RECEIVABLE' ? receivableItem : payableItem, spec, supplier)
|
||||
if (!fixture) continue
|
||||
if (spec.action === 'reject') {
|
||||
const response = await request(context, 'POST', `${fixture.base}/${fixture.feeId}/reject?accountId=${encodeURIComponent(resource.tenantId)}`,
|
||||
@@ -168,8 +168,7 @@ export async function run(context) {
|
||||
const conflictTarget = fixtures.find((item) => item.name === 'AR-APPROVED')
|
||||
if (conflictTarget) {
|
||||
const adjustBody = { feeItemId: Number(receivableItem.id), direction: 'RECEIVABLE', businessDate: conflictTarget.businessDate,
|
||||
unitPrice: 115, currency: 'CNY', amount: 115, settlementIncluded: true,
|
||||
partnerId: null, partnerName: null, remark: `${FIXED_MARKER}-CONFLICT` }
|
||||
unitPrice: 115, currency: 'CNY', amount: 115, remark: `${FIXED_MARKER}-CONFLICT` }
|
||||
const conflict = await request(context, 'POST',
|
||||
`${conflictTarget.base}/${conflictTarget.feeId}/adjust?accountId=${encodeURIComponent(conflictTarget.resource.tenantId)}&expectedSourceVersion=999`,
|
||||
adjustBody, 'stale-adjust')
|
||||
@@ -182,8 +181,7 @@ export async function run(context) {
|
||||
if (replayTarget) {
|
||||
const replayPath = `${replayTarget.base}?accountId=${encodeURIComponent(replayTarget.resource.tenantId)}`
|
||||
const replayBody = { feeItemId: Number(receivableItem.id), direction: 'RECEIVABLE', businessDate: replayTarget.businessDate,
|
||||
unitPrice: 116, currency: 'CNY', amount: 116, settlementIncluded: true,
|
||||
partnerId: null, partnerName: null, remark: `${FIXED_MARKER}-IDEMPOTENT` }
|
||||
unitPrice: 116, currency: 'CNY', amount: 116, remark: `${FIXED_MARKER}-IDEMPOTENT` }
|
||||
const first = await request(context, 'POST', replayPath, replayBody, 'idempotent-create')
|
||||
const second = await request(context, 'POST', replayPath, replayBody, 'idempotent-create')
|
||||
const firstData = first?.body?.data; const secondData = second?.body?.data
|
||||
|
||||
Reference in New Issue
Block a user