调整订单同步查询条件

This commit is contained in:
liuminghui
2026-11-05 16:34:33 +08:00
parent 04ce44647a
commit 36433863af
7 changed files with 61 additions and 10 deletions
@@ -43,6 +43,11 @@ public class TabOrderMonitorQuery implements Serializable
* 空则服务端回落默认 3,4,5,6,7,8,11(与历史硬编码一致)。
*/
private List<Integer> orderStatuses;
/**
* 是否收货 BL_PICKUP。1 已收货,0 未收货。
* 空则服务端回落 1,与历史查询一致。
*/
private Integer blPickup;
/** 分批同步计费每批条数 */
private Integer batchSize;
/** Excel export field names (Java props; export only). */
@@ -70,7 +70,8 @@ public interface OracleUpstreamOrderMapper
List<Map<String, Object>> selectMatchedTransferOrderKeys(
@Param("orderTable") String orderTable,
@Param("batch") List<String> batch,
@Param("customerCodes") List<String> customerCodes);
@Param("customerCodes") List<String> customerCodes,
@Param("blPickup") Integer blPickup);
/** 按已收集到的订单主键批量查明细(一批为一个内存分页切片)。 */
@@ -28,8 +28,9 @@ public class OracleOrderKeyCollectWorker
/** 比对回填转单号专用分批(不走三列 UNION)。 */
@DataSource(DataSourceType.SLAVE)
public List<Map<String, Object>> collectTransferBatch(String table, List<String> batch, List<String> customerCodes)
public List<Map<String, Object>> collectTransferBatch(String table, List<String> batch, List<String> customerCodes,
Integer blPickup)
{
return oracleUpstreamOrderMapper.selectMatchedTransferOrderKeys(table, batch, customerCodes);
return oracleUpstreamOrderMapper.selectMatchedTransferOrderKeys(table, batch, customerCodes, blPickup);
}
}
@@ -456,12 +456,13 @@ public class TabOrderMonitorService
}
}
List<String> 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<MatchedOrderKey> keys = doCollectTransferKeys(table, nos, customerCodes);
List<MatchedOrderKey> keys = doCollectTransferKeys(table, nos, customerCodes, query.getBlPickup());
List<TabOrderMonitorVo> 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<MatchedOrderKey> doCollectTransferKeys(String table, List<String> transferNos, List<String> customerCodes)
private List<MatchedOrderKey> doCollectTransferKeys(String table, List<String> transferNos, List<String> 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<Future<List<Map<String, Object>>>>(batches.size());
for (List<String> batch : batches)
{
futures.add(collectPool.submit(() -> collectWorker.collectTransferBatch(table, batch, customerCodes)));
futures.add(collectPool.submit(() -> collectWorker.collectTransferBatch(table, batch, customerCodes, blPickup)));
}
Map<String, Timestamp> unique = new LinkedHashMap<String, Timestamp>();
@@ -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<Integer>(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、去空去重。
*/
@@ -66,7 +66,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="query.endTime != null and query.endTime != ''">
AND o.PICKUP_DATE &lt;= TO_DATE(#{query.endTime}, 'YYYY-MM-DD HH24:MI:SS')
</if>
AND o.BL_PICKUP = 1
<choose>
<when test="query.blPickup != null">
AND o.BL_PICKUP = #{query.blPickup}
</when>
<!-- <otherwise>-->
<!-- AND o.BL_PICKUP = 1-->
<!-- </otherwise>-->
</choose>
<if test="query.orderStatuses != null and query.orderStatuses.size() > 0">
AND o.ORDER_STATUS IN
<foreach collection="query.orderStatuses" item="st" open="(" separator="," close=")">
@@ -274,7 +281,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<foreach collection="batch" item="bid" open="(" separator="," close=")">
#{bid}
</foreach>
AND o.BL_PICKUP = 1
<choose>
<when test="blPickup != null">
AND o.BL_PICKUP = #{blPickup}
</when>
<!-- <otherwise>-->
<!-- AND o.BL_PICKUP = 1-->
<!-- </otherwise>-->
</choose>
AND o.ORDER_STATUS IN (3, 4, 5, 6, 7, 8, 11)
<if test="customerCodes != null and customerCodes.size() > 0">
AND o.CUSTOMER_CODE IN
@@ -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
@@ -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(() => {
// 比对只按客户+时间;不带单号框内容(回填后可能有数千转单号,带上会把比对拖死)