提交 4c2954ec authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v4.9_create_goods_child_20230918' into…

Merge remote-tracking branch 'origin/v4.9_create_goods_child_20230918' into v4.9_create_goods_child_20230918
...@@ -102,7 +102,8 @@ public enum OrderChildEnum { ...@@ -102,7 +102,8 @@ public enum OrderChildEnum {
// 取消 // 取消
public static final List<Integer> CANCEL_lIST = Arrays.asList( public static final List<Integer> CANCEL_lIST = Arrays.asList(
Status.DRIVER_CANCEL.getCode(), Status.DRIVER_CANCEL.getCode(),
Status.PLATFORM_CANCEL.getCode() Status.PLATFORM_CANCEL.getCode(),
Status.OWNER_CANCEL.getCode()
); );
......
...@@ -44,15 +44,19 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -44,15 +44,19 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_COMPLETE(1304, "运单状态已完成"), ORDER_CHILD_COMPLETE(1304, "运单状态已完成"),
ORDER_CHILD_LOAD_TIMEOUT(1305, "超过装货截止时间"), ORDER_CHILD_LOAD_TIMEOUT(1305, "超过装货截止时间"),
ORDER_CHILD_CANCEL_FORBID(1306, "运单无法取消"), ORDER_CHILD_CANCEL_FORBID(1306, "运单无法取消"),
ORDER_CHILD_CANCEL_FORBID_COUNT(1307, "超出最大取消数量"), ORDER_CHILD_CANCEL_FORBID_COUNT(1307, "今日取消运单次数超过上限,暂时无法取消"),
ORDER_CHILD_POUND_AUDIT(1308, "磅单审核中"), ORDER_CHILD_POUND_AUDIT(1308, "磅单审核中"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR(1309, "请选择定向车辆"), ORDER_CHILD_POUND_REJECT(1309, "磅单审核驳回,请重新提交信息"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1(1310, "请选择非定向车辆"), ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR(1310, "请选择定向车辆"),
ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR(1311, "非定向车辆无法取消"), ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1(1311, "请选择非定向车辆"),
ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR(1312, "非定向车辆无法取消"),
ORDER_CHILD_LOAD_WEIGHT_ERROR(1312, "装货净重超过载重的1.5倍"), ORDER_CHILD_LOAD_WEIGHT_ERROR(1312, "装货净重超过载重的1.5倍"),
ORDER_CHILD_UNLOAD_WEIGHT_ERROR(1313, "卸货净重超过载重的1.5倍"), ORDER_CHILD_UNLOAD_WEIGHT_ERROR(1313, "卸货净重超过载重的1.5倍"),
ORDER_CHILD_LOAD_TIME_ERROR(1314, "非装车时间段"),
ORDER_CHILD_UNLOAD_TIME_ERROR(1315, "非卸车时间段"),
ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR(1316, "没有到达货源地"),
ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR(1317, "没有到达目的地"),
; ;
private final int code; private final int code;
......
...@@ -21,7 +21,7 @@ import java.math.BigDecimal; ...@@ -21,7 +21,7 @@ import java.math.BigDecimal;
public class PoundAuditParam { public class PoundAuditParam {
@NotBlank(message = "运单编号不能为空") @NotBlank(message = "运单编号不能为空")
@ApiModelProperty(value="运单编号",example = "201457878") @ApiModelProperty(value="运单编号",example = "CYD201457878")
private String childNo; private String childNo;
@ApiModelProperty(value="审核驳回类型:1装车 2卸车 3装车+卸车",example = "1") @ApiModelProperty(value="审核驳回类型:1装车 2卸车 3装车+卸车",example = "1")
......
package com.clx.performance.vo.app;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@ApiModel(description = "运单表")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class GoingOrderChildVO {
@ApiModelProperty(value = "运单编号", example = "100000000")
private String childNo;
@ApiModelProperty(value = "发货地址", example = "朝阳")
private String sendAddress;
@ApiModelProperty(value = "收货地址", example = "西城")
private String receiveAddress;
@ApiModelProperty(value = "最晚装货时间", example = "")
private String loadDeadline;
@ApiModelProperty(value = "车牌号", example = "京A12345")
private String truckNo;
}
\ No newline at end of file
package com.clx.performance.component;
import com.clx.performance.strategy.GoodsOrderStrategy;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class GoodsOrderStrategyContext {
public final Map<Integer, GoodsOrderStrategy> strategyContext = new HashMap<>();
}
...@@ -3,6 +3,7 @@ package com.clx.performance.component; ...@@ -3,6 +3,7 @@ package com.clx.performance.component;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -23,7 +24,12 @@ public class OrderGoodsIdGenerate { ...@@ -23,7 +24,12 @@ public class OrderGoodsIdGenerate {
long baseStart = Long.parseLong(DateUtils.formatDate(LocalDate.now(), "yyyyMMdd").get() + "00001"); long baseStart = Long.parseLong(DateUtils.formatDate(LocalDate.now(), "yyyyMMdd").get() + "00001");
Object o = redisTemplate.opsForHash().get(RedisConstants.ORDER_GOODS_ID, type); Object o = redisTemplate.opsForHash().get(RedisConstants.ORDER_GOODS_ID, type);
if (o == null) { if (o == null) {
Long maxOrderGoodsId = Long.valueOf(orderGoodsDao.getMaxOrderGoodsId(type).substring(2)); Long maxOrderGoodsId = null;
String maxID = orderGoodsDao.getMaxOrderGoodsId(type);
if (StringUtils.isNotBlank(maxID)) {
maxOrderGoodsId = Long.valueOf(maxID.substring(0, 2));
}
if (maxOrderGoodsId == null) { if (maxOrderGoodsId == null) {
maxOrderGoodsId = 0L; maxOrderGoodsId = 0L;
} }
......
...@@ -21,4 +21,14 @@ public class RabbitKeyConstants { ...@@ -21,4 +21,14 @@ public class RabbitKeyConstants {
public static final String ORDER_GOODS_SYNC_TRUCK_DRIVER_INFO_QUEUE = "clx-performance.order.goods.sync.truck.driver.info.queue"; public static final String ORDER_GOODS_SYNC_TRUCK_DRIVER_INFO_QUEUE = "clx-performance.order.goods.sync.truck.driver.info.queue";
// 司机出车状态更新
public static final String DRIVER_EXCHANGE = "clx-user.driver.exchange";
public static final String DRIVER_ORDER_STATUS_UPDATE_KEY = "clx-user.driver.orderStatus.update.key";
// 车辆出车状态更新
public static final String TRUCK_EXCHANGE = "clx-user.truck.exchange";
public static final String TRUCK_ORDER_STATUS_UPDATE_KEY = "clx-user.truck.orderStatus.update.key";
} }
...@@ -165,4 +165,12 @@ public class AppDriverOrderChildController { ...@@ -165,4 +165,12 @@ public class AppDriverOrderChildController {
return Result.ok(orderChildService.getOrderChildFreightInfo(childNo)); return Result.ok(orderChildService.getOrderChildFreightInfo(childNo));
} }
@ApiOperation(value = "查询正在进行中的最新运单", notes = "<br>By:李瑞新")
@GetMapping("/getGoingLatestOrderChild")
public Result<GoingOrderChildVO> getGoingLatestOrderChild() {
return Result.ok(orderChildService.getGoingLatestOrderChild());
}
} }
...@@ -75,7 +75,7 @@ public class CarrierOrderChildController { ...@@ -75,7 +75,7 @@ public class CarrierOrderChildController {
@ApiOperation(value = "取消运单", notes = "<br>By:艾庆国") @ApiOperation(value = "取消运单", notes = "<br>By:艾庆国")
@PostMapping("/updateCancel") @PostMapping("/updateCancel")
public Result<Void> updateCarrierCancel(@RequestBody @Validated OrderChildCarrierCancelParam param) { public Result<Void> updateCarrierCancel(@RequestBody @Validated OrderChildCarrierCancelParam param) {
orderChildPoundAuditService.updateCarrierCancel(param); orderChildService.updateCarrierCancel(param);
return Result.ok(); return Result.ok();
} }
......
...@@ -10,6 +10,7 @@ import com.clx.order.params.PageCarrierOrderListParam; ...@@ -10,6 +10,7 @@ import com.clx.order.params.PageCarrierOrderListParam;
import com.clx.order.params.PageOrderGoodsListParam; import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.feign.FeignPageOrderVO; import com.clx.order.vo.feign.FeignPageOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.OrderGoodsIdGenerate; import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
...@@ -21,6 +22,9 @@ import com.clx.performance.mapper.OrderGoodsMapper; ...@@ -21,6 +22,9 @@ import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.impl.OneGoodsOrderStrategy;
import com.clx.performance.strategy.impl.ThreeGoodsOrderStrategy;
import com.clx.performance.strategy.impl.TwoGoodsOrderStrategy;
import com.clx.performance.vo.pc.OrderChildPCVO; import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
...@@ -76,13 +80,10 @@ public class GoodsOrderController { ...@@ -76,13 +80,10 @@ public class GoodsOrderController {
private OrderFeign orderFeign; private OrderFeign orderFeign;
@Autowired @Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate; private OrderChildService orderChildService;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired @Autowired
private OrderChildService orderChildService; private GoodsOrderStrategyContext goodsOrderStrategyContext;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆") @ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder") @PostMapping("/saveGoodsOrder")
...@@ -102,147 +103,8 @@ public class GoodsOrderController { ...@@ -102,147 +103,8 @@ public class GoodsOrderController {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
//1平台车辆 2部分平台车辆 3自有车辆 //1平台车辆 2部分平台车辆 3自有车辆
Integer truckDemand = orderInfo.getTruckDemand(); Integer truckDemand = orderInfo.getTruckDemand();
if (truckDemand != 3) { sendLazyTime = goodsOrderStrategyContext.strategyContext.get(truckDemand).goodsOrderProcess(orderGoodsParams,orderInfo);
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"当前货单总吨数已超订单总吨数");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2) ) {
if (child.getNeedTruckNum() == null){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"定向派单必须选择车辆");
}
if (child.getNeedTruckNum() != child.getTruckList().size()){
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"定向派单需要车数与已选车辆数量不一致");
}
}
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setLossPrice(orderInfo.getLossPrice());
//提取方式 1提取全部 2提取部分
Integer extractWay = child.getExtractWay();
orderGoods.setExtractWay(extractWay);
//需要车辆
orderGoods.setNeedTruckNum(child.getNeedTruckNum());
//挂单方式
orderGoods.setPendingOrderWay(child.getPendingOrderWay());
//挂单时间
LocalDateTime postedTime = DateUtils.parseDateTime(child.getPendingOrderTime()).get();
if (sendLazyTime == null) {
sendLazyTime = postedTime;
} else if (sendLazyTime.isAfter(postedTime)) {
sendLazyTime = postedTime;
}
orderGoods.setPendingOrderTime(postedTime);
orderGoods.setPendingOrderFreight(child.getPendingOrderFreight());
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
orderGoods.setSendAddressShorter(orderInfo.getSendAddressShorter());
//收发货经纬度
orderGoods.setSendLongitude(orderInfo.getSendLongitude());
orderGoods.setSendLatitude(orderInfo.getSendLatitude());
orderGoods.setReceiveLatitude(orderInfo.getReveiveLatitude());
orderGoods.setReceiveLongitude(orderInfo.getReveiveLongitude());
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName("loginUserInfo.getUserName()");
orderGoods.setUserNo(123L);
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, child.getTruckList(), now);
}
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
}
} else {
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"当前货单总吨数已超订单总吨数");
}
if (childParamsList.size() > 1) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"全部自有车辆只能全部提取");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setLossPrice(orderInfo.getLossPrice());
//提取方式 1提取全部 2提取部分
Integer extractWay = child.getExtractWay();
if (extractWay.equals(2)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR,"全部自有车辆只能全部提取");
}
orderGoods.setExtractWay(extractWay);
//需要车辆
orderGoods.setNeedTruckNum(child.getNeedTruckNum());
//挂单方式
orderGoods.setPendingOrderWay(child.getPendingOrderWay());
//挂单时间
LocalDateTime postedTime = DateUtils.parseDateTime(child.getPendingOrderTime()).get();
if (sendLazyTime == null) {
sendLazyTime = postedTime;
} else if (sendLazyTime.isAfter(postedTime)) {
sendLazyTime = postedTime;
}
orderGoods.setPendingOrderTime(postedTime);
orderGoods.setPendingOrderFreight(child.getPendingOrderFreight());
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
orderGoods.setSendAddressShorter(orderInfo.getSendAddressShorter());
//收发货经纬度
orderGoods.setSendLongitude(orderInfo.getSendLongitude());
orderGoods.setSendLatitude(orderInfo.getSendLatitude());
orderGoods.setReceiveLatitude(orderInfo.getReveiveLatitude());
orderGoods.setReceiveLongitude(orderInfo.getReveiveLongitude());
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName("loginUserInfo.getUserName()");
orderGoods.setUserNo(123L);
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, child.getTruckList(), now);
}
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
}
}
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} finally { } finally {
...@@ -257,7 +119,7 @@ public class GoodsOrderController { ...@@ -257,7 +119,7 @@ public class GoodsOrderController {
} }
rabbitTemplate.send(RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, MessageBuilder.withBody(orderNo.toString().getBytes()).build()); rabbitTemplate.send(RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, MessageBuilder.withBody(orderNo.toString().getBytes()).build());
Message message = MessageBuilder.withBody(orderNo.toString().getBytes()).build(); Message message = MessageBuilder.withBody(orderNo.getBytes()).build();
long epochMilli = sendLazyTime.minusMinutes(now.getMinute()).getMinute() * 60 * 1000; long epochMilli = sendLazyTime.minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
message.getMessageProperties().setExpiration(String.valueOf(epochMilli)); message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
rabbitTemplate.send( rabbitTemplate.send(
......
...@@ -25,11 +25,15 @@ import java.util.List; ...@@ -25,11 +25,15 @@ import java.util.List;
public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Integer> { public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Integer> {
boolean updateStatus(OrderChild item); boolean updateStatus(OrderChild item);
boolean updateCancel(OrderChild item);
boolean updateLoad(OrderChild item); boolean updateLoad(OrderChild item);
boolean updateUnload(OrderChild item); boolean updateUnload(OrderChild item);
boolean updateLoadAndUnload(OrderChild item); boolean updateLoadAndUnload(OrderChild item);
boolean updatePoundAuditStatus(OrderChild item);
boolean updateDriverConfirm(OrderChild item);
boolean updateCancel(OrderChild item);
Optional<OrderChild> getByChildNo(String childNo); Optional<OrderChild> getByChildNo(String childNo);
...@@ -42,8 +46,10 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -42,8 +46,10 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(PageCarrierOrderChildParam param); IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(PageCarrierOrderChildParam param);
Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String childNo);
boolean updatePoundAuditStatus(OrderChild item); OrderChild getGoingLatestOrderChild(Long driverUserNo);
int countValidByOrderGoodsNo(String orderGoodsNo);
Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String childNo);
} }
...@@ -33,7 +33,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -33,7 +33,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param); IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param);
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight); void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam); IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam);
......
...@@ -32,18 +32,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -32,18 +32,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public boolean updateStatus(OrderChild item) { public boolean updateStatus(OrderChild item) {
return update(lUdWrapper() return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo()) .eq(OrderChild::getId, item.getId())
.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())
.set(OrderChild::getStatus, item.getStatus()) .set(OrderChild::getStatus, item.getStatus())
); );
} }
...@@ -51,13 +40,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -51,13 +40,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public boolean updateLoad(OrderChild item) { public boolean updateLoad(OrderChild item) {
return update(lUdWrapper() return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo()) .eq(OrderChild::getId, item.getId())
.set(OrderChild::getLoadRough, item.getLoadRough()) .set(OrderChild::getLoadRough, item.getLoadRough())
.set(OrderChild::getLoadTare, item.getLoadTare()) .set(OrderChild::getLoadTare, item.getLoadTare())
.set(OrderChild::getLoadNet, item.getLoadNet()) .set(OrderChild::getLoadNet, item.getLoadNet())
.set(OrderChild::getLoadTime, item.getLoadTime()) .set(OrderChild::getLoadTime, item.getLoadTime())
.set(OrderChild::getWeight, item.getWeight()) .set(OrderChild::getWeight, item.getWeight())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus()) .set(OrderChild::getStatus, item.getStatus())
); );
} }
...@@ -65,7 +55,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -65,7 +55,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public boolean updateUnload(OrderChild item) { public boolean updateUnload(OrderChild item) {
return update(lUdWrapper() return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo()) .eq(OrderChild::getId, item.getId())
.set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo()) .set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo())
.set(OrderChild::getUnloadRough, item.getUnloadRough()) .set(OrderChild::getUnloadRough, item.getUnloadRough())
.set(OrderChild::getUnloadTare, item.getUnloadTare()) .set(OrderChild::getUnloadTare, item.getUnloadTare())
...@@ -73,6 +63,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -73,6 +63,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getUnloadTime, item.getUnloadTime()) .set(OrderChild::getUnloadTime, item.getUnloadTime())
.set(OrderChild::getPoundStatus, item.getPoundStatus()) .set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getFreight, item.getFreight())
.set(OrderChild::getStatus, item.getStatus()) .set(OrderChild::getStatus, item.getStatus())
); );
} }
...@@ -80,7 +71,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -80,7 +71,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public boolean updateLoadAndUnload(OrderChild item) { public boolean updateLoadAndUnload(OrderChild item) {
return update(lUdWrapper() return update(lUdWrapper()
.eq(OrderChild::getChildNo, item.getChildNo()) .eq(OrderChild::getId, item.getId())
.set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo()) .set(OrderChild::getUnloadPoundNo, item.getUnloadPoundNo())
.set(OrderChild::getLoadRough, item.getLoadRough()) .set(OrderChild::getLoadRough, item.getLoadRough())
...@@ -91,7 +82,38 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -91,7 +82,38 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.set(OrderChild::getUnloadTare, item.getUnloadTare()) .set(OrderChild::getUnloadTare, item.getUnloadTare())
.set(OrderChild::getUnloadNet, item.getUnloadNet()) .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::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())
); );
} }
...@@ -107,7 +129,6 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -107,7 +129,6 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override @Override
public long countOfCancel(Long userNo, LocalDateTime startTime, LocalDateTime endTime) { public long countOfCancel(Long userNo, LocalDateTime startTime, LocalDateTime endTime) {
return count(lQrWrapper() return count(lQrWrapper()
.eq(OrderChild::getChildNo, userNo) .eq(OrderChild::getChildNo, userNo)
.eq(OrderChild::getStatus, OrderChildEnum.Status.DRIVER_CANCEL.getCode()) .eq(OrderChild::getStatus, OrderChildEnum.Status.DRIVER_CANCEL.getCode())
...@@ -141,17 +162,21 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -141,17 +162,21 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
} }
@Override @Override
public boolean updatePoundAuditStatus(OrderChild item) { public Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) {
return update(lUdWrapper() return Optional.of(list(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)));
.eq(OrderChild::getChildNo, item.getChildNo())
.set(OrderChild::getPoundStatus, item.getPoundStatus())
.set(OrderChild::getLoadNet, item.getLoadNet())
.set(OrderChild::getUnloadNet, item.getUnloadNet())
);
} }
@Override @Override
public Optional<List<OrderChild>> getOrderChildInfoByOrderGoodsNo(String orderGoodsNo) { public OrderChild getGoingLatestOrderChild(Long driverUserNo) {
return Optional.of(list(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo))); return getOne(lQrWrapper().eq(OrderChild::getDriverUserNo,driverUserNo)
.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode())
.orderByDesc(OrderChild::getId)
.last("limit 1"));
}
@Override
public int countValidByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.countValidByOrderGoodsNo(orderGoodsNo);
} }
} }
...@@ -70,8 +70,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -70,8 +70,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override @Override
public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight) { public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightAndStatus(id, orderChildWeight, OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()); baseMapper.updateOrderGoodsWeightAndStatus(id, orderChildWeight, orderGoodsStatus);
} }
@Override @Override
......
...@@ -7,4 +7,7 @@ public interface DriverService { ...@@ -7,4 +7,7 @@ public interface DriverService {
Optional<DriverTruckInfoFeignVo> getUserDetailInfo(Long driverUserNo, Integer truckId); Optional<DriverTruckInfoFeignVo> getUserDetailInfo(Long driverUserNo, Integer truckId);
void updateOrderStatus(Long driverUserNo, Integer driverOrderStatus, Integer truckId, Integer truckOrderStatus);
} }
package com.clx.performance.extranal.user;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.msl.common.base.Optional;
import org.springframework.web.bind.annotation.RequestParam;
public interface OrderService {
Optional<FeignOrderInfoVO> getOrderInfo(@RequestParam String orderNo);
}
...@@ -4,11 +4,15 @@ import com.clx.performance.extranal.user.DriverService; ...@@ -4,11 +4,15 @@ import com.clx.performance.extranal.user.DriverService;
import com.clx.user.feign.DriverFeign; import com.clx.user.feign.DriverFeign;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Objects;
@Slf4j @Slf4j
@Service @Service
@AllArgsConstructor @AllArgsConstructor
...@@ -18,11 +22,19 @@ public class DriverServiceImpl implements DriverService { ...@@ -18,11 +22,19 @@ public class DriverServiceImpl implements DriverService {
@Override @Override
public Optional<DriverTruckInfoFeignVo> getUserDetailInfo(Long driverUserNo, Integer truckId) { public Optional<DriverTruckInfoFeignVo> getUserDetailInfo(Long driverUserNo, Integer truckId) {
Optional<DriverTruckInfoFeignVo> map = Optional.ofNullable(driverFeign.getDriverTruckInfo(driverUserNo, truckId)) Result<DriverTruckInfoFeignVo> result = Optional.ofNullable(driverFeign.getDriverTruckInfo(driverUserNo, truckId)).orElseThrow(ResultCodeEnum.FAIL);
.filter(Result::succeed)
.map(Result::getData); if (!Objects.equals(result.getCode(), 0)){
throw new ServiceSystemException(ResultCodeEnum.FAIL, result.getMsg());
}
return map; return Optional.ofNullable(result.getData());
}
@Override
public void updateOrderStatus(Long driverUserNo, Integer driverOrderStatus, Integer truckId, Integer truckOrderStatus){
Optional.ofNullable(driverFeign.updateOrderStatus(driverUserNo, driverOrderStatus, truckId, truckOrderStatus))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL);
} }
} }
package com.clx.performance.extranal.user.impl;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.extranal.user.OrderService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@AllArgsConstructor
public class OrderServiceImpl implements OrderService {
private final OrderFeign orderFeign;
@Override
public Optional<FeignOrderInfoVO> getOrderInfo(String orderNo) {
return Optional.ofNullable(orderFeign.getOrderInfo(orderNo))
.filter(Result::succeed)
.map(Result::getData);
}
}
...@@ -14,6 +14,7 @@ import com.clx.performance.vo.pc.PageCarrierOrderChildVO; ...@@ -14,6 +14,7 @@ import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.SelectProvider;
...@@ -42,4 +43,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -42,4 +43,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "pageCarrierOrderChildList") @SelectProvider(type = OrderChildSqlProvider.class, method = "pageCarrierOrderChildList")
IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(@Param("page") Page<PageCarrierOrderChildVO> page, @Param("param") PageCarrierOrderChildParam param); IPage<PageCarrierOrderChildVO> pageCarrierOrderChildList(@Param("page") Page<PageCarrierOrderChildVO> page, @Param("param") PageCarrierOrderChildParam param);
@Select("select count(1) from order_child where order_goods_no = #{orderGoodsNo} and status < 110")
int countValidByOrderGoodsNo(String orderGoodsNo);
} }
\ No newline at end of file
...@@ -34,9 +34,9 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -34,9 +34,9 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
IPage<OrderGoodsVO> pageOrderGoodsList(Page<OrderGoodsVO> page, PageOrderGoodsListParam param); IPage<OrderGoodsVO> pageOrderGoodsList(Page<OrderGoodsVO> page, PageOrderGoodsListParam param);
@Update(" update order_goods set " + @Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{weight}," + " residue_transport_weight = if (residue_transport_weight>#{weight}, residue_transport_weight-#{weight}, 0)," +
" already_transport_weight = already_transport_weight+#{weight}," + " already_transport_weight = already_transport_weight+#{weight}," +
"order_goods_status = #{orderGoodsStatus}" + "order_goods_status = if (residue_transport_weight>#{weight}, #{orderGoodsStatus}, 40) " +
" where id = #{id}") " where id = #{id}")
void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus); void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
......
...@@ -50,7 +50,7 @@ public class OrderGoodsTruckBind implements HasKey<Integer> { ...@@ -50,7 +50,7 @@ public class OrderGoodsTruckBind implements HasKey<Integer> {
@TableField("modified_time") @TableField("modified_time")
@ApiModelProperty("修改时间") @ApiModelProperty("修改时间")
private LocalDateTime updateTime; private LocalDateTime modifiedTime;
@Override @Override
......
package com.clx.performance.service; package com.clx.performance.service;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PoundAuditParam; import com.clx.performance.param.pc.PoundAuditParam;
import com.clx.performance.vo.pc.OrderChildPoundAuditDetailVO; import com.clx.performance.vo.pc.OrderChildPoundAuditDetailVO;
...@@ -17,6 +16,5 @@ public interface OrderChildPoundAuditService { ...@@ -17,6 +16,5 @@ public interface OrderChildPoundAuditService {
void updatePoundAudit(PoundAuditParam param); void updatePoundAudit(PoundAuditParam param);
void updateCarrierCancel(OrderChildCarrierCancelParam param);
} }
...@@ -2,6 +2,7 @@ package com.clx.performance.service; ...@@ -2,6 +2,7 @@ package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.app.*; import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PagePoundAuditParam; import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.vo.app.*; import com.clx.performance.vo.app.*;
...@@ -38,6 +39,8 @@ public interface OrderChildService { ...@@ -38,6 +39,8 @@ public interface OrderChildService {
void updateDriverConfirm(OrderChildDriverConfirmParam param); void updateDriverConfirm(OrderChildDriverConfirmParam param);
void updateDriverCancel(OrderChildDriverCancelParam param); void updateDriverCancel(OrderChildDriverCancelParam param);
void updateCarrierCancel(OrderChildCarrierCancelParam param);
OrderChildVO getOrderChildInfo(String childNo); OrderChildVO getOrderChildInfo(String childNo);
IPage<OrderChildVO> pageOrderChild(PageOrderChildOfDriverParam param); IPage<OrderChildVO> pageOrderChild(PageOrderChildOfDriverParam param);
...@@ -55,4 +58,6 @@ public interface OrderChildService { ...@@ -55,4 +58,6 @@ public interface OrderChildService {
CarrierOrderChildDetailVO getCarrierOrderChildDetail(String childNo); CarrierOrderChildDetailVO getCarrierOrderChildDetail(String childNo);
GoingOrderChildVO getGoingLatestOrderChild();
} }
...@@ -21,7 +21,7 @@ public interface OrderGoodsService { ...@@ -21,7 +21,7 @@ public interface OrderGoodsService {
IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param); IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param);
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight); void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam); IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam);
} }
...@@ -68,10 +68,15 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -68,10 +68,15 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updatePoundAudit(PoundAuditParam param) { public void updatePoundAudit(PoundAuditParam param) {
//运单详情
OrderChild orderChild = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); OrderChild orderChild = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//待审核磅单
OrderChildPoundAudit poundAuditDetail = orderChildPoundAuditDao.getPoundAuditDetail(param.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); OrderChildPoundAudit poundAuditDetail = orderChildPoundAuditDao.getPoundAuditDetail(param.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(!Objects.equals(poundAuditDetail.getStatus(),OrderChildPoundAuditEnum.Status.AUDIT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
poundAuditDetail.setStatus(param.getStatus()); poundAuditDetail.setStatus(param.getStatus());
poundAuditDetail.setRejectType(param.getRejectType()); poundAuditDetail.setRejectType(param.getRejectType());
poundAuditDetail.setRemark(param.getRemark()); poundAuditDetail.setRemark(param.getRemark());
...@@ -119,85 +124,4 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -119,85 +124,4 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
} }
@Override
public void updateCarrierCancel(OrderChildCarrierCancelParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())){
return;
}
// 禁止取消 (卸车前取消)
if (orderChild.getStatus()>OrderChildEnum.Status.UNLOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID);
}
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);
orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
orderChildDao.updateCancel(orderChild);
// 返回吨数
updateOrderGoodsAmountReturn(orderChild, orderGoods);
// 取消定向
updateOrderGoodsDirectCancel(orderGoodsTruckBind);
// 释放司机、车辆
releaseDriver(orderChild.getDriverUserNo());
releaseTruck(orderChild.getTruckId());
// 日志
orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
/**
* 取消返吨数
*/
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);
}
/**
* 释放司机
*/
private void releaseDriver(Long driverNo){
}
/**
* 释放车辆
*/
private void releaseTruck(Integer truckId){
}
} }
...@@ -2,12 +2,15 @@ package com.clx.performance.service.impl; ...@@ -2,12 +2,15 @@ package com.clx.performance.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.order.vo.feign.FeignAddressVO; import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.*; import com.clx.performance.dao.*;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.AddressService; import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.*; import com.clx.performance.model.*;
import com.clx.performance.param.app.*; import com.clx.performance.param.app.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PagePoundAuditParam; import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
...@@ -20,16 +23,19 @@ import com.clx.performance.vo.pc.CarrierOrderChildDetailVO; ...@@ -20,16 +23,19 @@ import com.clx.performance.vo.pc.CarrierOrderChildDetailVO;
import com.clx.performance.vo.pc.OrderChildPCVO; import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO; import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO; import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum; import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
import com.msl.common.utils.LocalDateTimeUtils; import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.common.utils.gps.GpsUtil;
import com.msl.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -54,6 +60,7 @@ import java.util.stream.Collectors; ...@@ -54,6 +60,7 @@ import java.util.stream.Collectors;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class OrderChildServiceImpl implements OrderChildService { public class OrderChildServiceImpl implements OrderChildService {
private final AmqpTemplate rabbitTemplate;
private final OrderGoodsDao orderGoodsDao; private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao; private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
...@@ -66,6 +73,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -66,6 +73,7 @@ public class OrderChildServiceImpl implements OrderChildService {
private final OrderChildLogService orderChildLogService; private final OrderChildLogService orderChildLogService;
private final OrderChildPoundLogService orderChildPoundLogService; private final OrderChildPoundLogService orderChildPoundLogService;
private final AddressService addressService; private final AddressService addressService;
private final OrderService orderService;
private final DriverService driverService; private final DriverService driverService;
private final OrderChildStruct orderChildStruct; private final OrderChildStruct orderChildStruct;
...@@ -114,7 +122,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -114,7 +122,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 库存验证 // 库存验证
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);} if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);}
if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);} // if (orderGoods.getResidueTransportWeight().compareTo(truckLoad) < 0) {throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);}
OrderChild orderChild = new OrderChild(); OrderChild orderChild = new OrderChild();
orderChild.setChildNo(childNo); orderChild.setChildNo(childNo);
...@@ -163,11 +171,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -163,11 +171,8 @@ public class OrderChildServiceImpl implements OrderChildService {
// 新增运单 // 新增运单
orderChildDao.saveEntity(orderChild); orderChildDao.saveEntity(orderChild);
// 更新司机状态 // 更新出车状态
lockDriver(orderChild.getDriverUserNo()); updateDriverOrderStatusLock(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 更新车辆状态
lockTruck(orderChild.getTruckId());
// 新增日志 // 新增日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(), OrderChildLogEnum.Type.CREATED.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(), OrderChildLogEnum.Type.CREATED.getMsg(),
...@@ -249,6 +254,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -249,6 +254,15 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
} }
// 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getSendLongitude().doubleValue(), orderGoods.getSendLatitude().doubleValue(),
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000;
if (distance > orderInfo.getSendDriverArriveRange().doubleValue()){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR);
}
orderChild.setStatus(OrderChildEnum.Status.ARRIVE_SEND.getCode()); orderChild.setStatus(OrderChildEnum.Status.ARRIVE_SEND.getCode());
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
...@@ -300,6 +314,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -300,6 +314,15 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
// 距离验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
double distance = GpsUtil.distance(orderGoods.getReceiveLongitude().doubleValue(), orderGoods.getReceiveLatitude().doubleValue(),
param.getLongitude().doubleValue(), param.getLatitude().doubleValue())/1000;
if (distance > orderInfo.getReveiveDriverArriveRange().doubleValue()){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR);
}
orderChild.setStatus(OrderChildEnum.Status.ARRIVE_RECEIVE.getCode()); orderChild.setStatus(OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
orderChildDao.updateStatus(orderChild); orderChildDao.updateStatus(orderChild);
...@@ -325,24 +348,26 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -325,24 +348,26 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
} }
if (loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){ if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
} }
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (orderChild.getLoadTime() == null && Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) { 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(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.LOAD.getCode(), OrderChildLogEnum.Type.LOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} else { } else {
updateReload(param, orderChild); updateReload(param, orderChild, orderGoods);
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(), OrderChildLogEnum.Type.RELOAD.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.RELOAD.getCode(), OrderChildLogEnum.Type.RELOAD.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
} }
private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild) { private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
// 装货超时 // 装货超时
...@@ -350,6 +375,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -350,6 +375,15 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIMEOUT);
} }
// 装车时间验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadBeginTime()).get();
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getLoadEndTime()).get();
if (now.isBefore(beginTime) || now.isAfter(endTime)){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_TIME_ERROR);
}
List<OrderChildImage> imageList = new ArrayList<>(); List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) { for (String item : param.getLoadImageList()) {
OrderChildImage image = new OrderChildImage(); OrderChildImage image = new OrderChildImage();
...@@ -359,20 +393,25 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -359,20 +393,25 @@ public class OrderChildServiceImpl implements OrderChildService {
imageList.add(image); imageList.add(image);
} }
BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight());
orderChild.setLoadRough(param.getLoadRough()); orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare()); orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet()); orderChild.setLoadNet(param.getLoadNet());
orderChild.setLoadTime(LocalDateTime.now()); orderChild.setLoadTime(LocalDateTime.now());
orderChild.setWeight(orderChildWeightCalc(orderChild)); orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setStatus(OrderChildEnum.Status.LOAD.getCode()); orderChild.setStatus(OrderChildEnum.Status.LOAD.getCode());
orderChildDao.updateLoad(orderChild);
// // 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoad(orderChild);
orderChildImageDao.batchSaveEntity(imageList); orderChildImageDao.batchSaveEntity(imageList);
} }
private void updateReload(OrderChildLoadParam param, OrderChild orderChild) { private void updateReload(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
List<OrderChildImage> imageList = new ArrayList<>(); List<OrderChildImage> imageList = new ArrayList<>();
...@@ -384,11 +423,18 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -384,11 +423,18 @@ public class OrderChildServiceImpl implements OrderChildService {
imageList.add(image); imageList.add(image);
} }
BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight());
orderChild.setLoadRough(param.getLoadRough()); orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare()); orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet()); orderChild.setLoadNet(param.getLoadNet());
orderChild.setLoadTime(LocalDateTime.now()); orderChild.setLoadTime(LocalDateTime.now());
orderChild.setWeight(orderChildWeightCalc(orderChild)); orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoad(orderChild); orderChildDao.updateLoad(orderChild);
orderChildImageDao.deleteLoad(childNo); orderChildImageDao.deleteLoad(childNo);
...@@ -413,7 +459,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -413,7 +459,7 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCELED);
} }
if (loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){ if (!loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
} }
...@@ -437,6 +483,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -437,6 +483,15 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateUnloadFirst(OrderChildUnloadParam param, OrderChild orderChild) { private void updateUnloadFirst(OrderChildUnloadParam param, OrderChild orderChild) {
String childNo = param.getChildNo(); String childNo = param.getChildNo();
// 装车时间验证
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderChild.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadBeginTime()).get();
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(now, "yyyy-MM-dd ").get() + orderInfo.getUnloadEndTime()).get();
if (now.isBefore(beginTime) || now.isAfter(endTime)){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_TIME_ERROR);
}
List<OrderChildImage> imageList = new ArrayList<>(); List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getUnloadImageList()) { for (String item : param.getUnloadImageList()) {
OrderChildImage image = new OrderChildImage(); OrderChildImage image = new OrderChildImage();
...@@ -454,6 +509,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -454,6 +509,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setWeight(orderChildWeightCalc(orderChild)); orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setStatus(OrderChildEnum.Status.UNLOAD.getCode()); orderChild.setStatus(OrderChildEnum.Status.UNLOAD.getCode());
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode()); orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
orderChild.setFreight(orderChildFreightCalc(orderChild));
OrderChildPoundAudit audit = new OrderChildPoundAudit(); OrderChildPoundAudit audit = new OrderChildPoundAudit();
audit.setChildNo(childNo); audit.setChildNo(childNo);
...@@ -467,9 +523,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -467,9 +523,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildPoundAuditDao.saveEntity(audit); orderChildPoundAuditDao.saveEntity(audit);
// 释放司机、车辆 // 更新出车状态
releaseDriver(orderChild.getDriverUserNo()); updateDriverOrderStatusUnload(orderChild.getDriverUserNo(), orderChild.getTruckId());
releaseTruck(orderChild.getTruckId());
} }
...@@ -496,6 +551,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -496,6 +551,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setUnloadNet(param.getUnloadNet()); orderChild.setUnloadNet(param.getUnloadNet());
orderChild.setUnloadTime(LocalDateTime.now()); orderChild.setUnloadTime(LocalDateTime.now());
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode()); orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
orderChild.setFreight(orderChildFreightCalc(orderChild));
OrderChildPoundAudit audit = new OrderChildPoundAudit(); OrderChildPoundAudit audit = new OrderChildPoundAudit();
audit.setChildNo(childNo); audit.setChildNo(childNo);
...@@ -538,13 +594,15 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -538,13 +594,15 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
if (loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){ if (!loadCheck(param.getLoadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_LOAD_WEIGHT_ERROR);
} }
if (loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){ if (!loadCheck(param.getUnloadNet(), orderChild.getTruckLoad())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_UNLOAD_WEIGHT_ERROR);
} }
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
List<OrderChildImage> imageList = new ArrayList<>(); List<OrderChildImage> imageList = new ArrayList<>();
for (String item : param.getLoadImageList()) { for (String item : param.getLoadImageList()) {
OrderChildImage image = new OrderChildImage(); OrderChildImage image = new OrderChildImage();
...@@ -559,6 +617,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -559,6 +617,8 @@ public class OrderChildServiceImpl implements OrderChildService {
image.setImage(item); image.setImage(item);
} }
BigDecimal dif = param.getLoadNet().subtract(orderChild.getWeight());
orderChild.setLoadRough(param.getLoadRough()); orderChild.setLoadRough(param.getLoadRough());
orderChild.setLoadTare(param.getLoadTare()); orderChild.setLoadTare(param.getLoadTare());
orderChild.setLoadNet(param.getLoadNet()); orderChild.setLoadNet(param.getLoadNet());
...@@ -566,6 +626,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -566,6 +626,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setUnloadTare(param.getUnloadTare()); orderChild.setUnloadTare(param.getUnloadTare());
orderChild.setUnloadNet(param.getUnloadNet()); orderChild.setUnloadNet(param.getUnloadNet());
orderChild.setWeight(orderChildWeightCalc(orderChild)); orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode()); orderChild.setPoundStatus(OrderChildPoundAuditEnum.Status.AUDIT.getCode());
...@@ -576,6 +637,9 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -576,6 +637,9 @@ public class OrderChildServiceImpl implements OrderChildService {
audit.setUnloadNet(orderChild.getUnloadNet()); audit.setUnloadNet(orderChild.getUnloadNet());
audit.setUnloadPoundNo(orderChild.getUnloadPoundNo()); audit.setUnloadPoundNo(orderChild.getUnloadPoundNo());
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
orderChildDao.updateLoadAndUnload(orderChild); orderChildDao.updateLoadAndUnload(orderChild);
orderChildImageDao.deleteLoadAndUnload(childNo); orderChildImageDao.deleteLoadAndUnload(childNo);
...@@ -603,10 +667,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -603,10 +667,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (!Objects.equals(orderChild.getUserNo(), userNo) && !Objects.equals(orderChild.getDriverUserNo(), userNo)){ if (!Objects.equals(orderChild.getUserNo(), userNo) && !Objects.equals(orderChild.getDriverUserNo(), userNo)){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND); 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())){ if (!Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.UNLOAD.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
} }
...@@ -616,11 +677,14 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -616,11 +677,14 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_POUND_AUDIT);
} }
if (Objects.equals(orderChild.getPoundStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){ 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()); orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChildDao.updateStatus(orderChild); orderChildDao.updateDriverConfirm(orderChild);
// 更新车辆状态
updateDriverOrderStatusDriverConfirm(orderChild.getTruckId());
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CONFIRM.getCode(), OrderChildLogEnum.Type.DRIVER_CONFIRM.getMsg(),
...@@ -645,7 +709,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -645,7 +709,7 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
// 禁止取消 // 禁止取消
if (orderChild.getStatus()>OrderChildEnum.Status.ARRIVE_SEND.getCode()) { if (orderChild.getStatus()>=OrderChildEnum.Status.LOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID);
} }
...@@ -666,20 +730,69 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -666,20 +730,69 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setFinishTime(now); orderChild.setFinishTime(now);
orderChild.setStatus(OrderChildEnum.Status.DRIVER_CANCEL.getCode()); orderChild.setStatus(OrderChildEnum.Status.DRIVER_CANCEL.getCode());
// 返回吨数
updateOrderGoodsAmountReturn(orderChild, orderGoods);
// 取消定向
updateOrderGoodsDirectCancel(orderGoodsTruckBind);
orderChildDao.updateCancel(orderChild); orderChildDao.updateCancel(orderChild);
// 更新出车状态
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(), OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName());
}
@Override
public void updateCarrierCancel(OrderChildCarrierCancelParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
String childNo = param.getChildNo();
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (OrderChildEnum.CANCEL_lIST.contains(orderChild.getStatus())){
return;
}
// 禁止取消 (卸车前取消)
if (orderChild.getStatus()>=OrderChildEnum.Status.UNLOAD.getCode()) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID);
}
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);
orderChild.setStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode());
// 返回吨数 // 返回吨数
updateOrderGoodsAmountReturn(orderChild, orderGoods); updateOrderGoodsAmountReturn(orderChild, orderGoods);
// 取消定向 // 取消定向
updateOrderGoodsDirectCancel(orderGoodsTruckBind); updateOrderGoodsDirectCancel(orderGoodsTruckBind);
// 释放司机、车辆 orderChildDao.updateCancel(orderChild);
releaseDriver(orderChild.getDriverUserNo());
releaseTruck(orderChild.getTruckId()); // 更新出车状态
updateDriverOrderStatusCancel(orderChild.getDriverUserNo(), orderChild.getTruckId());
// 日志 // 日志
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.DRIVER_CANCEL.getCode(), OrderChildLogEnum.Type.DRIVER_CANCEL.getMsg(), orderChildLogService.saveCarrierOrderChildLog(childNo, OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(),
loginUserInfo.getUserNo(), loginUserInfo.getUserName()); loginUserInfo.getUserNo(), loginUserInfo.getUserName());
} }
...@@ -796,14 +909,51 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -796,14 +909,51 @@ public class OrderChildServiceImpl implements OrderChildService {
* 更新货单数据 * 更新货单数据
*/ */
private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight){ private void updateOrderGoodsAmount(OrderGoods orderGoods, BigDecimal weight){
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), weight); int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
Integer status = orderGoods.getOrderGoodsStatus();
if (count == 0){
status = OrderGoodsStatusEnum.Status.PAYING.getCode();
}
else {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), weight, status);
} }
/** /**
* 取消返吨数 * 取消返吨数
*/ */
private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){ private void updateOrderGoodsAmountReturn(OrderChild orderChild, OrderGoods orderGoods){
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate()); int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
Integer status = orderGoods.getOrderGoodsStatus();
if (count == 0){
status = OrderGoodsStatusEnum.Status.PAYING.getCode();
}
else {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), orderChild.getWeight().negate(), status);
}
/**
* 装车补偿
*/
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
Integer status = orderGoods.getOrderGoodsStatus();
if (count == 0){
status = OrderGoodsStatusEnum.Status.PAYING.getCode();
}
else {
status = OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode();
}
orderGoodsService.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, status);
} }
/** /**
...@@ -866,36 +1016,45 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -866,36 +1016,45 @@ public class OrderChildServiceImpl implements OrderChildService {
* 运费计算 * 运费计算
*/ */
private BigDecimal orderChildFreightCalc(OrderChild orderChild){ 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);
} }
/** /**
* 接单锁定司机 * 更新出车状态 (接单, 运单重车)
*/ */
private void lockDriver(Long driverNo){ private void updateDriverOrderStatusLock(Long driverUserNo, Integer truckId){
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.YES.getCode(), truckId, 3);
} }
/** /**
* 接单锁定车辆 * 更新出车状态(运单卸车,运单空车)
*/ */
private void lockTruck(Integer truckId){ private void updateDriverOrderStatusUnload(Long driverUserNo, Integer truckId){
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.NO.getCode(), truckId, 2);
} }
/** /**
* 释放司机 * 更新出车状态 (运单取消,空车)
*/ */
private void releaseDriver(Long driverNo){ private void updateDriverOrderStatusCancel(Long driverUserNo, Integer truckId){
driverService.updateOrderStatus(driverUserNo, DriverInfoEnum.DriverStatus.NO.getCode(), truckId, 1);
} }
/** /**
* 释放车辆 * 更新出车状态 (司机确认收货,空车)
*/ */
private void releaseTruck(Integer truckId){ private void updateDriverOrderStatusDriverConfirm(Integer truckId){
driverService.updateOrderStatus(0L, 0, truckId, 1);
} }
/** /**
...@@ -967,4 +1126,11 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -967,4 +1126,11 @@ public class OrderChildServiceImpl implements OrderChildService {
carrierOrderChildDetailVO.setUnloadImageList(unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList())); carrierOrderChildDetailVO.setUnloadImageList(unloadImages.stream().map(OrderChildImage::getImage).collect(Collectors.toList()));
return carrierOrderChildDetailVO; return carrierOrderChildDetailVO;
} }
@Override
public GoingOrderChildVO getGoingLatestOrderChild() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
OrderChild orderChild = orderChildDao.getGoingLatestOrderChild(loginUserInfo.getUserNo());
return orderChildStruct.convertGoingOrder(orderChild);
}
} }
...@@ -75,8 +75,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -75,8 +75,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
@Override @Override
public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight) { public void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus) {
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(id, orderChildWeight); orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(id, orderChildWeight, orderGoodsStatus);
} }
@Override @Override
......
...@@ -120,7 +120,7 @@ public class OrderGoodsSqlProvider { ...@@ -120,7 +120,7 @@ public class OrderGoodsSqlProvider {
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name," + "a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name," +
"a.pending_order_freight,a.user_no,a.user_name from order_goods a where a.last_arrive_send_time >= now() and (a.order_goods_status = 20 or a.order_goods_status = 30)" + "a.pending_order_freight,a.user_no,a.user_name from order_goods a where a.last_arrive_send_time >= now() and (a.order_goods_status = 20 or a.order_goods_status = 30)" +
"and a.residue_transport_weight > 0" + "and a.residue_transport_weight > 0" +
" and a.pending_order_way = 1 and a.order_goods_no in ("); " and a.pending_order_way = 2 and a.order_goods_no in (");
if (!param.isEmpty()) { if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) { for (int i = 0; i < param.size(); i++) {
......
package com.clx.performance.strategy;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import java.time.LocalDateTime;
public interface GoodsOrderStrategy {
LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo);
}
package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTypeEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Component("OneGoodsOrderStrategy")
@Slf4j
public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
private OrderFeign orderFeign;
@Autowired
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
@Override
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo) {
String orderNo = orderGoodsParams.getOrderNo();
LocalDateTime now = LocalDateTime.now();
LocalDateTime sendLazyTime = null;
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2)) {
if (child.getNeedTruckNum() == null) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单必须选择车辆");
}
if (child.getNeedTruckNum() != child.getTruckList().size()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单需要车数与已选车辆数量不一致");
}
}
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setLossPrice(orderInfo.getLossPrice());
//提取方式 1提取全部 2提取部分
Integer extractWay = child.getExtractWay();
orderGoods.setExtractWay(extractWay);
//需要车辆
orderGoods.setNeedTruckNum(child.getNeedTruckNum());
//挂单方式
orderGoods.setPendingOrderWay(child.getPendingOrderWay());
//挂单时间
LocalDateTime postedTime = DateUtils.parseDateTime(child.getPendingOrderTime()).get();
if (sendLazyTime == null) {
sendLazyTime = postedTime;
} else if (sendLazyTime.isAfter(postedTime)) {
sendLazyTime = postedTime;
}
orderGoods.setPendingOrderTime(postedTime);
orderGoods.setPendingOrderFreight(child.getPendingOrderFreight());
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
orderGoods.setSendAddressShorter(orderInfo.getSendAddressShorter());
//收发货经纬度
orderGoods.setSendLongitude(orderInfo.getSendLongitude());
orderGoods.setSendLatitude(orderInfo.getSendLatitude());
orderGoods.setReceiveLatitude(orderInfo.getReveiveLatitude());
orderGoods.setReceiveLongitude(orderInfo.getReveiveLongitude());
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName("loginUserInfo.getUserName()");
orderGoods.setUserNo(123L);
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, child.getTruckList(), now);
}
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
}
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(),orderInfo.getResidueWeight().subtract(childSum));
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
goodsOrderStrategyContext.strategyContext.put(1,this);
}
}
package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTypeEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Component("ThreeGoodsOrderStrategy")
@Slf4j
public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
@Autowired
private OrderFeign orderFeign;
@Override
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo) {
String orderNo = orderGoodsParams.getOrderNo();
LocalDateTime now = LocalDateTime.now();
LocalDateTime sendLazyTime = null;
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
if (childParamsList.size() > 1) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "全部自有车辆只能全部提取");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setLossPrice(orderInfo.getLossPrice());
//提取方式 1提取全部 2提取部分
Integer extractWay = child.getExtractWay();
if (extractWay.equals(2)) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "全部自有车辆只能全部提取");
}
orderGoods.setExtractWay(extractWay);
//需要车辆
orderGoods.setNeedTruckNum(child.getNeedTruckNum());
//挂单方式
orderGoods.setPendingOrderWay(child.getPendingOrderWay());
//挂单时间
LocalDateTime postedTime = DateUtils.parseDateTime(child.getPendingOrderTime()).get();
if (sendLazyTime == null) {
sendLazyTime = postedTime;
} else if (sendLazyTime.isAfter(postedTime)) {
sendLazyTime = postedTime;
}
orderGoods.setPendingOrderTime(postedTime);
orderGoods.setPendingOrderFreight(child.getPendingOrderFreight());
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
orderGoods.setSendAddressShorter(orderInfo.getSendAddressShorter());
//收发货经纬度
orderGoods.setSendLongitude(orderInfo.getSendLongitude());
orderGoods.setSendLatitude(orderInfo.getSendLatitude());
orderGoods.setReceiveLatitude(orderInfo.getReveiveLatitude());
orderGoods.setReceiveLongitude(orderInfo.getReveiveLongitude());
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName("loginUserInfo.getUserName()");
orderGoods.setUserNo(123L);
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, child.getTruckList(), now);
}
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
}
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(),orderInfo.getResidueWeight().subtract(childSum));
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
goodsOrderStrategyContext.strategyContext.put(3,this);
}
}
package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTypeEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Component("TwoGoodsOrderStrategy")
@Slf4j
public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
@Autowired
private OrderFeign orderFeign;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
@Override
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo) {
String orderNo = orderGoodsParams.getOrderNo();
LocalDateTime now = LocalDateTime.now();
LocalDateTime sendLazyTime = null;
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2)) {
if (child.getNeedTruckNum() == null) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单必须选择车辆");
}
if (child.getNeedTruckNum() != child.getTruckList().size()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单需要车数与已选车辆数量不一致");
}
}
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setLossPrice(orderInfo.getLossPrice());
//提取方式 1提取全部 2提取部分
Integer extractWay = child.getExtractWay();
orderGoods.setExtractWay(extractWay);
//需要车辆
orderGoods.setNeedTruckNum(child.getNeedTruckNum());
//挂单方式
orderGoods.setPendingOrderWay(child.getPendingOrderWay());
//挂单时间
LocalDateTime postedTime = DateUtils.parseDateTime(child.getPendingOrderTime()).get();
if (sendLazyTime == null) {
sendLazyTime = postedTime;
} else if (sendLazyTime.isAfter(postedTime)) {
sendLazyTime = postedTime;
}
orderGoods.setPendingOrderTime(postedTime);
orderGoods.setPendingOrderFreight(child.getPendingOrderFreight());
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
orderGoods.setSendAddressShorter(orderInfo.getSendAddressShorter());
//收发货经纬度
orderGoods.setSendLongitude(orderInfo.getSendLongitude());
orderGoods.setSendLatitude(orderInfo.getSendLatitude());
orderGoods.setReceiveLatitude(orderInfo.getReveiveLatitude());
orderGoods.setReceiveLongitude(orderInfo.getReveiveLongitude());
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName("loginUserInfo.getUserName()");
orderGoods.setUserNo(123L);
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, child.getTruckList(), now);
}
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
}
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(),orderInfo.getResidueWeight().subtract(childSum));
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
goodsOrderStrategyContext.strategyContext.put(2,this);
}
}
package com.clx.performance.struct; package com.clx.performance.struct;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.vo.app.GoingOrderChildVO;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.CarrierOrderChildDetailVO; import com.clx.performance.vo.pc.CarrierOrderChildDetailVO;
import com.clx.performance.vo.pc.OrderChildPCVO; import com.clx.performance.vo.pc.OrderChildPCVO;
...@@ -19,4 +20,8 @@ public interface OrderChildStruct { ...@@ -19,4 +20,8 @@ public interface OrderChildStruct {
CarrierOrderChildDetailVO carrierConvert(OrderChild item); CarrierOrderChildDetailVO carrierConvert(OrderChild item);
GoingOrderChildVO convertGoingOrder(OrderChild item);
} }
package com.clx.performance; package com.clx.performance;
import com.clx.order.feign.OrderFeign;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -14,10 +15,10 @@ import java.math.BigDecimal; ...@@ -14,10 +15,10 @@ import java.math.BigDecimal;
public class JobTest { public class JobTest {
@Autowired @Autowired
private OrderGoodsMapper oderGoodsMapper; private OrderFeign orderFeign;
@Test @Test
public void test1() { public void test1() {
oderGoodsMapper.updateOrderGoodsWeightAndStatus(94,new BigDecimal("23.32"),11); orderFeign.updateOrderInfoResidueWeight(5,new BigDecimal(32));
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论