提交 8da5e8d6 authored 作者: aiqingguo's avatar aiqingguo

运单流程

上级 2a072465
......@@ -46,9 +46,10 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_CANCEL_FORBID(1306, "运单无法取消"),
ORDER_CHILD_CANCEL_FORBID_COUNT(1307, "超出最大取消数量"),
ORDER_CHILD_POUND_AUDIT(1308, "磅单审核中"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR(1309, "请选择定向车辆"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1(1310, "请选择非定向车辆"),
ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR(1311, "非定向车辆无法取消"),
ORDER_CHILD_POUND_REJECT(1309, "磅单审核驳回,请重新提交信息"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR(1310, "请选择定向车辆"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1(1311, "请选择非定向车辆"),
ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR(1312, "非定向车辆无法取消"),
ORDER_CHILD_LOAD_WEIGHT_ERROR(1312, "装货净重超过载重的1.5倍"),
ORDER_CHILD_UNLOAD_WEIGHT_ERROR(1313, "卸货净重超过载重的1.5倍"),
......
......@@ -25,11 +25,15 @@ import java.util.List;
public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Integer> {
boolean updateStatus(OrderChild item);
boolean updateCancel(OrderChild item);
boolean updateLoad(OrderChild item);
boolean updateUnload(OrderChild item);
boolean updateLoadAndUnload(OrderChild item);
boolean updatePoundAuditStatus(OrderChild item);
boolean updateDriverConfirm(OrderChild item);
boolean updateCancel(OrderChild item);
Optional<OrderChild> getByChildNo(String childNo);
......@@ -42,8 +46,5 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(PageCarrierOrderChildParam param);
boolean updatePoundAuditStatus(OrderChild item);
Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String childNo);
}
......@@ -32,18 +32,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public boolean updateStatus(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.set(OrderChild::getStatus, item.getStatus())
);
}
@Override
public boolean updateCancel(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.set(OrderChild::getCancelRemark, item.getCancelRemark())
.set(OrderChild::getCancelTime, item.getCancelTime())
.set(OrderChild::getFinishTime, item.getFinishTime())
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getStatus, item.getStatus())
);
}
......@@ -51,13 +40,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public boolean updateLoad(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getLoadRough, item.getLoadRough())
.set(OrderChild::getLoadTare, item.getLoadTare())
.set(OrderChild::getLoadNet, item.getLoadNet())
.set(OrderChild::getLoadTime, item.getLoadTime())
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus())
);
}
......@@ -65,7 +55,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public boolean updateUnload(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo())
.set(OrderChild::getUnloadRough, item.getUnloadRough())
.set(OrderChild::getUnloadTare, item.getUnloadTare())
......@@ -73,6 +63,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getUnloadTime, item.getUnloadTime())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus())
);
}
......@@ -80,7 +71,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public boolean updateLoadAndUnload(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo())
.set(OrderChild::getLoadRough, item.getLoadRough())
......@@ -91,10 +82,41 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getUnloadTare, item.getUnloadTare())
.set(OrderChild::getUnloadNet, item.getUnloadNet())
.set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
);
}
@Override
public boolean updatePoundAuditStatus(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getLoadNet, item.getLoadNet())
.set(OrderChild::getUnloadNet, item.getUnloadNet())
);
}
@Override
public boolean updateDriverConfirm(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getStatus, item.getStatus())
);
}
@Override
public boolean updateCancel(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getId, item.getId())
.set(OrderChild::getCancelRemark, item.getCancelRemark())
.set(OrderChild::getCancelTime, item.getCancelTime())
.set(OrderChild::getFinishTime, item.getFinishTime())
.set(OrderChild::getStatus, item.getStatus())
);
}
@Override
public Optional<OrderChild> getByChildNo(String childNo) {
......@@ -107,7 +129,6 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public long countOfCancel(Long userNo, LocalDateTime startTime, LocalDateTime endTime) {
return count(lQrWrapper()
.eq(OrderChild::getChildNo, userNo)
.eq(OrderChild::getStatus, OrderChildEnum.Status.DRIVER_CANCEL.getCode())
......@@ -140,18 +161,9 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
return baseMapper.pageCarrierOrderChildList(page,param);
}
@Override
public boolean updatePoundAuditStatus(OrderChild item) {
return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getLoadNet, item.getLoadNet())
.set(OrderChild::getUnloadNet, item.getUnloadNet())
);
}
@Override
public Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) {
return Optional.of(list(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)));
}
}
......@@ -329,20 +329,22 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
if (orderChild.getLoadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
updateLoadFirst(param, orderChild);
updateLoadFirst(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(), OrderChildLogEnum.Type.LOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else {
updateReload(param, orderChild);
updateReload(param, orderChild, orderGoods);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(), OrderChildLogEnum.Type.RELOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
}
private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild) {
private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo();
// 装货超时
......@@ -359,20 +361,25 @@ public class OrderChildServiceImpl implements OrderChildService {
imageList.add(image);
}
BigDecimal dif = param.getLoadNet().subtract(orderChild.getLoadNet());
orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet());
orderChild.setLoadTime(LocalDateTime.now());
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setStatus(OrderChildEnum.Status.LOAD.getCode());
orderChildDao.updateLoad(orderChild);
//
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoad(orderChild);
orderChildImageDao.batchSaveEntity(imageList);
}
private void updateReload(OrderChildLoadParam param, OrderChild orderChild) {
private void updateReload(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo();
List<OrderChildImage> imageList = new ArrayList<>();
......@@ -384,11 +391,18 @@ public class OrderChildServiceImpl implements OrderChildService {
imageList.add(image);
}
BigDecimal dif = param.getLoadNet().subtract(orderChild.getLoadNet());
orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet());
orderChild.setLoadTime(LocalDateTime.now());
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoad(orderChild);
orderChildImageDao.deleteLoad(childNo);
......@@ -454,6 +468,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setStatus(OrderChildEnum.Status.UNLOAD.getCode());
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
orderChild.setFreight(orderChildFreightCalc(orderChild));
OrderChildPoundAudit audit = new OrderChildPoundAudit();
audit.setChildNo(childNo);
......@@ -496,6 +511,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setUnloadNet(param.getUnloadNet());
orderChild.setUnloadTime(LocalDateTime.now());
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
orderChild.setFreight(orderChildFreightCalc(orderChild));
OrderChildPoundAudit audit = new OrderChildPoundAudit();
audit.setChildNo(childNo);
......@@ -545,6 +561,8 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) {
OrderChildImage image = new OrderChildImage();
......@@ -559,6 +577,8 @@ public class OrderChildServiceImpl implements OrderChildService {
image.setImage(item);
}
BigDecimal dif = param.getLoadNet().subtract(orderChild.getLoadNet());
orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet());
......@@ -566,6 +586,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setUnloadTare(param.getUnloadTare());
orderChild.setUnloadNet(param.getUnloadNet());
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
......@@ -576,6 +597,9 @@ public class OrderChildServiceImpl implements OrderChildService {
audit.setUnloadNet(orderChild.getUnloadNet());
audit.setUnloadPoundNo(orderChild.getUnloadPoundNo());
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoadAndUnload(orderChild);
orderChildImageDao.deleteLoadAndUnload(childNo);
......@@ -603,10 +627,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (!Objects.equals(orderChild.getUserNo(), userNo) && !Objects.equals(orderChild.getDriverUserNo(), userNo)){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())){
return;
}
if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
......@@ -616,11 +637,11 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT);
}
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_REJECT);
}
orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChildDao.updateStatus(orderChild);
orderChildDao.updateDriverConfirm(orderChild);
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(),
......@@ -806,6 +827,14 @@ public class OrderChildServiceImpl implements OrderChildService {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate());
}
/**
* 装车补偿
*/
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif);
}
/**
* 更新定向单状态 (接单)
*/
......@@ -866,7 +895,15 @@ public class OrderChildServiceImpl implements OrderChildService {
* 运费计算
*/
private BigDecimal orderChildFreightCalc(OrderChild orderChild){
return orderChild.getWeight().multiply(orderChild.getFreightPrice()).setScale(0, BigDecimal.ROUND_HALF_UP);
BigDecimal totalFreight = orderChild.getFreightPrice().multiply(orderChild.getWeight());
if (orderChild.getUnloadNet() != null){
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){
totalFreight.subtract(orderChild.getLossPrice().multiply(dif));
}
}
return totalFreight.setScale(0, BigDecimal.ROUND_HALF_UP);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论