|
|
@@ -21,10 +21,7 @@ import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.mongo.enums.BusinessTypeEnum;
|
|
|
import com.sckw.mongo.model.SckwLogisticsOrder;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
-import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
|
|
|
-import com.sckw.order.api.model.OrderDetailRes;
|
|
|
-import com.sckw.order.api.model.UnitInfoDetailRes;
|
|
|
-import com.sckw.order.api.model.UpdateActualAmountParam;
|
|
|
+import com.sckw.order.api.model.*;
|
|
|
import com.sckw.redis.config.RedisLockUtil;
|
|
|
import com.sckw.redis.constant.RedisConstant;
|
|
|
import com.sckw.stream.enums.MessageEnum;
|
|
|
@@ -37,8 +34,7 @@ import com.sckw.transport.api.model.vo.LogisticsOrderVO;
|
|
|
import com.sckw.transport.common.config.MessageUrlConfig;
|
|
|
import com.sckw.transport.dao.*;
|
|
|
import com.sckw.transport.model.*;
|
|
|
-import com.sckw.transport.model.dto.CancelOrderDTO;
|
|
|
-import com.sckw.transport.model.dto.DocumentParamDTO;
|
|
|
+import com.sckw.transport.model.dto.*;
|
|
|
import com.sckw.transport.model.param.ContractParam;
|
|
|
import com.sckw.transport.model.param.LogisticsOrderParam;
|
|
|
import com.sckw.transport.model.vo.*;
|
|
|
@@ -85,6 +81,9 @@ public class KwtTransportCommonService {
|
|
|
@Autowired
|
|
|
public KwtWaybillOrderService waybillOrderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ public KwtLogisticsOrderGoodsService logisticsOrderGoodsService;
|
|
|
+
|
|
|
@Autowired
|
|
|
public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
|
|
|
|
|
|
@@ -240,8 +239,8 @@ public class KwtTransportCommonService {
|
|
|
orderDetailVO.setPerformanceAmount(logisticsOrder.getUnloadAmount() == null ? null : logisticsOrder.getUnloadAmount());
|
|
|
}
|
|
|
// orderDetailVO.setPerformanceAmount(logisticsOrder.getLoadAmount() == null ? null : logisticsOrder.getLoadAmount());
|
|
|
- orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount());
|
|
|
- orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalUnloadAmount());
|
|
|
+ orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount());
|
|
|
+ orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalUnloadAmount());
|
|
|
orderDetailVO.setCreateTime(logisticsOrder.getCreateTime());
|
|
|
orderDetailVO.setPayment(logisticsOrder.getPayment());
|
|
|
if (logisticsOrder.getPayment() != null) {
|
|
|
@@ -282,8 +281,8 @@ public class KwtTransportCommonService {
|
|
|
}
|
|
|
orderDetailVO.setRemark(logisticsOrder.getRemark());
|
|
|
orderDetailVO.setWaitDistributionAmount(logisticsOrder.getAmount()
|
|
|
- .subtract(logisticsOrder.getSubcontractAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getSubcontractAmount())
|
|
|
- .subtract(logisticsOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getEntrustAmount()));
|
|
|
+ .subtract(logisticsOrder.getSubcontractAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getSubcontractAmount())
|
|
|
+ .subtract(logisticsOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getEntrustAmount()));
|
|
|
/**亏吨量/吨->装货量-卸货量
|
|
|
* 合理损耗值=装货量*合理损耗
|
|
|
扣亏量/吨->亏吨量-合理损耗值
|
|
|
@@ -294,7 +293,7 @@ public class KwtTransportCommonService {
|
|
|
按照趟次=运输运价
|
|
|
*/
|
|
|
//合理损耗
|
|
|
- BigDecimal loss = logisticsOrder.getLoss() == null ? new BigDecimal("0.00") : logisticsOrder.getLoss();
|
|
|
+ BigDecimal loss = logisticsOrder.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoss();
|
|
|
|
|
|
Integer status = logisticsOrder.getStatus();
|
|
|
List<Integer> orderStatusFinish = new ArrayList<>();
|
|
|
@@ -306,10 +305,10 @@ public class KwtTransportCommonService {
|
|
|
/**亏吨量/吨->装货量-卸货量
|
|
|
扣亏量/吨->亏吨量-合理损耗值
|
|
|
扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
|
|
|
- BigDecimal loadAmount = logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount();
|
|
|
- BigDecimal unloadAmount = logisticsOrder.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalUnloadAmount();
|
|
|
+ BigDecimal loadAmount = logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount();
|
|
|
+ BigDecimal unloadAmount = logisticsOrder.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalUnloadAmount();
|
|
|
//运价
|
|
|
- BigDecimal price = logisticsOrder.getPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getPrice();
|
|
|
+ BigDecimal price = logisticsOrder.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getPrice();
|
|
|
//亏吨量
|
|
|
BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
|
|
|
//合理损耗值
|
|
|
@@ -317,10 +316,10 @@ public class KwtTransportCommonService {
|
|
|
//扣亏量/吨
|
|
|
BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
|
|
|
if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
|
|
|
- deductWeighNumber = new BigDecimal("0.00");
|
|
|
+ deductWeighNumber = NumberConstant.ZERO_TWO;
|
|
|
}
|
|
|
//罚款值
|
|
|
- BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
|
|
|
+ BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
|
|
|
if (DictEnum.CHARGING_TYPE_1.getValue().equals(logisticsOrder.getBillingMode())) {
|
|
|
orderDetailVO.setOrderAmount(price.multiply(loadAmount));
|
|
|
} else if (DictEnum.CHARGING_TYPE_2.getValue().equals(logisticsOrder.getBillingMode())) {
|
|
|
@@ -637,27 +636,27 @@ public class KwtTransportCommonService {
|
|
|
* 3、按趟次:总运价=运价*趟次【后期加】
|
|
|
*/
|
|
|
//运价
|
|
|
- BigDecimal price = logisticsOrderDTO.getPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getPrice();
|
|
|
+ BigDecimal price = logisticsOrderDTO.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getPrice();
|
|
|
|
|
|
|
|
|
/**亏吨量/吨->装货量-卸货量
|
|
|
扣亏量/吨->亏吨量-合理损耗值
|
|
|
扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
|
|
|
- BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount();
|
|
|
- BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount();
|
|
|
- BigDecimal loss = logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss();
|
|
|
+ BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount();
|
|
|
+ BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount();
|
|
|
+ BigDecimal loss = logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss();
|
|
|
//亏吨量
|
|
|
BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
|
|
|
//合理损耗值
|
|
|
- BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss());
|
|
|
+ BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss());
|
|
|
//扣亏量
|
|
|
// BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
|
|
|
// if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
|
|
|
-// deductWeighNumber = new BigDecimal("0.00");
|
|
|
+// deductWeighNumber = NumberConstant.ZERO_TWO;
|
|
|
// }
|
|
|
BigDecimal deductWeighNumber = commonService.deficitLossAmount(loadAmount, defectiveWeighNumber, loss, logisticsOrderDTO.getLossUnit());
|
|
|
//罚款值
|
|
|
- BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
|
|
|
+ BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
|
|
|
/**
|
|
|
*
|
|
|
* 二、运价计算:
|
|
|
@@ -666,13 +665,13 @@ public class KwtTransportCommonService {
|
|
|
* 3、按趟次:总运价=运价*趟次【后期加】
|
|
|
*/
|
|
|
//todo 2023-10-10 含税金额不减去罚款值 另指定罚款值进行返回数据
|
|
|
- BigDecimal actualAmount = new BigDecimal("0.00");
|
|
|
+ BigDecimal actualAmount = NumberConstant.ZERO_TWO;
|
|
|
if (DictEnum.CHARGING_TYPE_1.getValue().equals(billingMode)) {
|
|
|
-// actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
|
|
|
- actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
|
|
|
+// actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
|
|
|
+ actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
|
|
|
} else if (DictEnum.CHARGING_TYPE_2.getValue().equals(billingMode)) {
|
|
|
-// actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
|
|
|
- actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
|
|
|
+// actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
|
|
|
+ actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
|
|
|
} else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
|
|
|
// 物流订单运单趟次数量
|
|
|
Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{
|
|
|
@@ -740,6 +739,11 @@ public class KwtTransportCommonService {
|
|
|
return HttpResult.ok(build);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取数据字典
|
|
|
+ * @param type 字典类型
|
|
|
+ * @return 数据
|
|
|
+ */
|
|
|
public Map<String, String> getDictData(String type) {
|
|
|
Map<String, String> maps = new HashMap<>(NumberConstant.SIXTEEN);
|
|
|
List<SysDictResDto> list = remoteSystemService.queryDictByType(type);
|
|
|
@@ -749,6 +753,11 @@ public class KwtTransportCommonService {
|
|
|
return maps;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 承运合同/托运合同-根据合同id获取托运订单列表
|
|
|
+ * @param contractParam 参数
|
|
|
+ * @return 合同信息
|
|
|
+ */
|
|
|
public HttpResult getLogisticsOrderByContractId(ContractParam contractParam) {
|
|
|
List<Long> contractIds = StringUtils.splitStrToList(contractParam.getContractIds(), Long.class);
|
|
|
Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(LoginUserHolder.getEntId()));
|
|
|
@@ -786,6 +795,308 @@ public class KwtTransportCommonService {
|
|
|
return HttpResult.ok(build);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params 手动完结参数
|
|
|
+ * @desc 完结物流订单-采购/销售/托运/承运
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/12/8
|
|
|
+ **/
|
|
|
+ public HttpResult orderFinish(OrderManualCompletionDto params) {
|
|
|
+ /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
|
|
|
+ /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
|
|
|
+ /**完结订单-对应物流订单下子订单都要进行完结*/
|
|
|
+ /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
|
|
|
+ Long id = params.getId();
|
|
|
+ String key = String.format(RedisConstant.LOGISTICS_ORDER_FINISH_KEY, params.getId());
|
|
|
+ if (redisLockUtil.tryLock(key)) {
|
|
|
+ try {
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(id);
|
|
|
+ if (logisticsOrder == null) {
|
|
|
+ throw new BusinessException("采购订单-完结订单-物流单据不存在!");
|
|
|
+ }
|
|
|
+ /**订单状态验证*/
|
|
|
+ if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
|
|
|
+ && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
|
|
|
+ throw new BusinessException("当前订单并不属于【待派车】,【运输中】状态");
|
|
|
+ }
|
|
|
+ //验证当前物流订单是否还存在进行的车辆运单
|
|
|
+ boolean flag = commonService.judgmentWaybillOrderIsFinish(String.valueOf(id));
|
|
|
+ if (flag) {
|
|
|
+ throw new BusinessException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改单据本身数据
|
|
|
+ BigDecimal loadAmount = getLoading(params, logisticsOrder.getUnit(), NumberConstant.ONE);
|
|
|
+ BigDecimal unloadAmount = getLoading(params, logisticsOrder.getUnit(), NumberConstant.TWO);
|
|
|
+ BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(loadAmount == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoadAmount());
|
|
|
+ logisticsOrder.setTotalLoadAmount(loadAmount);
|
|
|
+ logisticsOrder.setTotalUnloadAmount(unloadAmount);
|
|
|
+ logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
|
|
|
+ logisticsOrder.setUpdateTime(new Date());
|
|
|
+ logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ logisticsOrder.setIgnoreAmount(ignoreAmount);
|
|
|
+ logisticsOrderMapper.updateById(logisticsOrder);
|
|
|
+ //物流订单状态记录
|
|
|
+ updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark());
|
|
|
+ //修改mongodb的数据
|
|
|
+ updateMongoDbByLogisticsOrder(logisticsOrder);
|
|
|
+ //更新商品辅助单位信息
|
|
|
+ logisticsOrderGoodsService.editLogisticsOrderGoodsTotalLoading(params);
|
|
|
+
|
|
|
+ //获取物流订单下的子单
|
|
|
+ /**完结订单-对应物流订单下子订单都要进行完结*/
|
|
|
+ List<KwtLogisticsOrder> kwtLogisticsOrders = logisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
|
|
|
+ .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
|
|
|
+ .apply(id != null, "FIND_IN_SET ('" + id + "', pids)").ne(KwtLogisticsOrder::getId, id));
|
|
|
+ if (!CollectionUtils.isEmpty(kwtLogisticsOrders)) {
|
|
|
+ //修改单据剩余运输量
|
|
|
+ kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
|
|
|
+ BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
|
|
|
+ //更新忽略剩余量
|
|
|
+ updateLogisticOrderAndTrack(kwtLogisticsOrder);
|
|
|
+ //更新Mongodb
|
|
|
+ updateMongoDbByLogisticsOrder(kwtLogisticsOrder);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**是否是一级订单,是->推送至贸易*/
|
|
|
+ if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
|
|
|
+ List<GoodsLoadingV1Param> loadings = new ArrayList<>();
|
|
|
+ List<GoodsLoadingParam> createOrCancelLoading = new ArrayList<>();
|
|
|
+ List<OrderGoodsLoadingDto> loading = params.getLoading();
|
|
|
+ loading.forEach(e ->{
|
|
|
+ loadings.add(new GoodsLoadingV1Param(e.getUnit(), e.getLoadAmount(), e.getUnloadAmount()));
|
|
|
+ createOrCancelLoading.add(new GoodsLoadingParam(e.getUnit(), e.getLoadAmount()));
|
|
|
+ });
|
|
|
+ //数据推送至贸易订单-更新总装卸货量
|
|
|
+ CompleteLogisticsOrderV1Param tradeOrder = new CompleteLogisticsOrderV1Param();
|
|
|
+ tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
|
|
|
+ tradeOrder.setLoading(loadings);
|
|
|
+ tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
+ log.info("托运订单手动完结请求参数:{}", JSONObject.toJSONString(tradeOrder));
|
|
|
+ HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrderV1(tradeOrder);
|
|
|
+ if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
|
|
|
+ log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
|
|
|
+ throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
|
|
|
+ }
|
|
|
+
|
|
|
+ //数据推送至贸易订单-更新时间装货量
|
|
|
+ CreateOrCancelLogisticsOrderV1Param param = new CreateOrCancelLogisticsOrderV1Param();
|
|
|
+ param.setTOrderId(logisticsOrder.getTOrderId());
|
|
|
+ param.setLoading(createOrCancelLoading);
|
|
|
+ param.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ param.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
+ HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(param);
|
|
|
+ if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
|
|
|
+ log.info("托运订单手动完结订单-完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
|
|
|
+ throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!" + result1.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改合同履约量
|
|
|
+ commonService.updatePerformed(logisticsOrder, loadAmount, unloadAmount);
|
|
|
+
|
|
|
+ //完结物流订单数据处理-上级物流订单分包量计算
|
|
|
+ closeHandleByOrderFinish(logisticsOrder.getId());
|
|
|
+
|
|
|
+ //关闭运单
|
|
|
+ waybillOrderService.cancelSendCar(logisticsOrder.getId());
|
|
|
+ } finally {
|
|
|
+ redisLockUtil.unlock(key);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ HttpResult.error("当前数据正在处理,请稍后再试");
|
|
|
+ }
|
|
|
+ return HttpResult.ok("托运订单-完结订单成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params 完结参数
|
|
|
+ * @param unit 单位
|
|
|
+ * @param type 装卸货类型
|
|
|
+ * @desc 获取装卸货量
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/9/18
|
|
|
+ **/
|
|
|
+ public BigDecimal getLoading(OrderManualCompletionDto params, String unit, int type) {
|
|
|
+ List<OrderGoodsLoadingDto> loadings = params.getLoading();
|
|
|
+ if (CollectionUtils.isNotEmpty(loadings)) {
|
|
|
+ for (OrderGoodsLoadingDto loading:loadings) {
|
|
|
+ if (loading.getUnit().equals(unit)) {
|
|
|
+ return type == NumberConstant.ONE ? loading.getLoadAmount() : loading.getUnloadAmount();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 物流订单完结订单-修改物流表+新增物流状态记录
|
|
|
+ * @param params 物流订单
|
|
|
+ */
|
|
|
+ public void updateLogisticOrderAndTrack(KwtLogisticsOrder params) {
|
|
|
+ Integer code = LogisticsOrderEnum.HAVE_FINISHED.getCode();
|
|
|
+ logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
|
|
|
+ .set(KwtLogisticsOrder::getStatus, code)
|
|
|
+ .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
|
|
|
+ .set(KwtLogisticsOrder::getIgnoreAmount, params.getIgnoreAmount())
|
|
|
+ .set(KwtLogisticsOrder::getUpdateTime, new Date())
|
|
|
+ .eq(KwtLogisticsOrder::getId, params.getId())
|
|
|
+ );
|
|
|
+
|
|
|
+ KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
|
|
|
+ .eq(KwtLogisticsOrderTrack::getLOrderId, params.getId()).eq(KwtLogisticsOrderTrack::getStatus, code)
|
|
|
+ );
|
|
|
+ if (track != null) {
|
|
|
+ logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
|
|
|
+ .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
|
|
|
+ .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
|
|
|
+ .set(KwtLogisticsOrderTrack::getRemark, "手动完结订单。")
|
|
|
+ .eq(KwtLogisticsOrderTrack::getId, track.getId())
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
|
|
|
+ orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
|
|
|
+ orderTrack.setLOrderId(params.getId());
|
|
|
+ orderTrack.setRemark("手动完结订单。");
|
|
|
+ orderTrack.setStatus(code);
|
|
|
+ orderTrack.setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ orderTrack.setCreateTime(new Date());
|
|
|
+ orderTrack.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ orderTrack.setUpdateTime(new Date());
|
|
|
+ orderTrack.setDelFlag(NumberConstant.ZERO);
|
|
|
+ logisticsOrderTrackMapper.insert(orderTrack);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改物流表+新增物流状态记录
|
|
|
+ * @param lOrderId 物流订单
|
|
|
+ * @param code 状态码
|
|
|
+ * @param remark 备注
|
|
|
+ */
|
|
|
+ private void updateLogisticOrderTrack(Long lOrderId, int code, String remark) {
|
|
|
+ KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
|
|
|
+ .eq(KwtLogisticsOrderTrack::getLOrderId, lOrderId).eq(KwtLogisticsOrderTrack::getStatus, code)
|
|
|
+ );
|
|
|
+ if (track != null) {
|
|
|
+ logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
|
|
|
+ .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
|
|
|
+ .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
|
|
|
+ .set(KwtLogisticsOrderTrack::getRemark, remark)
|
|
|
+ .eq(KwtLogisticsOrderTrack::getId, track.getId())
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
|
|
|
+ orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
|
|
|
+ orderTrack.setLOrderId(lOrderId);
|
|
|
+ orderTrack.setRemark(remark);
|
|
|
+ orderTrack.setStatus(code);
|
|
|
+ orderTrack.setCreateBy(LoginUserHolder.getUserId());
|
|
|
+ orderTrack.setCreateTime(new Date());
|
|
|
+ orderTrack.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ orderTrack.setUpdateTime(new Date());
|
|
|
+ orderTrack.setDelFlag(NumberConstant.ZERO);
|
|
|
+ logisticsOrderTrackMapper.insert(orderTrack);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据物流订单修改mongodb数据
|
|
|
+ * @param logisticsOrder 物流订单
|
|
|
+ */
|
|
|
+ private void updateMongoDbByLogisticsOrder(KwtLogisticsOrder logisticsOrder) {
|
|
|
+ //更新mongodb
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ lOrder.set_id(logisticsOrder.getId());
|
|
|
+ lOrder.setLOrderId(logisticsOrder.getId());
|
|
|
+ lOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus());
|
|
|
+ lOrder.setUpdateTime(new Date());
|
|
|
+ lOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ lOrder.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
+ lOrder.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount());
|
|
|
+ lOrder.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount());
|
|
|
+ lOrder.setIgnoreAmount(logisticsOrder.getIgnoreAmount());
|
|
|
+
|
|
|
+ //rabbitMq业务汇总数据发送/消费对象
|
|
|
+ SckwBusSum busSum = new SckwBusSum();
|
|
|
+ //业务汇总类型
|
|
|
+ busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
|
|
|
+ //操作对象(1新增/2修改/3替换数据)
|
|
|
+ busSum.setMethod(2);
|
|
|
+ //业务汇总数据对象
|
|
|
+ busSum.setObject(lOrder);
|
|
|
+ busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
|
|
|
+ busSum.setMethod(NumberConstant.TWO);
|
|
|
+ streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param lOrderId 承运订单ID
|
|
|
+ * @desc 完结物流订单数据处理-上级物流订单分包量计算
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/9/18
|
|
|
+ **/
|
|
|
+ public void closeHandleByOrderFinish(Long lOrderId) {
|
|
|
+ /**1数据校验**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(lOrderId);
|
|
|
+ if (logisticsOrder == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**2物流订单树形数据结构**/
|
|
|
+ //所有管理物流订单
|
|
|
+ List<KwtLogisticsOrder> orders = logisticsOrderMapper.findLogisticsOrder(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
|
|
|
+ put("plOrderIds", lOrderId);
|
|
|
+ put("currentlOrderId", logisticsOrder.getPids());
|
|
|
+ put("allOrderId", Global.NUMERICAL_ONE);
|
|
|
+ }});
|
|
|
+ //数据copy
|
|
|
+ List<KwtLogisticsOrderTreeVo> logisticsOrders = new ArrayList<>();
|
|
|
+ for (KwtLogisticsOrder order : orders) {
|
|
|
+ KwtLogisticsOrderTreeVo logisticsOrderVo = new KwtLogisticsOrderTreeVo();
|
|
|
+ BeanUtils.copyProperties(order, logisticsOrderVo);
|
|
|
+ logisticsOrders.add(logisticsOrderVo);
|
|
|
+ }
|
|
|
+ List<KwtLogisticsOrderTreeVo> treeData = findTree(logisticsOrders);
|
|
|
+ //数据去除已完结订单下级
|
|
|
+ orderTreeHandle(treeData);
|
|
|
+
|
|
|
+ /**3链路数据组装*/
|
|
|
+ List<List<KwtLogisticsOrderTreeVo>> orderLinks = new ArrayList<>();
|
|
|
+ for (KwtLogisticsOrderTreeVo order : treeData) {
|
|
|
+ Stack<KwtLogisticsOrderTreeVo> pathStack = new Stack<>();
|
|
|
+ iteratorNode(order, pathStack, orderLinks);
|
|
|
+ }
|
|
|
+ //当前物流订单所在链路
|
|
|
+ List<KwtLogisticsOrderTreeVo> orderLink = findLink(orderLinks, lOrderId);
|
|
|
+ //倒序
|
|
|
+ assert orderLink != null;
|
|
|
+ Collections.reverse(orderLink);
|
|
|
+
|
|
|
+ /**4数据处理**/
|
|
|
+ for (KwtLogisticsOrderTreeVo order : orderLink) {
|
|
|
+ //排除已完结订单
|
|
|
+ if (Objects.equals(order.getStatus(), LogisticsOrderEnum.HAVE_FINISHED.getCode())) {
|
|
|
+ //上级物流订单分包量技术-排除一级物流订单
|
|
|
+ if (order.getPid() != null) {
|
|
|
+ //mysql数据更新
|
|
|
+ KwtLogisticsOrder currentOrder = logisticsOrderMapper.selectById(order.getPid());
|
|
|
+ //差值=上游委托量-实际总装货量
|
|
|
+ BigDecimal difference = order.getAmount().subtract(order.getTotalLoadAmount());
|
|
|
+ currentOrder.setSubcontractAmount(currentOrder.getSubcontractAmount().subtract(difference));
|
|
|
+ logisticsOrderMapper.updateById(currentOrder);
|
|
|
+
|
|
|
+ //Mongodb数据更新
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ lOrder.setSubcontractAmount(currentOrder.getSubcontractAmount());
|
|
|
+ waybillOrderService.editSckwLogisticsOrder(lOrder, currentOrder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param lOrderId 承运订单ID
|
|
|
* @desc 完结物流订单数据处理
|
|
|
@@ -823,6 +1134,7 @@ public class KwtTransportCommonService {
|
|
|
Stack<KwtLogisticsOrderTreeVo> pathStack = new Stack<>();
|
|
|
iteratorNode(order, pathStack, orderLinks);
|
|
|
}
|
|
|
+ //当前物流订单所在链路
|
|
|
List<KwtLogisticsOrderTreeVo> orderLink = findLink(orderLinks, lOrderId);
|
|
|
//倒序
|
|
|
assert orderLink != null;
|