提交 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 {
OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(orderInfoVO.getOrderNo()).getData();
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.百分百预付不需要考虑借款账户");
return;
}
......
......@@ -30,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* 货单最晚接单时间、最晚到达货源地时间处理
......@@ -121,6 +118,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue;
}
OrderGoods orderGoods = optional.get();
// if(Objects.equals(orderGoods.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CANCEL.getCode())){
// continue;
// }
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
......
......@@ -60,8 +60,7 @@ public class OrderGoodsFeignController {
@ApiOperation(value = "取消货单", notes = "<br>By:李瑞新")
@PostMapping({"/cancelOrderGoods"})
Result<BigDecimal> cancelOrderGoods(@RequestBody @Validated CancelOrderGoodsParam param) {
orderGoodsService.cancelOrderGoods(param);
return Result.ok();
return Result.ok(orderGoodsService.cancelOrderGoods(param));
}
......
......@@ -105,5 +105,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void cancelOrderGoods(String orderNo);
void batchCancel(List<Integer> idList);
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
}
......@@ -64,4 +64,9 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void updateTruckBindExpire(List<Integer> ids);
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,
.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
public void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight) {
......
......@@ -214,4 +214,21 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> 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 {
void saveBindTruck(DistributionTruckParam param);
void updateFrightPrice(String orderGoodsNo,BigDecimal pendingOrderFreight);
BigDecimal cancelOrderGoods(CancelOrderGoodsParam param);
......
......@@ -89,7 +89,6 @@ import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -2668,7 +2667,6 @@ public class OrderChildServiceImpl implements OrderChildService {
arriveBeforeStatus.add(OrderChildEnum.Status.PAY.getCode());
arriveBeforeStatus.add(OrderChildEnum.Status.GO_TO_SEND.getCode());
List<String> childNos;//取消运单
//未到达货源地之前运单(不包括取消)
List<OrderChild> arriveBeforeOrderChild = orderChildDao.listByOrderNo(param.getOrderNo(),arriveBeforeStatus);
log.info("arriveBeforeOrderChild:{}",arriveBeforeOrderChild);
......@@ -2680,6 +2678,23 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal arriveAfterWeight = arriveAfterOrderChild.stream().map(OrderChild::getWeight)
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO);//总拉运吨数
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){ //可拉运吨数大于运单拉运吨数 取消未到达货源地的运单
log.info("可拉运吨数大于运单拉运吨数,取消未到达货源地的运单:{}",availableWeight.compareTo(arriveAfterWeight));
BigDecimal weight =BigDecimal.ZERO;//运单累加吨数
......@@ -2690,16 +2705,16 @@ public class OrderChildServiceImpl implements OrderChildService {
if(weight.compareTo(subtract) >=0){
break;
}
notCancelChildNos.add(oc.getChildNo());//获取可以取消的运单
notCancelChildNos.add(oc.getChildNo());//获取不可以取消的运单
//同时移除不可取消运单对应的车辆
cancelTruckMap.get(oc.getOrderGoodsNo()).remove(generateChildTruckInfo(oc));
}
log.info("notCancelChildNos:{}",notCancelChildNos);
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
childNos.removeAll(notCancelChildNos);//剔除不需要取消的运单
}else{
childNos = arriveBeforeOrderChild.stream().map(OrderChild::getChildNo).collect(Collectors.toList());//未到达货源地
}
log.info("批量取消运单:childNos:{}",childNos);
log.info("批量取消车辆:cancelTruckMap:{}",cancelTruckMap);
//批量取消运单
if(CollectionUtils.isNotEmpty(childNos)){
......@@ -2723,6 +2738,8 @@ public class OrderChildServiceImpl implements OrderChildService {
logs.add(log);
}
orderChildLogService.saveBatchOrderChildLog(logs);
///释放司机、车、绑定
releaseDriverAndTruck(cancelTruckMap);
}
}
}
......@@ -2764,4 +2781,38 @@ public class OrderChildServiceImpl implements OrderChildService {
}
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
@Override
@Transactional(rollbackFor = Exception.class)
public BigDecimal cancelOrderGoods(CancelOrderGoodsParam 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:{}",orderGoodsListByOrderNo);
log.info("orderGoodsListByOrderNo:{}",orderGoodsUpdateList);
List<OrderGoodsLog> orderGoodsLogs = new ArrayList<>();
OrderGoodsLog orderGoodsLog = null;
BigDecimal totalCancelWeight = BigDecimal.ZERO;
for(OrderGoods orderGoods:orderGoodsListByOrderNo){
List<String> cancelTruckBindOrderGoodsNoList = new ArrayList<>();
for(OrderGoods orderGoods:orderGoodsUpdateList){
orderGoodsLog = new OrderGoodsLog();
orderGoodsLog.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderGoodsLog.setCreateName(param.getCreateName());
orderGoodsLog.setCreateName("系统");
orderGoodsLog.setType(OrderGoodsLogsEnum.Type.CANCEL.getName());
orderGoodsLog.setCreateBy(param.getCreateBy());
orderGoodsLog.setCreateBy(0L);
orderGoodsLog.setRemark("货主发起减吨请求,当前已挂单量超过总拉运量,自动取消");
orderGoodsLogs.add(orderGoodsLog);
totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
totalCancelWeight = totalCancelWeight.add(Objects.nonNull(orderGoods.getResidueTransportWeight())?
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);
return totalCancelWeight;
......
......@@ -369,7 +369,7 @@ public class OrderGoodsSqlProvider {
for(CancelOrderGoodsWeightDTO item : cancelOrderGoodsWeight){
sj.add("update order_goods set residue_transport_weight = residue_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();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论