提交 1ea2f802 authored 作者: liruixin's avatar liruixin

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into…

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into v5.7_break_contract_reverse_20231020
......@@ -13,16 +13,16 @@ public enum OrderGoodsPendingVehicleUsageEnum {
@AllArgsConstructor
public enum Status {
PLATFORM_TRUCK("1", "平台车辆配货"),
PLATFORM_TRUCK(1, "平台车辆配货"),
OWN_TRUCK("2", "自有车辆配货"),
OWN_TRUCK(2, "自有车辆配货"),
;
private final String code;
private final Integer code;
private final String name;
public static Optional<Status> getByCode(String code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
public static Optional<Status> getByCode(String c) {
return Arrays.stream(values()).filter(e -> e.code.equals(c)).findFirst();
}
}
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum OrderGoodsStopEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
NO(0, "未暂停"),
YES(1, "已暂停")
;
private final Integer code;
private final String name;
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
......@@ -3,13 +3,17 @@ package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.OrderEnum;
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.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
......@@ -43,6 +47,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
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());
}
......@@ -51,7 +57,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
@XxlJob("OrderGoodsSuccess")
@Transactional(rollbackFor = Exception.class)
public void consuming() {
log.info("货单已完结定时器启动");
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(
......@@ -60,18 +66,18 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
//延时任务score最大值(当前时间)
);
if (orderGoodsIds == null) {
log.info("货单已完结定时器查询redis条数为null");
log.info("货单-最晚接单时间-定时器查询redis条数为null");
return;
}
if (orderGoodsIds.isEmpty()) {
log.info("货单已完结定时器查询redis条数为空");
log.info("货单-最晚接单时间-定时器查询redis条数为空");
return;
}
if (!CollectionUtil.isEmpty(orderGoodsIds)) {
log.info("货单已完结定时器查询redis条数:{}", orderGoodsIds.size());
log.info("货单-最晚接单时间-定时器查询redis条数:{}", orderGoodsIds.size());
for (ZSetOperations.TypedTuple<String> orderGoodsId : orderGoodsIds) {
log.info("货单" + orderGoodsId + "过了最晚拉运时间");
log.info("货单" + orderGoodsId + "过了最晚接单时间");
String orderGoodsNo = orderGoodsId.getValue();
log.info("处理当前货单编号:{}", orderGoodsNo);
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
......@@ -81,56 +87,47 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue;
}
OrderGoods orderGoods = optional.get();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
if (orderInfoFeign == null) {
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("当前货单编号未查询出订单数据,执行删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
continue;
} else {
log.info("当前货单编号已经查出数据{}", orderGoodsNo);
}
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())) {
log.info("当前货单状态判断为已完成");
} else {
log.info("当前货单状态判断不是已完成:货单状态为{}", 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);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight());
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChild(orderGoodsNo);
if (CollectionUtil.isEmpty(orderChildren)) {
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) {
//更新货单已完成
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)) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
if (OrderGoodsPendingVehicleUsageEnum.Status.PLATFORM_TRUCK.getCode().equals(orderGoods.getVehicleUsage())) {
}
} else {
if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) {
log.info("已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成");
//已完成的货单已经等于订单的拉运吨数,提前更新订单状态 已完成
}
orderFeign.rollbackOrderWeight(param);
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
BigDecimal residueTransportWeight = orderGoods.getResidueTransportWeight();
UpdateOrderInfoParam updateOrderInfoParam = new UpdateOrderInfoParam();
updateOrderInfoParam.setOrderId(orderInfoFeign.getId());
updateOrderInfoParam.setOrderStatus(OrderEnum.Status.SUCCESS.getCode());
orderFeign.updateOrderInfo(updateOrderInfoParam);
} else {
log.info("判断吨数不一致:childSum{}, transportWeight {}", childSum, new BigDecimal(orderInfoFeign.getTransportWeight()));
updateOrderInfoParam.setResidueWeight(residueTransportWeight.add(new BigDecimal(orderInfoFeign.getResidueWeight())));
updateOrderInfoParam.setVehicleUsage(orderGoods.getVehicleUsage());
log.info("订单ID:{},返还订单剩余吨数{}", orderInfoFeign.getId(), residueTransportWeight);
//返还订单剩余吨数
orderFeign.updateOrderInfo(updateOrderInfoParam);
}
} else {
log.info("当前货单状态为已完结");
//更新货单已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
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);
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsNo);
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsId.getValue());
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
......
......@@ -79,4 +79,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
);
List<OrderChild> selectResidueWeight(String orderNo);
/**
* 查询在途运单
* @param orderGoodsNo
* @return
*/
List<OrderChild> selectInTransitOrderChild(String orderGoodsNo);
}
......@@ -265,6 +265,15 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
);
}
@Override
public List<OrderChild> selectInTransitOrderChild(String orderGoodsNo) {
//查询小于 100(完成)的运单都属于在途
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.lt(OrderChild::getStatus, OrderChildEnum.Status.COMPLETE.getCode())
);
}
@Override
public List<OrderChild> getOrderChildByOrderNo(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
......
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
......@@ -85,6 +86,8 @@ public class OrderChild implements HasKey<Integer> {
private LocalDateTime expectSendTime; //预计到达货源地时间
private LocalDateTime expectReceiveTime; //预计到达目的地时间
private String settlementAccountPeriod; //结算账期 1拉运完成结 2月结
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -165,6 +165,15 @@ public class OrderGoods implements HasKey<Integer> {
@ApiModelProperty("创建人姓名")
private String userName;
@TableField("settlement_account_period")
@ApiModelProperty("结算账期 1拉运完成结 2月结")
private String settlementAccountPeriod;
@TableField("stop_flag")
@ApiModelProperty("是否暂停 0:否 1:是")
private Integer stopFlag;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
......
......@@ -1278,7 +1278,7 @@ public class OrderChildServiceImpl implements OrderChildService {
if (count > 1) {return;}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
//orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
}
......
......@@ -3,6 +3,8 @@ package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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 org.apache.commons.lang3.StringUtils;
......@@ -91,10 +93,10 @@ public class OrderGoodsSqlProvider {
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," +
"a.user_no,a.user_name");
FROM("order_goods a");
WHERE("a.pending_order_way = 1");
WHERE("a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode());
WHERE("a.pending_order_way = " + PendingOrderWayStatusEnum.Status.GK.getCode());
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status = 20 or a.order_goods_status = 30)");
WHERE("(a.order_goods_status = "+OrderGoodsStatusEnum.Status.PAYING.getCode()+" or a.order_goods_status = "+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >0");
ORDER_BY("a.pending_order_time desc");
}}.toString();
......@@ -117,9 +119,11 @@ public class OrderGoodsSqlProvider {
"date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," +
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name," +
"a.pending_order_freight,a.user_no,a.user_name from order_goods a where a.last_arrive_send_time >= now() and (a.order_goods_status = 20 or a.order_goods_status = 30)" +
"a.pending_order_freight,a.user_no,a.user_name from order_goods a " +
"where a.stop_flag = "+ OrderGoodsStopEnum.Status.NO.getCode()+" and a.last_arrive_send_time >= now() and (a.order_goods_status = "+OrderGoodsStatusEnum.Status.PAYING.getCode()+
" or a.order_goods_status = "+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")" +
"and a.residue_transport_weight > 0" +
" and a.pending_order_way = 2 and a.order_goods_no in (");
" and a.pending_order_way = "+ PendingOrderWayStatusEnum.Status.DX.getCode() +" and a.order_goods_no in (");
if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) {
......
......@@ -158,7 +158,7 @@ public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements Initial
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduce(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.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduce(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.getLastArriveSendTime(), orderGoodsNo);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastOrderTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论