This commit is contained in:
zlwu committed 2026-10-15 23:21:07 +08:00
1 parent ecde2ba07d
commit 06d021807b
61 files changed
+14874 -8772

No files matched your search

@@ -2,6 +2,7 @@ import { describe, it } from 'node:test'
import assert from 'node:assert/strict'
import {
collectDfjTransferIds,
flattenSamplePaymentTransfers,
formatAutoSubmitFinanceFailureMessage,
submitDfjTransfersOnSave
} from './presign-save-auto-submit'
@@ -30,6 +31,31 @@ describe('presign-save-auto-submit', () => {
)
})
it('formats protocol entity label', () => {
assert.equal(
formatAutoSubmitFinanceFailureMessage([{ id: 't1', message: '请选择转账方式' }], '协议'),
'协议已保存,但有 1 笔提交财务确认失败:请选择转账方式'
)
})
it('flattens sample payment transfers', () => {
assert.deepEqual(
flattenSamplePaymentTransfers([
{
schedules: [
{ transfers: [{ id: 'a', payStatus: 'dfj' }] },
{ transfers: [{ id: 'b', payStatus: 'jfqrz' }, null] }
]
},
{ schedules: [] }
]),
[
{ id: 'a', payStatus: 'dfj' },
{ id: 'b', payStatus: 'jfqrz' }
]
)
})
it('continues submitting after one failure', async () => {
const calls: string[] = []
const failures = await submitDfjTransfersOnSave(
@@ -22,7 +22,8 @@ export function collectDfjTransferIds(
}
export function formatAutoSubmitFinanceFailureMessage(
failures: Array<AutoSubmitFailure | string> | null | undefined
failures: Array<AutoSubmitFailure | string> | null | undefined,
entityLabel = '订单'
): string {
const list = Array.isArray(failures) ? failures.filter(Boolean) : []
if (!list.length) return ''
@@ -33,7 +34,26 @@ export function formatAutoSubmitFinanceFailureMessage(
: String(item?.message || '提交失败').trim()
)
.filter(Boolean)
return `订单已保存,但有 ${list.length} 笔提交财务确认失败:${reasons.join(';')}`
const label = String(entityLabel || '订单').trim() || '订单'
return `${label}已保存,但有 ${list.length} 笔提交财务确认失败:${reasons.join(';')}`
}
/** 从 v2 samplePayments 展平全部转账笔(供保存后自动提交财务) */
export function flattenSamplePaymentTransfers(
samplePayments: Array<Record<string, any>> | null | undefined
): PresignTransferLike[] {
const payments = Array.isArray(samplePayments) ? samplePayments : []
const out: PresignTransferLike[] = []
for (const pay of payments) {
const schedules = Array.isArray(pay?.schedules) ? pay.schedules : []
for (const sch of schedules) {
const transfers = Array.isArray(sch?.transfers) ? sch.transfers : []
for (const tr of transfers) {
if (tr && typeof tr === 'object') out.push(tr)
}
}
}
return out
}
export async function submitDfjTransfersOnSave(