提交 f817ca6e authored 作者: aiqingguo's avatar aiqingguo

运单流程

上级 56504ba7
......@@ -45,7 +45,13 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_LOAD_TIMEOUT(1305, "超过装货截止时间"),
ORDER_CHILD_CANCEL_FORBID(1306, "运单无法取消"),
ORDER_CHILD_CANCEL_FORBID_COUNT(1307, "超出最大取消数量"),
ORDER_CHILD_POUND_AUDIT(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_LOAD_WEIGHT_ERROR(1312, "装货净重超过载重的1.5倍"),
ORDER_CHILD_UNLOAD_WEIGHT_ERROR(1313, "卸货净重超过载重的1.5倍"),
;
......
......@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
......@@ -25,13 +26,12 @@ public class OrderChildLoadAndUnloadAgainParam extends PositionParam {
private String unloadPoundNo;
@ApiModelProperty(value = "装货毛重(单位吨)", example = "2.46")
@NotNull(message = "装货毛重不能为空")
private BigDecimal loadRough;
@ApiModelProperty(value = "装货皮重(单位吨)", example = "1.23")
@NotNull(message = "装货皮重不能为空")
private BigDecimal loadTare;
@ApiModelProperty(value = "装货净重(单位吨)", example = "1.23")
@NotNull(message = "装货净重不能为空")
@Max(value = 999, message = "最大999吨")
private BigDecimal loadNet;
@ApiModelProperty(value = "磅单图片列表")
......@@ -39,13 +39,12 @@ public class OrderChildLoadAndUnloadAgainParam extends PositionParam {
private List<String> loadImageList;
@ApiModelProperty(value = "卸货毛重(单位吨)", example = "2.46")
@NotNull(message = "装货毛重不能为空")
private BigDecimal unloadRough;
@ApiModelProperty(value = "卸货皮重(单位吨)", example = "1.23")
@NotNull(message = "装货皮重不能为空")
private BigDecimal unloadTare;
@ApiModelProperty(value = "卸货净重(单位吨)", example = "1.23")
@NotNull(message = "装货净重不能为空")
@Max(value = 999, message = "最大999吨")
private BigDecimal unloadNet;
@ApiModelProperty(value = "磅单图片列表")
......
......@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
......@@ -21,13 +22,12 @@ public class OrderChildLoadParam extends PositionParam {
private String childNo;
@ApiModelProperty(value = "装货毛重(单位吨)", example = "2.46")
@NotNull(message = "装货毛重不能为空")
private BigDecimal loadRough;
@ApiModelProperty(value = "装货皮重(单位吨)", example = "1.23")
@NotNull(message = "装货皮重不能为空")
private BigDecimal loadTare;
@ApiModelProperty(value = "装货净重(单位吨)", example = "1.23")
@NotNull(message = "装货净重不能为空")
@Max(value = 999, message = "最大999吨")
private BigDecimal loadNet;
@ApiModelProperty(value = "磅单图片列表")
......
......@@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
......@@ -25,13 +26,12 @@ public class OrderChildUnloadParam extends PositionParam {
private String unloadPoundNo;
@ApiModelProperty(value = "卸货毛重(单位吨)", example = "2.46")
@NotNull(message = "装货毛重不能为空")
private BigDecimal unloadRough;
@ApiModelProperty(value = "卸货皮重(单位吨)", example = "1.23")
@NotNull(message = "装货皮重不能为空")
private BigDecimal unloadTare;
@ApiModelProperty(value = "卸货净重(单位吨)", example = "1.23")
@NotNull(message = "装货净重不能为空")
@Max(value = 999, message = "最大999吨")
private BigDecimal unloadNet;
@ApiModelProperty(value = "磅单图片列表")
......
......@@ -29,6 +29,9 @@ public class OrderChildPoundInfoVO {
private BigDecimal unloadTare;
@ApiModelProperty(value = "卸货净重(单位吨)", example = "1.23")
private BigDecimal unloadNet;
@ApiModelProperty(value = "卸货磅单编号", example = "url")
private String unloadPoundNo;
@ApiModelProperty(value = "拉运重量(单位吨)", example = "1.23")
private BigDecimal weight;
@ApiModelProperty(value = "运费(元)", example = "1.23")
......
......@@ -18,8 +18,12 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void saveBatchEntity(String orderNo, String orderGoodsNo, List<String> trackList, LocalDateTime now);
boolean updateStatus(OrderGoodsTruckBind item);
List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo);
Optional<OrderGoodsTruckBind> getByOrderGoodsNoAndTruckNo(String orderGoodsNo, String truckNo);
Optional<OrderGoodsTruckBind> getValidByOrderGoodsNoAndTruckNo(String orderGoodsNo, String truckNo);
Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList);
}
......@@ -27,6 +27,14 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
baseMapper.saveBatchEntity(orderNo, orderGoodsNo, trackList, DateUtils.formatDateTime(now).get());
}
@Override
public boolean updateStatus(OrderGoodsTruckBind item) {
return update(lUdWrapper()
.eq(OrderGoodsTruckBind::getId, item.getId())
.set(OrderGoodsTruckBind::getStatus, item.getStatus())
);
}
@Override
public List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.getTrucksByOrderGoodsNo(orderGoodsNo);
......@@ -41,6 +49,15 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
}
@Override
public Optional<OrderGoodsTruckBind> getValidByOrderGoodsNoAndTruckNo(String orderGoodsNo, String truckNo) {
return Optional.ofNullable(getOne(lQrWrapper()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getTruckNo, truckNo)
.in(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBind.Status.NORMAL.getCode())
));
}
@Override
public Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList) {
return Optional.ofNullable(baseMapper.selectList(new QueryWrapper<OrderGoodsTruckBind>().lambda()
......
......@@ -7,11 +7,14 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Optional;
/**
* 货单定向绑定车辆表
......@@ -30,7 +33,7 @@ public class OrderGoodsTruckBind implements HasKey<Integer> {
private String truckNo;
@TableField("status")
@ApiModelProperty("1:正常 2:取消")
@ApiModelProperty("状态 1:正常 2:取消 3: 已接单")
private Integer status;
@TableField("order_no")
......@@ -55,4 +58,21 @@ public class OrderGoodsTruckBind implements HasKey<Integer> {
public Integer gainKey() {
return this.id;
}
@Getter
@AllArgsConstructor
public enum Status {
NORMAL(1, "正常"),
CANCEL(2, "取消"),
ORDER(3, "已接单"),
;
private final int code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
......@@ -2,10 +2,7 @@ package com.clx.performance.service.impl;
import com.clx.performance.dao.*;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.OrderChildPoundAuditEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.*;
import com.clx.performance.model.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PoundAuditParam;
......@@ -35,6 +32,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditService {
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderChildImageDao orderChildImageDao;
private final OrderChildPoundAuditDao orderChildPoundAuditDao;
......@@ -142,6 +140,13 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
}
orderChild.setCancelRemark(param.getRemark());
orderChild.setCancelTime(now);
orderChild.setFinishTime(now);
......@@ -150,7 +155,10 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
orderChildDao.updateCancel(orderChild);
// 返回吨数
cancelReturnWeight(orderChild, orderGoods);
updateOrderGoodsAmountReturn(orderChild, orderGoods);
// 取消定向
updateOrderGoodsDirectCancel(orderGoodsTruckBind);
// 释放司机、车辆
releaseDriver(orderChild.getDriverUserNo());
......@@ -164,8 +172,18 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
/**
* 取消返吨数
*/
private void cancelReturnWeight(OrderChild orderChild, OrderGoods orderGoods){
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate());
}
/**
* 更新定向派单状态 (取消)
*/
private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind){
if (orderGoodsTruckBind == null) {return;}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
}
/**
......
......@@ -103,9 +103,13 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
}
OrderGoodsTruckBind orderGoodsTruckBind = null;
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), truckNo).orNull();
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), truckNo).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
if (orderGoodsTruckBind == null){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR);}
}
else {
if (orderGoodsTruckBind != null){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1);}
}
// 库存验证
......@@ -154,7 +158,7 @@ public class OrderChildServiceImpl implements OrderChildService {
updateOrderGoodsAmount(orderGoods, truckLoad);
// 更新定向单状态
updateOrderGoods(orderGoodsTruckBind);
updateOrderGoodsDirect(orderGoodsTruckBind);
// 新增运单
orderChildDao.saveEntity(orderChild);
......@@ -179,7 +183,6 @@ public class OrderChildServiceImpl implements OrderChildService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
LocalDateTime now = LocalDateTime.now();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
......@@ -192,9 +195,11 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
}
orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), param.getTruckNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), param.getTruckNo())
.orElseThrow(PerformanceResultEnum.ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR);
updateOrderGoodsReject(orderGoods, param.getTruckNo());
// 更新定向派单
updateOrderGoodsDirectReject(orderGoodsTruckBind);
}
......@@ -320,6 +325,10 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
}
if (loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
}
if (orderChild.getLoadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
updateLoadFirst(param, orderChild);
// 日志
......@@ -358,6 +367,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setStatus(OrderChildEnum.Status.LOAD.getCode());
orderChildDao.updateLoad(orderChild);
//
orderChildImageDao.batchSaveEntity(imageList);
}
......@@ -402,6 +413,10 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
}
if (loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
}
if (orderChild.getUnloadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())) {
updateUnloadFirst(param, orderChild);
// 日志
......@@ -452,6 +467,10 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundAuditDao.saveEntity(audit);
// 释放司机、车辆
releaseDriver(orderChild.getDriverUserNo());
releaseTruck(orderChild.getTruckId());
}
private void updateReUnload(OrderChildUnloadParam param, OrderChild orderChild) {
......@@ -519,6 +538,13 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
if (loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
}
if (loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
}
List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) {
OrderChildImage image = new OrderChildImage();
......@@ -596,10 +622,6 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChildDao.updateStatus(orderChild);
// 释放司机、车辆
releaseDriver(orderChild.getDriverUserNo());
releaseTruck(orderChild.getTruckId());
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
......@@ -632,6 +654,13 @@ public class OrderChildServiceImpl implements OrderChildService {
// 取消量验证
if (!cancelCountCheck(userNo)){throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID_COUNT);}
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = null;
if (Objects.equals(orderGoods.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())){
orderGoodsTruckBind = orderGoodsTruckBindDao.getByOrderGoodsNoAndTruckNo(orderGoods.getOrderGoodsNo(), orderChild.getTruckNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
}
orderChild.setCancelRemark(param.getRemark());
orderChild.setCancelTime(now);
orderChild.setFinishTime(now);
......@@ -640,7 +669,10 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildDao.updateCancel(orderChild);
// 返回吨数
cancelReturnWeight(orderChild, orderGoods);
updateOrderGoodsAmountReturn(orderChild, orderGoods);
// 取消定向
updateOrderGoodsDirectCancel(orderGoodsTruckBind);
// 释放司机、车辆
releaseDriver(orderChild.getDriverUserNo());
......@@ -764,21 +796,50 @@ public class OrderChildServiceImpl implements OrderChildService {
* 更新货单数据
*/
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight){
if (orderGoods.getResidueTransportWeight().compareTo(weight) <= 0) {orderGoods.setOrderGoodsStatus(0);}
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), weight);
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), weight);
/**
* 取消返吨数
*/
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate());
}
/**
* 更新定向单状态
* 更新定向单状态 (接单)
*/
private void updateOrderGoods(OrderGoodsTruckBind orderGoodsTruckBind){
private void updateOrderGoodsDirect(OrderGoodsTruckBind orderGoodsTruckBind){
if (orderGoodsTruckBind == null) {return;}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.ORDER.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
}
private void updateOrderGoodsReject(OrderGoods orderGoods, String truckNo){
/**
* 更新定向派单状态 (拒绝)
*/
private void updateOrderGoodsDirectReject(OrderGoodsTruckBind orderGoodsTruckBind){
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
}
/**
* 更新定向派单状态 (取消)
*/
private void updateOrderGoodsDirectCancel(OrderGoodsTruckBind orderGoodsTruckBind){
if (orderGoodsTruckBind == null) {return;}
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
}
/**
* 拉运吨数检测
*/
private boolean loadCheck(BigDecimal weight, BigDecimal truckLoad){
if (weight.compareTo(truckLoad.multiply(new BigDecimal("1.5"))) > 0) {return false;}
return true;
}
/**
......@@ -793,13 +854,6 @@ public class OrderChildServiceImpl implements OrderChildService {
return count<10;
}
/**
* 取消返吨数
*/
private void cancelReturnWeight(OrderChild orderChild, OrderGoods orderGoods){
}
/**
* 运单拉运吨数计算
*/
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论