提交 d93e8c80 authored 作者: huyufan's avatar huyufan

Merge remote-tracking branch 'origin/v7.0_small_version_fix_20231120' into…

Merge remote-tracking branch 'origin/v7.0_small_version_fix_20231120' into v7.0_small_version_fix_20231120
......@@ -12,6 +12,8 @@ public enum OrderGoodsLogsEnum {
EDIT("编辑"),
CANCEL( "取消"),
ADJUST_PRICE("调价"),
SYSTEM_RELEASE("释放吨数"),
SYSTEM_INCREASE("提量吨数"),
;
private final String name;
......
......@@ -104,6 +104,7 @@ public class GoodsOrderTruckRecordComponent {
List<Integer> ids = new ArrayList<>();
for (OrderGoodsTruckBind bind : truckBindList) {
if (Objects.equals(OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),bind.getStatus())) {
ids.add(bind.getId());
this.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
}
}
......
......@@ -2,14 +2,17 @@ package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderGoodsLogsEnum;
import com.clx.performance.enums.OrderGoodsPendingOrderWayStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsLogService;
import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -28,6 +31,7 @@ public class OrderGoodsDtsListener {
private final OrderCancelComponent orderCancelComponent;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsLogService orderGoodsLogService;
......@@ -66,13 +70,15 @@ public class OrderGoodsDtsListener {
orderGoods.setId(after.getId());
orderGoods.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(orderGoods);
//释放定向单对应的定向车辆
if(Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsLogService.saveLog(after.getOrderGoodsNo(), 0L, "系统", OrderGoodsLogsEnum.Type.SYSTEM_RELEASE.getName(),
String.format("系统自动释放:%s吨", after.getResidueTransportWeight()));
//释放定向单(非自由车辆)对应的定向车辆
if(Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())
&& !Objects.equals(after.getVehicleUsage(), VehicleUsageEnum.Status.OWN.getCode())){
goodsOrderTruckRecordComponent.releaseOrderGoodsDriverAndTruck(after.getOrderGoodsNo());
}
log.info("结束自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}",
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
}
}
}
......@@ -1416,6 +1416,13 @@ public class OrderChildServiceImpl implements OrderChildService {
*/
@Override
public void updateOrderGoodsAmountLoad(OrderGoods orderGoods,String childNo, BigDecimal dif, Integer orderGoodsStatus) {
//防止状态倒退
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.SUCCESS.getCode())
){
orderGoodsStatus = orderGoods.getOrderGoodsStatus();
}
if(dif.compareTo(BigDecimal.ZERO) != 0 ){
//判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
......
......@@ -303,15 +303,20 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
if (orderGoodsParams.getExtractWeight().compareTo(oldOrderGoods.getAlreadyTransportWeight()) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单提取吨数不能小于货单已拉运吨数");
}
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getExtractWeight());
//考虑到借吨、恢复吨数的货单,逻辑判断实际的提取吨数
BigDecimal realExtractWeight = oldOrderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0?
oldOrderGoods.getAlreadyTransportWeight():oldOrderGoods.getExtractWeight();
oldOrderGoods.setExtractWeight(realExtractWeight);
BigDecimal answer = orderGoodsParams.getExtractWeight().subtract(realExtractWeight);
int flag = answer.compareTo(BigDecimal.ZERO);
//归还吨数
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(param.getOrderNo());
log.info("falg:{}",flag);
log.info("flag:{}",flag);
if (flag > 0) {
orderGoodsParams.setResidueTransportWeight(oldOrderGoods.getResidueTransportWeight().add(answer));
//限制剩余吨数
limitOrderGoodsResidueWeight(orderGoodsParams.getResidueTransportWeight());
rollbackOrderWeightParam.setUpdateType(UpdateEnum.SUB.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer);
......@@ -333,6 +338,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
}else if (flag < 0 ){
orderGoodsParams.setResidueTransportWeight(orderGoodsParams.getExtractWeight().subtract(oldOrderGoods.getAlreadyTransportWeight()));
//限制剩余吨数
limitOrderGoodsResidueWeight(orderGoodsParams.getResidueTransportWeight());
rollbackOrderWeightParam.setUpdateType(UpdateEnum.ADD.getCode());
if (oldOrderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
rollbackOrderWeightParam.setResidueWeight(answer.negate());
......@@ -441,6 +448,15 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.EDIT.getName(), "");
}
/**
* 限制货单更新剩余吨数不能小于35吨
**/
private void limitOrderGoodsResidueWeight(BigDecimal residueTransportWeight){
if(residueTransportWeight.compareTo(new BigDecimal("35")) < 0){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"当前货单剩余吨数不足35吨,无法挂单");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateOrderGoodsPrice(UpdateOrderGoodsPriceParam param) {
......@@ -695,6 +711,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
public OrderGoodsEditVO findOrderGoodsById(Integer id) {
OrderGoodsEditVO result = new OrderGoodsEditVO();
OrderGoodsVO orderGoodsVO = orderGoodsDao.findOrderGoodsById(id);
if(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) == 0 ){
//如果借吨或者恢复吨数,会导致提取吨数不准确,所以这里取准确提取吨数
orderGoodsVO.setExtractWeight(orderGoodsVO.getAlreadyTransportWeight());
}
String orderNo = orderGoodsVO.getOrderNo();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
result.setOrderNo(orderInfoFeign.getOrderNo());
......@@ -765,7 +785,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
orderCancelComponent.backFillOrderWeight(orderGoods,borrowOrderWeight, UpdateEnum.SUB.getCode());
//更新货单吨数
orderGoodsDao.updateOrderGoodsWeightResidueAndAlreadyAndStatus(orderGoods.getId(),addAlready,subOrderGoodsResidue,orderGoodsStatus);
orderGoodsLogService.saveLog(orderGoods.getOrderGoodsNo(), 0L, "系统", OrderGoodsLogsEnum.Type.SYSTEM_INCREASE.getName(),
String.format("系统自动提量:%s吨", borrowOrderWeight));
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论