|
|
@@ -281,7 +281,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
}
|
|
|
|
|
|
/*车辆运单状态记录*/
|
|
|
- this.setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getUpdateTime(), waybillOrder.getStatus(), null);
|
|
|
+ this.setWaybillOrderTrack(waybillOrder.getId(), null, waybillOrder.getUpdateTime(), waybillOrder.getStatus(), null);
|
|
|
}
|
|
|
}
|
|
|
return sendCarEntrustAll;
|
|
|
@@ -438,15 +438,17 @@ public class KwtWaybillOrderV1Service {
|
|
|
|
|
|
/**
|
|
|
* @param wOrderId 车辆订单ID
|
|
|
+ * @param wSubtaskId 车辆运单子单ID
|
|
|
* @param status 车辆运单状态
|
|
|
* @param remark 备注
|
|
|
* @desc 新增运单状态记录
|
|
|
* @author zk
|
|
|
* @date 2023/7/20
|
|
|
**/
|
|
|
- public void setWaybillOrderTrack(Long wOrderId, Date operateTime, int status, String remark) {
|
|
|
+ public void setWaybillOrderTrack(Long wOrderId, Long wSubtaskId, Date operateTime, int status, String remark) {
|
|
|
KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
|
|
|
orderTrack.setWOrderId(wOrderId);
|
|
|
+ orderTrack.setWSubtaskId(wSubtaskId);
|
|
|
orderTrack.setOperateTime(operateTime == null ? new Date() : operateTime);
|
|
|
orderTrack.setStatus(status);
|
|
|
orderTrack.setRemark(remark);
|
|
|
@@ -484,7 +486,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
|
/*3、新增运单状态记录*/
|
|
|
- setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getUpdateTime(), waybillOrder.getStatus(), null);
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, waybillOrder.getUpdateTime(), waybillOrder.getStatus(), null);
|
|
|
|
|
|
/*4、回退物流订单委托量*/
|
|
|
/*4.1、装货址委派量entrustAmount回退*/
|
|
|
@@ -529,7 +531,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
if (waybillOrder == null) {
|
|
|
return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
}
|
|
|
- //待接单的车辆运单才能撤回
|
|
|
+ //待接单的车辆运单才能确认接单
|
|
|
if (!waybillOrder.getStatus().equals(CarWaybillEnum.PENDING_ORDER.getCode())) {
|
|
|
return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能接单!");
|
|
|
}
|
|
|
@@ -539,7 +541,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
|
/*3、新增运单状态记录*/
|
|
|
- setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
|
|
|
/*4、更新司机/车辆数据*/
|
|
|
//更新司机信息
|
|
|
@@ -593,7 +595,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
if (waybillOrder == null) {
|
|
|
return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
}
|
|
|
- //待接单的车辆运单才能撤回
|
|
|
+ //待接单的车辆运单才能拒绝接单
|
|
|
if (!waybillOrder.getStatus().equals(CarWaybillEnum.PENDING_ORDER.getCode())) {
|
|
|
return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能拒绝接单!");
|
|
|
}
|
|
|
@@ -603,7 +605,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
|
/*3、新增运单状态记录*/
|
|
|
- setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
|
|
|
//循环运单不对物流订单委托量变更
|
|
|
if (waybillOrder.getType() == Global.NUMERICAL_TWO) {
|
|
|
@@ -652,7 +654,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
if (waybillOrder == null) {
|
|
|
return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
}
|
|
|
- //待出车的车辆运单才能撤回
|
|
|
+ //待出车的车辆运单才能出车
|
|
|
if (!waybillOrder.getStatus().equals(CarWaybillEnum.PENDING_VEHICLE.getCode())) {
|
|
|
return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态不能出车!");
|
|
|
}
|
|
|
@@ -667,7 +669,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
|
/*3、新增运单状态记录*/
|
|
|
- setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
|
|
|
/*4、更新司机/车辆数据*/
|
|
|
//更新司机信息
|
|
|
@@ -692,7 +694,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
if (waybillOrder == null) {
|
|
|
return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
}
|
|
|
- //待出车的车辆运单才能撤回
|
|
|
+ //待出车的车辆运单才能拒绝出车
|
|
|
if (!waybillOrder.getStatus().equals(CarWaybillEnum.PENDING_VEHICLE.getCode())) {
|
|
|
return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态不能拒绝出车!");
|
|
|
}
|
|
|
@@ -702,7 +704,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
|
/*3、新增运单状态记录*/
|
|
|
- setWaybillOrderTrack(waybillOrder.getId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
|
|
|
/*4、回退物流订单委托量*/
|
|
|
/*4.1、装货址委派量entrustAmount回退*/
|
|
|
@@ -731,6 +733,173 @@ public class KwtWaybillOrderV1Service {
|
|
|
return HttpResult.ok();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 到达装货地点
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/7
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult arriveLoadLocationV1(OperateWaybillDto params) {
|
|
|
+ /*1、校验*/
|
|
|
+ Long wOrderId = params.getWOrderId();
|
|
|
+ //运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
+ }
|
|
|
+ //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能到达装货地点
|
|
|
+ if (!CarWaybillEnum.arriveLocation(waybillOrder.getStatus())) {
|
|
|
+ return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能到达装货地点!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*2、更新运单状态*/
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.WAIT_LOADING.getCode());
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /*3、新增运单状态记录*/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getWSubtaskId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ return HttpResult.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 装货-多单位+多地址
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/7
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult loadingV1(WaybillOrderTicketV4Dto params) {
|
|
|
+ /*1、校验*/
|
|
|
+ Long wOrderId = params.getWOrderId();
|
|
|
+ //运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
+ }
|
|
|
+ //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能装货
|
|
|
+ if (!waybillOrder.getStatus().equals(CarWaybillEnum.WAIT_LOADING.getCode())) {
|
|
|
+ return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能装货!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*2、更新车辆运单*/
|
|
|
+ /*2.1、更新车辆运单-状态*/
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.COMPLETION_LOADING.getCode());
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /*2.2、更新车辆运单-子单*/
|
|
|
+ //运单子单信息
|
|
|
+ KwtWaybillOrderSubtask orderSubtask = waybillOrderSubtaskDao.selectById(params.getWSubtaskId());
|
|
|
+ //榜单信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> loading = params.getLoading();
|
|
|
+ orderSubtask.setLoadAmount(waybillOrderTicketService.countAmount(loading, orderSubtask.getUnit(), BigDecimal.valueOf(orderSubtask.getLoadAmount())).doubleValue());
|
|
|
+ orderSubtask.setStatus(waybillOrder.getStatus());
|
|
|
+ waybillOrderSubtaskDao.updateById(orderSubtask);
|
|
|
+
|
|
|
+ /*3、新增运单状态记录*/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getWSubtaskId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ /*4、新增装卸货榜单信息*/
|
|
|
+ waybillOrderTicketService.addTicketV1(loading, waybillOrder.getId(), params.getWSubtaskId(), params.getWAddressId(), params.getUrls(), params.getOperateTime(), Global.NUMERICAL_ONE);
|
|
|
+ return HttpResult.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 到达卸货地点
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/7
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult arriveUnloadLocationV1(OperateWaybillDto params) {
|
|
|
+ /*1、校验*/
|
|
|
+ Long wOrderId = params.getWOrderId();
|
|
|
+ //运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
+ }
|
|
|
+ //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能到达卸货地点
|
|
|
+ if (!CarWaybillEnum.arriveLocation(waybillOrder.getStatus())) {
|
|
|
+ return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能到达卸货地点!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*2、更新运单状态*/
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.WAIT_UNLOADING.getCode());
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /*3、新增运单状态记录*/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getWSubtaskId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+ return HttpResult.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 卸货-多单位
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/7
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult unloadingV1(WaybillOrderTicketV4Dto params) {
|
|
|
+ /*1、校验*/
|
|
|
+ Long wOrderId = params.getWOrderId();
|
|
|
+ //运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
+ }
|
|
|
+ //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能卸货
|
|
|
+ if (!waybillOrder.getStatus().equals(CarWaybillEnum.WAIT_UNLOADING.getCode())) {
|
|
|
+ return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能卸货!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /*2、更新车辆运单*/
|
|
|
+ /*2.1、更新车辆运单-状态*/
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
+
|
|
|
+ /*2.2、更新车辆运单-子单*/
|
|
|
+ //运单子单信息
|
|
|
+ KwtWaybillOrderSubtask orderSubtask = waybillOrderSubtaskDao.selectById(params.getWSubtaskId());
|
|
|
+ //物流运单信息
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(orderSubtask.getLOrderId());
|
|
|
+ //榜单信息
|
|
|
+ List<WaybillOrderTicketLoadingDto> loading = params.getLoading();
|
|
|
+ orderSubtask.setUnloadAmount(waybillOrderTicketService.countAmount(loading, orderSubtask.getUnit(), BigDecimal.valueOf(orderSubtask.getUnloadAmount())).doubleValue());
|
|
|
+ orderSubtask.setDeficitAmount(BigDecimal.valueOf(orderSubtask.getLoadAmount()).subtract(BigDecimal.valueOf(orderSubtask.getUnloadAmount())).doubleValue());
|
|
|
+ BigDecimal deficitPrice = deficitPrice(BigDecimal.valueOf(orderSubtask.getLoadAmount()), BigDecimal.valueOf(orderSubtask.getDeficitAmount()),
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
+ orderSubtask.setDeficitPrice(deficitPrice.doubleValue());
|
|
|
+ orderSubtask.setStatus(waybillOrder.getStatus());
|
|
|
+ waybillOrderSubtaskDao.updateById(orderSubtask);
|
|
|
+
|
|
|
+ /*3、新增运单状态记录*/
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), params.getWSubtaskId(), params.getOperateTime(), waybillOrder.getStatus(), params.getRemark());
|
|
|
+
|
|
|
+ /*4、新增装卸货榜单信息*/
|
|
|
+ waybillOrderTicketService.addTicketV1(loading, waybillOrder.getId(), params.getWSubtaskId(), params.getWAddressId(), params.getUrls(), params.getOperateTime(), Global.NUMERICAL_ONE);
|
|
|
+
|
|
|
+ /*5、更新司机/车辆数据*/
|
|
|
+ //更新司机信息
|
|
|
+ editDriver(waybillOrder.getDriverId());
|
|
|
+ //更新车辆信息
|
|
|
+ editTruck(waybillOrder.getTruckId());
|
|
|
+ return HttpResult.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params {}
|
|
|
+ * @desc 修改单证-装卸货-多单位
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/6
|
|
|
+ **/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult editTicketV1(WaybillOrderTicketV3Dto params) {
|
|
|
+
|
|
|
+ return HttpResult.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
@@ -805,4 +974,40 @@ public class KwtWaybillOrderV1Service {
|
|
|
return remoteSystemService.queryDictMapByTypeValues(String.join(Global.COMMA, dictKey));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param loadAmount 装货量
|
|
|
+ * @param deficitAmount 亏吨量
|
|
|
+ * @param loss 合理损耗
|
|
|
+ * @param goodsPrice 货值单价
|
|
|
+ * @desc 计算亏吨扣款
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/7/27
|
|
|
+ **/
|
|
|
+ public static 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);
|
|
|
+ }
|
|
|
+ //罚款值=扣亏量 * 扣亏货值
|
|
|
+ return deficitLossAmount.multiply(goodsPrice).setScale(4, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
}
|