提交 350f2a8c authored 作者: aiqingguo's avatar aiqingguo

Merge branch 'v5.2_goods_child_optimize_20231008'

# Conflicts: # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
......@@ -7,7 +7,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;
@FeignClient(name = "clx-performance")
public interface PerformanceFeign {
......@@ -18,6 +20,7 @@ public interface PerformanceFeign {
* @param orderGoodsNo
* @return
*/
@Deprecated
@GetMapping(value = {"clx-performance/feign/orderGoodsDriverTruck/getTrucksByOrderGoodsNo"})
Result<List<Integer>> getTrucksByOrderGoodsNo(@RequestParam("orderGoodsNo") @NotBlank(message = "货单编号不可为空") String orderGoodsNo);
......@@ -27,4 +30,23 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/orderGoods/getOrderGoodsListByOrderNo"})
List<OrderGoodsFeignVO> getOrderGoodsListByOrderNo(@RequestParam String orderNo);
/**
* 公开货源调用
*
* @return
*/
@GetMapping(value = {"clx-performance/feign/orderGoodsDriverTruck/getPublicTruckList"})
Result<Set<String>> getPublicTruckList();
/**
* 定向货源调用
*
* @param orderGoodsNo、
* @param userNo
* @return
*/
@GetMapping(value = {"clx-performance/feign/orderGoodsDriverTruck/getPrivateTruckList"})
Result<List<String>> getPrivateTruckList(@RequestParam("orderGoodsNo") @NotBlank(message = "货单编号不可为空") String orderGoodsNo,
@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo);
}
......@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.List;
@Getter
......@@ -105,5 +106,8 @@ public class OrderGoodsVO {
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("车辆列表")
private List<String> truckList;
}
\ No newline at end of file
package com.clx.performance.component;
import cn.hutool.core.util.StrUtil;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.clx.performance.model.OrderGoodsDriverTruck;
import com.msl.common.base.Optional;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Component
@AllArgsConstructor
public class GoodsOrderTruckRecordComponent {
private final RedisTemplate<String, String> redisTemplate;
private final OrderGoodsDriverTruckDao orderGoodsDriverTruckDao;
public void saveTruckRecord(String orderGoodsNo, List<String> truckList) {
redisTemplate.opsForSet().add(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo, truckList.toArray(new String[]{}));
redisTemplate.opsForSet().add(RedisConstants.ORDER_GOODS_RECORD, RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo);
}
//删除货单下的所有车牌号
public void deleteTruckRecord(String orderGoodsNo) {
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo);
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_RECORD, orderGoodsNo);
}
//删除货单下的指定车牌号
public void deleteTruckRecord(String orderGoodsNo, String truckNo) {
redisTemplate.opsForSet().remove(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo, truckNo);
}
//公开
public Set<String> getPublicTruckList() {
Set<String> orderGoodsList = redisTemplate.opsForSet().members(RedisConstants.ORDER_GOODS_RECORD);
if (orderGoodsList == null || orderGoodsList.isEmpty()) {
return null;
}
return redisTemplate.opsForSet().union(orderGoodsList);
}
//定向
public List<String> getPrivateTruckList(String orderGoodsNo, Long userNo) {
Optional<List<OrderGoodsDriverTruck>> optional = orderGoodsDriverTruckDao.selectListByDriverUserNo(userNo);
if (!optional.isPresent()) {
return null;
}
List<String> truckList = optional.get().stream().map(OrderGoodsDriverTruck::getTruckNo).collect(Collectors.toList());
truckList.retainAll(redisTemplate.opsForSet().members(RedisConstants.ORDER_GOODS_TRUCK_RECORD + orderGoodsNo));
return truckList;
}
}
......@@ -13,11 +13,10 @@ import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
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;
......@@ -31,19 +30,18 @@ import java.util.Set;
@Component
@Slf4j
@AllArgsConstructor
public class OrderGoodsStatusLazyComponent implements InitializingBean {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private final RedisTemplate<String, String> redisTemplate;
@Autowired
private OrderGoodsDao orderGoodsDao;
private final OrderGoodsDao orderGoodsDao;
@Autowired
private OrderFeign orderFeign;
private final OrderFeign orderFeign;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
public void expireProduce(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
......@@ -120,6 +118,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
//更新货单已完结
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());
......
......@@ -7,20 +7,20 @@ public class RedisConstants {
public static final String ORDER_GOODS_ID ="clx-performance:orderGoodsId:";
public static final String ORDER_GOODS_ID_GENERATE ="clx-performance:orderGoodsId:generate";
public static final String ZJXL_TRUCK_TRACE_LIST = "clx-performance:zjxl_truck_trace_list:";
public static final String ORDER_CHILD_EXPECT_TIME_DATA = "clx-performance:order_child_expect_time_data:";
public static final String ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP = "clx-performance:order_child_expect_time_data_key_map:";
public static final String ZJXL_LAST_PULL_TRUCK = "clx-performance:zjxl_last_time_pull_truck:";
public static final String TRUCK_LOCATION_KEY = "clx-performance:truck_location_key:";
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_TRUCK_RECORD = "clx:order:goods:truck:record:";
public static final String ORDER_GOODS_RECORD = "clx:order:goods:record:";
}
package com.clx.performance.controller.feign;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
......@@ -10,8 +11,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping("/feign/orderGoodsDriverTruck")
......@@ -22,9 +25,23 @@ public class TruckFeignController {
private final OrderGoodsTruckBindService orderGoodsTruckService;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Deprecated
@GetMapping({"/getTrucksByOrderGoodsNo"})
Result<List<Integer>> getTrucksByOrderGoodsNo(@RequestParam("orderGoodsNo") @NotNull(message = "货单编号不可为空") String orderGoodsNo){
return Result.ok(orderGoodsTruckService.getTrucksByOrderGoodsNo(orderGoodsNo));
}
@GetMapping({"/getPublicTruckList"})
Result<Set<String>> getPublicTruckList(){
return Result.ok(goodsOrderTruckRecordComponent.getPublicTruckList());
}
@GetMapping({"/getPrivateTruckList"})
Result<List<String>> getPrivateTruckList(@RequestParam("orderGoodsNo") @NotBlank(message = "货单编号不可为空") String orderGoodsNo,
@RequestParam("userNo") @NotNull(message = "用户编号不可为空") Long userNo){
return Result.ok(goodsOrderTruckRecordComponent.getPrivateTruckList(orderGoodsNo,userNo));
}
}
......@@ -76,7 +76,6 @@ public class GoodsOrderController {
public Result<Object> saveGoodName(@RequestBody @Validated OrderGoodsParams orderGoodsParams) {
String orderNo = orderGoodsParams.getOrderNo();
LocalDateTime now = LocalDateTime.now();
LocalDateTime sendLazyTime = null;
RLock rLock = null;
try {
//1. 加分布式锁通过订单ID
......@@ -88,12 +87,10 @@ public class GoodsOrderController {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
//1平台车辆 2部分平台车辆 3自有车辆
Integer truckDemand = orderInfo.getTruckDemand();
sendLazyTime = goodsOrderStrategyContext.strategyContext.get(truckDemand).goodsOrderProcess(orderGoodsParams, orderInfo, now);
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate);
} catch (Exception e) {
// throw new ServiceSystemException(e);
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, e.getMessage());
} finally {
try {
if (rLock != null && rLock.isLocked()) {
......@@ -105,31 +102,6 @@ public class GoodsOrderController {
}
}
Message message = MessageBuilder.withBody(orderNo.getBytes()).build();
long epochMilli = 0L;
if (sendLazyTime.isAfter(now)) {
epochMilli = sendLazyTime.minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
log.info("执行订单状态更改,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
}
if (epochMilli == 0L) {
log.info("执行订单状态更改,epochMilli时间为0,时间为:{}", epochMilli);
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_ON_DEAD_ROUTE_KEY, message
);
} else {
log.info("执行订单状态更改,epochMilli时间不为0,时间为:{}", epochMilli);
rabbitTemplate.send(RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, MessageBuilder.withBody(orderNo.getBytes()).build());
message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_EXCHANGE, RabbitKeyConstants.ORDER_ON_ROUTE_KEY, message
);
}
return Result.ok();
}
......
......@@ -14,7 +14,7 @@ import java.util.List;
*/
public interface OrderGoodsDriverTruckDao extends BaseDao<OrderGoodsDriverTruckMapper, OrderGoodsDriverTruck, Integer> {
void deleteByTruckNoAndDriverUserNo(String truckNo, String driverUserNo);
void deleteByTruckNoAndDriverUserNo(String truckNo, String driverUserNo, Integer truckId);
Optional<List<OrderGoodsDriverTruck>> selectListByDriverUserNo(Long driverUserNo);
}
......@@ -21,10 +21,11 @@ import java.util.List;
public class OrderGoodsDriverTruckDaoImpl extends BaseDaoImpl<OrderGoodsDriverTruckMapper, OrderGoodsDriverTruck, Integer> implements OrderGoodsDriverTruckDao {
@Override
public void deleteByTruckNoAndDriverUserNo(String truckNo, String driverUserNo) {
public void deleteByTruckNoAndDriverUserNo(String truckNo, String driverUserNo, Integer truckId) {
baseMapper.delete(new QueryWrapper<OrderGoodsDriverTruck>().lambda()
.eq(OrderGoodsDriverTruck::getTruckNo,truckNo)
.eq(OrderGoodsDriverTruck::getDriverUserNo, Long.valueOf(driverUserNo))
.eq(OrderGoodsDriverTruck::getTruckId, truckId)
);
}
......
......@@ -37,7 +37,7 @@ public class OrderGoodsDriverTruckListener {
Object driverName = jsonObject.getByPath("driverName");
Object truckNo = jsonObject.getByPath("truckNo");
Object driverMobile = jsonObject.getByPath("driverMobile");
Object truckId = jsonObject.getByPath("truckId");
switch (operateType.toString()) {
case "1":
OrderGoodsDriverTruck driverTruck = new OrderGoodsDriverTruck();
......@@ -45,6 +45,8 @@ public class OrderGoodsDriverTruckListener {
driverTruck.setDriverMobile(driverMobile == null ? "" : driverMobile.toString());
driverTruck.setDriverName(driverName == null ? "" : driverName.toString());
driverTruck.setDriverUserNo(driverUserNo == null ? null : Long.valueOf(driverUserNo.toString()));
driverTruck.setTruckId(truckId == null ? null : Integer.valueOf(truckId.toString()));
orderGoodsDriverTruckDao.saveEntity(driverTruck);
log.info("处理货单定向司机表:执行插入");
break;
......@@ -52,7 +54,7 @@ public class OrderGoodsDriverTruckListener {
if (truckNo == null || driverUserNo == null) {
break;
}
orderGoodsDriverTruckDao.deleteByTruckNoAndDriverUserNo(truckNo.toString(), driverUserNo.toString());
orderGoodsDriverTruckDao.deleteByTruckNoAndDriverUserNo(truckNo.toString(), driverUserNo.toString(), Integer.valueOf(truckId.toString()));
log.info("处理货单定向司机表:执行删除");
break;
default:
......
......@@ -90,6 +90,8 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
poundAuditDetail.setRejectType(param.getRejectType());
poundAuditDetail.setRemark(param.getRemark());
poundAuditDetail.setId(null);
poundAuditDetail.setCreateTime(null);
poundAuditDetail.setModifiedTime(null);
Integer type = OrderChildLogEnum.Type.POUND_AUDIT.getCode();
if(Objects.equals(param.getStatus(), OrderChildPoundAuditEnum.Status.REJECT.getCode())){
......
......@@ -7,6 +7,7 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.*;
import com.clx.performance.dto.OrderChildExpectDTO;
......@@ -92,6 +93,8 @@ public class OrderChildServiceImpl implements OrderChildService {
private final IntegralMqService integralMqService;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
......@@ -896,7 +899,7 @@ public class OrderChildServiceImpl implements OrderChildService {
long count = orderChildDao.countOfTransitByOrderGoodsNo(orderChild.getOrderGoodsNo());
// 更新货单完成状态
updateOrderGoodsComplete(orderGoods, count);
updateOrderGoodsComplete(orderGoods, orderChild, count);
orderChild.setStatus(OrderChildEnum.Status.UNSETTLE.getCode());
orderChild.setConfirmTime(LocalDateTime.now());
......@@ -1251,6 +1254,7 @@ public class OrderChildServiceImpl implements OrderChildService {
private void updateOrderGoodsDirectReject(OrderGoodsTruckBind orderGoodsTruckBind) {
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsTruckBind.getOrderGoodsNo(), orderGoodsTruckBind.getTruckNo());
}
/**
......@@ -1263,22 +1267,23 @@ public class OrderChildServiceImpl implements OrderChildService {
orderGoodsTruckBind.setStatus(OrderGoodsTruckBind.Status.CANCEL.getCode());
orderGoodsTruckBindDao.updateStatus(orderGoodsTruckBind);
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoodsTruckBind.getOrderGoodsNo(), orderGoodsTruckBind.getTruckNo());
}
/**
* 更新货单完成状态
*/
private void updateOrderGoodsComplete(OrderGoods orderGoods, long count) {
if (count > 1) {
return;
}
private void updateOrderGoodsComplete(OrderGoods orderGoods, OrderChild orderChild, long count){
if (count > 1) {return;}
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0){
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(), OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) <= 0) {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoods.getOrderGoodsNo(),
OrderGoodsStatusEnum.Status.SUCCESS.getCode());
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoods.getOrderGoodsNo(),
OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
}
goodsOrderTruckRecordComponent.deleteTruckRecord(orderGoods.getOrderGoodsNo(),orderChild.getTruckNo());
}
/**
......
......@@ -65,7 +65,9 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
List<String> truckList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo).stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
String orderNo = orderGoodsVO.getOrderNo();
orderGoodsVO.setTruckList(truckList);
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
orderGoodsVO.setReveiveAddressAll(orderInfoFeign.getReveiveAddressAll());
orderGoodsVO.setSendAddressAll(orderInfoFeign.getSendAddressAll());
......
......@@ -10,7 +10,7 @@ public class OrderGoodsTruckBindSqlProvider {
public String saveBatchEntity(String orderNo, String orderGoodsNo, List<String> trackList, String now) {
StringBuffer sqlList = new StringBuffer();
sqlList.append(" INSERT INTO order_goods_truck_bind(order_no,order_goods_no,truck_no,create_time,update_time,status) VALUES ");
sqlList.append(" INSERT INTO order_goods_truck_bind(order_no,order_goods_no,truck_no,create_time,modified_time,status) VALUES ");
for (int i = 0; i < trackList.size(); i++) {
String truckNo = trackList.get(i);
sqlList.append(" ('").append(orderNo).append("','").append(orderGoodsNo).append("','").append(truckNo).append("','")
......
......@@ -2,10 +2,55 @@ package com.clx.performance.strategy;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.constant.RabbitKeyConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import java.time.LocalDateTime;
public interface GoodsOrderStrategy {
@Slf4j
public abstract class GoodsOrderStrategy {
LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now);
/**
* 不同的用车需求执行不同的策略 1:one 2:two 3:three
* 用车需求: 1平台车辆 2部分平台车辆 3自有车辆
* @param orderGoodsParams
* @param orderInfo
* @param now
* @return
*/
public abstract LocalDateTime goodsOrderProcess(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now);
public void saveGoodsOrder(OrderGoodsParams orderGoodsParams, FeignOrderVO orderInfo, LocalDateTime now, RabbitTemplate rabbitTemplate) {
String orderNo = orderGoodsParams.getOrderNo();
//根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
Message message = MessageBuilder.withBody(orderNo.getBytes()).build();
long epochMilli = 0L;
if (sendLazyTime.isAfter(now)) {
epochMilli = sendLazyTime.minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
log.info("执行订单状态更改,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
}
if (epochMilli == 0L) {
log.info("执行订单状态更改,epochMilli时间为0,时间为:{}", epochMilli);
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_DEAD_EXCHANGE, RabbitKeyConstants.ORDER_ON_DEAD_ROUTE_KEY, message
);
} else {
log.info("执行订单状态更改,epochMilli时间不为0,时间为:{}", epochMilli);
rabbitTemplate.send(RabbitKeyConstants.ORDER_POSTED_EXCHANGE, RabbitKeyConstants.ORDER_POSTED_ROUTE_KEY, MessageBuilder.withBody(orderNo.getBytes()).build());
message.getMessageProperties().setExpiration(String.valueOf(epochMilli));
rabbitTemplate.send(
RabbitKeyConstants.ORDER_ON_EXCHANGE, RabbitKeyConstants.ORDER_ON_ROUTE_KEY, message
);
}
}
}
......@@ -7,30 +7,30 @@ import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
......@@ -42,31 +42,26 @@ import java.util.Map;
*/
@Component("OneGoodsOrderStrategy")
@Slf4j
public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@AllArgsConstructor
public class OneGoodsOrderStrategy extends GoodsOrderStrategy implements InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderFeign orderFeign;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
OrderGoodsService orderGoodsService;
private final OrderFeign orderFeign;
@Autowired
OrderGoodsDao orderGoodsDao;
private final OrderGoodsDao orderGoodsDao;
@Autowired
private OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
private final OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
private final GoodsOrderStrategyContext goodsOrderStrategyContext;
private final RabbitTemplate rabbitTemplate;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -87,7 +82,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
Map<String, LocalDateTime> mqMap = new HashMap<>();
List<OrderGoods> orderGoodsList = new LinkedList<>();
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2)) {
if (OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode().equals(child.getPendingOrderWay())) {
if (child.getNeedTruckNum() == null) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单必须选择车辆");
......@@ -133,7 +128,8 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setOrderNo(orderNo);
Integer pendingOrderWay = orderGoods.getPendingOrderWay();
String orderNoPrefix = PendingOrderWayStatusEnum.Status.GK.getCode().equals(pendingOrderWay) ? PendingOrderWayStatusEnum.Status.GK.getName() : PendingOrderWayStatusEnum.Status.DX.getName();
orderGoods.setOrderGoodsNo(orderNoPrefix + beginOrderGoodsId);
String orderGoodsNo = orderNoPrefix + beginOrderGoodsId;
orderGoods.setOrderGoodsNo(orderGoodsNo);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
......@@ -153,10 +149,11 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setUserName(loginUserInfo.getUserName());
orderGoods.setUserNo(loginUserInfo.getUserNo());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderNoPrefix+ beginOrderGoodsId, child.getTruckList(), now);
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderNoPrefix + beginOrderGoodsId, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderNoPrefix + beginOrderGoodsId);
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......@@ -184,8 +181,7 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
Message message = MessageBuilder.withBody(entry.getKey().getBytes()).build();
long epochMilli = 0L;
if (entry.getValue().isAfter(now)) {
epochMilli = entry.getValue().minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
epochMilli = Duration.between(now,entry.getValue()).toMillis();
log.info("货单更改挂单中,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
}
......@@ -206,4 +202,17 @@ public class OneGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
}
}
}
public static void main(String[] args) {
// "2023-10-31 00:00:00" 2023-10-14 11:33:05
LocalDateTime now = DateUtils.parseDateTime("2023-10-14 11:33:05").get();
LocalDateTime end = DateUtils.parseDateTime("2023-10-31 00:00:00").get();
System.out.println();
Duration duration = Duration.between(now,end);
long millis = duration.toMillis();
System.out.println(millis);
}
}
......@@ -8,31 +8,38 @@ import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.feign.OrderOwnTruckVo;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.PendingOrderWayStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
......@@ -40,32 +47,24 @@ import java.util.stream.Collectors;
*/
@Component("ThreeGoodsOrderStrategy")
@Slf4j
public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@AllArgsConstructor
public class ThreeGoodsOrderStrategy extends GoodsOrderStrategy implements InitializingBean {
private final OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsDao orderGoodsDao;
@Autowired
OrderGoodsService orderGoodsService;
private final GoodsOrderStrategyContext goodsOrderStrategyContext;
@Autowired
OrderGoodsDao orderGoodsDao;
private final OrderFeign orderFeign;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
private final RabbitTemplate rabbitTemplate;
@Autowired
private OrderFeign orderFeign;
private final OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Override
......@@ -132,7 +131,8 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
orderGoods.setOrderNo(orderNo);
Integer pendingOrderWay = orderGoods.getPendingOrderWay();
String orderNoPrefix = PendingOrderWayStatusEnum.Status.GK.getCode().equals(pendingOrderWay) ? PendingOrderWayStatusEnum.Status.GK.getName() : PendingOrderWayStatusEnum.Status.DX.getName();
orderGoods.setOrderGoodsNo(orderNoPrefix + beginOrderGoodsId);
String orderGoodsNo = orderNoPrefix + beginOrderGoodsId;
orderGoods.setOrderGoodsNo(orderGoodsNo);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
......@@ -155,16 +155,18 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
if (orderOwnTruckVos == null || orderOwnTruckVos.isEmpty()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "全部自由车辆列表数据为空");
}
List<String> collect = orderOwnTruckVos.stream().map(OrderOwnTruckVo::getTruckNo).collect(Collectors.toList());
if (collect.isEmpty()) {
List<String> truckList = orderOwnTruckVos.stream().map(OrderOwnTruckVo::getTruckNo).collect(Collectors.toList());
if (truckList.isEmpty()) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "全部自由车辆列表数据为空");
}
if (CollectionUtil.isNotEmpty(collect)) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderNoPrefix + beginOrderGoodsId, collect, now);
//车牌号集合
if (CollectionUtil.isNotEmpty(truckList)) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, truckList, now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, truckList);
}
mqMap.put(orderNoPrefix + beginOrderGoodsId, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderNoPrefix + beginOrderGoodsId);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
......@@ -193,7 +195,7 @@ public class ThreeGoodsOrderStrategy implements GoodsOrderStrategy, Initializing
Message message = MessageBuilder.withBody(entry.getKey().getBytes()).build();
long epochMilli = 0L;
if (entry.getValue().isAfter(now)) {
epochMilli = entry.getValue().minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
epochMilli = Duration.between(now,entry.getValue()).toMillis();
log.info("货单更改挂单中,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
......
......@@ -7,6 +7,7 @@ import com.clx.order.params.OrderGoodsChildParams;
import com.clx.order.params.OrderGoodsParams;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderGoodsIdGenerate;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
......@@ -14,23 +15,22 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.strategy.GoodsOrderStrategy;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
......@@ -42,32 +42,25 @@ import java.util.Map;
*/
@Component("TwoGoodsOrderStrategy")
@Slf4j
public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBean {
@Autowired
private OrderGoodsIdGenerate orderGoodsIdGenerate;
@AllArgsConstructor
public class TwoGoodsOrderStrategy extends GoodsOrderStrategy implements InitializingBean {
private final OrderGoodsIdGenerate orderGoodsIdGenerate;
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsTruckBindDao orderGoodsTruckBindDao;
private final OrderGoodsDao orderGoodsDao;
@Autowired
OrderGoodsService orderGoodsService;
private final OrderFeign orderFeign;
@Autowired
OrderGoodsDao orderGoodsDao;
private final OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
@Autowired
private OrderFeign orderFeign;
private final GoodsOrderStrategyContext goodsOrderStrategyContext;
@Autowired
private OrderGoodsStatusLazyComponent orderGoodsStatusLazyComponent;
private final RabbitTemplate rabbitTemplate;
@Autowired
private GoodsOrderStrategyContext goodsOrderStrategyContext;
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -94,7 +87,7 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
long beginOrderGoodsId = orderGoodsIdGenerate.getOrderGoodsId(childParamsList.size());
for (OrderGoodsChildParams child : childParamsList) {
if (child.getPendingOrderWay().equals(2)) {
if (OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode().equals(child.getPendingOrderWay())) {
if (child.getNeedTruckNum() == null) {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "定向派单必须选择车辆");
......@@ -142,7 +135,8 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setOrderNo(orderNo);
Integer pendingOrderWay = orderGoods.getPendingOrderWay();
String orderNoPrefix = PendingOrderWayStatusEnum.Status.GK.getCode().equals(pendingOrderWay) ? PendingOrderWayStatusEnum.Status.GK.getName() : PendingOrderWayStatusEnum.Status.DX.getName();
orderGoods.setOrderGoodsNo(orderNoPrefix + beginOrderGoodsId);
String orderGoodsNo = orderNoPrefix + beginOrderGoodsId;
orderGoods.setOrderGoodsNo(orderGoodsNo);
orderGoods.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CREATED.getCode());
orderGoods.setSendAddressId(orderInfo.getSendAddressId());
......@@ -162,10 +156,11 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
orderGoods.setUserName(loginUserInfo.getUserName());
orderGoods.setUserNo(loginUserInfo.getUserNo());
if (CollectionUtil.isNotEmpty(child.getTruckList())) {
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderNoPrefix + beginOrderGoodsId, child.getTruckList(), now);
orderGoodsTruckBindDao.saveBatchEntity(orderNo, orderGoodsNo, child.getTruckList(), now);
goodsOrderTruckRecordComponent.saveTruckRecord(orderGoodsNo, child.getTruckList());
}
mqMap.put(orderNoPrefix + beginOrderGoodsId, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderNoPrefix + beginOrderGoodsId);
mqMap.put(orderGoodsNo, postedTime);
orderGoodsStatusLazyComponent.expireProduce(orderGoods.getLastArriveSendTime(), orderGoodsNo);
beginOrderGoodsId = beginOrderGoodsId + 1;
orderGoodsList.add(orderGoods);
......@@ -220,7 +215,7 @@ public class TwoGoodsOrderStrategy implements GoodsOrderStrategy, InitializingBe
Message message = MessageBuilder.withBody(entry.getKey().getBytes()).build();
long epochMilli = 0L;
if (entry.getValue().isAfter(now)) {
epochMilli = entry.getValue().minusMinutes(now.getMinute()).getMinute() * 60 * 1000;
epochMilli = Duration.between(now,entry.getValue()).toMillis();
log.info("货单更改挂单中,选择时间在当前时间之后,则设置延迟队列时间,时间为:{}", epochMilli);
}
if (epochMilli == 0L) {
......
package com.clx.performance;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.UpdateOrderInfoParam;
import com.clx.order.param.feign.UpdateOrderInfoResidueWeightParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.feign.OrderOwnTruckVo;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderGoodsStatusLazyComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods;
import com.msl.common.base.Optional;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@SpringBootTest
......@@ -52,10 +36,17 @@ public class JobTest {
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private GoodsOrderTruckRecordComponent recordComponent;
@Test
public void test1() {
List<OrderOwnTruckVo> orderOwnTruckVos = orderFeign.selectTruckListFeign("PT2023092700041");
List<String> collect = orderOwnTruckVos.stream().map(OrderOwnTruckVo::getTruckNo).collect(Collectors.toList());
System.out.println(collect);
List<String> list = new ArrayList<>();
list.add("晋A99999");
recordComponent.saveTruckRecord("123", list);
recordComponent.getPrivateTruckList("123", 1001183036834771013L);
System.out.println();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论