提交 75fac6c2 authored 作者: 刘海泉's avatar 刘海泉

修改最后一车的相关代码

上级 e3a2d699
package com.clx.performance.controller.pc; package com.clx.performance.controller.pc;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService; import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -32,13 +34,15 @@ import javax.validation.constraints.NotBlank; ...@@ -32,13 +34,15 @@ import javax.validation.constraints.NotBlank;
public class LastTruckController { public class LastTruckController {
private final LastTruckService lastTruckService; private final LastTruckService lastTruckService;
private final OrderChildStruct orderChildStruct;
@ApiOperation(value = "查询订单下的最后一车",notes = "<br>By:刘海泉") @ApiOperation(value = "查询订单下的最后一车",notes = "<br>By:刘海泉")
@GetMapping("/getOrderLastTruck") @GetMapping("/getOrderLastTruck")
public Result<OrderChildVO> getOrderLastTruck(@RequestParam("orderNo") public Result<OrderChildVO> getOrderLastTruck(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) throws Exception{ @NotBlank(message = "订单编号不能为空") String orderNo) throws Exception{
return Result.ok(lastTruckService.getOrderLastTruck(orderNo)); OrderChild child = lastTruckService.getOrderLastTruck(orderNo);
return Result.ok(orderChildStruct.convert(child));
} }
......
...@@ -217,7 +217,7 @@ public class OrderChildDtsListener { ...@@ -217,7 +217,7 @@ public class OrderChildDtsListener {
} }
} }
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){ public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after) {
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑 //当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(Objects.equals(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode(),after.getStatus()) || if(Objects.equals(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode(),after.getStatus()) ||
(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode())){ (after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode())){
...@@ -229,7 +229,7 @@ public class OrderChildDtsListener { ...@@ -229,7 +229,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态"); Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo()); child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态 }else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo()); child = lastTruckService.getOrderLastTruck(after.getOrderNo());
} }
if(Objects.nonNull(child)){ if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child); lastTruckService.syncLastTruckChild(child);
......
package com.clx.performance.service; package com.clx.performance.service;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
public interface LastTruckService { public interface LastTruckService {
...@@ -15,7 +14,7 @@ public interface LastTruckService { ...@@ -15,7 +14,7 @@ public interface LastTruckService {
Result<?> syncLastTruckChild4OrderTrigger(String orderNo); Result<?> syncLastTruckChild4OrderTrigger(String orderNo);
OrderChildVO getOrderLastTruck(String orderNo) throws Exception; OrderChild getOrderLastTruck(String orderNo);
......
...@@ -14,11 +14,11 @@ import com.clx.performance.dao.OrderChildDao; ...@@ -14,11 +14,11 @@ import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService; import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct; import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -120,8 +120,7 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -120,8 +120,7 @@ public class LastTruckServiceImpl implements LastTruckService {
//调用此方法前查订单是否存在最后一车,存在则不进行该方法调用 //调用此方法前查订单是否存在最后一车,存在则不进行该方法调用
@Override @Override
public OrderChildVO getOrderLastTruck(String orderNo) throws Exception { public OrderChild getOrderLastTruck(String orderNo){
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){ if(Objects.isNull(orderInfo)){
log.error("计算订单最后一车,通过订单号:{},未查询到对应的订单",orderNo); log.error("计算订单最后一车,通过订单号:{},未查询到对应的订单",orderNo);
...@@ -131,13 +130,11 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -131,13 +130,11 @@ public class LastTruckServiceImpl implements LastTruckService {
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算 //为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
RLock lock = redissonClient.getLock(RedissonConstants.CALC_ORDER_LAST_TRUCK_LOCK + orderNo); RLock lock = redissonClient.getLock(RedissonConstants.CALC_ORDER_LAST_TRUCK_LOCK + orderNo);
try{ try{
String lastTruckCacheKey = getLastTruckCacheKey(orderNo); String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
//已经计算出最后一车,则直接返回运单信息 //已经计算出最后一车,则直接返回运单信息
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){ if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey); String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
OrderChild child = orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND); return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
return orderChildStruct.convert(child);
} }
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS); boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag) { if (!flag) {
...@@ -154,14 +151,17 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -154,14 +151,17 @@ public class LastTruckServiceImpl implements LastTruckService {
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo()); log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
//更新订单最后一车到缓存,并设置有效期为60天 //更新订单最后一车到缓存,并设置有效期为60天
redisTemplate.opsForValue().set(getLastTruckCacheKey(orderNo),child.getChildNo(),60, TimeUnit.DAYS); redisTemplate.opsForValue().set(getLastTruckCacheKey(orderNo),child.getChildNo(),60, TimeUnit.DAYS);
return orderChildStruct.convert(child); return child;
} }
return null; return null;
} catch (InterruptedException e){
log.warn("计算订单最后一车发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}finally { }finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) { if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock(); lock.unlock();
} }
} }
return null;
} }
public String getLastTruckCacheKey(String orderNo){ public String getLastTruckCacheKey(String orderNo){
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论