提交 63633bb2 authored 作者: liuhaiquan's avatar liuhaiquan

添加最后一车的逻辑

上级 a10cf365
...@@ -16,6 +16,7 @@ import com.msl.common.base.Optional; ...@@ -16,6 +16,7 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
...@@ -126,4 +127,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -126,4 +127,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo); List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo);
OrderChild findLastTruckChild(String orderNo); OrderChild findLastTruckChild(String orderNo);
BigDecimal listAfterArrayReceiveChild(String orderNo);
OrderChild getLastTruckChild(String orderNo);
} }
...@@ -22,6 +22,7 @@ import com.msl.common.dao.impl.BaseDaoImpl; ...@@ -22,6 +22,7 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
...@@ -389,4 +390,18 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -389,4 +390,18 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.orderByDesc(OrderChild::getCreateTime) .orderByDesc(OrderChild::getCreateTime)
.last("limit 1")); .last("limit 1"));
} }
@Override
public BigDecimal listAfterArrayReceiveChild(String orderNo) {
return baseMapper.listAfterArrayReceiveChild(orderNo);
}
@Override
public OrderChild getLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.ge(OrderChild::getStatus,OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
.le(OrderChild::getStatus,OrderChildEnum.Status.COMPLETE.getCode())
.orderByDesc(OrderChild::getArriveReceiveTime)
.last("limit 1"));
}
} }
...@@ -9,13 +9,12 @@ import com.clx.order.feign.OrderFeign; ...@@ -9,13 +9,12 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.MslAppConfig; import com.clx.performance.config.MslAppConfig;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO; import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum; import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.DtsMapConvertUtil; import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -25,11 +24,6 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; ...@@ -25,11 +24,6 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
...@@ -43,10 +37,12 @@ public class OrderChildDtsListener { ...@@ -43,10 +37,12 @@ public class OrderChildDtsListener {
@Autowired @Autowired
private OrderFeign orderFeign; private OrderFeign orderFeign;
@Autowired @Autowired
private OrderGoodsDao orderGoodsDao; LastTruckService lastTruckService;
@Autowired @Autowired
private OrderChildDao orderChildDao; OrderChildStruct orderChildStruct;
@RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE) @RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE)
public void onMessage(Message message) { public void onMessage(Message message) {
...@@ -96,22 +92,22 @@ public class OrderChildDtsListener { ...@@ -96,22 +92,22 @@ public class OrderChildDtsListener {
after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode()); after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode());
} }
after.setLastFlag(ResultStatusEnum.NO.getCode()); after.setLastFlag(ResultStatusEnum.NO.getCode());
long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
//如果当前货单已完成,则判断之前所有货单是否等于订单总吨数,等于则更新订单为已完成
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(after.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight());
if (childSum.compareTo(orderInfoFeign.getTransportWeight()) == 0) {
// 按照时间 倒序查出最后一条进行中的运单
OrderChild orderChild = orderChildDao.getGoingLatestOrderChildByOrderNo(after.getOrderNo());
if(Objects.nonNull(orderChild) && orderChild.getChildNo().equals(after.getChildNo())){
after.setLastFlag(ResultStatusEnum.YES.getCode());
}
}
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret()); OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic()); Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic());
log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result)); log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
//当运单状态为到达目的地时候,需要判断最后一车的逻辑
if(Objects.equals(after.getStatus(),OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())){
OrderChild child = lastTruckService.getLastTruckChild(after.getOrderNo());
if(Objects.nonNull(child)){
log.info("开始同步最后一车的运单,运单编号:{}",child.getChildNo());
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(after),after.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
}
}
} }
} }
......
...@@ -16,6 +16,7 @@ import com.clx.performance.vo.pc.PageCarrierOrderChildVO; ...@@ -16,6 +16,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.*; import org.apache.ibatis.annotations.*;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -48,4 +49,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -48,4 +49,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus") @UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark, @Param(value = "ids") List<Integer> ids); Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark, @Param(value = "ids") List<Integer> ids);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "listAfterArrayReceiveChild")
BigDecimal listAfterArrayReceiveChild(@Param(value = "orderNo")String orderNo);
} }
\ No newline at end of file
package com.clx.performance.service.impl; package com.clx.performance.service.impl;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService; import com.clx.performance.service.LastTruckService;
import com.clx.user.enums.SyncPlatformEnum;
import com.msl.common.exception.ServiceSystemException;
import groovy.util.logging.Slf4j;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -32,7 +26,6 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -32,7 +26,6 @@ public class LastTruckServiceImpl implements LastTruckService {
private final OrderFeign orderFeign; private final OrderFeign orderFeign;
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final OrderGoodsDao orderGoodsDao;
/** /**
* @Author kavin * @Author kavin
* @Description 判断最后一车的逻辑 * @Description 判断最后一车的逻辑
...@@ -41,26 +34,20 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -41,26 +34,20 @@ public class LastTruckServiceImpl implements LastTruckService {
**/ **/
@Override @Override
public OrderChild getLastTruckChild(String orderNo) { public OrderChild getLastTruckChild(String orderNo) {
//判断订单是否已经完结
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){ if(Objects.isNull(orderInfo)){
log.error("计算最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null; return null;
} }
if(!Objects.equals(orderInfo.getOrderSource(), SyncPlatformEnum.TRADE_PLATFORM.getCode())){ BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
return null; //判断当前订单下所有到达目的地之后的运单的装车吨数 + 向下浮动量 >= 订单拉运吨数
} log.info("订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 向下浮动量:{},订单拉运吨数:{}",
//已完结直接按照时间顺序查找最后一个运单 orderNo,weight,orderInfo.getDownFloatWeight(),orderInfo.getTransportWeight());
if(Objects.equals(orderInfo.getOrderStatus(), OrderEnum.Status.COMPLETED.getCode()) || if(Objects.nonNull(weight) && weight.add(new BigDecimal(orderInfo.getDownFloatWeight())).compareTo(orderInfo.getTransportWeight()) >= 0){
Objects.equals(orderInfo.getOrderStatus(), OrderEnum.Status.SUCCESS.getCode()) //查询最后一车的运单
){ OrderChild child = orderChildDao.getLastTruckChild(orderNo);
return orderChildDao.findLastTruckChild(orderNo); log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
}else{ //未完结,判断所有货单的已拉运的吨数是否等于 订单的拉运吨数-向下浮动量 return child;
BigDecimal alreadyTransprotWeight = orderGoodsDao.getAlreadyTransportWeight(orderNo);
//查询所有货单的已拉运吨数 + 向下浮动量 >= 订单的承运吨数 (满足此情况查找最后一单)
if(Objects.nonNull(alreadyTransprotWeight) &&
alreadyTransprotWeight.add(new BigDecimal(orderInfo.getDownFloatWeight())).compareTo(orderInfo.getTransportWeight()) >= 0){
return orderChildDao.findLastTruckChild(orderNo);
}
} }
return null; return null;
} }
......
...@@ -142,4 +142,16 @@ public class OrderChildSqlProvider { ...@@ -142,4 +142,16 @@ public class OrderChildSqlProvider {
sqlList.append(")"); sqlList.append(")");
return sqlList.toString(); return sqlList.toString();
} }
public String listAfterArrayReceiveChild(String orderNo){
String sql = new SQL() {{
SELECT("sum(load_net)");
FROM("order_child ");
WHERE("order_no = #{orderNo}");
WHERE("status >=" + OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
WHERE("status <=" + OrderChildEnum.Status.COMPLETE.getCode());
}}.toString();
return sql;
}
} }
package com.clx.performance.struct; package com.clx.performance.struct;
import com.clx.open.sdk.callback.message.OrderChildMessage;
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.GoingOrderChildVO;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
...@@ -23,5 +24,8 @@ public interface OrderChildStruct { ...@@ -23,5 +24,8 @@ public interface OrderChildStruct {
GoingOrderChildVO convertGoingOrder(OrderChild item); GoingOrderChildVO convertGoingOrder(OrderChild item);
OrderChildMessage convertMessage(OrderChild item);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论