修改同步落库

This commit is contained in:
wuweihua
2026-10-27 00:04:21 +08:00
parent 2bae431e74
commit 7924450b89
7 changed files with 90 additions and 249 deletions
@@ -31,7 +31,6 @@
已扫描 {{ progress.scanned || 0 }}
/ 本地已有 {{ progress.matched || 0 }}
/ 本地缺失 {{ progress.missing || 0 }}
/ 状态不一致 {{ progress.statusMismatch || 0 }}
</div>
<div v-if="progress.message" class="msg-line">{{ progress.message }}</div>
<div v-if="progress.error" class="err-line">{{ progress.error }}</div>
@@ -41,34 +40,7 @@
type="info"
:closable="false"
show-icon
title="比对转单号 + 订单状态:1) 上游有转单号、本地没有;2) 两端都有但 order_status 不一致。异步分页扫描,结果已写入操作记录。"
/>
<div class="json-panel__head">
<span>状态不一致(样本 {{ statusMismatchCount }})</span>
<el-button
type="primary"
link
:disabled="!canFillMismatch"
@click="fillMismatchToSearch"
>回填到单号搜索</el-button>
</div>
<el-table
v-if="statusMismatchRows.length"
:data="statusMismatchRows"
border
size="small"
max-height="320"
class="mb12"
>
<el-table-column type="index" width="55" label="#" />
<el-table-column prop="transferNo" label="转单号" min-width="180" show-overflow-tooltip />
<el-table-column prop="upstreamStatusLabel" label="上游状态" width="110" />
<el-table-column prop="localStatusLabel" label="本地状态" width="110" />
</el-table>
<el-empty
v-else-if="!running"
description="暂无状态不一致"
title="仅比对转单号是否已落库:上游有、本地在当前「订单状态」筛选范围内没有。不再比对状态一致性。"
/>
<div class="json-panel__head">
@@ -159,65 +131,6 @@ const progressStatus = computed(() => {
return undefined
})
const orderStatusMap = {
'0': '待提货',
'1': '已提货',
'2': '已收货',
'3': '运输中',
'4': '派送中',
'5': '已签收',
'6': '已完成',
'7': '已取消',
'8': '异常',
'9': '退件中',
'10': '已退件'
}
function labelStatus(v) {
const k = v == null ? '' : String(v).trim()
if (!k) return '-'
return orderStatusMap[k] || k
}
function normalizeMismatchList(raw) {
if (!Array.isArray(raw)) return []
return raw.map(row => {
if (row == null) return null
if (typeof row === 'string') {
return { transferNo: row, upstreamStatus: null, localStatus: null }
}
return {
transferNo: row.transferNo || row.transfer_no || '',
upstreamStatus: row.upstreamStatus ?? row.upstream_status ?? null,
localStatus: row.localStatus ?? row.local_status ?? null
}
}).filter(Boolean)
}
const statusMismatchRows = computed(() => {
const samples = normalizeMismatchList(progress.value?.statusMismatchSamples)
if (samples.length) {
return samples.map(row => ({
transferNo: row.transferNo,
upstreamStatusLabel: labelStatus(row.upstreamStatus),
localStatusLabel: labelStatus(row.localStatus)
}))
}
// fallback: flat transfer_no list when map samples missing
const flat = progress.value?.statusMismatchTransferNos || []
return (Array.isArray(flat) ? flat : []).map(tn => ({
transferNo: tn,
upstreamStatusLabel: '-',
localStatusLabel: '-'
}))
})
const statusMismatchCount = computed(() => {
const n = Number(progress.value?.statusMismatch)
if (!Number.isNaN(n) && n > 0) return n
return statusMismatchRows.value.length
})
const missingRows = computed(() => {
const list = progress.value?.missingTransferNos || []
return (Array.isArray(list) ? list : []).map(tn => ({ transferNo: tn }))
@@ -233,9 +146,6 @@ const canFillSearch = computed(() => {
return !running.value && missingRows.value.length > 0
})
const canFillMismatch = computed(() => {
return !running.value && statusMismatchRows.value.length > 0
})
function fillToSearch() {
const list = missingRows.value.map(r => String(r.transferNo || '').trim()).filter(Boolean)
@@ -248,17 +158,6 @@ function fillToSearch() {
visible.value = false
}
function fillMismatchToSearch() {
const list = statusMismatchRows.value.map(r => String(r.transferNo || '').trim()).filter(Boolean)
if (!list.length) {
ElMessage.warning('暂无可回填的状态不一致转单号')
return
}
const truncated = !!(progress.value?.statusMismatchTruncated)
|| (Number(progress.value?.statusMismatch || 0) > list.length)
emit('fill-search', { transferNos: list, truncated })
visible.value = false
}
function clearTimer() {
if (timer) {
@@ -291,7 +190,7 @@ function open(q) {
ElMessage.error('启动比对任务失败')
return
}
progress.value = { status: 'PENDING', percent: 0, message: 'queued', scanned: 0, matched: 0, missing: 0, statusMismatch: 0 }
progress.value = { status: 'PENDING', percent: 0, message: 'queued', scanned: 0, matched: 0, missing: 0 }
poll()
timer = setInterval(poll, 1500)
}).catch(() => {
@@ -421,7 +421,7 @@ function openOrderCompare() {
return
}
proxy.$modal.confirm(
'将按当前客户与提货时间,异步分页比对上游转单号与订单状态(缺失转单号 + 状态不一致),确认继续?',
'将按当前客户、提货时间与订单状态筛选,异步分页比对上游转单号是否已落库,确认继续?',
'二次确认'
).then(() => {
// 比对只按客户+时间;不带单号框内容(回填后可能有数千转单号,带上会把比对拖死)