77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
export type PresignTransferLike = {
|
||
id?: string | null
|
||
payStatus?: string | null
|
||
}
|
||
|
||
export type AutoSubmitFailure = {
|
||
id: string
|
||
message: string
|
||
}
|
||
|
||
export function collectDfjTransferIds(
|
||
transfers: PresignTransferLike[] | null | undefined
|
||
): string[] {
|
||
const rows = Array.isArray(transfers) ? transfers : []
|
||
return rows
|
||
.filter((row) => {
|
||
const id = String(row?.id || '').trim()
|
||
const status = String(row?.payStatus || 'dfj').trim() || 'dfj'
|
||
return Boolean(id) && status === 'dfj'
|
||
})
|
||
.map((row) => String(row.id).trim())
|
||
}
|
||
|
||
export function formatAutoSubmitFinanceFailureMessage(
|
||
failures: Array<AutoSubmitFailure | string> | null | undefined,
|
||
entityLabel = '订单'
|
||
): string {
|
||
const list = Array.isArray(failures) ? failures.filter(Boolean) : []
|
||
if (!list.length) return ''
|
||
const reasons = list
|
||
.map((item) =>
|
||
typeof item === 'string'
|
||
? item.trim()
|
||
: String(item?.message || '提交失败').trim()
|
||
)
|
||
.filter(Boolean)
|
||
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(
|
||
transfers: PresignTransferLike[] | null | undefined,
|
||
submitOne: (transferId: string) => Promise<unknown>
|
||
): Promise<AutoSubmitFailure[]> {
|
||
const ids = collectDfjTransferIds(transfers)
|
||
const failures: AutoSubmitFailure[] = []
|
||
for (const id of ids) {
|
||
try {
|
||
await submitOne(id)
|
||
} catch (error: any) {
|
||
failures.push({
|
||
id,
|
||
message: String(error?.message || error || '提交失败').trim() || '提交失败'
|
||
})
|
||
}
|
||
}
|
||
return failures
|
||
}
|