提交 a43cbc36 authored 作者: huyufan's avatar huyufan

逆向

上级 1d5ee5da
package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.param.feign.UpdateOrderInfoParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.OrderGoodsPendingVehicleUsageEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
......@@ -28,10 +27,11 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
*
*/
@Component
@Slf4j
@AllArgsConstructor
......@@ -49,19 +49,27 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final OrderChildDao orderChildDao;
public void expireProduce(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
//根据货单最晚接单时间处理的
public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
}
public void expireProduceByLastArriveSendTime(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
}
/**
* 根据货单最晚接单时间处理的
*/
@XxlJob("OrderGoodsSuccess")
@Transactional(rollbackFor = Exception.class)
public void consuming() {
public void consumingLastOrderTime() {
log.info("货单-最晚接单时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY,
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME,
0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间)
);
......@@ -82,7 +90,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
log.info("处理当前货单编号:{}", orderGoodsNo);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsId.getValue());
log.info("当前货单编号未查询出货单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
}
......@@ -94,53 +102,135 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
//更新货单已完成
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else {
//更新已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
if (orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())
|| orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
if (OrderGoodsPendingVehicleUsageEnum.Status.PLATFORM_TRUCK.getCode().equals(orderGoods.getVehicleUsage())) {
}
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);
//更新已完结,并设置剩余吨数为0
orderGoodsDao.updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(orderGoods.getId(), OrderGoodsStatusEnum.Status.COMPLETED.getCode());
}
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
} else {
log.info("当前还存在正在拉运的运单,推测一天再进行逻辑处理");
expireProduceByLastOrderTime(LocalDateTime.now().plusDays(1), orderGoodsNo);
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsId.getValue());
BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight();
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setResidueWeight(residueTransportWeight.add(new BigDecimal(orderInfoFeign.getResidueWeight())));
updateOrderInfoParam.setVehicleUsage(orderGoods.getVehicleUsage());
}
}
}
log.info("订单ID:{},返还订单剩余吨数{}", orderInfoFeign.getId(), residueTransportWeight);
//返还订单剩余吨数
orderFeign.updateOrderInfo(updateOrderInfoParam);
}
/**
* 最晚到达货源地运单关闭
*/
@XxlJob("OrderChildCancel")
@Transactional(rollbackFor = Exception.class)
public void consumingLastArriveSendTime() {
log.info("货单-最晚到达货源地时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME,
0, nowTimeMillis //延时任务score最小值
//延时任务score最大值(当前时间)
);
if (orderGoodsIds == null) {
log.info("货单-最晚到达货源地时间-定时器查询redis条数为null");
return;
}
if (orderGoodsIds.isEmpty()) {
log.info("货单-最晚到达货源地时间-定时器查询redis条数为空");
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);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
log.info("当前货单编号未查询出货单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
OrderGoods orderGoods = optional.get();
List<OrderChild> orderChildrenList = orderChildDao.selectInTransitOrderChild(orderGoodsNo);
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
BigDecimal childSum = BigDecimal.ZERO;
for (OrderChild orderChild : orderChildrenList) {
childSum.add(orderChild.getWeight());
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.OWNER_CANCEL.getCode());
//TODO 补充批量更新接口 关闭运单状态
orderChildDao.updateEntityByKey(update);
}
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) {
//当前情况需要回填订单的余量
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);
}
}
orderFeign.rollbackOrderWeight(param);
} else {
//只更新货单未拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeight(childSum, orderGoods.getId());
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
}
}
}
@Override
public void afterPropertiesSet() throws Exception {
Optional<List<OrderGoods>> optional = orderGoodsDao.getOrderGoodsList();
if (optional.isPresent()) {
for (OrderGoods orderGoods : optional.get()) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoods.getOrderGoodsNo(), orderGoods.getLastArriveSendTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
//处理最晚接单时间,货单处理,并回退吨数
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoods.getOrderGoodsNo(), orderGoods.getLastOrderTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
//处理最晚到达货源地,运单取消处理,并回退吨数
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoods.getOrderGoodsNo(), orderGoods.getLastArriveSendTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
}
}
}
......
......@@ -19,7 +19,10 @@ public class RedisConstants {
public static final String CARRIER_ORDER_NUM_POOL_KEY = "clx-performance:order:orderNumPool:{date}";
public static final String ORDER_GOODS_STATUS_LAZY = "clx:order:goods:status:lazy:";
public static final String ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME = "clx:order:goods:status:lazy:lastOrderTime";
public static final String ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME = "clx:order:goods:status:lazy:lastOrderTime";
public static final String ORDER_GOODS_TRUCK_RECORD = "clx:order:goods:truck:record:";
public static final String ORDER_GOODS_RECORD = "clx:order:goods:record:";
......
......@@ -56,4 +56,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> listIntegralOrderGoodsSync();
boolean updatePendingOrderFreightById(Integer id, BigDecimal pendingOrderFreight);
boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status);
Integer updateOrderGoodsSetResidueWeight(BigDecimal residueWeight, Integer id);
}
......@@ -149,4 +149,17 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
public boolean updatePendingOrderFreightById(Integer id, BigDecimal pendingOrderFreight) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,id).set(OrderGoods :: getPendingOrderFreight,pendingOrderFreight));
}
@Override
public boolean updateOrderGoodsStatusAndRollbackResidueWeightByOrderGoodsNo(Integer orderGoodsId, Integer status) {
return update(lUdWrapper().eq(OrderGoods :: getGoodsId,orderGoodsId)
.set(OrderGoods :: getOrderGoodsStatus, status)
.set(OrderGoods::getResidueTransportWeight, BigDecimal.ZERO))
;
}
@Override
public Integer updateOrderGoodsSetResidueWeight(BigDecimal residueWeight, Integer id) {
return baseMapper.updateOrderGoodsSetResidueWeight(residueWeight,id);
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
......@@ -12,6 +13,7 @@ import com.clx.performance.vo.pc.OrderGoodsVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import java.math.BigDecimal;
import java.util.List;
......@@ -55,4 +57,6 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "saveBatchEntity")
void saveBatchEntity(List<OrderGoods> orderGoodsList);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeight")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "residueWeight") BigDecimal residueWeight, @Param(value = "id") Integer id);
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsStopEnum;
import com.clx.performance.enums.PendingOrderWayStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
......@@ -170,4 +173,14 @@ public class OrderGoodsSqlProvider {
return sqlList.toString();
}
public String updateOrderGoodsSetResidueWeight(@Param(value ="residueWeight") BigDecimal residueWeight,@Param(value ="id") Integer id){
String sql = new SQL() {{
UPDATE("order_goods")
.SET("residue_weight = residue_weight + #{residueWeight}")
.WHERE("id = #{id}");
}}.toString();
return sql;
}
}
......@@ -158,7 +158,7 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastOrderTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......
......@@ -172,7 +172,7 @@ public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements Initi
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
}
mqMap.put(orderNoPrefix + beginOrderGoodsId, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastOrderTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
......
......@@ -166,7 +166,7 @@ public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastOrderTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduceByLastOrderTime(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论