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