提交 a68d8a3b authored 作者: liuhaiquan's avatar liuhaiquan

新增取消订单和到达最晚拉运时间的最后一车逻辑判断

上级 c1823326
......@@ -13,7 +13,6 @@ import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
......@@ -61,14 +60,4 @@ public class OrderChildFeignController {
return Result.ok(feignOrderChildService.getLineStatistics(sendSystemAddressId, receiveSystemAddressId));
}
@ApiOperation(value = "运单取消/到达最晚拉运时间 同步最后一车", notes = "<br>By:刘海泉")
@RequestMapping(value = "/syncLastTruck", method = RequestMethod.GET)
Result<?> syncLastTruck(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo){
return lastTruckService.syncLastTruckChild4OrderTrigger(orderNo);
}
}
......@@ -153,5 +153,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
BigDecimal getLastDriverFreightByTransportLine(Integer sendSystemAddressId, Integer receiveSystemAddressId);
OrderChild findLastTruckChildByCreateTime(String orderNo);
OrderChild getOrderCompleteLastTruck(String orderNo);
Long haveArriveReceiveChild(String orderNo);
}
......@@ -467,11 +467,21 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public OrderChild findLastTruckChildByCreateTime(String orderNo) {
public OrderChild getOrderCompleteLastTruck(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getOrderNo,orderNo);
query.orderByDesc(OrderChild ::getCreateTime);
query.eq(OrderChild ::getOrderNo,orderNo);
query.ge(OrderChild :: getStatus,OrderChildEnum.Status.ARRIVE_SEND.getCode());
query.le(OrderChild :: getStatus,OrderChildEnum.Status.COMPLETE.getCode());
query.orderByDesc(OrderChild :: getArriveReceiveTime);
query.last("limit 1");
return baseMapper.selectOne(query);
}
@Override
public Long haveArriveReceiveChild(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild ::getOrderNo,orderNo);
query.lt(OrderChild :: getStatus,OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
return baseMapper.selectCount(query);
}
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.open.sdk.enums.ResultStatusEnum;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.SyncPlatformEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
......@@ -95,12 +96,27 @@ public class OrderChildDtsListener {
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic());
log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode()){
OrderChild child = lastTruckService.getLastTruckChild(after.getOrderNo());
if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child);
}
syncLastTruck(orderInfoFeign,after);
}
}
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode()){
OrderChild child;
if(Objects.equals(orderInfoFeign.getOrderStatus(), OrderEnum.Status.COMPLETED.getCode()) ||
Objects.equals(orderInfoFeign.getOrderStatus(), OrderEnum.Status.SUCCESS.getCode())) { //订单变成已完成 || 已完结
OrderEnum.Status byCode = OrderEnum.Status.getByCode(orderInfoFeign.getOrderStatus());
log.info("订单号:{},运单号:{},订单状态:{},开始查询最后一车运单===========" ,orderInfoFeign.getOrderNo(),after.getChildNo(),
Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo());
}
if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child);
}
}
}
......
package com.clx.performance.service;
import com.clx.performance.model.OrderChild;
import com.msl.common.result.Result;
public interface LastTruckService {
OrderChild getLastTruckChild(String orderNo);
Result<?> syncLastTruckChild(OrderChild child);
void syncLastTruckChild(OrderChild child);
Result<?> syncLastTruckChild4OrderTrigger(String orderNo);
OrderChild getOrderCompleteLastTruck(String orderNo);
}
......@@ -67,29 +67,24 @@ public class LastTruckServiceImpl implements LastTruckService {
* @return
**/
@Override
public Result<?> syncLastTruckChild(OrderChild child) {
public void syncLastTruckChild(OrderChild child) {
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
log.info("开始同步最后一车的运单,运单编号:{},运单信息:{}",child.getChildNo(), JSON.toJSONString(message));
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(message),message.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
return result2;
}
/**
* @Author kavin
* @Description 订单取消、到达最晚拉运时间 同步最后一车
* @Param [orderNo]
* @return
**/
public Result<?> syncLastTruckChild4OrderTrigger(String orderNo) {
OrderChild child = orderChildDao.findLastTruckChildByCreateTime(orderNo);
log.info("订单取消/到达最晚拉运时间获取最后一车运单,订单号:{} ,获取到的最后一车的运单信息:{}",orderNo,JSON.toJSONString(child));
if(Objects.nonNull(child)){
return syncLastTruckChild(child);
@Override
public OrderChild getOrderCompleteLastTruck(String orderNo) {
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单
Long count = orderChildDao.haveArriveReceiveChild(orderNo);
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count);
if(count == 0 ){
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车
return orderChildDao.getOrderCompleteLastTruck(orderNo);
}
return Result.ok("承运系统提示:承运系统未查询到该订单下的运单信息");
return null;
}
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
......@@ -16,7 +15,6 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论