提交 37e003b0 authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v4.9_create_goods_child_20230918' into test

...@@ -9,12 +9,14 @@ import com.clx.performance.dao.OrderGoodsDao; ...@@ -9,12 +9,14 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderGoodsStatusEnum; import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations; import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -41,7 +43,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -41,7 +43,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} }
@XxlJob("OrderGoodsSuccess")
@Transactional(rollbackFor = Exception.class)
public void consuming() { public void consuming() {
log.info("货单已完结定时器启动");
long nowTimeMillis = System.currentTimeMillis(); long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime(); LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = stringRedisTemplate.opsForZSet().rangeByScoreWithScores( Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = stringRedisTemplate.opsForZSet().rangeByScoreWithScores(
...@@ -49,36 +54,50 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -49,36 +54,50 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
0, nowTimeMillis //延时任务score最小值 0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间) //延时任务score最大值(当前时间)
); );
if (orderGoodsIds == null) {
log.info("货单已完结定时器查询redis条数为null");
return;
}
if (!CollectionUtil.isEmpty(orderGoodsIds)) { if (!CollectionUtil.isEmpty(orderGoodsIds)) {
log.info("货单已完结定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) { for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚拉运时间"); log.info("货单" + orderGoodsId + "过了最晚拉运时间");
String orderGoodsNo = orderGoodsId.getValue(); String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo()); 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); List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(orderGoods.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) { if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) {
//补充更新订单状态 已完成 log.info("已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成");
//已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam(); UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId()); updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setOrderStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode()); updateOrderInfoParam.setOrderStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderFeign.updateOrderInfo(updateOrderInfoParam); orderFeign.updateOrderInfo(updateOrderInfoParam);
} }
} else { } else {
//更新货单已完结,并返还货单吨数 log.info("当前货单状态为已完结");
//更新货单已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight(); BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight();
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam(); UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId()); updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setResidueWeight(residueTransportWeight); updateOrderInfoParam.setResidueWeight(residueTransportWeight);
log.info("订单ID:{},返还订单剩余吨数{}", orderInfoFeign.getId(), residueTransportWeight);
//返还订单剩余吨数 //返还订单剩余吨数
orderFeign.updateOrderInfo(updateOrderInfoParam); orderFeign.updateOrderInfo(updateOrderInfoParam);
} }
stringRedisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue()); 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, ...@@ -108,7 +108,9 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
@Override @Override
public List<OrderGoods> getOrderGoodsListByOrderNoAndLastArriveSendTime(String orderNo, LocalDateTime lastArriveSendTime) { public List<OrderGoods> getOrderGoodsListByOrderNoAndLastArriveSendTime(String orderNo, LocalDateTime lastArriveSendTime) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo) return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
.eq(OrderGoods::getOrderGoodsStatus, OrderGoodsStatusEnum.Status.SUCCESS.getCode())
.le(OrderGoods::getLastArriveSendTime, lastArriveSendTime) .le(OrderGoods::getLastArriveSendTime, lastArriveSendTime)
); );
} }
......
...@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; ...@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -167,11 +168,11 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -167,11 +168,11 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
if (orderChild.getUnloadNet() != null){ if (orderChild.getUnloadNet() != null){
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight()); BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){ 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 { ...@@ -1051,11 +1051,11 @@ public class OrderChildServiceImpl implements OrderChildService {
if (orderChild.getUnloadNet() != null){ if (orderChild.getUnloadNet() != null){
BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight()); BigDecimal dif = orderChild.getUnloadNet().subtract(orderChild.getWeight());
if (dif.compareTo(BigDecimal.ZERO) < 0){ 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);
} }
...@@ -1177,6 +1177,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1177,6 +1177,7 @@ public class OrderChildServiceImpl implements OrderChildService {
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(new BigDecimal("0")) OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(0).historyLoadWeight(new BigDecimal("0"))
.completeCarryWeight(new BigDecimal("0")).loseWeight(new BigDecimal("0")).loseRate(new BigDecimal("0")) .completeCarryWeight(new BigDecimal("0")).loseWeight(new BigDecimal("0")).loseRate(new BigDecimal("0"))
.overRate(new BigDecimal("0")).build(); .overRate(new BigDecimal("0")).build();
return vo;
} }
...@@ -1203,18 +1204,19 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -1203,18 +1204,19 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal loseWeight = BigDecimal.ZERO; BigDecimal loseWeight = BigDecimal.ZERO;
BigDecimal overWeight = BigDecimal.ZERO; BigDecimal overWeight = BigDecimal.ZERO;
if(complateCarryWeight.subtract(historyLoadWeight).compareTo(BigDecimal.ZERO) <= 0){ //卸车总量 大于 装车总量
if(complateCarryWeight.subtract(historyLoadWeight).compareTo(BigDecimal.ZERO) >= 0){
overWeight = complateCarryWeight.subtract(historyLoadWeight); //超吨 overWeight = complateCarryWeight.subtract(historyLoadWeight); //超吨
}else{ }else{
loseWeight = complateCarryWeight.subtract(historyLoadWeight);//亏吨 loseWeight = historyLoadWeight.subtract(complateCarryWeight);//亏吨
} }
BigDecimal loseRate = BigDecimal.ZERO; BigDecimal loseRate = BigDecimal.ZERO;
BigDecimal overRate = BigDecimal.ZERO; BigDecimal overRate = BigDecimal.ZERO;
//亏吨率 //亏吨率
if(historyLoadWeight.compareTo(BigDecimal.ZERO) != 0){ if(historyLoadWeight.compareTo(BigDecimal.ZERO) != 0){
loseRate = loseWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP); loseRate = loseWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
overRate = overWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP); overRate = overWeight.divide(historyLoadWeight,2,RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
} }
OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(complateNum).historyLoadWeight(historyLoadWeight).completeCarryWeight(complateCarryWeight) OrderChildBussInfoVO vo = OrderChildBussInfoVO.builder().completeNum(complateNum).historyLoadWeight(historyLoadWeight).completeCarryWeight(complateCarryWeight)
.loseWeight(loseWeight).loseRate(loseRate).overRate(overRate).build(); .loseWeight(loseWeight).loseRate(loseRate).overRate(overRate).build();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论