const STATUS_META = { 1: { text: '正常', type: 'success' }, 0: { text: '冻结', type: 'info' } } export const TASK_INSTANCE_REPORT_TITLE = '任务实例报表' function normalizeText(value) { return String(value ?? '').trim() } function normalizeNumber(value) { if (value === '' || value === null || value === undefined) { return null } const numericValue = Number(value) return Number.isFinite(numericValue) ? numericValue : null } function normalizeDateTime(value) { return normalizeText(value) || '--' } export function createTaskInstanceSearchState() { return { condition: '', timeStart: '', timeEnd: '', taskNo: '', bizNo: '', bizType: '', templateId: '', templateCode: '', templateVersion: '', sourceInfo: '', targetInfo: '', sourceCode: '', targetCode: '', plannedPath: '', actualPath: '', priority: '', timeoutAt: '', currentNodeCode: '', currentNodeName: '', totalNodes: '', completedNodes: '', progressRate: '', estimatedDurationMinutes: '', actualDurationMinutes: '', startTime: '', endTime: '', resultCode: '', resultMessage: '', resultData: '', retryTimes: '', lastRetryTime: '', extParams: '', remark: '', memo: '', status: '' } } export function getTaskInstancePaginationKey() { return { current: 'current', size: 'pageSize' } } export function buildTaskInstanceSearchParams(params = {}) { const result = {} ;[ 'condition', 'taskNo', 'bizNo', 'bizType', 'templateCode', 'sourceInfo', 'targetInfo', 'sourceCode', 'targetCode', 'plannedPath', 'actualPath', 'timeoutAt', 'currentNodeCode', 'currentNodeName', 'startTime', 'endTime', 'resultCode', 'resultMessage', 'resultData', 'lastRetryTime', 'extParams', 'remark', 'memo' ].forEach((key) => { const value = normalizeText(params[key]) if (value) { result[key] = value } }) ;['timeStart', 'timeEnd'].forEach((key) => { if (params[key]) { result[key] = params[key] } }) ;[ 'templateId', 'templateVersion', 'priority', 'totalNodes', 'completedNodes', 'progressRate', 'estimatedDurationMinutes', 'actualDurationMinutes', 'retryTimes', 'status' ].forEach((key) => { const value = normalizeNumber(params[key]) if (value !== null) { result[key] = value } }) return { condition: '', ...result } } export function buildTaskInstancePageQueryParams(params = {}) { return { current: params.current || 1, pageSize: params.pageSize || params.size || 20, ...buildTaskInstanceSearchParams(params) } } export function normalizeTaskInstanceRow(record = {}) { const statusMeta = STATUS_META[Number(record.status)] || STATUS_META[0] return { ...record, id: record.id ?? '--', taskNo: normalizeText(record.taskNo) || '--', bizNo: normalizeText(record.bizNo) || '--', bizType: normalizeText(record.bizType) || '--', templateCode: normalizeText(record.templateCode) || '--', sourceCode: normalizeText(record.sourceCode) || '--', targetCode: normalizeText(record.targetCode) || '--', currentNodeName: normalizeText(record.currentNodeName) || '--', progressRate: record.progressRate ?? '--', resultMessage: normalizeText(record.resultMessage) || '--', startTimeText: normalizeDateTime(record['startTime$'] || record.startTimeText || record.startTime), endTimeText: normalizeDateTime(record['endTime$'] || record.endTimeText || record.endTime), statusText: record['status$'] || statusMeta.text, statusType: statusMeta.type, memo: normalizeText(record.memo) || '--', remark: normalizeText(record.remark) || '--' } } export function getTaskInstanceReportColumns() { return [ { prop: 'taskNo', label: '任务号' }, { prop: 'bizNo', label: '业务单号' }, { prop: 'bizType', label: '业务类型' }, { prop: 'templateCode', label: '模板编码' }, { prop: 'sourceCode', label: '来源编码' }, { prop: 'targetCode', label: '目标编码' }, { prop: 'currentNodeName', label: '当前节点' }, { prop: 'progressRate', label: '节点进度' }, { prop: 'resultMessage', label: '结果信息' }, { prop: 'startTimeText', label: '开始时间' }, { prop: 'endTimeText', label: '结束时间' }, { prop: 'statusText', label: '状态' }, { prop: 'memo', label: '备注' } ] } export function buildTaskInstancePrintRows(records = []) { return (Array.isArray(records) ? records : []).map((record) => { const row = normalizeTaskInstanceRow(record) return { taskNo: row.taskNo, bizNo: row.bizNo, bizType: row.bizType, templateCode: row.templateCode, sourceCode: row.sourceCode, targetCode: row.targetCode, currentNodeName: row.currentNodeName, progressRate: row.progressRate, resultMessage: row.resultMessage, startTimeText: row.startTimeText, endTimeText: row.endTimeText, statusText: row.statusText, memo: row.memo } }) }