提交 e41e119a authored 作者: 姜武杰's avatar 姜武杰

Merge branch 'v33.2-optimize-20241104' into release_jdk17

# Conflicts: # clx-performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # clx-performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # clx-performance-web/src/main/java/com/clx/performance/dao/impl/OrderGoodsDaoImpl.java
......@@ -45,6 +45,14 @@ public class LastTruckController {
return Result.ok(orderChildStruct.convert(child));
}
@Operation(summary = "手动同步数媒宝最后一车触发",description = "<br>By:刘海泉")
@GetMapping("/handExecSyncSmbLastTruck")
public Result<?> handExecSyncSmbLastTruck(
@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo,
@RequestParam("childNo")
@NotBlank(message = "运单编号不能为空") String childNo) {
return lastTruckService.handExecSyncSmbLastTruck(orderNo,childNo);
}
}
......@@ -737,6 +737,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
);
}
@Override
public Long queryTruckProcessingOrderChild(String truckNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getTruckNo,truckNo);
query.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode());
return baseMapper.selectCount(query);
}
@Override
public List<OrderChild> listNoCancelOrderChild(String orderNo) {
return list(lQrWrapper()
......@@ -745,12 +753,4 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
);
}
@Override
public Long queryTruckProcessingOrderChild(String truckNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper<>();
query.eq(OrderChild :: getTruckNo,truckNo);
query.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode());
return baseMapper.selectCount(query);
}
}
......@@ -313,16 +313,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
baseMapper.batchCancelOrderGoodsWeight(cancelOrderGoodsList);
}
@Override
public boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight,
Integer needTruckNum) {
return update(lUdWrapper()
.in(OrderGoods::getOrderGoodsNo, orderGoodsNo)
.set(OrderGoods::getExtractWeight, extractWeight)
.set(OrderGoods :: getNeedTruckNum,needTruckNum)
);
}
@Override
public OrderGoods queryLineNewestPendingFreight(Integer sendAddressId,Integer receiveAddressId) {
LambdaQueryWrapper<OrderGoods> query = new LambdaQueryWrapper<>();
......@@ -344,4 +334,14 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
query.le(OrderGoods :: getCreateTime,end);
return baseMapper.selectList(query);
}
@Override
public boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight,
Integer needTruckNum) {
return update(lUdWrapper()
.in(OrderGoods::getOrderGoodsNo, orderGoodsNo)
.set(OrderGoods::getExtractWeight, extractWeight)
.set(OrderGoods :: getNeedTruckNum,needTruckNum)
);
}
}
package com.clx.performance.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.service.LastTruckService;
import com.msl.common.job.JobLog;
import com.msl.common.result.Result;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@AllArgsConstructor
public class SyncLastTruckJob {
private final LastTruckService lastTruckService;
/**
* 手动触发最后一车推送第三方平台
*/
@XxlJob("handExecSyncSmbLastTruck")
public void handExecSyncSmbLastTruck() {
try {
String jobParam= XxlJobHelper.getJobParam();
JSONObject jsonObject = JSON.parseObject(jobParam);
String orderNo = jsonObject.getString("orderNo");
String childNo = jsonObject.getString("childNo");
log.info("开始手动执行同步最后一车,订单号:{}.运单号:{}",orderNo,childNo);
Result<?> result = lastTruckService.handExecSyncSmbLastTruck(orderNo,childNo);
log.info("结束手动执行同步最后一车,订单号:{}.运单号:{},响应结果:{}",orderNo,childNo,result);
} catch (Exception e) {
log.warn("同步最后一车到第三方平台发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("同步最后一车到第三方平台发生异常,异常原因=====================", e);
}
}
}
......@@ -152,7 +152,7 @@ public class OrderChildDtsListener {
OpenCallBackClient openCallBackClient = thirdAppConfig.getOpenCallBackClient(orderInfoFeign.getOrderSource().toString());
Result<?> result = openCallBackClient.encryptPost(data,after.topic());
log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
syncLastTruck(orderInfoFeign,after);
lastTruckService.syncLastTruck(orderInfoFeign,after);
return;
}
......@@ -218,26 +218,7 @@ public class OrderChildDtsListener {
}
}
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after) {
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
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())){
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.getOrderLastTruck(after.getOrderNo());
}
if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child);
}
}
}
/**
* 第三方同步
......
package com.clx.performance.service;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.model.OrderChild;
import com.msl.common.result.Result;
......@@ -15,6 +17,7 @@ public interface LastTruckService {
OrderChild getOrderLastTruck(String orderNo);
Result<?> syncLastTruck(FeignOrderVO orderInfoFeign, OrderChildMessage after);
Result<?> handExecSyncSmbLastTruck(String orderNo, String childNo);
}
......@@ -4,13 +4,16 @@ 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.ResultEnum;
import com.clx.order.enums.SyncPlatformEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
......@@ -57,15 +60,32 @@ public class LastTruckServiceImpl implements LastTruckService {
public Result<?> syncLastTruckChild(OrderChild child) {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(child.getOrderNo());
OrderChildMessage message = orderChildStruct.convertMessage(child);
//数媒宝修改卸货之后的运单状态
smbChangeOrderChildStatus(orderInfo,message);
message.setLastFlag(ResultStatusEnum.YES.getCode());
String data = JSON.toJSONString(message);
log.info("开始同步最后一车的运单,运单编号:{},运单信息:{}",child.getChildNo(), data);
OpenCallBackClient openCallBackClient = thirdAppConfig.getOpenCallBackClient(orderInfo.getOrderSource().toString());
Result<?> result = openCallBackClient.encryptPost(data,message.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result));
if(!result.succeed()){
log.error("结束同步最后一车的运单发生异常,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result));
}
return result;
}
//数媒宝卸车之后和完成之前的状态都作为卸车状态
public void smbChangeOrderChildStatus(FeignOrderVO orderInfo,OrderChildMessage message){
if(!Objects.equals(orderInfo.getOrderSource(), SyncPlatformEnum.Source.TRADE_PLATFORM.getCode())){
return;
}
if(message.getStatus() > OrderChildEnum.Status.UNLOAD.getCode() && message.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode()){
message.setStatus(OrderChildEnum.Status.UNLOAD.getCode());
}
}
//在没有算出最后一车的前提下,订单变成已完结或者已完成状态,但是订单量可能并没有提取完,所以只需要判断订单下是否还有未到达 目的地的运单,没有则进行最后一车运算
@Override
public OrderChild getOrderCompleteLastTruck(String orderNo) {
......@@ -151,4 +171,49 @@ public class LastTruckServiceImpl implements LastTruckService {
public String getLastTruckCacheKey(String orderNo){
return RedisConstants.ORDER_LAST_TRUCK_CHILD + orderNo;
}
@Override
public Result<?> syncLastTruck(FeignOrderVO orderInfoFeign, OrderChildMessage after) {
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
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())){
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 = this.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态
child = this.getOrderLastTruck(after.getOrderNo());
}
if(Objects.nonNull(child)){
return this.syncLastTruckChild(child);
}
}
return Result.ok("未查询到最后一车,不进行同步最后一车");
}
/*
* @Author kavin
* @Description
* @Param [orderNo, childNo] 运单号可以是该订单下任意一个运单,为了是触发最后一车
* @return
**/
@Override
public Result<?> handExecSyncSmbLastTruck(String orderNo,String childNo){
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
OrderChild child = orderChildDao.getByChildNo(childNo).get();
OrderChildMessage message = orderChildStruct.convertMessage(child);
return syncLastTruck(orderInfoFeign,message);
}
}
......@@ -208,8 +208,9 @@ public final class NBOpenSDK {
}
private static void unzipJarJar(String jarPath, String srcPath, String dstPath) {
JarFile jarFile = null;
try {
JarFile jarFile = new JarFile(jarPath);
jarFile = new JarFile(jarPath);
Enumeration<JarEntry> entries = jarFile.entries();
while(entries.hasMoreElements()) {
......@@ -233,11 +234,20 @@ public final class NBOpenSDK {
}
} catch (Exception var10) {
var10.printStackTrace();
} finally {
if (jarFile != null) {
try {
jarFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static File unpackToFolder(File jarPath, NBClassLoader classLoader) {
JarFile jarFile = null;
try {
String userDir = System.getProperty("user.dir");
System.out.println("nbsdk-userDir: " + userDir);
......@@ -251,7 +261,7 @@ public final class NBOpenSDK {
}
folder.deleteOnExit();
JarFile jarFile = new JarFile(jarPath);
jarFile = new JarFile(jarPath);
Enumeration<JarEntry> entries = jarFile.entries();
while(entries.hasMoreElements()) {
......@@ -272,6 +282,14 @@ public final class NBOpenSDK {
} catch (Exception var12) {
System.out.println("nbsdk- unpack to folder error" + var12);
throw new RuntimeException(var12);
} finally {
if (jarFile != null) {
try {
jarFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论