|
|
@@ -16,10 +16,7 @@ import com.sckw.mongo.model.SckwWaybillOrder;
|
|
|
import com.sckw.stream.model.SckwBusSum;
|
|
|
import com.sckw.transport.dao.*;
|
|
|
import com.sckw.transport.model.*;
|
|
|
-import com.sckw.transport.model.dto.OperateWaybillDto;
|
|
|
-import com.sckw.transport.model.dto.OperateSendCarDto;
|
|
|
-import com.sckw.transport.model.dto.SendCarDto1;
|
|
|
-import com.sckw.transport.model.dto.WaybillOrderTicketDto;
|
|
|
+import com.sckw.transport.model.dto.*;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import jakarta.validation.Valid;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -28,7 +25,9 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
@@ -64,7 +63,7 @@ public class KwtWaybillOrderService {
|
|
|
|
|
|
/**
|
|
|
* @param params
|
|
|
- * @desc 派车-趟次
|
|
|
+ * @desc 派车
|
|
|
* @author zk
|
|
|
* @date 2023/7/19
|
|
|
**/
|
|
|
@@ -487,16 +486,21 @@ public class KwtWaybillOrderService {
|
|
|
BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
|
|
|
logisticsOrder.setEntrustAmount(entrustAmount.add(ranksAmount));
|
|
|
}
|
|
|
- //承运订单:待派车->运输中
|
|
|
+ /**承运订单:待派车->运输中**/
|
|
|
logisticsOrder.setStatus(LogisticsOrderEnum.IN_TRANSIT.getCode());
|
|
|
logisticsOrderDao.updateById(order);
|
|
|
|
|
|
- //承运订单状态记录
|
|
|
+ /**承运订单状态记录**/
|
|
|
KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
|
|
|
orderTrack.setLOrderId(order.getId());
|
|
|
orderTrack.setStatus(order.getStatus());
|
|
|
orderTrack.setRemark(LogisticsOrderEnum.getName(order.getStatus()));
|
|
|
logisticsOrderTrackDao.insert(orderTrack);
|
|
|
+
|
|
|
+ /**Mongodb数据更新**/
|
|
|
+ //2承运订单
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -622,6 +626,7 @@ public class KwtWaybillOrderService {
|
|
|
lOrder.set_id(order.getId());
|
|
|
lOrder.setLOrderId(order.getId());
|
|
|
lOrder.setEntrustAmount(order.getEntrustAmount());
|
|
|
+ lOrder.setStatus(order.getStatus());
|
|
|
lOrder.setUpdateTime(order.getUpdateTime());
|
|
|
lOrder.setUpdateBy(order.getUpdateBy());
|
|
|
//rabbitMq业务汇总数据发送/消费对象
|
|
|
@@ -1063,7 +1068,7 @@ public class KwtWaybillOrderService {
|
|
|
* @date 2023/7/26
|
|
|
**/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public HttpResult unloading(@RequestBody @Valid WaybillOrderTicketDto params){
|
|
|
+ public HttpResult unloading(WaybillOrderTicketDto params){
|
|
|
/**数据校验**/
|
|
|
KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
|
|
|
if (waybillOrder == null) {
|
|
|
@@ -1095,13 +1100,17 @@ public class KwtWaybillOrderService {
|
|
|
/**4更新承运订单entrustAmount**/
|
|
|
//更新卸货量/卸货时间/亏吨/亏吨扣款
|
|
|
KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
|
|
|
- //承运订单已卸货量=承运订单原卸货量+当前车辆运单卸货量
|
|
|
+ //承运订单卸货量=承运订单原卸货量+当前车辆运单卸货量
|
|
|
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()));
|
|
|
- logisticsOrder.setDeficitPrice(null);
|
|
|
+ //承运订单亏吨扣款
|
|
|
+ deficitPrice(logisticsOrder);
|
|
|
logisticsOrderDao.updateById(logisticsOrder);
|
|
|
+ //校验当前承运订单是否运输完成
|
|
|
+ setLogisticsByUnloading(logisticsOrder.getId());
|
|
|
|
|
|
/**5Mongodb数据更新**/
|
|
|
//1车辆运单
|
|
|
@@ -1116,6 +1125,8 @@ public class KwtWaybillOrderService {
|
|
|
SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
lOrder.setUnloadTime(logisticsOrder.getUnloadTime());
|
|
|
lOrder.setUnloadAmount(logisticsOrder.getUnloadAmount());
|
|
|
+ lOrder.setDeficitAmount(logisticsOrder.getDeficitAmount());
|
|
|
+ lOrder.setDeficitPrice(logisticsOrder.getDeficitPrice());
|
|
|
editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
|
|
|
/**6发送消息**/
|
|
|
@@ -1123,4 +1134,148 @@ public class KwtWaybillOrderService {
|
|
|
return HttpResult.ok("装货成功!");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param logisticsOrder 物流订单
|
|
|
+ * @desc 计算物流订单亏吨扣款
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/27
|
|
|
+ **/
|
|
|
+ public void deficitPrice(KwtLogisticsOrder logisticsOrder) {
|
|
|
+ //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
|
|
|
+ BigDecimal loadAmount = logisticsOrder.getLoadAmount();
|
|
|
+ BigDecimal deficitAmount = logisticsOrder.getDeficitAmount();
|
|
|
+ BigDecimal loss = logisticsOrder.getLoss() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getLoss();
|
|
|
+ BigDecimal goodsPrice = logisticsOrder.getGoodsPrice() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getGoodsPrice();
|
|
|
+ BigDecimal deficitPrice = deficitAmount.subtract(loadAmount.multiply(loss).setScale(4, RoundingMode.HALF_UP))
|
|
|
+ .multiply(goodsPrice).setScale(4, RoundingMode.HALF_UP);
|
|
|
+ logisticsOrder.setDeficitPrice(deficitPrice);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param lOrderId 承运订单ID
|
|
|
+ * @description 校验当前承运订单是否运输完成
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/27
|
|
|
+ **/
|
|
|
+ public void setLogisticsByUnloading(Long lOrderId) {
|
|
|
+ /**
|
|
|
+ 校验当前承运订单是否运输完成(虑该当前承运订单上下级物流订单)
|
|
|
+ 存在下级分包,下级物流订单和当前物流订单全部运输完成则修改当前物流订单状态为已完成(HAVE_FINISHED)
|
|
|
+ 当前物流订单属于分包:需要判断上级及同级分包全部运输完成修改上级物流订单状态为已完成(HAVE_FINISHED)-一直向上到一级物流订单
|
|
|
+ **/
|
|
|
+ //承运单信息
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
|
|
|
+ /**校验当前承运订单是否运输完成**/
|
|
|
+ if (logisticsOrder.getAmount().compareTo(logisticsOrder.getLoadAmount()) < 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**存在下级分包**/
|
|
|
+ BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
|
|
|
+ if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) == 0) {
|
|
|
+ List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
|
|
|
+ new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("lOrderId", logisticsOrder.getId());}});
|
|
|
+ for (KwtLogisticsOrder logisticsOrder1:logisticsOrders) {
|
|
|
+ if (logisticsOrder1.getStatus() == LogisticsOrderEnum.TO_BE_PLANNED.getCode()
|
|
|
+ || logisticsOrder1.getStatus() == LogisticsOrderEnum.PENDING_ORDER.getCode()
|
|
|
+ || logisticsOrder1.getStatus() == LogisticsOrderEnum.WAIT_DELIVERY.getCode()
|
|
|
+ || logisticsOrder1.getStatus() == LogisticsOrderEnum.IN_TRANSIT.getCode()) {
|
|
|
+ //下级分包承运订单运输未完成
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**下级分包承运订单运输完成**/
|
|
|
+ logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
|
|
|
+ logisticsOrderDao.updateById(logisticsOrder);
|
|
|
+
|
|
|
+ /**承运订单状态记录**/
|
|
|
+ KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
|
|
|
+ orderTrack.setLOrderId(logisticsOrder.getId());
|
|
|
+ orderTrack.setStatus(logisticsOrder.getStatus());
|
|
|
+ orderTrack.setRemark(LogisticsOrderEnum.getName(logisticsOrder.getStatus()));
|
|
|
+ logisticsOrderTrackDao.insert(orderTrack);
|
|
|
+
|
|
|
+ /**Mongodb数据更新**/
|
|
|
+ //2承运订单
|
|
|
+ SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
|
|
|
+ editSckwLogisticsOrder(lOrder, logisticsOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**当前物流订单属于分包(存在上级物流订单)**/
|
|
|
+ //当前承运订单所属分包层级
|
|
|
+ //int level = checkLogisticsLevel(logisticsOrder);
|
|
|
+ String pids = logisticsOrder.getPids();
|
|
|
+ if (StringUtils.isNotBlank(pids)) {
|
|
|
+ String [] idArray = pids.split(",");
|
|
|
+ for (String id : idArray) {
|
|
|
+ KwtLogisticsOrder order = logisticsOrderDao.selectById(id);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 修改单证
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ public HttpResult editTicket(WaybillOrderTicketDto params) {
|
|
|
+ /**校验**/
|
|
|
+ KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicket(params.getWOrderId(), params.getType());
|
|
|
+ if (ticket == null) {
|
|
|
+ return HttpResult.error("车辆运单榜单信息不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**更新榜单信息**/
|
|
|
+ BeanUtils.copyProperties(params, ticket);
|
|
|
+ waybillOrderTicketDao.updateById(ticket);
|
|
|
+
|
|
|
+ /**更新承运订单装卸货量**/
|
|
|
+
|
|
|
+ return HttpResult.ok("修改单证成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 单证审核
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/26
|
|
|
+ **/
|
|
|
+ public HttpResult approvalTicket(WaybillOrderApprovalDto params) {
|
|
|
+ /**数据校验**/
|
|
|
+ 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("车辆运单当前状态已不能审核!");
|
|
|
+ }
|
|
|
+ //已卸货/审批不通过车辆运单只能审批通过或审批不通过
|
|
|
+ if (params.getStatus() != Global.NO && params.getStatus() != Global.YES) {
|
|
|
+ return HttpResult.error("车辆运单当前状态只能审批通过或审批不通过!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**业务处理**/
|
|
|
+ /**1更新车辆运单**/
|
|
|
+ int status = params.getStatus() == Global.NO ? CarWaybillEnum.APPROVAL_PASS.getCode() : CarWaybillEnum.APPROVAL_NO_PASS.getCode();
|
|
|
+ waybillOrder.setStatus(status);
|
|
|
+ waybillOrderDao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /**2新增运单状态记录**/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ /**3Mongodb数据更新**/
|
|
|
+ //1车辆运单
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ wOrder.set_id(waybillOrder.getId());
|
|
|
+ editSckwWaybillOrder(wOrder, waybillOrder, 2);
|
|
|
+
|
|
|
+ /**4发送消息**/
|
|
|
+
|
|
|
+ return HttpResult.ok("车辆运单审核完成!");
|
|
|
+ }
|
|
|
+
|
|
|
}
|