提交 03b95383 authored 作者: liruixin's avatar liruixin

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into…

Merge remote-tracking branch 'origin/v5.7_break_contract_reverse_20231020' into v5.7_break_contract_reverse_20231020
...@@ -152,7 +152,7 @@ public class GoodsOrderController { ...@@ -152,7 +152,7 @@ public class GoodsOrderController {
} }
@ApiOperation(value = "取消货单", notes = "<br>By:胡宇帆") @ApiOperation(value = "取消货单", notes = "<br>By:胡宇帆")
@GetMapping("/orderGoodsCancel") @PostMapping("/orderGoodsCancel")
public Result<Object> orderGoodsCancel(@RequestBody OrderGoodsCancelParam param) { public Result<Object> orderGoodsCancel(@RequestBody OrderGoodsCancelParam param) {
orderGoodsService.orderGoodsCancel(param); orderGoodsService.orderGoodsCancel(param);
return Result.ok(); return Result.ok();
...@@ -164,6 +164,12 @@ public class GoodsOrderController { ...@@ -164,6 +164,12 @@ public class GoodsOrderController {
return Result.ok(orderGoodsService.orderCancelResidueWeight(orderNo,optionType)); return Result.ok(orderGoodsService.orderCancelResidueWeight(orderNo,optionType));
} }
@ApiOperation(value = "获取当前货单可取消吨数", notes = "<br>By:胡宇帆")
@PostMapping("/orderGoodsCancelResidueWeight")
public Result<BigDecimal> orderGoodsCancelResidueWeight(@RequestBody OrderGoodsCancelParam goodsCancelParam) {
return Result.ok(orderGoodsService.orderGoodsCancelResidueWeight(goodsCancelParam));
}
@ApiOperation(value = "调整货单价格", notes = "<br>By:刘海泉") @ApiOperation(value = "调整货单价格", notes = "<br>By:刘海泉")
@PostMapping("/updateOrderGoodsPrice") @PostMapping("/updateOrderGoodsPrice")
@UnitCovert(result = false) @UnitCovert(result = false)
......
...@@ -95,4 +95,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -95,4 +95,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
void batchUpdateOrderChildStatus(Integer status, List<Integer> ids); void batchUpdateOrderChildStatus(Integer status, List<Integer> ids);
List<OrderChild> selectOrderChildListByOrderGoodsNoAndStatusGE(String orderGoodsNo, Integer status);
} }
...@@ -7,6 +7,7 @@ import com.msl.common.dao.BaseDao; ...@@ -7,6 +7,7 @@ import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @Author: huyufan * @Author: huyufan
...@@ -40,4 +41,5 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -40,4 +41,5 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<OrderGoodsTruckBind> getTrucksBindByOrderGoodsNo(String orderGoodsNo,String truckNo); List<OrderGoodsTruckBind> getTrucksBindByOrderGoodsNo(String orderGoodsNo,String truckNo);
List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set);
} }
...@@ -295,6 +295,12 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -295,6 +295,12 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
baseMapper.updateOrderGoodsSetResidueWeight(status, ids); baseMapper.updateOrderGoodsSetResidueWeight(status, ids);
} }
@Override
public List<OrderChild> selectOrderChildListByOrderGoodsNoAndStatusGE(String orderGoodsNo, Integer status) {
return baseMapper.selectList(lQrWrapper().eq(OrderChild::getOrderGoodsNo, orderGoodsNo)
.ge(ObjectUtil.isNotNull(status),OrderChild::getStatus, status)
); }
@Override @Override
public List<OrderChild> getOrderChildByOrderNo(String orderNo) { public List<OrderChild> getOrderChildByOrderNo(String orderNo) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper(); LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
......
...@@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository; ...@@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @Author: huyufan * @Author: huyufan
...@@ -124,4 +125,12 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -124,4 +125,12 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
query.orderByDesc(OrderGoodsTruckBind :: getCreateTime); query.orderByDesc(OrderGoodsTruckBind :: getCreateTime);
return baseMapper.selectList(query); return baseMapper.selectList(query);
} }
@Override
public List<OrderGoodsTruckBind> judgeTruckIsBindDxOrder(Set<String> set) {
LambdaQueryWrapper<OrderGoodsTruckBind> query = new LambdaQueryWrapper<>();
query.in(OrderGoodsTruckBind::getTruckNo, set);
query.in(OrderGoodsTruckBind :: getStatus,OrderGoodsTruckBindEnum.Status.SUCCESS.getCode(),OrderGoodsTruckBindEnum.Status.GET.getCode());
return baseMapper.selectList(query);
}
} }
...@@ -65,5 +65,12 @@ public interface OrderGoodsService { ...@@ -65,5 +65,12 @@ public interface OrderGoodsService {
*/ */
void orderGoodsCancel(OrderGoodsCancelParam orderGoodsNo); void orderGoodsCancel(OrderGoodsCancelParam orderGoodsNo);
/**
* 查看货单可取消吨数
* @param goodsCancelParam
* @return
*/
BigDecimal orderGoodsCancelResidueWeight(OrderGoodsCancelParam goodsCancelParam);
List<String> getOrderChildTruckList(String orderGoodsNo); List<String> getOrderChildTruckList(String orderGoodsNo);
} }
...@@ -62,7 +62,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -62,7 +62,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
} }
log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam(); OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("1"); mqParam.setType("1");
mqParam.setOrderNo(orderNo); mqParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build(); Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
...@@ -130,7 +130,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -130,7 +130,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} }
log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); log.info("执行平台订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam(); OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("1"); mqParam.setType("1");
mqParam.setOrderNo(orderNo); mqParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build(); Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
...@@ -314,7 +314,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -314,7 +314,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败"); throw new RuntimeException("货主取消订单失败,原因:远程调用取消订单失败");
} }
log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam(); OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("2"); mqParam.setType("2");
mqParam.setOrderNo(orderNo); mqParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build(); Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
...@@ -357,18 +357,18 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -357,18 +357,18 @@ public class OrderCancelServiceImpl implements OrderCancelService {
//货单还有余量,是已完结 //货单还有余量,是已完结
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} else { } else {
List<OrderChild> orderChildrenListComplete = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.COMPLETE.getCode()); List<OrderChild> orderChildrenListComplete = orderChildDao.selectOrderChildListByOrderGoodsNoAndStatusGE(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) { if (CollectionUtil.isNotEmpty(orderChildrenListComplete)) {
Map<String, List<OrderChild>> orderChildCompleteMap = orderChildrenListComplete.stream()
.collect(Collectors.groupingBy(OrderChild::getOrderGoodsNo));
//没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结 //没有余量,需要判断已完成的运单量是不等于货单的全部提取量,等于则是已完成,否则是已完结
List<OrderChild> childList = orderChildCompleteMap.get(orderGoods.getOrderGoodsNo()); BigDecimal reduce = orderChildrenListComplete.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal reduce = childList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) { if (reduce.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} else { } else {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
} }
} else {
//虽然没有余量,但是可以取消的运单都是未到达货源地的
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} }
} }
...@@ -382,7 +382,7 @@ public class OrderCancelServiceImpl implements OrderCancelService { ...@@ -382,7 +382,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
} }
log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo); log.info("执行货主订单取消前置:更改相关状态完毕,开始执行吨数回填,发送MQ消息,订单No {}", orderNo);
OrderCancelMqParam mqParam = new OrderCancelMqParam(); OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("2"); mqParam.setType("2");
mqParam.setOrderNo(orderNo); mqParam.setOrderNo(orderNo);
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build(); Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
......
...@@ -389,6 +389,48 @@ public class OrderGoodsServiceImpl implements OrderGoodsService { ...@@ -389,6 +389,48 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
} }
@Override
public BigDecimal orderGoodsCancelResidueWeight(OrderGoodsCancelParam goodsCancelParam) {
String orderGoodsNo = goodsCancelParam.getOrderGoodsNo();
Optional<OrderGoods> optional = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo);
if (!optional.isPresent()) {
return null;
}
OrderGoods orderGoods = optional.get();
List<OrderChild> orderChildList = null;
BigDecimal residueWeight = null;
BigDecimal sum = BigDecimal.ZERO;
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
Integer cancelOperateType = goodsCancelParam.getCancelOperateType();
switch (cancelOperateType){
case 1:
case 2:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.ARRIVE_SEND.getCode());
if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
return residueWeight;
case 3:
orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo(), OrderChildEnum.Status.LOAD.getCode(), goodsCancelParam.getTruckList());
if (CollectionUtils.isNotEmpty(orderChildList)) {
sum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
residueWeight = orderGoods.getResidueTransportWeight().add(sum);
return residueWeight;
default:
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "参数类型有误");
}
}
@Override @Override
public List<String> getOrderChildTruckList(String orderGoodsNo) { public List<String> getOrderChildTruckList(String orderGoodsNo) {
List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoodsNo, OrderChildEnum.Status.LOAD.getCode()); List<OrderChild> orderChildList = orderChildDao.selectResidueWeightByOrderGoodsNo(orderGoodsNo, OrderChildEnum.Status.LOAD.getCode());
......
...@@ -2,21 +2,31 @@ package com.clx.performance.strategy; ...@@ -2,21 +2,31 @@ package com.clx.performance.strategy;
import com.clx.order.enums.OrderStopEnum; import com.clx.order.enums.OrderStopEnum;
import com.clx.order.enums.ResultEnum; import com.clx.order.enums.ResultEnum;
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.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.utils.SpringContextUtils;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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 java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j @Slf4j
public abstract class GoodsOrderStrategy { public abstract class GoodsOrderStrategy {
/** /**
* 不同的用车需求执行不同的策略 1:one 2:two 3:three * 不同的用车需求执行不同的策略 1:one 2:two 3:three
* 用车需求: 1平台车辆 2部分平台车辆 3自有车辆 * 用车需求: 1平台车辆 2部分平台车辆 3自有车辆
...@@ -33,6 +43,28 @@ public abstract class GoodsOrderStrategy { ...@@ -33,6 +43,28 @@ public abstract class GoodsOrderStrategy {
if(Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())){ if(Objects.equals(orderInfo.getStopFlag(), OrderStopEnum.Status.YES.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"订单已暂停,无法进行提量"); throw new ServiceSystemException(ResultEnum.DATA_ERROR,"订单已暂停,无法进行提量");
} }
//多个定向单不允许车辆重复
List<OrderGoodsChildParams> orderGoodsChildParams = orderGoodsParams.getOrderGoodsChildParams();
Set<String> set = new HashSet<>();
int i = 0;
for (OrderGoodsChildParams item : orderGoodsChildParams) {
if(CollectionUtils.isNotEmpty(item.getTruckList())){
set.addAll(item.getTruckList());
i = i+item.getTruckList().size();
}
}
if(!Objects.equals(set.size(),i) ){
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"定向单选择车辆重复");
}
OrderGoodsTruckBindDao orderGoodsTruckBindDao = SpringContextUtils.getBeanByClass(OrderGoodsTruckBindDao.class);
List<OrderGoodsTruckBind> binds = orderGoodsTruckBindDao.judgeTruckIsBindDxOrder(set);
if(CollectionUtils.isNotEmpty(binds)){
List<String> repeatBind = binds.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
String trucks = String.join(", ", repeatBind);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"已被定向单绑定车辆:"+ trucks);
}
//根据不同的订单类型创建不同的货单 //根据不同的订单类型创建不同的货单
LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now); LocalDateTime sendLazyTime = goodsOrderProcess(orderGoodsParams, orderInfo, now);
......
package com.clx.performance.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
/**
*
* Spring 工具类
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
private static ConfigurableApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext = (ConfigurableApplicationContext) context;
}
/**
* 获取ApplicationContext对象
*/
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 停止应用程序
*/
public static void close(){
if(applicationContext != null){
applicationContext.close();
}
}
/**
* 根据bean的名称获取bean
*/
public static Object getBeanByName(String name){
return applicationContext.getBean(name);
}
/**
* 根据bean的class来查找对象
*/
public static <T> T getBeanByClass(Class<T> clazz){
return applicationContext.getBean(clazz);
}
/**
* 根据bean的class来查找所有的对象(包括子类)
*/
public static <T> Map<String, T> getBeansByClass(Class<T> c){
return applicationContext.getBeansOfType(c);
}
/**
* 获取HttpServletRequest
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attributes.getRequest();
}
/**
* 获取HttpSession
*/
public static HttpSession getSession() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attributes.getRequest().getSession();
}
/**
* 获取完整的请求URL
*/
public static String getRequestUrl(){
return getRequestUrl(getRequest());
}
/**
* 获取完整的请求URL
*/
public static String getRequestUrl(HttpServletRequest request){
//当前请求路径
String currentUrl = request.getRequestURL().toString();
//请求参数
String queryString = request.getQueryString();
if(!StringUtils.isEmpty(queryString)){
currentUrl = currentUrl + "?" + queryString;
}
String result = "";
try {
result = URLEncoder.encode(currentUrl,"UTF-8");
} catch (UnsupportedEncodingException e) {
//ignore
}
return result;
}
/**
* 获取请求的客户端IP
*/
public static String getRequestIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if(index != -1){
return ip.substring(0,index);
}else{
return ip;
}
}
ip = request.getHeader("X-Real-IP");
if(StringUtils.isNoneBlank(ip) && !"unKnown".equalsIgnoreCase(ip)){
return ip;
}
return request.getRemoteAddr();
}
}
\ No newline at end of file
...@@ -52,17 +52,15 @@ public class JobTest { ...@@ -52,17 +52,15 @@ public class JobTest {
@Test @Test
public void test1() { public void test1() {
OrderCancelMqParam mqParam = new OrderCancelMqParam(); // OrderCancelMqParam mqParam = new OrderCancelMqParam();
mqParam.setType("2"); // mqParam.setType("2");
mqParam.setOrderNo("123"); // mqParam.setOrderNo("123");
Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build(); // Message message = MessageBuilder.withBody(JSONUtil.parse(mqParam).toString().getBytes()).build();
rabbitTemplate.send( // rabbitTemplate.send(
RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message // RabbitKeyConstants.ORDER_CANCEL_EXCHANGE, RabbitKeyConstants.ORDER_CANCEL_ROUTE_KEY, message
); // );
//CX2023092600223 平台已承接的订单,没有产生货单
//CX2023101600386 truckDemand 类型是2,且有货单,有运单, 没有未到达货源地的运单 orderCancelService.ownerCancelOrderPre("PT2023102700473");
//PT2023092600207 类型都是1,且有运单
//orderCancelService.ownerCancelOrderPre("PT2023102700469");
//orderCancelService.ownerCancelOrder("PT2023102600466"); //orderCancelService.ownerCancelOrder("PT2023102600466");
System.out.println(); System.out.println();
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论