diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TabOrderMonitorQuery.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TabOrderMonitorQuery.java index 0d712110..4b66be56 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TabOrderMonitorQuery.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TabOrderMonitorQuery.java @@ -43,6 +43,11 @@ public class TabOrderMonitorQuery implements Serializable * 空则服务端回落默认 3,4,5,6,7,8,11(与历史硬编码一致)。 */ private List orderStatuses; + /** + * 是否收货 BL_PICKUP。1 已收货,0 未收货。 + * 空则服务端回落 1,与历史查询一致。 + */ + private Integer blPickup; /** 分批同步计费每批条数 */ private Integer batchSize; /** Excel export field names (Java props; export only). */ diff --git a/bms-back/bms-system/src/main/java/com/bms/price/mapper/OracleUpstreamOrderMapper.java b/bms-back/bms-system/src/main/java/com/bms/price/mapper/OracleUpstreamOrderMapper.java index c2eb2cbf..c7f23bc5 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/mapper/OracleUpstreamOrderMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/mapper/OracleUpstreamOrderMapper.java @@ -70,7 +70,8 @@ public interface OracleUpstreamOrderMapper List> selectMatchedTransferOrderKeys( @Param("orderTable") String orderTable, @Param("batch") List batch, - @Param("customerCodes") List customerCodes); + @Param("customerCodes") List customerCodes, + @Param("blPickup") Integer blPickup); /** 按已收集到的订单主键批量查明细(一批为一个内存分页切片)。 */ diff --git a/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderKeyCollectWorker.java b/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderKeyCollectWorker.java index 80346f6c..06cb62d8 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderKeyCollectWorker.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderKeyCollectWorker.java @@ -28,8 +28,9 @@ public class OracleOrderKeyCollectWorker /** 比对回填转单号专用分批(不走三列 UNION)。 */ @DataSource(DataSourceType.SLAVE) - public List> collectTransferBatch(String table, List batch, List customerCodes) + public List> collectTransferBatch(String table, List batch, List customerCodes, + Integer blPickup) { - return oracleUpstreamOrderMapper.selectMatchedTransferOrderKeys(table, batch, customerCodes); + return oracleUpstreamOrderMapper.selectMatchedTransferOrderKeys(table, batch, customerCodes, blPickup); } } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/oracle/TabOrderMonitorService.java b/bms-back/bms-system/src/main/java/com/bms/price/oracle/TabOrderMonitorService.java index 151c894b..1679feb8 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/oracle/TabOrderMonitorService.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/oracle/TabOrderMonitorService.java @@ -456,12 +456,13 @@ public class TabOrderMonitorService } } List customerCodes = cleanedCodes.isEmpty() ? null : cleanedCodes; + normalizeBlPickup(query); int[] page = normalizePage(pageNum, pageSize); int pn = page[0]; int ps = page[1]; String table = resolveTable(); long t0 = System.currentTimeMillis(); - List keys = doCollectTransferKeys(table, nos, customerCodes); + List keys = doCollectTransferKeys(table, nos, customerCodes, query.getBlPickup()); List rows = doPageByKeys(table, keys, pn, ps); log.info("oracle tab_order transfer-fill page transferNos={} matched={} page={}/{} rows={} costMs={}", Integer.valueOf(nos.size()), Integer.valueOf(keys.size()), @@ -795,12 +796,14 @@ public class TabOrderMonitorService * 回填转单号专用收集:只走 selectMatchedTransferOrderKeys, * 不走三列 UNION、不带提货时间。 */ - private List doCollectTransferKeys(String table, List transferNos, List customerCodes) + private List doCollectTransferKeys(String table, List transferNos, List customerCodes, + Integer blPickup) { StringBuilder fp = new StringBuilder("tf|").append(table == null ? "" : table).append('|'); appendSorted(fp, transferNos); fp.append('|'); appendSorted(fp, customerCodes); + fp.append('|').append(blPickup == null ? "" : blPickup); String fingerprint = Integer.toHexString(fp.toString().hashCode()); long now = System.currentTimeMillis(); CacheEntry cached = collectCache.get(fingerprint); @@ -821,7 +824,7 @@ public class TabOrderMonitorService new ArrayList>>>(batches.size()); for (List batch : batches) { - futures.add(collectPool.submit(() -> collectWorker.collectTransferBatch(table, batch, customerCodes))); + futures.add(collectPool.submit(() -> collectWorker.collectTransferBatch(table, batch, customerCodes, blPickup))); } Map unique = new LinkedHashMap(); @@ -1035,6 +1038,7 @@ public class TabOrderMonitorService .append('|').append(safe(q.getOrderId())).append('|').append(safe(q.getOrgOrderId())) .append('|').append(safe(q.getTransferOrderId())).append('|'); appendSortedInts(sb, q.getOrderStatuses()); + sb.append('|').append(q.getBlPickup() == null ? "" : q.getBlPickup()); return Integer.toHexString(sb.toString().hashCode()); } @@ -1207,6 +1211,7 @@ public class TabOrderMonitorService query.setOrgOrderId(trimToNull(query.getOrgOrderId())); query.setTransferOrderId(trimToNull(query.getTransferOrderId())); normalizeOrderStatuses(query); + normalizeBlPickup(query); } /** Empty/missing -> default 3,4,5,6,7,8,11 so SQL always has a status IN list. */ @@ -1227,6 +1232,16 @@ public class TabOrderMonitorService query.setOrderStatuses(cleaned.isEmpty() ? new ArrayList(DEFAULT_ORDER_STATUSES) : cleaned); } + /** Empty or anything other than 0/1 falls back to 1(已收货). */ + private static void normalizeBlPickup(TabOrderMonitorQuery query) + { + Integer blPickup = query.getBlPickup(); + if (blPickup == null || (blPickup.intValue() != 0 && blPickup.intValue() != 1)) + { + query.setBlPickup(Integer.valueOf(1)); + } + } + /** * 多行文本归一化:按换行/逗号/分号/顿号拆分(不按空格拆),trim、去空去重。 */ diff --git a/bms-back/bms-system/src/main/resources/mapper/price/OracleUpstreamOrderMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/OracleUpstreamOrderMapper.xml index 33d3e605..9f8e7b6c 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/OracleUpstreamOrderMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/OracleUpstreamOrderMapper.xml @@ -66,7 +66,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND o.PICKUP_DATE <= TO_DATE(#{query.endTime}, 'YYYY-MM-DD HH24:MI:SS') - AND o.BL_PICKUP = 1 + + + AND o.BL_PICKUP = #{query.blPickup} + + + + + AND o.ORDER_STATUS IN @@ -274,7 +281,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{bid} - AND o.BL_PICKUP = 1 + + + AND o.BL_PICKUP = #{blPickup} + + + + + AND o.ORDER_STATUS IN (3, 4, 5, 6, 7, 8, 11) AND o.CUSTOMER_CODE IN diff --git a/bms-front/src/views/monitor/orderSource/components/OrderSourceSyncDialog.vue b/bms-front/src/views/monitor/orderSource/components/OrderSourceSyncDialog.vue index 47455435..f9a77c65 100644 --- a/bms-front/src/views/monitor/orderSource/components/OrderSourceSyncDialog.vue +++ b/bms-front/src/views/monitor/orderSource/components/OrderSourceSyncDialog.vue @@ -240,6 +240,7 @@ function submit(skipConfirm) { orgOrderId: q.orgOrderId || undefined, transferOrderId: q.transferOrderId || undefined, orderStatuses: Array.isArray(q.orderStatuses) && q.orderStatuses.length ? q.orderStatuses : undefined, + blPickup: q.blPickup === 0 || q.blPickup === 1 ? q.blPickup : 1, batchSize: 100 }).then(res => { const asyncTaskId = res.data?.asyncTaskId || res.data diff --git a/bms-front/src/views/monitor/orderSource/index.vue b/bms-front/src/views/monitor/orderSource/index.vue index f853b21f..74a44595 100644 --- a/bms-front/src/views/monitor/orderSource/index.vue +++ b/bms-front/src/views/monitor/orderSource/index.vue @@ -191,8 +191,14 @@ const orderStatusMap = { const orderStatusOptions = Object.keys(orderStatusMap).map(k => ({ label: orderStatusMap[k], value: Number(k) })) +const blPickupOptions = [ + { label: '已收货', value: 1 }, + { label: '未收货', value: 0 } +] + const defaultParams = { - orderStatuses: [3, 4, 5, 6, 7, 8, 11] + orderStatuses: [3, 4, 5, 6, 7, 8, 11], + blPickup: 1 } const searchColumns = [ @@ -243,6 +249,13 @@ const searchColumns = [ collapseTagsTooltip: true } }, + { + label: '收货状态', + prop: 'blPickup', + component: 'select', + options: blPickupOptions, + placeholder: '请选择' + }, ] const columns = [ @@ -389,6 +402,7 @@ function queryList(params) { const customers = splitLines(src.customerKeywords) const fillQuery = { orderIdentifiers: identifiers } if (customers.length) fillQuery.customerKeywords = customers + fillQuery.blPickup = src.blPickup === 0 || src.blPickup === 1 ? src.blPickup : 1 fillQuery.pageNum = params.pageNum fillQuery.pageSize = params.pageSize return listOrderSourceByTransferNos(fillQuery) @@ -421,7 +435,7 @@ function openOrderCompare() { return } proxy.$modal.confirm( - '将按当前客户、提货时间与订单状态筛选,异步分页比对上游转单号是否已落库,确认继续?', + '将按当前客户、提货时间、订单状态和收货状态筛选,异步分页比对上游转单号是否已落库,确认继续?', '二次确认' ).then(() => { // 比对只按客户+时间;不带单号框内容(回填后可能有数千转单号,带上会把比对拖死)