|
|
@@ -4328,14 +4328,20 @@ public class KwtWaybillOrderV1Service {
|
|
|
private Set<Long> getBillOrderIds(WaybillOrderReq req) {
|
|
|
Set<Long> billOrderIds = Sets.newHashSet();
|
|
|
KwtWaybillOrder order = getKwtWaybillOrder(req);
|
|
|
+ Set<Long> loadConditionBillOrderIds = Sets.newHashSet();
|
|
|
+ Set<Long> unloadConditionBillOrderIds = Sets.newHashSet();
|
|
|
+ boolean hasMergedBillOrderCondition = false;
|
|
|
boolean b = Stream.of(req.getWaybillNo(), req.getTruckNo(), req.getDriverName(), req.getPhone()).anyMatch(StringUtils::isNotBlank);
|
|
|
if (b){
|
|
|
+ Set<Long> conditionBillOrderIds = Sets.newHashSet();
|
|
|
List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderRepository.queryByCondition(order);
|
|
|
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrders)){
|
|
|
- billOrderIds.addAll(waybillOrders.stream()
|
|
|
+ conditionBillOrderIds.addAll(waybillOrders.stream()
|
|
|
.map(KwtWaybillOrder::getId)
|
|
|
.collect(Collectors.toSet()));
|
|
|
}
|
|
|
+ billOrderIds = mergeConditionBillOrderIds(billOrderIds, conditionBillOrderIds, hasMergedBillOrderCondition);
|
|
|
+ hasMergedBillOrderCondition = true;
|
|
|
}
|
|
|
if (org.apache.commons.lang3.StringUtils.isNoneBlank(req.getLoadStartTime(),req.getLoadEndTime())){
|
|
|
Date loadStartTime = DateUtils.formatDate(req.getLoadStartTime());
|
|
|
@@ -4343,7 +4349,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
List<KwtWaybillOrderTicket> tickets = kwtWaybillOrderTicketRepository.queryByOperateTime(loadStartTime,
|
|
|
loadEndTime,1);
|
|
|
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( tickets)){
|
|
|
- billOrderIds.addAll(tickets.stream()
|
|
|
+ loadConditionBillOrderIds.addAll(tickets.stream()
|
|
|
.map(KwtWaybillOrderTicket::getWOrderId)
|
|
|
.collect(Collectors.toSet()));
|
|
|
}
|
|
|
@@ -4355,7 +4361,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
List<KwtWaybillOrderTicket> tickets = kwtWaybillOrderTicketRepository.queryByOperateTime(unloadStartTime,
|
|
|
unloadEndTime,2);
|
|
|
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( tickets)){
|
|
|
- billOrderIds.addAll(tickets.stream()
|
|
|
+ unloadConditionBillOrderIds.addAll(tickets.stream()
|
|
|
.map(KwtWaybillOrderTicket::getWOrderId)
|
|
|
.collect(Collectors.toSet()));
|
|
|
}
|
|
|
@@ -4366,13 +4372,12 @@ public class KwtWaybillOrderV1Service {
|
|
|
Date startDate = getStartDate(req.getUnloadStartTime());
|
|
|
Date endDate = getEndDate(req.getUnloadEndTime());
|
|
|
List<KwtWaybillOrderNode> nodes = kwtWaybillOrderNodeRepository.queryByOperateTime(startDate, endDate,CarWaybillV1Enum.COMPLETION_LOADING.getCode());
|
|
|
- Set<Long> billOrderIds2 = Optional.ofNullable(nodes)
|
|
|
+ unloadConditionBillOrderIds.addAll(Optional.ofNullable(nodes)
|
|
|
.orElse(List.of()).stream()
|
|
|
.map(KwtWaybillOrderNode::getWOrderId)
|
|
|
- .collect(Collectors.toSet());
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( billOrderIds2)){
|
|
|
- billOrderIds.addAll(billOrderIds2);
|
|
|
- }
|
|
|
+ .collect(Collectors.toSet()));
|
|
|
+ billOrderIds = mergeConditionBillOrderIds(billOrderIds, unloadConditionBillOrderIds, hasMergedBillOrderCondition);
|
|
|
+ hasMergedBillOrderCondition = true;
|
|
|
}
|
|
|
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getLoadStartTime()) &&
|
|
|
@@ -4381,13 +4386,12 @@ public class KwtWaybillOrderV1Service {
|
|
|
Date startDate = getStartDate(req.getLoadStartTime());
|
|
|
Date endDate = getEndDate(req.getLoadEndTime());
|
|
|
List<KwtWaybillOrderNode> nodes = kwtWaybillOrderNodeRepository.queryByOperateTime(startDate, endDate,CarWaybillV1Enum.EXIT_COMPLETED.getCode());
|
|
|
- Set<Long> billOrderIds2 = Optional.ofNullable(nodes)
|
|
|
+ loadConditionBillOrderIds.addAll(Optional.ofNullable(nodes)
|
|
|
.orElse(List.of()).stream()
|
|
|
.map(KwtWaybillOrderNode::getWOrderId)
|
|
|
- .collect(Collectors.toSet());
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isNotEmpty( billOrderIds2)){
|
|
|
- billOrderIds.addAll(billOrderIds2);
|
|
|
- }
|
|
|
+ .collect(Collectors.toSet()));
|
|
|
+ billOrderIds = mergeConditionBillOrderIds(billOrderIds, loadConditionBillOrderIds, hasMergedBillOrderCondition);
|
|
|
+ hasMergedBillOrderCondition = true;
|
|
|
}
|
|
|
boolean hasBillOrderRestrictedCondition = Stream.of(
|
|
|
req.getWaybillNo(), req.getTruckNo(), req.getDriverName(), req.getPhone(),
|
|
|
@@ -4396,6 +4400,55 @@ public class KwtWaybillOrderV1Service {
|
|
|
return applyKeywordFilterToBillOrderIds(req, billOrderIds, hasBillOrderRestrictedCondition);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 合并单个已生效查询条件的运单ID集合。
|
|
|
+ * <p>
|
|
|
+ * 业务逻辑说明:
|
|
|
+ * 1. 多个筛选条件(如运单号、车牌、司机、时间等)之间为 AND 关系,即取交集。
|
|
|
+ * 2. 如果当前条件未匹配到任何数据(conditionOrderIds为空),则整体结果必为空,直接返回空集合,避免无效查询。
|
|
|
+ * 3. 如果是第一个生效的条件(!hasMergedCondition),则直接返回当前条件的结果集作为初始集合。
|
|
|
+ * 4. 如果之前已有生效条件(hasMergedCondition=true),则将当前条件结果与已有结果取交集。
|
|
|
+ * 5. 如果已有结果集为空,说明之前的条件已过滤掉所有数据,直接返回空集合。
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @param billOrderIds 已合并条件命中的运单ID集合(前序条件的交集结果)
|
|
|
+ * @param conditionOrderIds 当前单一条件命中的运单ID集合
|
|
|
+ * @param hasMergedCondition 标记是否已经合并过其他有效条件
|
|
|
+ * @return 多个条件之间取交集后的运单ID集合
|
|
|
+ */
|
|
|
+ static Set<Long> mergeConditionBillOrderIds(Set<Long> billOrderIds,
|
|
|
+ Set<Long> conditionOrderIds,
|
|
|
+ boolean hasMergedCondition) {
|
|
|
+ // 1. 校验当前条件结果:若当前条件无命中数据,则整体查询结果应为空,防止后续逻辑误判或全量扫描。
|
|
|
+ if (CollectionUtils.isEmpty(conditionOrderIds)) {
|
|
|
+ log.debug("当前查询条件未匹配到任何运单ID,返回空集合");
|
|
|
+ return Sets.newHashSet();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 处理首个有效条件:若此前未合并过任何条件,则当前条件结果即为初始结果集。
|
|
|
+ if (!hasMergedCondition) {
|
|
|
+ log.debug("首次合并有效条件,直接采用当前条件结果,ID数量: {}", conditionOrderIds.size());
|
|
|
+ return Sets.newHashSet(conditionOrderIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 校验前序结果:若前序条件已导致结果为空,则无需再进行交集运算,直接返回空。
|
|
|
+ if (CollectionUtils.isEmpty(billOrderIds)) {
|
|
|
+ log.debug("前序条件已过滤为空,无需继续合并,返回空集合");
|
|
|
+ return Sets.newHashSet();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 执行交集运算:保留既在前序结果中,又满足当前条件的运单ID。
|
|
|
+ Set<Long> result = Sets.newHashSet(billOrderIds);
|
|
|
+ result.retainAll(conditionOrderIds);
|
|
|
+
|
|
|
+ // 5. 记录日志:监控交集运算后的数据量变化,便于排查数据过滤逻辑。
|
|
|
+ log.debug("运单多条件交集合并完成,当前条件ID数量: {}, 前序ID数量: {}, 合并后剩余ID数量: {}",
|
|
|
+ conditionOrderIds.size(), billOrderIds.size(), result.size());
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
private static Date getStartDate(String date) {
|
|
|
Date startDate;
|
|
|
if (org.apache.commons.lang3.StringUtils.isBlank(date)) {
|