提交 dcb76875 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v18.6_youhua_20240701'

# Conflicts: # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/listener/OrderChildDtsListener.java # performance-web/src/main/java/com/clx/performance/service/OrderChildService.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
package com.clx.performance.controller.temp;
import com.clx.open.sdk.callback.message.OrderChildSyncMessage;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.extranal.transport.TransportService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.listener.OrderChildDtsListener;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.TempService;
import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -17,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
* @Author: aiqingguo
......@@ -42,6 +44,9 @@ public class TempController {
@Autowired
private OrderChildDtsListener orderChildDtsListener;
@Autowired
private OrderChildService orderChildService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@RequestMapping(value = "/test", method = RequestMethod.GET)
......@@ -66,6 +71,26 @@ public class TempController {
return Result.ok();
}
@ApiOperation(value = "插入缓存运单预计时间", notes = "<br>By:刘海泉")
@RequestMapping(value = "/saveOrderChildExpectTime", method = RequestMethod.GET)
public Result<Void> saveOrderChildExpectTime(@RequestParam("childNo") @NotBlank(message = "运单号不能为空") String childNo,
@RequestParam("expectArriveTime") @NotBlank(message = "预计到达货源地时间") String expectArriveTime,
@RequestParam("expectReceiveTime") @NotBlank(message = "预计到达目的地时间") String expectReceiveTime) {
OrderChildExpectDTO expect = new OrderChildExpectDTO();
expect.setChildNo(childNo);
expect.setExpectArriveTime(expectArriveTime);
expect.setExpectReceiveTime(expectReceiveTime);
expect.setCreateTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
orderChildService.cacheOrderChildExpectData(childNo,expect);
return Result.ok();
}
// @ApiOperation(value = "更新网运标识", notes = "<br>By:艾庆国")
// @RequestMapping(value = "/updateInvoiceType", method = RequestMethod.POST)
// public Result<Void> updateInvoiceType(String childNo, Integer invoiceType) {
......
......@@ -72,7 +72,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Page<OrderChild> pageOrderChild(PageMonitorOrderChildQCParam param);
List<OrderChild> listOrderChild(List<Integer> status);
List<OrderChild> listOrderChild(List<Integer> status,LocalDateTime startTime,LocalDateTime endTime);
List<OrderChild> getOrderChildByOrderNo(String orderNo);
......@@ -202,4 +202,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listBeforeCompleteByOrderNo(String orderNo);
List<OrderChild> listCompleteByOrderNos(List<String> strings);
List<OrderChild> listBeforeUnloadOrderChild(LocalDateTime startTime,LocalDateTime endTime);
}
......@@ -362,9 +362,11 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public List<OrderChild> listOrderChild(List<Integer> status) {
public List<OrderChild> listOrderChild(List<Integer> status,LocalDateTime startTime,LocalDateTime endTime) {
LambdaQueryWrapper<OrderChild> query = new LambdaQueryWrapper();
query.in(OrderChild :: getStatus,status);
query.ge(OrderChild :: getCreateTime,startTime);
query.le(OrderChild :: getCreateTime,endTime);
return baseMapper.selectList(query);
}
......@@ -673,4 +675,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.le(OrderChild :: getStatus,OrderChildEnum.Status.COMPLETE.getCode())
);
}
@Override
public List<OrderChild> listBeforeUnloadOrderChild(LocalDateTime startTime,LocalDateTime endTime) {
return list(lQrWrapper()
.lt(OrderChild :: getStatus, OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
.ge(OrderChild :: getCreateTime,startTime)
.le(OrderChild :: getCreateTime,endTime)
);
}
}
......@@ -25,6 +25,7 @@ public class OrderChildExpectDTO implements Serializable {
private String truckLatitudeY; //车辆位置维度
private Integer expectTransportTimeSecond;//预计运输时间
private String expectTransportTime;//预计运输时间(转化秒 为几小时几分钟)
private String createTime; //插入缓存的时间
}
package com.clx.performance.job;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.dto.OrderChildExpectTimeDTO;
import com.clx.open.sdk.callback.message.OrderChildExpectTimeMessage;
import com.clx.order.enums.SyncPlatformEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.listener.OrderChildDtsListener;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.msl.common.job.JobLog;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Component
@AllArgsConstructor
public class PushOrderChildExpectTimeJob {
private final OrderChildDao orderChildDao;
private final OrderFeign orderFeign;
private final OrderChildService orderChildService;
private final OrderChildStruct orderChildStruct;
private final DriverService driverService;
private final ThirdAppConfig thirdAppConfig;
private final OrderChildDtsListener orderChildDtsListener;
/**
* 推送运单预计时间到对应的平台
*/
@XxlJob("pushOrderChildExpectTimeJob")
public void pushOrderChildExpectTimeJob() {
try {
pushOrderChildExpectTime2ThirdPlatform();
} catch (Exception e) {
log.warn("定时任务推送运单预计时间到对应的平台失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("定时任务获取平台车辆定位信息失败,异常原因=====================", e);
}
}
//数媒宝对应的运单进行实时预计时间推送
public void pushOrderChildExpectTime2ThirdPlatform(){
log.info("开始查询承运系统未到达目的地前的运单开始===================");
LocalDateTime endTime = LocalDateTime.now();
LocalDateTime startTime = endTime.minusMonths(1);
List<OrderChild> list = orderChildDao.listBeforeUnloadOrderChild(startTime,endTime);
log.info("查询到承运系统未到达目的地前的运单条数:{} 条",list.size());
if(CollectionUtils.isNotEmpty(list)){
List<String> orderNoList = list.stream().map(OrderChild::getOrderNo).collect(Collectors.toList());
Result<Map<String, Integer>> mapResult = orderFeign.queryListOrderSource(orderNoList);
if(!mapResult.succeed()){
log.warn("通过订单编号查询订单来源信息失败,响应结果:{}",mapResult);
return;
}
Map<String, Integer> orderSourceMap = mapResult.getData();
List<OrderChildExpectTimeDTO> syncExpectList = new ArrayList<>();
list.forEach(item->{
//交易平台数媒宝同步运单同步实时预计时间
if(Objects.equals(orderSourceMap.get(item.getOrderNo()),SyncPlatformEnum.Source.TRADE_PLATFORM.getCode())){
List<OrderChildExpectDTO> expectList = orderChildService.getOrderChildExpect(
item.getChildNo());
if(CollectionUtils.isEmpty(expectList) || StringUtils.isBlank(expectList.get(0).getCreateTime())){
log.info("运单号:{} 未从缓存中查询到对应的预计时间信息",item.getChildNo());
return;
}
OrderChildExpectDTO orderChildExpect = expectList.get(0);
LocalDateTime calcExpectTime = DateUtils.parseDateTime(orderChildExpect.getCreateTime()).get();
//如果缓存预计时间 插入的不是10分钟之内的,则不进行使用
if(LocalDateTimeUtils.betweenMin(calcExpectTime,LocalDateTime.now()) > 10){
log.info("运单号:{} 从缓存中查询到对应的预计时间信息超过10分钟,不进行使用",item.getChildNo());
return;
}
OrderChildExpectTimeDTO dto = new OrderChildExpectTimeDTO();
dto.setOrderNo(item.getOrderNo());
dto.setChildNo(item.getChildNo());
dto.setStatus(item.getStatus());
if(item.getStatus() < OrderChildEnum.Status.ARRIVE_SEND.getCode()){ //到达货源地之前
dto.setExpectArriveTime(orderChildExpect.getExpectArriveTime());
}else{ //到达货源地之后 && 到达目的地之前
dto.setExpectReceiveTime(orderChildExpect.getExpectReceiveTime());
}
syncExpectList.add(dto);
}
});
if(CollectionUtils.isNotEmpty(syncExpectList)){
OrderChildExpectTimeMessage message = new OrderChildExpectTimeMessage();
message.setList(syncExpectList);
String data = JSON.toJSONString(message);
OpenCallBackClient openCallBackClient = thirdAppConfig.getOpenCallBackClient(
SyncPlatformEnum.Source.TRADE_PLATFORM.getCode().toString());
log.info("运单预计时间信息同步开始,请求参数:{}",data);
Result<?> result = openCallBackClient.encryptPost(data,message.topic());
log.info("运单预计时间信息同步,响应结果:{}",JSON.toJSONString(result));
}
}
}
}
......@@ -3,7 +3,6 @@ package com.clx.performance.job;
import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.service.trace.TruckTraceMqService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.user.feign.UserClxFeign;
......@@ -13,14 +12,13 @@ import com.msl.common.result.Result;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
......@@ -35,8 +33,6 @@ public class TruckTraceJob {
@Autowired
RedisTemplate redisTemplate;
@Autowired
private TruckTraceMqService truckTraceMqService;
/**
......@@ -47,7 +43,7 @@ public class TruckTraceJob {
try {
getPlatformTruckTrace();
} catch (Exception e) {
log.warn("定时任务获取平台车辆定位信息失败,异常原因:{}",e);
log.warn("定时任务获取平台车辆定位信息失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("定时任务获取平台车辆定位信息失败,异常原因=====================", e);
}
}
......@@ -62,7 +58,7 @@ public class TruckTraceJob {
Result<List<String>> result = userClxFeign.getPlatformTruckList();
log.info("通过clx-user服务获取平台认证成功车辆,返回结果:{}", JSON.toJSONString(result));
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.plus(-5, ChronoUnit.MINUTES);
LocalDateTime beginTime = now.minusMinutes(5);
if(Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){
//本次拉取定位信息成功的车辆
......@@ -74,9 +70,7 @@ public class TruckTraceJob {
LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(now));
if(CollectionUtils.isNotEmpty(truckTrace)){
//排序获取最新的定位位置
truckTrace.stream().sorted(Comparator.comparing(TruckTraceDTO::getGpsTime));
TruckTraceDTO truckTraceDTO = truckTrace.get(0);
TruckTraceDTO truckTraceDTO = truckTrace.get(truckTrace.size()-1);
truckTraceDTO.setTruckNo(truckNo);
redisTemplate.opsForHash().put(RedisConstants.ZJXL_TRUCK_TRACE_LIST,truckNo,truckTraceDTO);
log.info("放入缓存成功,滚存 key:{},车牌号{}",RedisConstants.ZJXL_TRUCK_TRACE_LIST,truckNo);
......@@ -84,10 +78,12 @@ public class TruckTraceJob {
}
}
//获取上次拉取的车辆
if(redisTemplate.hasKey(RedisConstants.ZJXL_LAST_PULL_TRUCK)){
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(RedisConstants.ZJXL_LAST_PULL_TRUCK))){
List<String> lastTimeTruck= redisTemplate.opsForList().range(RedisConstants.ZJXL_LAST_PULL_TRUCK,0,-1);//获取上次拉取的车辆列表
//上次拉取的车辆 去除掉 本次拉运的车辆 = 本次没有拉取的车辆(可能车辆过期,删除了,所以此类数据不需要在缓存中存在了)
lastTimeTruck.removeAll(pullTruckList);
if(CollectionUtils.isNotEmpty(lastTimeTruck)){
lastTimeTruck.removeAll(pullTruckList);
}
if(CollectionUtils.isNotEmpty(lastTimeTruck)){
//移除掉本次没拉运的定位信息
redisTemplate.opsForHash().delete(RedisConstants.ZJXL_TRUCK_TRACE_LIST,lastTimeTruck.toArray());
......
......@@ -15,22 +15,28 @@ import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.OrderChildPoundAuditEnum;
import com.clx.performance.event.OrderChildCancelEvent;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderChildImage;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.feign.FeignDriverTruckModelVo;
import com.clx.user.vo.feign.TruckInfoFeignVo;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
......@@ -40,6 +46,8 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
......@@ -58,6 +66,8 @@ public class OrderChildDtsListener {
private final RabbitTemplate rabbitTemplate;
private final OrderGoodsDao orderGoodsDao;
private final TruckFeign truckFeign;
private final OrderChildImageDao orderChildImageDao;
......@@ -87,7 +97,8 @@ public class OrderChildDtsListener {
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) &&
(!Objects.equals(before.getStatus(),after.getStatus()) ||
!Objects.equals(before.getLoadNet(),after.getLoadNet())) ||
!Objects.equals(before.getUnloadNet(),after.getUnloadNet())
!Objects.equals(before.getUnloadNet(),after.getUnloadNet()) ||
!Objects.equals(before.getPoundStatus(),after.getPoundStatus())
){
orderChildChangeAfter(after);
}
......@@ -125,6 +136,8 @@ public class OrderChildDtsListener {
FeignDriverTruckModelVo dumpType = driverService.getDumpType(truckModel).orElseThrow(ResultCodeEnum.FAIL);
after.setDumpType(dumpType.getDumpType());
}
buildOrderOtherInfo(after);
//同步after数据
Optional<OrderChildEnum.Status> option = OrderChildEnum.Status.getByCode(after.getStatus());
String statusName = option.isPresent()?option.get().getName():"未知状态";
......@@ -167,6 +180,42 @@ public class OrderChildDtsListener {
}
}
}
//构建运单其它信息
public void buildOrderOtherInfo(OrderChildMessage after){
//查询挂车车牌号
if(Objects.nonNull(after.getTruckId())){
log.info("通过车辆id:{} 开始查找运单号:{},车牌号:{} 对应的车辆信息开始查询===",
after.getTruckId(),after.getChildNo(),after.getTruckNo());
Result<TruckInfoFeignVo> result = truckFeign.getTruckInfo(after.getTruckId());
if(!result.succeed()){
log.warn("通过车辆id:{} 开始查找运单号:{},车牌号:{} 的车辆信息未查询到,响应结果:{}",
after.getTruckId(),after.getChildNo(),after.getTruckNo(),result);
}else{
log.warn("通过车辆id:{} 开始查找运单号:{},车牌号:{} 查询到对应的车辆信息,响应结果:{}",
after.getTruckId(),after.getChildNo(),after.getTruckNo(),result);
after.setTruckNo2(result.getData().getTruckNo2());
}
}
//查询收发货地对应的磅单图片信息,
if(Objects.equals(after.getPoundStatus(), OrderChildPoundAuditEnum.Status.APPROVED.getCode())){
List<OrderChildImage> orderChildImages = orderChildImageDao.listByField(OrderChildImage::getChildNo,
after.getChildNo());
if(CollectionUtils.isNotEmpty(orderChildImages)){
List<String> sendAddressPoundPicList = new ArrayList<>();
List<String> receiveAddressPoundPicList = new ArrayList<>();
orderChildImages.forEach(item->{
if(Objects.equals(item.getType(),OrderChildImage.Type.LOAD.getCode())){
sendAddressPoundPicList.add(item.getImage());
}
if(Objects.equals(item.getType(),OrderChildImage.Type.UNLOAD.getCode())){
receiveAddressPoundPicList.add(item.getImage());
}
});
after.setSendAddressPoundPicList(sendAddressPoundPicList);
after.setReceiveAddressPoundPicList(receiveAddressPoundPicList);
}
}
}
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
......
package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.*;
......@@ -104,4 +105,8 @@ public interface OrderChildService {
OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param);
List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo);
List<OrderChildExpectDTO> getOrderChildExpect(String orderChildNo);
void cacheOrderChildExpectData(String childNo, OrderChildExpectDTO expect);
}
......@@ -2601,13 +2601,13 @@ public class OrderChildServiceImpl implements OrderChildService {
RedisConstants.ZJXL_TRUCK_TRACE_LIST);
//查询平台未完结的运单
List<Integer> list = Arrays.asList(
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()});
List<OrderChild> orderChildList = orderChildDao.listOrderChild(list);
List<Integer> list = Arrays.asList(OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(), OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(),
OrderChildEnum.Status.UNLOAD.getCode(), OrderChildEnum.Status.UNSETTLE.getCode());
LocalDateTime endTime = LocalDateTime.now();
LocalDateTime startTime = endTime.minusMonths(1);
List<OrderChild> orderChildList = orderChildDao.listOrderChild(list,startTime,endTime);
for (OrderChild child : orderChildList) {
String childNo = child.getChildNo();
......@@ -2669,6 +2669,7 @@ public class OrderChildServiceImpl implements OrderChildService {
expect.setExpectReceiveTime(DateUtils.formatDateTime(expectTime).get());
expect.setExpectReceiveTimeSecond(plusTime);
}
expect.setCreateTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
cacheOrderChildExpectData(childNo,expect);
}
}
......@@ -2691,6 +2692,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* @Description 缓存实时计算的运单预计时间
* @Param [orderChildNo, expect]
**/
@Override
public void cacheOrderChildExpectData(String orderChildNo, OrderChildExpectDTO expect) {
String orderChildExpectDataKey = getOrderChildExpectDataKey(orderChildNo);
//计算结果20分钟过期。定时每5分钟执行一次。所以在此记录过期前,该运单会生成四条记录。保留最新的两条记录即可,剩下两条不再结果集中记录。
......@@ -2720,6 +2722,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* @Param [orderChildNo]
* @return
**/
@Override
public List<OrderChildExpectDTO> getOrderChildExpect(String orderChildNo){
List<String> keyList = (List<String>) redisTemplate.opsForHash().get(
RedisConstants.ORDER_CHILD_EXPECT_TIME_DATA_KEY_MAP, orderChildNo);
......
......@@ -38,4 +38,5 @@ public interface OrderChildStruct {
List<LineWarnTruckTraceInfoVO> convertLineWarnTruckTraceInfoVO(List<OrderChild> list);
OrderChildMessage convert2Message(OrderChild item);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论