提交 6ea18c2b authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v17.3_youhua_20240615' into test

Former-commit-id: 32eb7454
...@@ -64,4 +64,8 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -64,4 +64,8 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateTruckBindExpire(List<Integer> ids); void updateTruckBindExpire(List<Integer> ids);
List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList); List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList);
void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNo);
} }
...@@ -214,4 +214,14 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -214,4 +214,14 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList) { public List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList) {
return baseMapper.queryOrderGoodsTruckNum(fleetNoList); return baseMapper.queryOrderGoodsTruckNum(fleetNoList);
} }
@Override
public void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNoList) {
update(lUdWrapper()
.set(OrderGoodsTruckBind::getStatus, code)
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.in(OrderGoodsTruckBind::getTruckNo, truckNoList)
);
}
} }
...@@ -2671,7 +2671,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2671,7 +2671,6 @@ public class OrderChildServiceImpl implements OrderChildService {
arriveBeforeStatus.add(OrderChildEnum.Status.PAY.getCode()); arriveBeforeStatus.add(OrderChildEnum.Status.PAY.getCode());
arriveBeforeStatus.add(OrderChildEnum.Status.GO_TO_SEND.getCode()); arriveBeforeStatus.add(OrderChildEnum.Status.GO_TO_SEND.getCode());
List<String> childNos;//取消运单
//未到达货源地之前运单(不包括取消) //未到达货源地之前运单(不包括取消)
List<OrderChild> arriveBeforeOrderChild = orderChildDao.listByOrderNo(param.getOrderNo(),arriveBeforeStatus); List<OrderChild> arriveBeforeOrderChild = orderChildDao.listByOrderNo(param.getOrderNo(),arriveBeforeStatus);
log.info("arriveBeforeOrderChild:{}",arriveBeforeOrderChild); log.info("arriveBeforeOrderChild:{}",arriveBeforeOrderChild);
...@@ -2683,6 +2682,23 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2683,6 +2682,23 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal arriveAfterWeight = arriveAfterOrderChild.stream().map(OrderChild::getWeight) BigDecimal arriveAfterWeight = arriveAfterOrderChild.stream().map(OrderChild::getWeight)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);//总拉运吨数 .reduce(BigDecimal::add).orElse(BigDecimal.ZERO);//总拉运吨数
log.info("总拉运吨数:{}",arriveAfterWeight); log.info("总拉运吨数:{}",arriveAfterWeight);
Map<String,List<String>> cancelTruckMap = new HashMap<>(); //取消运单对应的货单下的车辆Map
List<String> childNos = new ArrayList<>();//未到达货源地
for (OrderChild child : arriveBeforeOrderChild){
childNos.add(child.getChildNo());
if(cancelTruckMap.containsKey(child.getOrderGoodsNo())){
cancelTruckMap.get(child.getOrderGoodsNo()).add(generateChildTruckInfo(child));
}else{
List<String> childTruckInfoList = new ArrayList<>();
childTruckInfoList.add(generateChildTruckInfo(child));
cancelTruckMap.put(child.getChildNo(),childTruckInfoList);
}
}
if(availableWeight.compareTo(arriveAfterWeight) >0){ //可拉运吨数大于运单拉运吨数 取消未到达货源地的运单 if(availableWeight.compareTo(arriveAfterWeight) >0){ //可拉运吨数大于运单拉运吨数 取消未到达货源地的运单
log.info("可拉运吨数大于运单拉运吨数,取消未到达货源地的运单:{}",availableWeight.compareTo(arriveAfterWeight)); log.info("可拉运吨数大于运单拉运吨数,取消未到达货源地的运单:{}",availableWeight.compareTo(arriveAfterWeight));
BigDecimal weight =BigDecimal.ZERO;//运单累加吨数 BigDecimal weight =BigDecimal.ZERO;//运单累加吨数
...@@ -2693,16 +2709,16 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2693,16 +2709,16 @@ public class OrderChildServiceImpl implements OrderChildService {
if(weight.compareTo(subtract) >=0){ if(weight.compareTo(subtract) >=0){
break; break;
} }
notCancelChildNos.add(oc.getChildNo());//获取可以取消的运单 notCancelChildNos.add(oc.getChildNo());//获取不可以取消的运单
//同时移除不可取消运单对应的车辆
cancelTruckMap.get(oc.getOrderGoodsNo()).remove(generateChildTruckInfo(oc));
} }
log.info("notCancelChildNos:{}",notCancelChildNos); log.info("notCancelChildNos:{}",notCancelChildNos);
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
childNos.removeAll(notCancelChildNos);//剔除不需要取消的运单 childNos.removeAll(notCancelChildNos);//剔除不需要取消的运单
}else{
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
} }
log.info("批量取消运单:childNos:{}",childNos); log.info("批量取消运单:childNos:{}",childNos);
log.info("批量取消车辆:cancelTruckMap:{}",cancelTruckMap);
//批量取消运单 //批量取消运单
if(CollectionUtils.isNotEmpty(childNos)){ if(CollectionUtils.isNotEmpty(childNos)){
...@@ -2726,7 +2742,43 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2726,7 +2742,43 @@ public class OrderChildServiceImpl implements OrderChildService {
logs.add(log); logs.add(log);
} }
orderChildLogService.saveBatchOrderChildLog(logs); orderChildLogService.saveBatchOrderChildLog(logs);
///释放司机、车、绑定
releaseDriverAndTruck(cancelTruckMap);
}
}
}
private String generateChildTruckInfo(OrderChild child){
return child.getTruckNo() + "_" + child.getTruckId() + "_" + child.getDriverUserNo();
}
//释放司机、车、绑定
private void releaseDriverAndTruck(Map<String,List<String>> cancelTruckMap){
//释放车辆绑定关系
Set<String> orderGoodsNoList = cancelTruckMap.keySet();
List<OrderGoods> orderGoodsList = orderGoodsDao.listInField(OrderGoods::getOrderGoodsNo, orderGoodsNoList);
Map<String, Integer> orderGoodsPendOrderWayMap = orderGoodsList.stream().collect(
Collectors.toMap(OrderGoods::getOrderGoodsNo, OrderGoods::getPendingOrderWay));
for(Map.Entry<String,List<String>> entry : cancelTruckMap.entrySet()){
Integer pendingOrderWay = orderGoodsPendOrderWayMap.get(entry.getKey());
if(Objects.equals(pendingOrderWay,PendingOrderWayStatusEnum.Status.DX.getCode())
|| Objects.equals(pendingOrderWay,PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
List<String> truckNoList = new ArrayList<>();
entry.getValue().forEach(item-> {
String truckNo = item.split("_")[0];
truckNoList.add(truckNo);
goodsOrderTruckRecordComponent.deleteTruckRecord(entry.getKey(), truckNo);
});
orderGoodsTruckBindDao.batchUpdateBindTruckList(
entry.getKey(),OrderGoodsTruckBindEnum.Status.CANCEL.getCode(),truckNoList);
} }
//释放司机和空重车
entry.getValue().forEach(item-> {
Integer truckId = Integer.parseInt(item.split("_")[1]);
Long driverUserNo = Long.parseLong(item.split("_")[2]);
updateDriverOrderStatusUnload(driverUserNo,truckId);
});
} }
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论