提交 0377945b authored 作者: 刘海泉's avatar 刘海泉

commit

上级 f165da27
package com.clx.performance.component; package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao; import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
...@@ -30,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -30,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/** /**
* 货单最晚接单时间、最晚到达货源地时间处理 * 货单最晚接单时间、最晚到达货源地时间处理
...@@ -90,7 +93,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -90,7 +93,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
public void consumingLastOrderTime() { public void consumingLastOrderTime() {
log.info("货单-最晚接单时间-定时器启动"); log.info("货单-最晚接单时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis(); long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores( Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME,
0, nowTimeMillis //延时任务score最小值 0, nowTimeMillis //延时任务score最小值
...@@ -118,9 +120,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -118,9 +120,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue; continue;
} }
OrderGoods orderGoods = optional.get(); OrderGoods orderGoods = optional.get();
// if(Objects.equals(orderGoods.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CANCEL.getCode())){
// continue;
// }
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) { if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo); List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
...@@ -134,33 +133,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -134,33 +133,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} }
} else { } else {
OrderGoods update = new OrderGoods(); OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId()); update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//大于35吨的归还吨数在这里处理
if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
if (orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())
|| orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderFeign.rollbackOrderWeight(param);
//更新剩余吨数
update.setResidueTransportWeight(BigDecimal.ZERO);
}
//更新已完结 //更新已完结
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue()); log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
...@@ -238,35 +214,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -238,35 +214,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统自动取消,未按照最晚装货时间到达货源地", now, now, childNoList); orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统自动取消,未按照最晚装货时间到达货源地", now, now, childNoList);
} }
//更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(childSum);
//当前情况需要回填订单的余量
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
//只更新货单已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
orderFeign.rollbackOrderWeight(param);
} else {
//只更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue()); redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
......
...@@ -166,7 +166,7 @@ public class OrderChildDtsListener { ...@@ -166,7 +166,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态"); Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo()); child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态 }else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo()); child = lastTruckService.getOrderLastTruck(after.getOrderNo());
} }
if (Objects.nonNull(child)) { if (Objects.nonNull(child)) {
log.info("开始同步新货主客户端最后一车的运单,运单编号:{}", child.getChildNo()); log.info("开始同步新货主客户端最后一车的运单,运单编号:{}", child.getChildNo());
......
...@@ -57,7 +57,7 @@ public class OrderGoodsDtsListener { ...@@ -57,7 +57,7 @@ public class OrderGoodsDtsListener {
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after)); log.info("修改:{}",JSON.toJSONString(after));
backFillOrderWeight(after); //backFillOrderWeight(after);
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode()); syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
......
...@@ -90,16 +90,24 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -90,16 +90,24 @@ public class LastTruckServiceImpl implements LastTruckService {
return result; return result;
} }
//在没有算出最后一车的前提下,订单变成已完结或者已完成状态,但是订单量可能并没有提取完,所以只需要判断订单下是否还有未到达 目的地的运单,没有则进行最后一车运算
@Override @Override
public OrderChild getOrderCompleteLastTruck(String orderNo) { public OrderChild getOrderCompleteLastTruck(String orderNo) {
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单 String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
Long count = orderChildDao.haveArriveReceiveChild(orderNo); //已经计算出最后一车,则直接返回运单信息
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count); if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
if(count == 0 ){ String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车 return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
return orderChildDao.getOrderCompleteLastTruck(orderNo); }else{
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单
Long count = orderChildDao.haveArriveReceiveChild(orderNo);
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count);
if(count == 0 ){
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车
return orderChildDao.getOrderCompleteLastTruck(orderNo);
}
return null;
} }
return null;
} }
......
...@@ -2014,7 +2014,12 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2014,7 +2014,12 @@ public class OrderChildServiceImpl implements OrderChildService {
orderGoodsStatus = orderGoods.getOrderGoodsStatus(); orderGoodsStatus = orderGoods.getOrderGoodsStatus();
} }
if (dif.compareTo(BigDecimal.ZERO) != 0) { if (dif.compareTo(BigDecimal.ZERO) != 0) {
//判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
//运单修改装车吨数,从货单进行扣减
log.info("货单号:{},运单号 :{},扣减吨数:{}",orderGoods.getOrderGoodsNo(),childNo, dif);
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
/* //判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) { if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
//货单吨数不够扣减,从订单进行借吨数 //货单吨数不够扣减,从订单进行借吨数
orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif, orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif,
...@@ -2023,7 +2028,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2023,7 +2028,7 @@ public class OrderChildServiceImpl implements OrderChildService {
log.info("货单吨数有剩余,归还吨数:{}", dif); log.info("货单吨数有剩余,归还吨数:{}", dif);
// 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态 // 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus); orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
} }*/
} }
} }
......
...@@ -118,7 +118,7 @@ public class OrderGoodsSqlProvider { ...@@ -118,7 +118,7 @@ public class OrderGoodsSqlProvider {
} }
WHERE("a.last_arrive_send_time >= now()"); WHERE("a.last_arrive_send_time >= now()");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")"); WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35"); WHERE("a.residue_transport_weight > 0");
ORDER_BY("a.pending_order_time desc"); ORDER_BY("a.pending_order_time desc");
}}.toString(); }}.toString();
return sql; return sql;
...@@ -134,7 +134,7 @@ public class OrderGoodsSqlProvider { ...@@ -134,7 +134,7 @@ public class OrderGoodsSqlProvider {
WHERE(" a.pending_order_way = " + PendingOrderWayStatusEnum.Status.FLEET_GK.getCode()); WHERE(" a.pending_order_way = " + PendingOrderWayStatusEnum.Status.FLEET_GK.getCode());
WHERE("a.last_arrive_send_time >= now()"); WHERE("a.last_arrive_send_time >= now()");
WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")"); WHERE("a.order_goods_status IN ( "+OrderGoodsStatusEnum.Status.PAYING.getCode()+","+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >=35"); WHERE("a.residue_transport_weight > 0");
WHERE("b.id is not null"); WHERE("b.id is not null");
}}.toString(); }}.toString();
return sql; return sql;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论