提交 f5383368 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
......@@ -12,6 +12,9 @@ import java.util.List;
@Setter
public class OrderGoodsChildParams {
@ApiModelProperty("用车方式 1:平台车辆配货 2:自有车辆配货")
private String vehicleUsage;
@MoneyInConvert
@ApiModelProperty("挂单运费")
......
......@@ -13,6 +13,7 @@ public class OrderGoodsParams {
@ApiModelProperty("订单编号")
@NotBlank(message = "订单编号不能为空")
private String orderNo;
@Converted(isDynamic = true)
private List<OrderGoodsChildParams> orderGoodsChildParams;
}
......@@ -34,8 +34,9 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_NO_FOUND(1200, "货单不存在"),
ORDER_WEIGHT_LACK(1200, "剩余数量不足"),
ORDER_INVALID(1200, "无效的货单"),
ORDER_WEIGHT_LACK(1201, "剩余数量不足"),
ORDER_INVALID(1202, "无效的货单"),
ORDER_INVALID1(1203, "当前运单的货源已完成或取消,请查看其他货源"),
ORDER_CHILD_NO_FOUND(1301, "运单不存在"),
......@@ -50,14 +51,14 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR(1310, "请选择定向车辆"),
ORDER_CHILD_DIRECT_ORDER_TRUCK_ERROR1(1311, "请选择非定向车辆"),
ORDER_CHILD_DIRECT_REJECT_TRUCK_ERROR(1312, "非定向车辆无法取消"),
ORDER_CHILD_TRUCK_MODEL_ERROR(1312, "请选择合适的车型"),
ORDER_CHILD_TRUCK_MODEL_ERROR(1313, "请选择合适的车型"),
ORDER_CHILD_LOAD_WEIGHT_ERROR(1312, "装货净重超过载重的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, "没有到达目的地"),
ORDER_CHILD_LOAD_WEIGHT_ERROR(1314, "装货净重超过载重的1.5倍"),
ORDER_CHILD_UNLOAD_WEIGHT_ERROR(1315, "卸货净重超过载重的1.5倍"),
ORDER_CHILD_LOAD_TIME_ERROR(1316, "非装车时间段"),
ORDER_CHILD_UNLOAD_TIME_ERROR(1317, "非卸车时间段"),
ORDER_CHILD_ARRIVE_SEND_ADDRESS_DISTANCE_ERROR(1318, "没有到达货源地"),
ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_DISTANCE_ERROR(1319, "没有到达目的地"),
;
private final int code;
......
package com.clx.performance.controller.system;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.registry.NacosRegistration;
import com.alibaba.cloud.nacos.registry.NacosServiceRegistry;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 应用服务器控制
*
* @author wanglq
* Date 2022/11/28
* Time 15:43
*/
@RestController
@RequestMapping("/appServer")
@Slf4j
public class AppServerController {
@Autowired
private NacosRegistration registration;
@Autowired
private NacosServiceRegistry registry;
/**
* 下线服务
*
* @return
*/
@GetMapping("/deregister")
public Result<Void> deregister() {
NacosDiscoveryProperties properties = registration.getNacosDiscoveryProperties();
String service = properties.getService();
String group = properties.getGroup();
String clusterName = properties.getClusterName();
String ip = properties.getIp();
int port = properties.getPort();
log.info("deregister from nacos, serviceName:{}, groupName:{}, clusterName:{}, ip:{}, port:{}", service, group, clusterName, ip, port);
registry.deregister(registration);
return Result.ok();
}
/**
* 应用状态
*
* @return
*/
@GetMapping("/status")
public Result<String> status() {
return Result.ok("up");
}
}
......@@ -40,4 +40,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam, List<String> orderGoodsNoList);
void updateOrderGoodsStatusByOrderGoodsNo(String orderGoodsNo, Integer code);
void saveBatchEntity(List<OrderGoods> orderGoodsList);
}
......@@ -131,7 +131,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public long countOfCancel(Long userNo, LocalDateTime startTime, LocalDateTime endTime) {
return count(lQrWrapper()
.eq(OrderChild::getChildNo, userNo)
.eq(OrderChild::getUserNo, userNo)
.eq(OrderChild::getStatus, OrderChildEnum.Status.DRIVER_CANCEL.getCode())
.ge(OrderChild::getCreateTime, startTime)
.le(OrderChild::getCreateTime, endTime)
......
......@@ -18,6 +18,6 @@ import java.util.List;
public class OrderChildPoundLogDaoImpl extends BaseDaoImpl<OrderChildPoundLogMapper, OrderChildPoundLog, Integer> implements OrderChildPoundLogDao {
@Override
public List<OrderChildPoundLog> getPoundLogList(String childNo) {
return list(lQrWrapper().eq(OrderChildPoundLog::getChildNo,childNo));
return list(lQrWrapper().eq(OrderChildPoundLog::getChildNo,childNo).orderByDesc(OrderChildPoundLog::getId));
}
}
......@@ -92,5 +92,10 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
baseMapper.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, code);
}
@Override
public void saveBatchEntity(List<OrderGoods> orderGoodsList) {
baseMapper.saveBatchEntity(orderGoodsList);
}
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
import com.clx.performance.sqlProvider.OrderGoodsTruckBindSqlProvider;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import org.apache.ibatis.annotations.Param;
......@@ -50,4 +51,8 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
" order_goods_status = #{code} " +
" where order_goods_no = #{orderGoodsNo}")
void updateOrderGoodsStatusByOrderGoodsNo(@Param("orderGoodsNo") String orderGoodsNo, @Param("code") Integer code);
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "saveBatchEntity")
void saveBatchEntity(List<OrderGoods> orderGoodsList);
}
......@@ -10,6 +10,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Optional;
......@@ -31,8 +32,8 @@ public class OrderChildImage implements HasKey<Integer> {
private String childNo; //运单编号
private Integer type; //图片类型
private String image; //图片地址
private String createTime; //创建时间
private String modifiedTime; //修改时间
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
......
......@@ -8,6 +8,8 @@ import com.msl.common.model.HasKey;
import lombok.*;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 磅单日志表
......@@ -32,8 +34,8 @@ public class OrderChildPoundLog implements HasKey<Integer> {
private Integer createType; //操作人类型1-货主, 2-承运端,3-司机
private Long createBy; //操作人编号
private String createName; //操作人名称
private String createTime; //创建时间
private String modifiedTime; //修改时间
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
......
......@@ -2,12 +2,15 @@ package com.clx.performance.service.impl;
import com.clx.performance.dao.*;
import com.clx.performance.enums.*;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.OrderChildPoundAuditEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.*;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PoundAuditParam;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildPoundAuditService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.vo.pc.OrderChildPoundAuditDetailVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
......@@ -17,7 +20,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -43,6 +46,8 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsService orderGoodsService;
private final OrderChildLogService orderChildLogService;
......@@ -77,6 +82,8 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_STATUS_CHANGED);
}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
//磅单审核对象赋值
poundAuditDetail.setStatus(param.getStatus());
poundAuditDetail.setRejectType(param.getRejectType());
......@@ -98,6 +105,17 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
}
}
BigDecimal dif = orderChild.getLoadNet().subtract(orderChild.getWeight());
orderChild.setWeight(orderChildWeightCalc(orderChild));
orderChild.setFreight(orderChildFreightCalc(orderChild));
// 更新装车净重
updateOrderGoodsAmountLoad(orderGoods, dif);
//更新运单数据
orderChild.setPoundStatus(param.getStatus());
orderChildDao.updatePoundAuditStatus(orderChild);
//保存磅单审核数据
orderChildPoundAuditDao.saveEntity(poundAuditDetail);
......@@ -108,14 +126,52 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
//保存磅单审核日志数据
orderChildPoundLogDao.saveEntity(poundLog);
//更新运单数据
orderChild.setPoundStatus(param.getStatus());
orderChildDao.updatePoundAuditStatus(orderChild);
//保存运单日志数据
orderChildLogService.saveOrderChildLog(param.getChildNo(),type,OrderChildLogEnum.Type.getByCode(type).get().getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(), loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
/**
* 装车补偿
*/
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
if (dif.compareTo(BigDecimal.ZERO) == 0){return;}
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);
}
/**
* 运单拉运吨数计算
*/
public BigDecimal orderChildWeightCalc(OrderChild orderChild){
if (orderChild.getLoadNet() == null) {return orderChild.getTruckLoad();}
else {return orderChild.getLoadNet();}
}
/**
* 运费计算
*/
public BigDecimal orderChildFreightCalc(OrderChild orderChild){
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);
}
}
......@@ -108,18 +108,18 @@ public class OrderChildServiceImpl implements OrderChildService {
// 状态验证
if (!Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.PAYING.getCode())
&& !Objects.equals(orderGoods.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID1);
}
// 车型限制
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (StringUtils.isNotBlank(orderInfo.getTruckModelList())){
List<JSONObject> truckModelList = JSON.parseArray(orderInfo.getTruckModelList(), JSONObject.class);
List<String> truckModelNameList = truckModelList.stream().map(item -> item.getString("truckModelName")).collect(Collectors.toList());
if (!truckModelNameList.contains(driverTruckInfo.getModel())){
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_TRUCK_MODEL_ERROR);
}
}
// // 车型限制
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// if (StringUtils.isNotBlank(orderInfo.getTruckModelList())){
// List<JSONObject> truckModelList = JSON.parseArray(orderInfo.getTruckModelList(), JSONObject.class);
// List<String> truckModelNameList = truckModelList.stream().map(item -> item.getString("truckModelName")).collect(Collectors.toList());
// if (!truckModelNameList.contains(driverTruckInfo.getModel())){
// throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_TRUCK_MODEL_ERROR);
// }
// }
// 定向
OrderGoodsTruckBind orderGoodsTruckBind = orderGoodsTruckBindDao.getValidByOrderGoodsNoAndTruckNo(truckNo).orNull();
......@@ -383,14 +383,14 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateLoadFirst(OrderChildLoadParam param, OrderChild orderChild, OrderGoods orderGoods) {
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.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);
}
// // 装车时间验证
// 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<>();
for (String item : param.getLoadImageList()) {
......@@ -491,14 +491,14 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateUnloadFirst(OrderChildUnloadParam param, OrderChild orderChild) {
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);
}
// // 装车时间验证
// 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<>();
for (String item : param.getUnloadImageList()) {
......@@ -953,6 +953,8 @@ public class OrderChildServiceImpl implements OrderChildService {
* 装车补偿
*/
private void updateOrderGoodsAmountLoad(OrderGoods orderGoods, BigDecimal dif){
if (dif.compareTo(BigDecimal.ZERO) == 0){return;}
int count = orderChildDao.countValidByOrderGoodsNo(orderGoods.getOrderGoodsNo())-1;
Integer status = orderGoods.getOrderGoodsStatus();
......@@ -1007,7 +1009,7 @@ public class OrderChildServiceImpl implements OrderChildService {
*/
private boolean cancelCountCheck(Long userNo){
LocalDateTime startTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 00:00:00").get();
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 00:00:00").get();
LocalDateTime endTime = DateUtils.parseDateTime(DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd").get() + " 23:59:59").get();
long count = orderChildDao.countOfCancel(userNo, startTime, endTime);
......@@ -1018,7 +1020,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* 运单拉运吨数计算
*/
private BigDecimal orderChildWeightCalc(OrderChild orderChild){
if (orderChild.getUnloadNet() == null) {return orderChild.getTruckLoad();}
if (orderChild.getLoadNet() == null) {return orderChild.getTruckLoad();}
else {return orderChild.getLoadNet();}
}
......
......@@ -98,7 +98,7 @@ public class OrderChildSqlProvider {
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address= #{param.receiveAddress}");}
if (Objects.nonNull(param.getStatus())) {WHERE("pound_status = #{param.status}");}
ORDER_BY("unload_time desc,pound_status");
ORDER_BY("pound_status,unload_time");
}}.toString();
}
......
......@@ -5,6 +5,8 @@ import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.order.vo.feign.FeignPageOrderVO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import org.apache.commons.lang3.StringUtils;
......@@ -136,4 +138,34 @@ public class OrderGoodsSqlProvider {
return sqlList.toString();
}
public String saveBatchEntity( List<OrderGoods> orderGoodsList) {
StringBuffer sqlList = new StringBuffer();
sqlList.append("INSERT INTO order_goods(extract_weight,residue_transport_weight,already_transport_weight,loss_price,truck_demand,extract_way,\n" +
"need_truck_num,pending_order_way,pending_order_time,pending_order_freight,last_arrive_send_time,senior_logistics_manager_id,\n" +
"senior_logistics_manager_name,order_no,order_goods_no,order_goods_status,send_address_id,send_address_shorter,send_longitude,\n" +
"send_latitude,receive_latitude,receive_longitude,receive_address_id,receive_address_shorter,goods_name,goods_id,create_time,modified_time,\n" +
"user_name,user_no VALUES ");
for (int i = 0; i < orderGoodsList.size(); i++) {
OrderGoods o = orderGoodsList.get(i);
sqlList.append(" ('").append(o.getExtractWeight()).append("','").append(o.getResidueTransportWeight()).append("','").append(o.getAlreadyTransportWeight()).append("','")
.append(o.getLossPrice()).append("','").append(o.getTruckDemand()).append("','").append(o.getExtractWay()).append("','")
.append(o.getNeedTruckNum()).append("','").append(o.getPendingOrderWay()).append("','").append(o.getPendingOrderTime()).append("','")
.append(o.getPendingOrderFreight()).append("','").append(o.getLastArriveSendTime()).append("','").append(o.getSeniorLogisticsManagerId()).append("','")
.append(o.getSeniorLogisticsManagerName()).append("','").append(o.getOrderNo()).append("','").append(o.getOrderGoodsNo()).append("','")
.append(o.getOrderGoodsStatus()).append("','").append(o.getSendAddressId()).append("','").append(o.getSendAddressShorter()).append("','")
.append(o.getSendLongitude()).append("','").append(o.getReceiveLatitude()).append("','").append(o.getReceiveLongitude()).append("','")
.append(o.getReceiveAddressId()).append("','").append(o.getReceiveAddressShorter()).append("','").append(o.getGoodsName()).append("','")
.append(o.getGoodsId()).append("','").append(o.getCreateTime()).append("','").append(o.getModifiedTime()).append("','")
.append("')");
if (i < orderGoodsList.size() - 1) {
sqlList.append(",");
}
}
return sqlList.toString();
}
}
......@@ -2,12 +2,14 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
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.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.mapper.OrderGoodsMapper;
......@@ -25,13 +27,18 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 全部平台
*/
@Component("OneGoodsOrderStrategy")
@Slf4j
public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
......@@ -49,7 +56,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
OrderGoodsDao orderGoodsDao;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
......@@ -58,6 +65,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
private RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
......@@ -66,12 +74,14 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (residueWeight.compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
Map<String, LocalDateTime> mqMap = new HashMap<>();
List<OrderGoods> orderGoodsList = new LinkedList<>();
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2)) {
if (child.getNeedTruckNum() == null) {
......@@ -87,6 +97,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
orderGoods.setTruckDemand(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode());
//提取方式 1提取全部 2提取部分
......@@ -111,8 +122,8 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
orderGoods.setOrderNo(orderNo);
orderGoods.setOrderGoodsNo(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId);
......@@ -128,6 +139,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setReceiveAddressShorter(orderInfo.getReveiveAddressShorter());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setGoodsId(orderInfo.getGoodsNameId());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName(loginUserInfo.getUserName());
......@@ -137,18 +149,21 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
}
mqMap.put(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, postedTime);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
orderGoodsList.add(orderGoods);
}
BigDecimal subtract = orderInfo.getResidueWeight().subtract(childSum);
log.info("更新剩余订单量{}", subtract);
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(), subtract);
orderGoodsDao.saveBatchEntity(orderGoodsList);
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
param.setResidueWeight(residueWeight.subtract(childSum));
orderFeign.updateOrderInfoResidueWeight(param);
sendMq(mqMap, now);
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
public void afterPropertiesSet() {
goodsOrderStrategyContext.strategyContext.put(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode(), this);
}
......
......@@ -2,12 +2,14 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
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.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTypeEnum;
......@@ -28,13 +30,18 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 自由车辆
*/
@Component("ThreeGoodsOrderStrategy")
@Slf4j
public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
......@@ -50,7 +57,7 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
OrderGoodsDao orderGoodsDao;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
......@@ -62,6 +69,7 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
private RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
......@@ -70,7 +78,8 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (residueWeight.compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
}
if (childParamsList.size() > 1) {
......@@ -79,12 +88,16 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
Map<String, LocalDateTime> mqMap = new HashMap<>();
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
List<OrderGoods> orderGoodsList = new LinkedList<>();
for (OrderGoodsChildParams child : childParamsList) {
OrderGoods orderGoods = new OrderGoods();
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
orderGoods.setTruckDemand(TruckDemandEnum.TruckType.OWNER_CAR.getCode());
......@@ -112,11 +125,12 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
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());
......@@ -128,6 +142,8 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setReceiveAddressShorter(orderInfo.getReveiveAddressShorter());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setGoodsId(orderInfo.getGoodsNameId());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName(loginUserInfo.getUserName());
......@@ -139,17 +155,22 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
orderGoodsList.add(orderGoods);
}
orderGoodsDao.saveBatchEntity(orderGoodsList);
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(),orderInfo.getResidueWeight().subtract(childSum));
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("1");
param.setResidueWeight(residueWeight.subtract(childSum));
orderFeign.updateOrderInfoResidueWeight(param);
sendMq(mqMap, now);
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
goodsOrderStrategyContext.strategyContext.put(TruckDemandEnum.TruckType.OWNER_CAR.getCode(),this);
public void afterPropertiesSet() {
goodsOrderStrategyContext.strategyContext.put(TruckDemandEnum.TruckType.OWNER_CAR.getCode(), this);
}
public void sendMq(Map<String, LocalDateTime> mqMap, LocalDateTime now) {
......
......@@ -2,12 +2,14 @@ package com.clx.performance.strategy.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
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.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTypeEnum;
......@@ -22,19 +24,25 @@ import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 部分平台
*/
@Component("TwoGoodsOrderStrategy")
@Slf4j
public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
......@@ -50,7 +58,7 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
OrderGoodsService orderGoodsService;
@Autowired
OrderGoodsMapper orderGoodsMapper;
OrderGoodsDao orderGoodsDao;
@Autowired
private OrderFeign orderFeign;
......@@ -63,18 +71,27 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
private RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now) {
String orderNo = orderGoodsParams.getOrderNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime sendLazyTime = null;
List<OrderGoodsChildParams> childParamsList = orderGoodsParams.getOrderGoodsChildParams();
BigDecimal childSum = childParamsList.stream().map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal platSum = childParamsList.stream().filter(i -> "1".equals(i.getVehicleUsage())).map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
if (orderInfo.getResidueWeight().compareTo(childSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前货单总吨数已超订单总吨数");
BigDecimal ownSum = childParamsList.stream().filter(i -> !"1".equals(i.getVehicleUsage())).map(OrderGoodsChildParams::getExtractWeight).reduce(
BigDecimal.ZERO, BigDecimal::add);
BigDecimal platformCarryWeight = new BigDecimal(orderInfo.getPlatformCarryWeight());
if (platformCarryWeight.compareTo(platSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前平台承运货单总吨数已超平台承运订单总吨数");
}
BigDecimal ownCarryWeight = new BigDecimal(orderInfo.getOwnCarryWeight());
if (ownCarryWeight.compareTo(ownSum) < 0) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "当前自有承运货单总吨数已超自有承运订单总吨数");
}
Map<String, LocalDateTime> mqMap = new HashMap<>();
List<OrderGoods> orderGoodsList = new LinkedList<>();
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(OrderGoodsTypeEnum.Status.PLATFORM.getCode(), childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
......@@ -92,6 +109,8 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
//提取吨数
orderGoods.setExtractWeight(child.getExtractWeight());
orderGoods.setResidueTransportWeight(child.getExtractWeight());
orderGoods.setAlreadyTransportWeight(BigDecimal.ZERO);
orderGoods.setLossPrice(orderInfo.getLossPrice());
orderGoods.setTruckDemand(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode());
......@@ -117,11 +136,12 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setLastArriveSendTime(DateUtils.parseDateTime(child.getLastArriveSendTime()).get());
//定向运单失效时间
// orderGoods.setDirectionalExpireTime(DateUtils.parseDateTime(child.getDirectionalExpireTime()).get());
// orderGoods.setSeniorLogisticsManagerId(child.getSeniorLogisticsManagerId());
// orderGoods.setSeniorLogisticsManagerName(child.getSeniorLogisticsManagerName());
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());
......@@ -133,6 +153,8 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setReceiveAddressId(orderInfo.getReveiveAddressId());
orderGoods.setReceiveAddressShorter(orderInfo.getReveiveAddressShorter());
orderGoods.setGoodsName(orderInfo.getGoodsName());
orderGoods.setGoodsId(orderInfo.getGoodsNameId());
orderGoods.setCreateTime(now);
orderGoods.setModifiedTime(now);
orderGoods.setUserName(loginUserInfo.getUserName());
......@@ -143,16 +165,40 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
mqMap.put(OrderGoodsTypeEnum.Status.PLATFORM.getCode() + beginOrderGoodsId, postedTime);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsMapper.insert(orderGoods);
orderGoodsList.add(orderGoods);
}
orderGoodsDao.saveBatchEntity(orderGoodsList);
BigDecimal residueWeight = new BigDecimal(orderInfo.getResidueWeight());
if (platSum != null && ownSum != null) {
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("4");
param.setResidueWeight(residueWeight.subtract(platSum).subtract(ownSum));
param.setOwnWeight(ownSum);
param.setPlatWeight(platSum);
orderFeign.updateOrderInfoResidueWeight(param);
} else if (platSum != null && ownSum == null) {
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("2");
param.setResidueWeight(residueWeight.subtract(platSum));
param.setPlatWeight(platSum);
orderFeign.updateOrderInfoResidueWeight(param);
} else if (platSum != null && ownSum == null) {
UpdateOrderInfoResidueWeightParam param = new UpdateOrderInfoResidueWeightParam();
param.setOrderId(orderInfo.getId());
param.setUpdateType("3");
param.setResidueWeight(residueWeight.subtract(ownSum));
param.setOwnWeight(ownSum);
orderFeign.updateOrderInfoResidueWeight(param);
}
orderFeign.updateOrderInfoResidueWeight(orderInfo.getId(), orderInfo.getResidueWeight().subtract(childSum));
sendMq(mqMap, now);
return sendLazyTime;
}
@Override
public void afterPropertiesSet() throws Exception {
public void afterPropertiesSet() {
goodsOrderStrategyContext.strategyContext.put(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode(), this);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论