提交 2c9c66d2 authored 作者: huyufan's avatar huyufan

增加货单失效逻辑处理

上级 d8554657
......@@ -46,6 +46,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
@XxlJob("OrderGoodsSuccess")
@Transactional(rollbackFor = Exception.class)
public void consuming() {
log.info("货单已完结定时器启动");
long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = stringRedisTemplate.opsForZSet().rangeByScoreWithScores(
......@@ -53,36 +54,50 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间)
);
if (orderGoodsIds == null) {
log.info("货单已完结定时器查询redis条数为null");
return;
}
if (!CollectionUtil.isEmpty(orderGoodsIds)) {
log.info("货单已完结定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚拉运时间");
String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
if (!OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderInfoFeign.getOrderStatus()) && OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())) {
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())) {
log.info("当前货单状态为已完成");
//如果当前货单已完成,则判断之前所有货单是否等于订单总吨数,等于则更新订单为已完成
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(orderGoods.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) {
//补充更新订单状态 已完成
log.info("已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成");
//已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setOrderStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderFeign.updateOrderInfo(updateOrderInfoParam);
}
} else {
//更新货单已完结,并返还货单吨数
log.info("当前货单状态为已完结");
//更新货单已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight();
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setResidueWeight(residueTransportWeight);
log.info("订单ID:{},返还订单剩余吨数{}", orderInfoFeign.getId(), residueTransportWeight);
//返还订单剩余吨数
orderFeign.updateOrderInfo(updateOrderInfoParam);
}
stringRedisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
}
}
}
......
......@@ -108,7 +108,9 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
@Override
public List<OrderGoods> getOrderGoodsListByOrderNoAndLastArriveSendTime(String orderNo, LocalDateTime lastArriveSendTime) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
.eq(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.SUCCESS.getCode())
.le(OrderGoods::getLastArriveSendTime, lastArriveSendTime)
);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论