提交 460ac136 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
......@@ -9,12 +9,14 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -41,7 +43,10 @@ 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(
......@@ -49,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)
);
}
......
......@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -167,11 +168,11 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
if (orderChild.getUnloadNet() != null){
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){
totalFreight.subtract(orderChild.getLossPrice().multiply(dif));
totalFreight = totalFreight.add(orderChild.getLossPrice().multiply(dif));
}
}
return totalFreight.setScale(0, BigDecimal.ROUND_HALF_UP);
return totalFreight.setScale(0, RoundingMode.HALF_UP);
}
}
......@@ -1051,11 +1051,11 @@ public class OrderChildServiceImpl implements OrderChildService {
if (orderChild.getUnloadNet() != null){
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){
totalFreight.subtract(orderChild.getLossPrice().multiply(dif));
totalFreight = totalFreight.add(orderChild.getLossPrice().multiply(dif));
}
}
return totalFreight.setScale(0, BigDecimal.ROUND_HALF_UP);
return totalFreight.setScale(0, RoundingMode.HALF_UP);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论