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 | 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> | 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 ): Promise { 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 }