|
|
@@ -34,10 +34,7 @@ import com.sckw.system.api.model.dto.res.SysDictResDto;
|
|
|
import com.sckw.transport.dao.*;
|
|
|
import com.sckw.transport.model.*;
|
|
|
import com.sckw.transport.model.dto.*;
|
|
|
-import com.sckw.transport.model.vo.LogisticsCountVo;
|
|
|
-import com.sckw.transport.model.vo.UserInfoVo;
|
|
|
-import com.sckw.transport.model.vo.WaybillCountVo;
|
|
|
-import com.sckw.transport.model.vo.WaybillOrderDriverVo;
|
|
|
+import com.sckw.transport.model.vo.*;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import jakarta.validation.Valid;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -52,6 +49,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -85,7 +83,11 @@ public class KwtWaybillOrderService {
|
|
|
@Autowired
|
|
|
KwtLogisticsOrderCirculateMapper logisticsOrderCirculateDao;
|
|
|
@Autowired
|
|
|
- CommonService commonService;
|
|
|
+ KwtWaybillOrderTicketService waybillOrderTicketService;
|
|
|
+ @Autowired
|
|
|
+ KwtLogisticsOrderGoodsService kwtLogisticsOrderGoodsService;
|
|
|
+ @Autowired
|
|
|
+ KwtCommonService commonService;
|
|
|
@Resource
|
|
|
private StreamBridge streamBridge;
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
@@ -505,7 +507,7 @@ public class KwtWaybillOrderService {
|
|
|
List<SckwWaybillOrder> sckwWaybillOrders = new ArrayList();
|
|
|
for (SendCarDto1 sendCarDto : params) {
|
|
|
/**KwtWaybillOrder数据组装**/
|
|
|
- KwtWaybillOrder waybillOrder = this.setKwtWaybillOrder(sendCarDto);
|
|
|
+ KwtWaybillOrder waybillOrder = this.setKwtWaybillOrder(sendCarDto, logisticsOrder);
|
|
|
/**数据存储**/
|
|
|
if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
|
|
|
for (int i = 0; i < sendCarDto.getCount(); i++) {
|
|
|
@@ -694,7 +696,7 @@ public class KwtWaybillOrderService {
|
|
|
* @author zk
|
|
|
* @date 2023/7/20
|
|
|
**/
|
|
|
- public KwtWaybillOrder setKwtWaybillOrder(SendCarDto1 sendCarDto) {
|
|
|
+ public KwtWaybillOrder setKwtWaybillOrder(SendCarDto1 sendCarDto, KwtLogisticsOrder logisticsOrder) {
|
|
|
KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
|
|
|
waybillOrder.setEntId(LoginUserHolder.getEntId());
|
|
|
waybillOrder.setLOrderId(sendCarDto.getLOrderId());
|
|
|
@@ -707,6 +709,7 @@ public class KwtWaybillOrderService {
|
|
|
waybillOrder.setDriverName(sendCarDto.getDriverName());
|
|
|
waybillOrder.setDriverPhone(sendCarDto.getDriverPhone());
|
|
|
waybillOrder.setDriverIdcard(sendCarDto.getDriverIdcard());
|
|
|
+ waybillOrder.setUnit(logisticsOrder.getUnit());
|
|
|
waybillOrder.setEntrustAmount(new BigDecimal(sendCarDto.getEntrustAmount()));
|
|
|
waybillOrder.setUnloadAmount(new BigDecimal(Global.AMOUNT));
|
|
|
waybillOrder.setLoadAmount(new BigDecimal(Global.AMOUNT));
|
|
|
@@ -1655,6 +1658,48 @@ public class KwtWaybillOrderService {
|
|
|
return HttpResult.ok("装货成功!");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 装货-多单位
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult loadingV1(WaybillOrderTicketV2Dto params) {
|
|
|
+ /**1数据校验**/
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+ //到达装货地车辆运单才能装货
|
|
|
+ if (waybillOrder.getStatus() != CarWaybillEnum.WAIT_LOADING.getCode()) {
|
|
|
+ return HttpResult.error("车辆运单当前状态已不能装货!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**2更新车辆运单**/
|
|
|
+ //装卸货信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> loading = params.getLoading();
|
|
|
+ waybillOrder.setLoadAmount(waybillOrderTicketService.countAmount(loading, waybillOrder.getUnit(), waybillOrder.getLoadAmount()));
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.COMPLETION_LOADING.getCode());
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /**3新增运单状态记录**/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ /**4新增装卸货榜单信息**/
|
|
|
+ waybillOrderTicketService.addTicket(loading, waybillOrder.getId(), params.getUrls(), params.getOperateTime(), Global.NUMERICAL_ONE);
|
|
|
+
|
|
|
+ /**5Mongodb数据更新**/
|
|
|
+ //1车辆运单
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ wOrder.set_id(waybillOrder.getId());
|
|
|
+ wOrder.setLoadAmount(waybillOrder.getLoadAmount());
|
|
|
+ wOrder.setLoadUrls(FileUtils.replaceAllBatch(params.getUrls()));
|
|
|
+ wOrder.setLoadTime(params.getOperateTime());
|
|
|
+ editSckwWaybillOrder(wOrder, waybillOrder, 2);
|
|
|
+ return HttpResult.ok("装货成功!");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param params {}
|
|
|
* @desc 到达卸货地点
|
|
|
@@ -1793,296 +1838,142 @@ public class KwtWaybillOrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param loadAmount 装货量
|
|
|
- * @param deficitAmount 亏吨量
|
|
|
- * @param loss 合理损耗
|
|
|
- * @param goodsPrice 货值单价
|
|
|
- * @desc 计算亏吨扣款
|
|
|
+ * @param params {}
|
|
|
+ * @desc 卸货-多单位
|
|
|
* @author zk
|
|
|
- * @date 2023/7/27
|
|
|
+ * @date 2023/7/26
|
|
|
**/
|
|
|
- public BigDecimal deficitPrice(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal loss,
|
|
|
- String lossUnit, BigDecimal goodsPrice) {
|
|
|
- //亏吨<=0
|
|
|
- if (deficitAmount.compareTo(new BigDecimal(Global.AMOUNT)) <= 0) {
|
|
|
- return new BigDecimal(Global.AMOUNT);
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult unloadingV1(WaybillOrderTicketV2Dto params) {
|
|
|
+ /**1数据校验**/
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
}
|
|
|
- //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
|
|
|
- loss = loss == null ? new BigDecimal(Global.AMOUNT) : loss;
|
|
|
- if (loss.doubleValue() > 0 && StringUtils.isNotBlank(lossUnit)) {
|
|
|
- if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.PERCENT.getCode()))) {
|
|
|
- loss = loss.divide(new BigDecimal(TaxRateTypeEnum.PERCENT.getValue()));
|
|
|
- }
|
|
|
- if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.MILLIMETER.getCode()))) {
|
|
|
- loss = loss.divide(new BigDecimal(TaxRateTypeEnum.MILLIMETER.getValue()));
|
|
|
- }
|
|
|
+ //到达卸货地车辆运单才能卸货
|
|
|
+ if (waybillOrder.getStatus() != CarWaybillEnum.WAIT_UNLOADING.getCode()) {
|
|
|
+ return HttpResult.error("车辆运单当前状态已不能装货!");
|
|
|
}
|
|
|
|
|
|
- goodsPrice = goodsPrice == null ? new BigDecimal(Global.AMOUNT) : goodsPrice;
|
|
|
- BigDecimal deficitLossAmount = deficitAmount.subtract(loadAmount.multiply(loss).setScale(2, RoundingMode.HALF_UP));
|
|
|
- //扣亏量=亏吨量-合理损耗值【要求大于0,如果小于0则扣亏货量取0】
|
|
|
- if (deficitLossAmount.doubleValue() <= 0) {
|
|
|
- return new BigDecimal(Global.AMOUNT);
|
|
|
- }
|
|
|
- //罚款值=扣亏量 * 扣亏货值
|
|
|
- BigDecimal deficitPrice = deficitLossAmount.multiply(goodsPrice).setScale(4, RoundingMode.HALF_UP);
|
|
|
- return deficitPrice;
|
|
|
- }
|
|
|
+ /**2更新车辆运单**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
+ //装卸货信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> loading = params.getLoading();
|
|
|
+ waybillOrder.setUnloadAmount(waybillOrderTicketService.countAmount(loading, waybillOrder.getUnit(), waybillOrder.getUnloadAmount()));
|
|
|
+ waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
|
|
|
+ BigDecimal deficitPrice = deficitPrice(waybillOrder.getLoadAmount(), waybillOrder.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ waybillOrder.setDeficitPrice(deficitPrice);
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
|
|
|
- /**
|
|
|
- * @param lOrderId 承运订单ID
|
|
|
- * @description 校验当前承运订单是否运输完成(修改状态 + 统计量)
|
|
|
- * @author zk
|
|
|
- * @date 2023/7/27
|
|
|
- **/
|
|
|
- public void checkLogisticsByStatus(Long lOrderId) {
|
|
|
- /**
|
|
|
- 校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
|
|
|
- 1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)、统计值
|
|
|
- 2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)、统计值-一直向上到一级物流订单
|
|
|
- **/
|
|
|
+ /**3新增运单状态记录**/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
|
|
|
- /**1存在下级分包**/
|
|
|
- KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
|
|
|
- /**1-1校验下级分包是否全部运输完成**/
|
|
|
- boolean subcontractBool = checkSubcontract(logisticsOrder);
|
|
|
+ /**4新增装卸货榜单信息**/
|
|
|
+ waybillOrderTicketService.addTicket(loading, waybillOrder.getId(), params.getUrls(), params.getOperateTime(), Global.NUMERICAL_TWO);
|
|
|
|
|
|
- /**1-2校验当前承运订单是否运输完成**/
|
|
|
- //车辆运单统计(运输中的物流订单+车辆运单审核通过)
|
|
|
- WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
|
|
|
- put("upperlOrderId", logisticsOrder.getId());
|
|
|
- put("passStatus", Global.NUMERICAL_ONE);
|
|
|
- put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
|
|
|
- }});
|
|
|
- //物流订单统计(运输完成后的物流订单)
|
|
|
- LogisticsCountVo LogisticsCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap() {{
|
|
|
- put("upperlOrderId", logisticsOrder.getId());
|
|
|
- put("finishedStatus", Global.NUMERICAL_ONE);
|
|
|
- }});
|
|
|
+ /**5循环派车重置派车信息kwt_logistics_order_circulate**/
|
|
|
+ if (waybillOrder.getType() == Global.NUMERICAL_TWO) {
|
|
|
+ //循环派车信息
|
|
|
+ KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(),
|
|
|
+ waybillOrder.getTruckId(), waybillOrder.getDriverId());
|
|
|
+ /*circulate.setWOrderId(null);
|
|
|
+ logisticsOrderCirculateDao.updateById(circulate);*/
|
|
|
+ Long newId = new IdWorker(Global.NUMERICAL_ONE).nextId();
|
|
|
+ logisticsOrderCirculateDao.updateIdByKey(newId, null, circulate.getId(), waybillOrder.getUpdateBy(), waybillOrder.getUpdateTime());
|
|
|
|
|
|
- logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
|
|
|
- logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
|
|
|
- logisticsOrderDao.updateById(logisticsOrder);
|
|
|
+ circulate = logisticsOrderCirculateDao.selectById(newId);
|
|
|
+ //Mongodb 重新生成一条运单数据
|
|
|
+ SckwWaybillOrder wOrder = setSckwWaybillOrder(circulate);
|
|
|
+ wOrder.setWOrderId(waybillOrder.getId());
|
|
|
+ editSckwWaybillOrder(wOrder, null, 3);
|
|
|
+ }
|
|
|
|
|
|
- /**1-3更新贸易订单总量
|
|
|
- if (logisticsLevel(logisticsOrder) == Global.NUMERICAL_ONE) {
|
|
|
- //物流订单统计(运输完成后的物流订单)
|
|
|
- LogisticsCountVo tradeCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap<>() {{
|
|
|
- put("tOrderId", logisticsOrder.getTOrderId());
|
|
|
- put("level", Global.NUMERICAL_ONE);
|
|
|
- }});
|
|
|
- //查询贸易订单关联物流运单是否全部完结-totalUnfinished
|
|
|
- WaybillCountVo tradeCount1 = waybillOrderDao.findWaybillOrderCount(new HashMap<>() {{
|
|
|
- put("tOrderId", logisticsOrder.getTOrderId());
|
|
|
- }});
|
|
|
- UpdateActualAmountParam tradeOrder = new UpdateActualAmountParam();
|
|
|
- tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
|
|
|
- tradeOrder.setActualLoadAmount(tradeCount.getLoadAmount());
|
|
|
- tradeOrder.setActualUnloadAmount(tradeCount.getUnloadAmount());
|
|
|
- tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
- tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
- tradeOrderInfoService.updateActualAmount(tradeOrder);
|
|
|
- }**/ //与物流订单完结订单统计履约量统计重复,该处适用于物流订单自动完结
|
|
|
+ /**6跟新司机/车辆数据**/
|
|
|
+ //更新司机信息
|
|
|
+ editDriver(waybillOrder.getDriverId());
|
|
|
+ //更新车辆信息
|
|
|
+ editTruck(waybillOrder.getTruckId());
|
|
|
|
|
|
- /**1-4Mongodb数据更新**/
|
|
|
- //承运订单
|
|
|
- SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
- lOrder.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount());
|
|
|
- lOrder.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount());
|
|
|
- editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
+ /**7更新承运订单entrustAmount
|
|
|
+ //更新卸货量/卸货时间/亏吨/亏吨扣款
|
|
|
+ //承运订单卸货量=承运订单原卸货量+当前车辆运单卸货量
|
|
|
+ BigDecimal unloadAmount = logisticsOrder.getUnloadAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getUnloadAmount();
|
|
|
+ logisticsOrder.setUnloadAmount(unloadAmount.add(waybillOrder.getUnloadAmount()));
|
|
|
+ logisticsOrder.setUnloadTime(waybillOrder.getUpdateTime());
|
|
|
+ //承运订单亏吨量=承运订单装货量-承运订单卸货量
|
|
|
+ logisticsOrder.setDeficitAmount(logisticsOrder.getLoadAmount().subtract(logisticsOrder.getUnloadAmount()));
|
|
|
+ //承运订单亏吨扣款
|
|
|
+ deficitPrice = deficitPrice(logisticsOrder.getLoadAmount(), logisticsOrder.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getGoodsPrice());
|
|
|
+ logisticsOrder.setDeficitPrice(deficitPrice);
|
|
|
+ logisticsOrderDao.updateById(logisticsOrder);**/
|
|
|
|
|
|
- /**2当前物流订单属于分包(存在上级物流订单)**/
|
|
|
- //获取所有上级物流订单ID(当前物流订单ID除外)
|
|
|
- String pids = logisticsOrder.getPids();
|
|
|
- if (StringUtils.isNotBlank(pids)) {
|
|
|
- String[] idArray = pids.split(Global.COMMA);
|
|
|
- for (String id : idArray) {
|
|
|
- Long pid = Long.parseLong(id);
|
|
|
- //当前物流订单ID除外
|
|
|
- if (!pid.equals(lOrderId)) {
|
|
|
- /**校验当前承运订单是否运输完成**/
|
|
|
- checkLogisticsByStatus(pid);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ /**8Mongodb数据更新**/
|
|
|
+ //1车辆运单
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ wOrder.set_id(waybillOrder.getId());
|
|
|
+ wOrder.setUnloadAmount(waybillOrder.getUnloadAmount());
|
|
|
+ wOrder.setDeficitAmount(waybillOrder.getDeficitAmount());
|
|
|
+ wOrder.setDeficitPrice(waybillOrder.getDeficitPrice());
|
|
|
+ wOrder.setUnloadUrls(FileUtils.replaceAllBatch(params.getUrls()));
|
|
|
+ wOrder.setUnloadTime(params.getOperateTime());
|
|
|
+ editSckwWaybillOrder(wOrder, waybillOrder, 2);
|
|
|
+
|
|
|
+ //2承运订单
|
|
|
+ /*SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ lOrder.setUnloadTime(logisticsOrder.getUnloadTime());
|
|
|
+ lOrder.setUnloadAmount(logisticsOrder.getUnloadAmount());
|
|
|
+ lOrder.setDeficitAmount(logisticsOrder.getDeficitAmount());
|
|
|
+ lOrder.setDeficitPrice(logisticsOrder.getDeficitPrice());
|
|
|
+ editSckwLogisticsOrder(lOrder, logisticsOrder);*/
|
|
|
+
|
|
|
+ /**9发送消息**/
|
|
|
+
|
|
|
+ return HttpResult.ok("卸货成功!");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param lOrderId 承运订单ID
|
|
|
- * @description 校验当前承运订单是否运输完成(修改状态 + 统计量)
|
|
|
+ * @param params {}
|
|
|
+ * @desc 修改单证
|
|
|
* @author zk
|
|
|
- * @date 2023/7/27
|
|
|
+ * @date 2023/7/26
|
|
|
**/
|
|
|
- public void checkLogisticsByStatusV1(Long lOrderId) {
|
|
|
- /**
|
|
|
- 校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
|
|
|
- 1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)、统计值
|
|
|
- 2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)、统计值-一直向上到一级物流订单
|
|
|
- **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult editTicket(WaybillOrderTicketDto params) {
|
|
|
+ /**1校验**/
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单信息不存在!");
|
|
|
+ }
|
|
|
+ KwtWaybillOrderTicket ticket = null;//waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), params.getType());
|
|
|
+ if (ticket == null) {
|
|
|
+ return HttpResult.error("车辆运单榜单信息不存在!");
|
|
|
+ }
|
|
|
+ if (params.getType() == Global.NUMERICAL_ONE && (waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_LOADING.getCode()
|
|
|
+ && waybillOrder.getStatus() != CarWaybillEnum.WAIT_UNLOADING.getCode()
|
|
|
+ && waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode())) {
|
|
|
+ return HttpResult.error("当前运单不能编辑装货榜单!");
|
|
|
+ }
|
|
|
+ if (params.getType() == Global.NUMERICAL_TWO && waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode()) {
|
|
|
+ return HttpResult.error("当前运单不能编辑卸货榜单!");
|
|
|
+ }
|
|
|
|
|
|
- /**1存在下级分包**/
|
|
|
- KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
|
|
|
- /**1-1校验下级分包是否全部运输完成**/
|
|
|
- boolean subcontractBool = checkSubcontract(logisticsOrder);
|
|
|
+ /**2更新车辆运单信息**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
+ waybillOrder.setLoadAmount(params.getType() == Global.NUMERICAL_ONE ? params.getAmount() : waybillOrder.getLoadAmount());
|
|
|
+ waybillOrder.setUnloadAmount(params.getType() == Global.NUMERICAL_TWO ? params.getAmount() : waybillOrder.getUnloadAmount());
|
|
|
+ waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
|
|
|
+ BigDecimal deficitPrice = deficitPrice(waybillOrder.getLoadAmount(), waybillOrder.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ waybillOrder.setDeficitPrice(deficitPrice);
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
|
|
|
- /**1-2校验当前承运订单是否运输完成**/
|
|
|
- //车辆运单统计(运输中的物流订单+车辆运单审核通过)
|
|
|
- WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
|
|
|
- put("upperlOrderId", logisticsOrder.getId());
|
|
|
- put("passStatus", Global.NUMERICAL_ONE);
|
|
|
- put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
|
|
|
- }});
|
|
|
- //物流订单统计(运输完成后的物流订单)
|
|
|
- LogisticsCountVo LogisticsCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap() {{
|
|
|
- put("upperlOrderId", logisticsOrder.getId());
|
|
|
- put("finishedStatus", Global.NUMERICAL_ONE);
|
|
|
- }});
|
|
|
-
|
|
|
- logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
|
|
|
- logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
|
|
|
- BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
|
|
|
- //物流运单状态(不包含已完成、已对账、已结算)+ 物流订单上级委派量-下游分包总量 <= 自己承运总装货量 + 下级分包全部运输完成
|
|
|
- if (!LogisticsOrderEnum.transportCompleted(logisticsOrder.getStatus())
|
|
|
- && logisticsOrder.getAmount().subtract(subcontractAmount).compareTo(waybillCount.getLoadAmount()) <= 0
|
|
|
- && subcontractBool) {
|
|
|
- //---------------------------------------------zk 2023-08-01 全量可运
|
|
|
- /**1-3下级分包承运订单运输完成**/
|
|
|
- logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());//取消自动完结
|
|
|
- logisticsOrderDao.updateById(logisticsOrder);
|
|
|
-
|
|
|
- /**1-4承运订单状态记录**/
|
|
|
- KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
|
|
|
- orderTrack.setLOrderId(logisticsOrder.getId());
|
|
|
- orderTrack.setStatus(logisticsOrder.getStatus());
|
|
|
- orderTrack.setRemark(LogisticsOrderEnum.getName(logisticsOrder.getStatus()));
|
|
|
- logisticsOrderTrackDao.insert(orderTrack);
|
|
|
-
|
|
|
- /**1-5循环派车失效kwt_logistics_order_circulate**/
|
|
|
- //循环派车信息
|
|
|
- List<KwtLogisticsOrderCirculate> circulates = logisticsOrderCirculateDao.findCirculateList(logisticsOrder.getId(), null, null, 0);
|
|
|
- for (KwtLogisticsOrderCirculate circulate : circulates) {
|
|
|
- circulate.setStatus(Global.NUMERICAL_ONE);
|
|
|
- logisticsOrderCirculateDao.updateById(circulate);
|
|
|
-
|
|
|
- //车辆订单-Mongodb数据更新
|
|
|
- SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
- wOrder.set_id(circulate.getId());
|
|
|
- KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
|
|
|
- waybillOrder.setStatus(CarWaybillEnum.REVOKED.getCode());
|
|
|
- waybillOrder.setUpdateTime(circulate.getUpdateTime());
|
|
|
- waybillOrder.setUpdateBy(circulate.getUpdateBy());
|
|
|
- editSckwWaybillOrder(wOrder, waybillOrder, 2);
|
|
|
- }
|
|
|
- } else {
|
|
|
- logisticsOrderDao.updateById(logisticsOrder);
|
|
|
- }
|
|
|
-
|
|
|
- /**1-6更新贸易订单总量**/
|
|
|
- if (logisticsLevel(logisticsOrder) == Global.NUMERICAL_ONE) {
|
|
|
- //查询贸易订单总装货量/总卸货量
|
|
|
- WaybillCountVo tradeCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
|
|
|
- put("tOrderId", logisticsOrder.getTOrderId());
|
|
|
- put("passStatus", Global.NUMERICAL_ONE);
|
|
|
- }});
|
|
|
- CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
|
|
|
- tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
|
|
|
- tradeOrder.setActualLoadAmount(tradeCount.getLoadAmount());
|
|
|
- tradeOrder.setActualUnloadAmount(tradeCount.getUnloadAmount());
|
|
|
- tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
- tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
- tradeOrderInfoService.completeLogisticsOrder(tradeOrder);
|
|
|
- }
|
|
|
-
|
|
|
- /**1-7Mongodb数据更新**/
|
|
|
- //承运订单
|
|
|
- SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
- lOrder.setTotalLoadAmount(waybillCount.getLoadAmount());
|
|
|
- lOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount());
|
|
|
- editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
-
|
|
|
- /**2当前物流订单属于分包(存在上级物流订单)**/
|
|
|
- //获取所有上级物流订单ID(当前物流订单ID除外)
|
|
|
- String pids = logisticsOrder.getPids();
|
|
|
- if (StringUtils.isNotBlank(pids)) {
|
|
|
- String[] idArray = pids.split(Global.COMMA);
|
|
|
- for (String id : idArray) {
|
|
|
- Long pid = Long.parseLong(id);
|
|
|
- //当前物流订单ID除外
|
|
|
- if (!pid.equals(lOrderId)) {
|
|
|
- /**校验当前承运订单是否运输完成**/
|
|
|
- checkLogisticsByStatus(pid);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param logisticsOrder 物流订单
|
|
|
- * @desc 校验下级分包是否全部运输完成
|
|
|
- * @author zk
|
|
|
- * @date 2023/7/26
|
|
|
- **/
|
|
|
- public boolean checkSubcontract(KwtLogisticsOrder logisticsOrder) {
|
|
|
- boolean subcontractBool = true;
|
|
|
- BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
|
|
|
- if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) > 0) {
|
|
|
- /**1-1校验下级分包是否全部运输完成**/
|
|
|
- List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
|
|
|
- new HashMap() {{
|
|
|
- put("upperlOrderId", logisticsOrder.getId());
|
|
|
- put("ownOrderId", logisticsOrder.getId());
|
|
|
- }});
|
|
|
- for (KwtLogisticsOrder logisticsOrder1 : logisticsOrders) {
|
|
|
- if (!LogisticsOrderEnum.transportCompleted(logisticsOrder1.getStatus())) {
|
|
|
- //下级分包承运订单运输未完成
|
|
|
- subcontractBool = false;
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return subcontractBool;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param params {}
|
|
|
- * @desc 修改单证
|
|
|
- * @author zk
|
|
|
- * @date 2023/7/26
|
|
|
- **/
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public HttpResult editTicket(WaybillOrderTicketDto params) {
|
|
|
- /**1校验**/
|
|
|
- KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
- if (waybillOrder == null) {
|
|
|
- return HttpResult.error("车辆运单信息不存在!");
|
|
|
- }
|
|
|
- KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), params.getType());
|
|
|
- if (ticket == null) {
|
|
|
- return HttpResult.error("车辆运单榜单信息不存在!");
|
|
|
- }
|
|
|
- if (params.getType() == Global.NUMERICAL_ONE && (waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_LOADING.getCode()
|
|
|
- && waybillOrder.getStatus() != CarWaybillEnum.WAIT_UNLOADING.getCode()
|
|
|
- && waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode())) {
|
|
|
- return HttpResult.error("当前运单不能编辑装货榜单!");
|
|
|
- }
|
|
|
- if (params.getType() == Global.NUMERICAL_TWO && waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode()) {
|
|
|
- return HttpResult.error("当前运单不能编辑卸货榜单!");
|
|
|
- }
|
|
|
-
|
|
|
- /**2更新车辆运单信息**/
|
|
|
- KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
- waybillOrder.setLoadAmount(params.getType() == Global.NUMERICAL_ONE ? params.getAmount() : waybillOrder.getLoadAmount());
|
|
|
- waybillOrder.setUnloadAmount(params.getType() == Global.NUMERICAL_TWO ? params.getAmount() : waybillOrder.getUnloadAmount());
|
|
|
- waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
|
|
|
- BigDecimal deficitPrice = deficitPrice(waybillOrder.getLoadAmount(), waybillOrder.getDeficitAmount(),
|
|
|
- logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
- waybillOrder.setDeficitPrice(deficitPrice);
|
|
|
- waybillOrderDao.updateById(waybillOrder);
|
|
|
-
|
|
|
- /**3更新榜单信息**/
|
|
|
- BeanUtils.copyProperties(params, ticket);
|
|
|
- ticket.setUrls(FileUtils.replaceAllBatch(ticket.getUrls()));
|
|
|
- waybillOrderTicketDao.updateById(ticket);
|
|
|
+ /**3更新榜单信息**/
|
|
|
+ BeanUtils.copyProperties(params, ticket);
|
|
|
+ ticket.setUrls(FileUtils.replaceAllBatch(ticket.getUrls()));
|
|
|
+ waybillOrderTicketDao.updateById(ticket);
|
|
|
|
|
|
/**4Mongodb数据更新**/
|
|
|
//1车辆运单
|
|
|
@@ -2111,7 +2002,7 @@ public class KwtWaybillOrderService {
|
|
|
|
|
|
/**
|
|
|
* @param params {}
|
|
|
- * @desc 单证审核(编辑单证)
|
|
|
+ * @desc 修改单证-装卸货
|
|
|
* @author zk
|
|
|
* @date 2023/7/26
|
|
|
**/
|
|
|
@@ -2140,12 +2031,12 @@ public class KwtWaybillOrderService {
|
|
|
waybillOrderDao.updateById(waybillOrder);
|
|
|
|
|
|
/**3更新榜单信息**/
|
|
|
- KwtWaybillOrderTicket loadTicket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_ONE);
|
|
|
+ KwtWaybillOrderTicket loadTicket = null;//waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_ONE);
|
|
|
loadTicket.setAmount(params.getLoadAmount());
|
|
|
loadTicket.setUrls(FileUtils.replaceAllBatch(params.getLoadUrls()));
|
|
|
loadTicket.setOperateTime(params.getLoadOperateTime());
|
|
|
waybillOrderTicketDao.updateById(loadTicket);
|
|
|
- KwtWaybillOrderTicket unloadTicket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_TWO);
|
|
|
+ KwtWaybillOrderTicket unloadTicket = null;//waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_TWO);
|
|
|
unloadTicket.setAmount(params.getUnloadAmount());
|
|
|
unloadTicket.setUrls(FileUtils.replaceAllBatch(params.getUnloadUrls()));
|
|
|
unloadTicket.setOperateTime(params.getUnloadOperateTime());
|
|
|
@@ -2173,6 +2064,63 @@ public class KwtWaybillOrderService {
|
|
|
return HttpResult.ok("车辆运单单证更新完成!");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 修改单证-装卸货-多单位
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult editTicketV1(WaybillOrderTicketV3Dto params) {
|
|
|
+ /**1数据校验**/
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+ //已卸货/审批不通过车辆运单才能审核
|
|
|
+ if (waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode()
|
|
|
+ && waybillOrder.getStatus() != CarWaybillEnum.APPROVAL_NO_PASS.getCode()) {
|
|
|
+ return HttpResult.error("车辆运单当前状态不能编辑!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**2更新车辆运单**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
+ //装卸货信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> load = params.getLoad();
|
|
|
+ List<WaybillOrderTicketLoadingDto> unload = params.getLoad();
|
|
|
+ waybillOrder.setLoadAmount(waybillOrderTicketService.countAmount(load, waybillOrder.getUnit(), waybillOrder.getLoadAmount()));
|
|
|
+ waybillOrder.setUnloadAmount(waybillOrderTicketService.countAmount(unload, waybillOrder.getUnit(), waybillOrder.getUnloadAmount()));
|
|
|
+ waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
|
|
|
+ BigDecimal deficitPrice = deficitPrice(waybillOrder.getLoadAmount(), waybillOrder.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ waybillOrder.setDeficitPrice(deficitPrice);
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.APPROVAL_IN.getCode());
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /**3更新榜单信息**/
|
|
|
+ waybillOrderTicketService.editTicket(load, waybillOrder.getId(), params.getLoadUrls(), params.getLoadOperateTime(), Global.NUMERICAL_ONE);
|
|
|
+ waybillOrderTicketService.editTicket(unload, waybillOrder.getId(), params.getUnloadUrls(), params.getUnloadOperateTime(), Global.NUMERICAL_TWO);
|
|
|
+
|
|
|
+ /**4新增运单状态记录**/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getUpdateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ /**5Mongodb数据更新**/
|
|
|
+ //1车辆运单
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ wOrder.set_id(waybillOrder.getId());
|
|
|
+ wOrder.setLoadAmount(waybillOrder.getLoadAmount());
|
|
|
+ wOrder.setLoadTime(params.getLoadOperateTime());
|
|
|
+ wOrder.setLoadUrls(FileUtils.replaceAllBatch(params.getLoadUrls()));
|
|
|
+ wOrder.setUnloadAmount(waybillOrder.getUnloadAmount());
|
|
|
+ wOrder.setUnloadTime(params.getUnloadOperateTime());
|
|
|
+ wOrder.setUnloadUrls(FileUtils.replaceAllBatch(params.getUnloadUrls()));
|
|
|
+ wOrder.setDeficitAmount(waybillOrder.getDeficitAmount());
|
|
|
+ wOrder.setDeficitPrice(waybillOrder.getDeficitPrice());
|
|
|
+ editSckwWaybillOrder(wOrder, waybillOrder, Global.NUMERICAL_TWO);
|
|
|
+
|
|
|
+ return HttpResult.ok("车辆运单单证更新完成!");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param wOrderId
|
|
|
* @desc 修改单证查询运单
|
|
|
@@ -2185,10 +2133,88 @@ public class KwtWaybillOrderService {
|
|
|
if (waybillOrder == null) {
|
|
|
return HttpResult.error("车辆运单信息不存在!");
|
|
|
}
|
|
|
+
|
|
|
+ //装货榜单
|
|
|
+ List<KwtWaybillOrderTicket> loadTickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, NumberConstant.ONE);
|
|
|
+ KwtWaybillOrderTicket loadTicket = CollectionUtils.isNotEmpty(loadTickets) ? loadTickets.get(NumberConstant.ZERO) : null;
|
|
|
+ List<WaybillOrderLoadingVO> loadLoading = waybillOrderTicketService.agreement(wOrderId, NumberConstant.ONE);
|
|
|
+ //卸货榜单
|
|
|
+ List<KwtWaybillOrderTicket> unloadTickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, NumberConstant.TWO);
|
|
|
+ KwtWaybillOrderTicket unloadTicket = CollectionUtils.isNotEmpty(unloadTickets) ? unloadTickets.get(NumberConstant.ZERO) : null;
|
|
|
+ List<WaybillOrderLoadingVO> unloadLoading = waybillOrderTicketService.agreement(wOrderId, NumberConstant.TWO);
|
|
|
+
|
|
|
+ //装货地址
|
|
|
+ KwtWaybillOrderAddress loadAddress = this.getAddress(waybillOrder.getId(), NumberConstant.ONE, NumberConstant.TWO);
|
|
|
+ //卸货地址
|
|
|
+ KwtWaybillOrderAddress unloadAddress = this.getAddress(waybillOrder.getId(), Global.NUMERICAL_TWO, NumberConstant.TWO);
|
|
|
+ //商品信息
|
|
|
+ KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(waybillOrder.getLOrderId());
|
|
|
+ //审批意见
|
|
|
+ KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), CarWaybillEnum.APPROVAL_NO_PASS.getCode());
|
|
|
+
|
|
|
+ //用户数据集
|
|
|
+ List<Long> createBys = new ArrayList() {{
|
|
|
+ add(loadTicket != null ? loadTicket.getUpdateBy() : null);
|
|
|
+ add(unloadTicket != null ? unloadTicket.getUpdateBy() : null);
|
|
|
+ add(track != null ? track.getCreateBy() : null);
|
|
|
+ }};
|
|
|
+ createBys = createBys.stream().distinct().collect(Collectors.toList());
|
|
|
+ List<UserInfoVo> users = commonService.findUserList(createBys);
|
|
|
+ Map<Long, String> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ users.forEach(e -> usersMap.put(e.getId(), e.getName()));
|
|
|
+
|
|
|
+ Map result = new HashMap();
|
|
|
+ result.put("wOrderId", wOrderId);
|
|
|
+ result.put("wOrderNo", waybillOrder.getWOrderNo());
|
|
|
+ result.put("status", waybillOrder.getStatus());
|
|
|
+ result.put("truckNo", waybillOrder.getTruckNo());
|
|
|
+ result.put("driverName", waybillOrder.getDriverName());
|
|
|
+ result.put("driverPhone", waybillOrder.getDriverPhone());
|
|
|
+ result.put("driverIdcard", waybillOrder.getDriverIdcard());
|
|
|
+ result.put("goodsName", goods != null ? goods.getGoodsName() : null);
|
|
|
+ result.put("loadStatus", loadTicket != null ? 0 : 1);
|
|
|
+ result.put("loadLoading", loadLoading);
|
|
|
+
|
|
|
+ result.put("loadUrls", loadTicket != null ? FileUtils.spliceBatch(loadTicket.getUrls()) : null);
|
|
|
+ result.put("loadOperateTime", loadTicket != null ? DateUtil.dateTimeFormatter(loadTicket.getOperateTime()) : null);
|
|
|
+ result.put("loadCreateTime", loadTicket != null ? DateUtil.dateTimeFormatter(loadTicket.getCreateTime()) : null);
|
|
|
+ result.put("loadCreateByName", usersMap.get(loadTicket.getUpdateBy()));
|
|
|
+ result.put("loadCityName", loadAddress != null ? loadAddress.getCityName() : null);
|
|
|
+ result.put("loadDetailAddress", loadAddress != null ? loadAddress.getDetailAddress() : null);
|
|
|
+ result.put("unloadStatus", loadTicket != null ? 0 : 1);
|
|
|
+ result.put("unloadLoading", unloadLoading);
|
|
|
+
|
|
|
+ result.put("unloadUrls", unloadTicket != null ? FileUtils.spliceBatch(unloadTicket.getUrls()) : null);
|
|
|
+ result.put("unloadOperateTime", unloadTicket != null ? DateUtil.dateTimeFormatter(unloadTicket.getOperateTime()) : null);
|
|
|
+ result.put("unloadCreateTime", unloadTicket != null ? DateUtil.dateTimeFormatter(unloadTicket.getCreateTime()) : null);
|
|
|
+ result.put("unloadCreateByName", unloadTicket != null ? usersMap.get(unloadTicket.getUpdateBy()) : null);
|
|
|
+ result.put("unloadCityName", unloadAddress != null ? unloadAddress.getCityName() : null);
|
|
|
+ result.put("unloadDetailAddress", unloadAddress != null ? unloadAddress.getDetailAddress() : null);
|
|
|
+ result.put("approvalTime", track != null ? DateUtils.formatV1(track.getCreateTime()) : null);
|
|
|
+ result.put("approvalOpinions", track != null ? track.getRemark() : null);
|
|
|
+ result.put("approver", usersMap.get(track != null ? track.getUpdateBy() : null));
|
|
|
+ return HttpResult.ok(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param wOrderId
|
|
|
+ * @desc 修改单证查询运单
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/8/10
|
|
|
+ **/
|
|
|
+ public HttpResult ticketWaybillOrderOld(Long wOrderId) {
|
|
|
+ //车辆运单信息
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单信息不存在!");
|
|
|
+ }
|
|
|
//装货榜单
|
|
|
- KwtWaybillOrderTicket loadTicket = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, Global.NUMERICAL_ONE);
|
|
|
+ List<KwtWaybillOrderTicket> loadTickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, NumberConstant.ONE);
|
|
|
+ KwtWaybillOrderTicket loadTicket = CollectionUtils.isNotEmpty(loadTickets) ? loadTickets.get(NumberConstant.ZERO) : null;
|
|
|
//卸货榜单
|
|
|
- KwtWaybillOrderTicket unloadTicket = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, Global.NUMERICAL_TWO);
|
|
|
+ List<KwtWaybillOrderTicket> unloadTickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, NumberConstant.TWO);
|
|
|
+ KwtWaybillOrderTicket unloadTicket = CollectionUtils.isNotEmpty(unloadTickets) ? unloadTickets.get(NumberConstant.ZERO) : null;
|
|
|
+
|
|
|
//装货地址
|
|
|
KwtWaybillOrderAddress loadAddress = this.getAddress(waybillOrder.getId(), Global.NUMERICAL_ONE, Global.NUMERICAL_TWO);
|
|
|
//卸货地址
|
|
|
@@ -2363,12 +2389,13 @@ public class KwtWaybillOrderService {
|
|
|
waybillOrderDao.updateById(waybillOrder);
|
|
|
|
|
|
/**3更新榜单信息**/
|
|
|
- KwtWaybillOrderTicket loadTicket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_ONE);
|
|
|
+ KwtWaybillOrderTicket loadTicket = null;//waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_ONE);
|
|
|
loadTicket.setAmount(params.getLoadAmount());
|
|
|
loadTicket.setUrls(FileUtils.replaceAllBatch(params.getLoadUrls()));
|
|
|
loadTicket.setOperateTime(params.getLoadOperateTime());
|
|
|
waybillOrderTicketDao.updateById(loadTicket);
|
|
|
- KwtWaybillOrderTicket unloadTicket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_TWO);
|
|
|
+
|
|
|
+ KwtWaybillOrderTicket unloadTicket = null;//waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), Global.NUMERICAL_TWO);
|
|
|
unloadTicket.setAmount(params.getUnloadAmount());
|
|
|
unloadTicket.setUrls(FileUtils.replaceAllBatch(params.getUnloadUrls()));
|
|
|
unloadTicket.setOperateTime(params.getUnloadOperateTime());
|
|
|
@@ -2438,6 +2465,115 @@ public class KwtWaybillOrderService {
|
|
|
return HttpResult.ok("车辆运单审核完成!");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 单证审核(编辑单证)-多单位
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult approvalEditTicketV1(WaybillOrderTicketApprovalV1Dto params) {
|
|
|
+ /**1数据校验**/
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+ //已卸货/审批不通过车辆运单才能审核
|
|
|
+ if (waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_UNLOADING.getCode()
|
|
|
+ && waybillOrder.getStatus() != CarWaybillEnum.APPROVAL_NO_PASS.getCode()
|
|
|
+ && waybillOrder.getStatus() != CarWaybillEnum.APPROVAL_IN.getCode()) {
|
|
|
+ return HttpResult.error("车辆运单当前状态已不能审核!");
|
|
|
+ }
|
|
|
+ //已卸货/审批不通过车辆运单只能审批通过或审批不通过
|
|
|
+ if (params.getStatus() != Global.NO && params.getStatus() != Global.YES) {
|
|
|
+ return HttpResult.error("车辆运单当前状态只能审批通过或审批不通过!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**2更新车辆运单**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
+ int status = params.getStatus() == Global.NO ? CarWaybillEnum.APPROVAL_PASS.getCode() : CarWaybillEnum.APPROVAL_NO_PASS.getCode();
|
|
|
+ //装卸货信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> load = params.getLoad();
|
|
|
+ List<WaybillOrderTicketLoadingDto> unload = params.getLoad();
|
|
|
+ waybillOrder.setLoadAmount(waybillOrderTicketService.countAmount(load, waybillOrder.getUnit(), waybillOrder.getLoadAmount()));
|
|
|
+ waybillOrder.setUnloadAmount(waybillOrderTicketService.countAmount(unload, waybillOrder.getUnit(), waybillOrder.getUnloadAmount()));
|
|
|
+ waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
|
|
|
+ BigDecimal deficitPrice = deficitPrice(waybillOrder.getLoadAmount(), waybillOrder.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ waybillOrder.setDeficitPrice(deficitPrice);
|
|
|
+ waybillOrder.setStatus(status);
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
+
|
|
|
+
|
|
|
+ /**3更新榜单信息**/
|
|
|
+ waybillOrderTicketService.editTicket(load, waybillOrder.getId(), params.getLoadUrls(), params.getLoadOperateTime(), Global.NUMERICAL_ONE);
|
|
|
+ waybillOrderTicketService.editTicket(unload, waybillOrder.getId(), params.getUnloadUrls(), params.getUnloadOperateTime(), Global.NUMERICAL_TWO);
|
|
|
+
|
|
|
+ /**4新增运单状态记录**/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getUpdateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ if (waybillOrder.getStatus() == CarWaybillEnum.APPROVAL_PASS.getCode()) {
|
|
|
+ /**5跟新司机/车辆数据**/
|
|
|
+ //更新司机信息
|
|
|
+ editDriver(waybillOrder.getDriverId());
|
|
|
+ //更新车辆信息
|
|
|
+ editTruck(waybillOrder.getTruckId());
|
|
|
+
|
|
|
+ /**6更新承运订单信息**/
|
|
|
+ //更新卸货量/卸货时间/亏吨/亏吨扣款
|
|
|
+ Map queryParams = new HashMap();
|
|
|
+ queryParams.put("lOrderId", waybillOrder.getLOrderId());
|
|
|
+ queryParams.put("passStatus", Global.NUMERICAL_ONE);
|
|
|
+ WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(queryParams);
|
|
|
+
|
|
|
+ //委派未运量=承运委派量-装货量
|
|
|
+ BigDecimal residue = waybillOrder.getEntrustAmount().subtract(waybillOrder.getLoadAmount());
|
|
|
+ logisticsOrder.setEntrustAmount(logisticsOrder.getEntrustAmount().subtract(residue));
|
|
|
+ logisticsOrder.setLoadAmount(waybillCount.getLoadAmount());
|
|
|
+ logisticsOrder.setLoadTime(waybillCount.getLoadTime());
|
|
|
+ logisticsOrder.setUnloadAmount(waybillCount.getUnloadAmount());
|
|
|
+ logisticsOrder.setUnloadTime(waybillCount.getUnloadTime());
|
|
|
+ logisticsOrder.setDeficitAmount(waybillCount.getDeficitAmount());
|
|
|
+ deficitPrice = deficitPrice(waybillCount.getLoadAmount(), waybillCount.getDeficitAmount(),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ logisticsOrder.setDeficitPrice(deficitPrice);
|
|
|
+ logisticsOrderDao.updateById(logisticsOrder);
|
|
|
+
|
|
|
+ //物流运单辅助单位
|
|
|
+ kwtLogisticsOrderGoodsService.editLogisticsOrderGoodsLoading(logisticsOrder.getId());
|
|
|
+
|
|
|
+ /**7Mongodb数据更新**/
|
|
|
+ //2承运订单
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ lOrder.setLoadAmount(logisticsOrder.getLoadAmount());
|
|
|
+ lOrder.setLoadTime(logisticsOrder.getLoadTime());
|
|
|
+ lOrder.setUnloadAmount(logisticsOrder.getUnloadAmount());
|
|
|
+ lOrder.setUnloadTime(logisticsOrder.getUnloadTime());
|
|
|
+ lOrder.setDeficitAmount(logisticsOrder.getDeficitAmount());
|
|
|
+ lOrder.setDeficitPrice(logisticsOrder.getDeficitPrice());
|
|
|
+ editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
+
|
|
|
+ /**8校验当前承运订单是否运输完成(修改状态+统计量)**/
|
|
|
+ checkLogisticsByStatus(waybillOrder.getLOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**9Mongodb数据更新**/
|
|
|
+ //1车辆运单
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ wOrder.set_id(waybillOrder.getId());
|
|
|
+ wOrder.setLoadAmount(waybillOrder.getLoadAmount());
|
|
|
+ wOrder.setLoadTime(params.getLoadOperateTime());
|
|
|
+ wOrder.setLoadUrls(FileUtils.replaceAllBatch(params.getLoadUrls()));
|
|
|
+ wOrder.setUnloadAmount(waybillOrder.getUnloadAmount());
|
|
|
+ wOrder.setUnloadTime(params.getUnloadOperateTime());
|
|
|
+ wOrder.setUnloadUrls(FileUtils.replaceAllBatch(params.getUnloadUrls()));
|
|
|
+ wOrder.setDeficitAmount(waybillOrder.getDeficitAmount());
|
|
|
+ wOrder.setDeficitPrice(waybillOrder.getDeficitPrice());
|
|
|
+ editSckwWaybillOrder(wOrder, waybillOrder, Global.NUMERICAL_TWO);
|
|
|
+
|
|
|
+ return HttpResult.ok("车辆运单审核完成!");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param driverId 司机档案ID
|
|
|
* @desc 更新司机信息
|
|
|
@@ -2488,6 +2624,150 @@ public class KwtWaybillOrderService {
|
|
|
return remoteFleetService.findTruck(truckId);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param loadAmount 装货量
|
|
|
+ * @param deficitAmount 亏吨量
|
|
|
+ * @param loss 合理损耗
|
|
|
+ * @param goodsPrice 货值单价
|
|
|
+ * @desc 计算亏吨扣款
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/27
|
|
|
+ **/
|
|
|
+ public BigDecimal deficitPrice(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal loss,
|
|
|
+ String lossUnit, BigDecimal goodsPrice) {
|
|
|
+ //亏吨<=0
|
|
|
+ if (deficitAmount.compareTo(new BigDecimal(Global.AMOUNT)) <= 0) {
|
|
|
+ return new BigDecimal(Global.AMOUNT);
|
|
|
+ }
|
|
|
+ //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
|
|
|
+ loss = loss == null ? new BigDecimal(Global.AMOUNT) : loss;
|
|
|
+ if (loss.doubleValue() > 0 && StringUtils.isNotBlank(lossUnit)) {
|
|
|
+ if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.PERCENT.getCode()))) {
|
|
|
+ loss = loss.divide(new BigDecimal(TaxRateTypeEnum.PERCENT.getValue()));
|
|
|
+ }
|
|
|
+ if (lossUnit.equals(String.valueOf(TaxRateTypeEnum.MILLIMETER.getCode()))) {
|
|
|
+ loss = loss.divide(new BigDecimal(TaxRateTypeEnum.MILLIMETER.getValue()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ goodsPrice = goodsPrice == null ? new BigDecimal(Global.AMOUNT) : goodsPrice;
|
|
|
+ BigDecimal deficitLossAmount = deficitAmount.subtract(loadAmount.multiply(loss).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ //扣亏量=亏吨量-合理损耗值【要求大于0,如果小于0则扣亏货量取0】
|
|
|
+ if (deficitLossAmount.doubleValue() <= 0) {
|
|
|
+ return new BigDecimal(Global.AMOUNT);
|
|
|
+ }
|
|
|
+ //罚款值=扣亏量 * 扣亏货值
|
|
|
+ BigDecimal deficitPrice = deficitLossAmount.multiply(goodsPrice).setScale(4, RoundingMode.HALF_UP);
|
|
|
+ return deficitPrice;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param lOrderId 承运订单ID
|
|
|
+ * @description 校验当前承运订单是否运输完成(修改状态 + 统计量)
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/27
|
|
|
+ **/
|
|
|
+ public void checkLogisticsByStatus(Long lOrderId) {
|
|
|
+ /**
|
|
|
+ 校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
|
|
|
+ 1存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)、统计值
|
|
|
+ 2当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)、统计值-一直向上到一级物流订单
|
|
|
+ **/
|
|
|
+
|
|
|
+ /**1存在下级分包**/
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
|
|
|
+ /**1-1校验下级分包是否全部运输完成**/
|
|
|
+ boolean subcontractBool = checkSubcontract(logisticsOrder);
|
|
|
+
|
|
|
+ /**1-2校验当前承运订单是否运输完成**/
|
|
|
+ //车辆运单统计(运输中的物流订单+车辆运单审核通过)
|
|
|
+ WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount(new HashMap() {{
|
|
|
+ put("upperlOrderId", logisticsOrder.getId());
|
|
|
+ put("passStatus", Global.NUMERICAL_ONE);
|
|
|
+ put("logisticsStatus", LogisticsOrderEnum.IN_TRANSIT.getCode());
|
|
|
+ }});
|
|
|
+ //物流订单统计(运输完成后的物流订单)
|
|
|
+ LogisticsCountVo LogisticsCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap() {{
|
|
|
+ put("upperlOrderId", logisticsOrder.getId());
|
|
|
+ put("finishedStatus", Global.NUMERICAL_ONE);
|
|
|
+ }});
|
|
|
+ //更新物流订单总装卸货量
|
|
|
+ logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount().add(LogisticsCount.getLoadAmount()));
|
|
|
+ logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount().add(LogisticsCount.getUnloadAmount()));
|
|
|
+ logisticsOrderDao.updateById(logisticsOrder);
|
|
|
+ //更新物流运单辅助单位
|
|
|
+ kwtLogisticsOrderGoodsService.editLogisticsOrderGoodsTotalLoading(logisticsOrder.getId());
|
|
|
+
|
|
|
+ /**1-3更新贸易订单总量
|
|
|
+ if (logisticsLevel(logisticsOrder) == Global.NUMERICAL_ONE) {
|
|
|
+ //物流订单统计(运输完成后的物流订单)
|
|
|
+ LogisticsCountVo tradeCount = logisticsOrderDao.findLogisticsOrderCount(new HashMap<>() {{
|
|
|
+ put("tOrderId", logisticsOrder.getTOrderId());
|
|
|
+ put("level", Global.NUMERICAL_ONE);
|
|
|
+ }});
|
|
|
+ //查询贸易订单关联物流运单是否全部完结-totalUnfinished
|
|
|
+ WaybillCountVo tradeCount1 = waybillOrderDao.findWaybillOrderCount(new HashMap<>() {{
|
|
|
+ put("tOrderId", logisticsOrder.getTOrderId());
|
|
|
+ }});
|
|
|
+ UpdateActualAmountParam tradeOrder = new UpdateActualAmountParam();
|
|
|
+ tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
|
|
|
+ tradeOrder.setActualLoadAmount(tradeCount.getLoadAmount());
|
|
|
+ tradeOrder.setActualUnloadAmount(tradeCount.getUnloadAmount());
|
|
|
+ tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
|
|
|
+ tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
+ tradeOrderInfoService.updateActualAmount(tradeOrder);
|
|
|
+ }**/ //与物流订单完结订单统计履约量统计重复,该处适用于物流订单自动完结
|
|
|
+
|
|
|
+ /**1-4Mongodb数据更新**/
|
|
|
+ //承运订单
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ lOrder.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount());
|
|
|
+ lOrder.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount());
|
|
|
+ editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
+
|
|
|
+ /**2当前物流订单属于分包(存在上级物流订单)**/
|
|
|
+ //获取所有上级物流订单ID(当前物流订单ID除外)
|
|
|
+ String pids = logisticsOrder.getPids();
|
|
|
+ if (StringUtils.isNotBlank(pids)) {
|
|
|
+ String[] idArray = pids.split(Global.COMMA);
|
|
|
+ for (String id : idArray) {
|
|
|
+ Long pid = Long.parseLong(id);
|
|
|
+ //当前物流订单ID除外
|
|
|
+ if (!pid.equals(lOrderId)) {
|
|
|
+ /**校验当前承运订单是否运输完成**/
|
|
|
+ checkLogisticsByStatus(pid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param logisticsOrder 物流订单
|
|
|
+ * @desc 校验下级分包是否全部运输完成
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ public boolean checkSubcontract(KwtLogisticsOrder logisticsOrder) {
|
|
|
+ boolean subcontractBool = true;
|
|
|
+ BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
|
|
|
+ if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) > 0) {
|
|
|
+ /**1-1校验下级分包是否全部运输完成**/
|
|
|
+ List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
|
|
|
+ new HashMap() {{
|
|
|
+ put("upperlOrderId", logisticsOrder.getId());
|
|
|
+ put("ownOrderId", logisticsOrder.getId());
|
|
|
+ }});
|
|
|
+ for (KwtLogisticsOrder logisticsOrder1 : logisticsOrders) {
|
|
|
+ if (!LogisticsOrderEnum.transportCompleted(logisticsOrder1.getStatus())) {
|
|
|
+ //下级分包承运订单运输未完成
|
|
|
+ subcontractBool = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return subcontractBool;
|
|
|
+ }
|
|
|
+
|
|
|
/** 当前物流订单是全量下游则只能全量可运、否则可委托量或全量
|
|
|
校验上游是否全量,并获取全量跟节点物流订单或贸易订单(可委派量)
|
|
|
1、派车、循环派车接单需校验贸易订单/物流订单是否委派完成;
|