提交 2b7e09c3 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v18.8_online_bug_20240704' into dev

# Conflicts: # performance-web/src/main/java/com/clx/performance/service/OrderGoodsService.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
...@@ -111,8 +111,9 @@ public class OrderChildLoanComponent { ...@@ -111,8 +111,9 @@ public class OrderChildLoanComponent {
OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(orderInfoVO.getOrderNo()).getData(); OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(orderInfoVO.getOrderNo()).getData();
BigDecimal freightFreezeRate = quotationDetailVO.getFreightFreezeRate(); BigDecimal freightFreezeRate = quotationDetailVO.getFreightFreezeRate();
if (freightFreezeRate.compareTo(new BigDecimal(100)) == 0) { if (freightFreezeRate.compareTo(new BigDecimal(100)) == 0
//百分百预付不需要考虑借款账户 || !Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),QuotationEnum.PlatformFreightQuotationTaxType.YES.getCode())) {
//百分百预付不需要考虑借款账户或者平台运费报价税类型为未税
log.info("2.百分百预付不需要考虑借款账户"); log.info("2.百分百预付不需要考虑借款账户");
return; return;
} }
......
...@@ -30,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -30,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.Date; import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/** /**
* 货单最晚接单时间、最晚到达货源地时间处理 * 货单最晚接单时间、最晚到达货源地时间处理
...@@ -121,6 +118,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -121,6 +118,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue; continue;
} }
OrderGoods orderGoods = optional.get(); OrderGoods orderGoods = optional.get();
// if(Objects.equals(orderGoods.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CANCEL.getCode())){
// continue;
// }
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) { if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo); List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
......
...@@ -60,8 +60,7 @@ public class OrderGoodsFeignController { ...@@ -60,8 +60,7 @@ public class OrderGoodsFeignController {
@ApiOperation(value = "取消货单", notes = "<br>By:李瑞新") @ApiOperation(value = "取消货单", notes = "<br>By:李瑞新")
@PostMapping({"/cancelOrderGoods"}) @PostMapping({"/cancelOrderGoods"})
Result<BigDecimal> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param) { Result<BigDecimal> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param) {
orderGoodsService.cancelOrderGoods(param); return Result.ok(orderGoodsService.cancelOrderGoods(param));
return Result.ok();
} }
......
...@@ -105,5 +105,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -105,5 +105,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void cancelOrderGoods(String orderNo); void cancelOrderGoods(String orderNo);
void batchCancel(List<Integer> idList);
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight); void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
} }
...@@ -64,4 +64,9 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -64,4 +64,9 @@ 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);
List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList);
} }
...@@ -293,6 +293,13 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -293,6 +293,13 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
.set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode()) .set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
); );
} }
@Override
public void batchCancel(List<Integer> idList) {
update(lUdWrapper()
.in(OrderGoods::getId, idList)
.set(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.CANCEL.getCode())
);
}
@Override @Override
public void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight) { public void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight) {
......
...@@ -214,4 +214,21 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -214,4 +214,21 @@ 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)
);
}
@Override
public List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList) {
return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getOrderGoodsNo, cancelTruckBindOrderGoodsNoList)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode()));
}
} }
...@@ -104,6 +104,7 @@ public interface OrderGoodsService { ...@@ -104,6 +104,7 @@ public interface OrderGoodsService {
void saveBindTruck(DistributionTruckParam param); void saveBindTruck(DistributionTruckParam param);
void updateFrightPrice(String orderGoodsNo,BigDecimal pendingOrderFreight); void updateFrightPrice(String orderGoodsNo,BigDecimal pendingOrderFreight);
BigDecimal cancelOrderGoods(CancelOrderGoodsParam param); BigDecimal cancelOrderGoods(CancelOrderGoodsParam param);
......
...@@ -89,7 +89,6 @@ import org.redisson.api.RLock; ...@@ -89,7 +89,6 @@ import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -2668,7 +2667,6 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2668,7 +2667,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);
...@@ -2680,6 +2678,23 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2680,6 +2678,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.getOrderGoodsNo(),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;//运单累加吨数
...@@ -2690,16 +2705,16 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2690,16 +2705,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)){
...@@ -2723,6 +2738,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2723,6 +2738,8 @@ public class OrderChildServiceImpl implements OrderChildService {
logs.add(log); logs.add(log);
} }
orderChildLogService.saveBatchOrderChildLog(logs); orderChildLogService.saveBatchOrderChildLog(logs);
///释放司机、车、绑定
releaseDriverAndTruck(cancelTruckMap);
} }
} }
} }
...@@ -2764,4 +2781,38 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2764,4 +2781,38 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
return vo; return vo;
} }
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]);
updateDriverOrderStatusCancel(driverUserNo,truckId);
});
}
}
} }
...@@ -1007,27 +1007,60 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea ...@@ -1007,27 +1007,60 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public BigDecimal cancelOrderGoods(CancelOrderGoodsParam param) { public BigDecimal cancelOrderGoods(CancelOrderGoodsParam param) {
log.info("取消货单:{}",param); log.info("取消货单:{}",param);
List<OrderGoods> orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo());
// 过滤可取消
List<OrderGoods> orderGoodsUpdateList =
orderGoodsList.stream().filter(item ->
Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CREATED.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
|| Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())
).collect(Collectors.toList());
if (orderGoodsUpdateList.isEmpty()) {return BigDecimal.ZERO;}
//取消货单 //取消货单
orderGoodsDao.cancelOrderGoods(param.getOrderNo()); orderGoodsDao.batchCancel(orderGoodsUpdateList.stream().map(item->item.getId()).collect(Collectors.toList()));
//批量保存货单日志 //批量保存货单日志
List<OrderGoods> orderGoodsListByOrderNo = orderGoodsDao.getOrderGoodsListByOrderNo(param.getOrderNo()); log.info("orderGoodsListByOrderNo:{}",orderGoodsUpdateList);
log.info("orderGoodsListByOrderNo:{}",orderGoodsListByOrderNo);
List<OrderGoodsLog> orderGoodsLogs = new ArrayList<>(); List<OrderGoodsLog> orderGoodsLogs = new ArrayList<>();
OrderGoodsLog orderGoodsLog = null; OrderGoodsLog orderGoodsLog = null;
BigDecimal totalCancelWeight = BigDecimal.ZERO; BigDecimal totalCancelWeight = BigDecimal.ZERO;
for(OrderGoods orderGoods:orderGoodsListByOrderNo){ List<String> cancelTruckBindOrderGoodsNoList = new ArrayList<>();
for(OrderGoods orderGoods:orderGoodsUpdateList){
orderGoodsLog = new OrderGoodsLog(); orderGoodsLog = new OrderGoodsLog();
orderGoodsLog.setOrderGoodsNo(orderGoods.getOrderGoodsNo()); orderGoodsLog.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderGoodsLog.setCreateName(param.getCreateName()); orderGoodsLog.setCreateName("系统");
orderGoodsLog.setType(OrderGoodsLogsEnum.Type.CANCEL.getName()); orderGoodsLog.setType(OrderGoodsLogsEnum.Type.CANCEL.getName());
orderGoodsLog.setCreateBy(param.getCreateBy()); orderGoodsLog.setCreateBy(0L);
orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消"); orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消");
orderGoodsLogs.add(orderGoodsLog); orderGoodsLogs.add(orderGoodsLog);
totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())? totalCancelWeight = totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
orderGoods.getResidueTransportWeight() : BigDecimal.ZERO); orderGoods.getResidueTransportWeight() : BigDecimal.ZERO);
if(Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.DX.getCode())
|| Objects.equals(orderGoods.getPendingOrderWay(),PendingOrderWayStatusEnum.Status.FLEET_DX.getCode())){
cancelTruckBindOrderGoodsNoList.add(orderGoods.getOrderGoodsNo());
}
}
//取消货单下未接单的车辆绑定关系
if(CollectionUtils.isNotEmpty(cancelTruckBindOrderGoodsNoList)){
cancelTruckBindOrderGoodsNoList.forEach(item->goodsOrderTruckRecordComponent.deleteTruckRecord(item));
/* //查询定向货单下未接单的车辆
List<OrderGoodsTruckBind> notOrderBindTruckList = orderGoodsTruckBindDao.
queryNotOrderTruck(cancelTruckBindOrderGoodsNoList);
//删除缓存中未接单的车辆绑定
if(CollectionUtils.isNotEmpty(notOrderBindTruckList)){
for (OrderGoodsTruckBind bind : notOrderBindTruckList) {
goodsOrderTruckRecordComponent.deleteTruckRecord(bind.getOrderGoodsNo(), bind.getTruckNo());
}
}*/
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(cancelTruckBindOrderGoodsNoList,
OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
} }
orderGoodsLogService.saveBatchLog(orderGoodsLogs); orderGoodsLogService.saveBatchLog(orderGoodsLogs);
return totalCancelWeight; return totalCancelWeight;
......
...@@ -369,7 +369,7 @@ public class OrderGoodsSqlProvider { ...@@ -369,7 +369,7 @@ public class OrderGoodsSqlProvider {
for(CancelOrderGoodsWeightDTO item : cancelOrderGoodsWeight){ for(CancelOrderGoodsWeightDTO item : cancelOrderGoodsWeight){
sj.add("update order_goods set residue_transport_weight = residue_transport_weight +" + item.getCancelWeight() + sj.add("update order_goods set residue_transport_weight = residue_transport_weight +" + item.getCancelWeight() +
", already_transport_weight = already_transport_weight -" + item.getCancelWeight() + ", already_transport_weight = already_transport_weight -" + item.getCancelWeight() +
" where order_goods_no = "+item.getOrderGoodsNo()) ; " where order_goods_no = '"+item.getOrderGoodsNo() + "'") ;
} }
return sj.toString(); return sj.toString();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论