提交 614d7139 authored 作者: huyufan's avatar huyufan

创建货单修改代码

上级 f50f937e
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<>();
}
...@@ -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 {
......
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; 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论