Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

czh 2 лет назад
Родитель
Сommit
b20f899e64
30 измененных файлов с 1763 добавлено и 307 удалено
  1. 21 0
      pom.xml
  2. 408 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java
  3. 63 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringTimeUtil.java
  4. 77 4
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  5. 39 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/GpsByTruckNoDto.java
  6. 2 2
      sckw-modules/sckw-fleet/src/main/resources/bootstrap-dev.yml
  7. 3 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerSuccessReq.java
  8. 4 6
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java
  9. 8 8
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java
  10. 4 5
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java
  11. 8 8
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeSendReq.java
  12. 18 7
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  13. 19 7
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java
  14. 515 34
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java
  15. 0 50
      sckw-modules/sckw-report/src/main/java/com/sckw/report/enums/CarWaybillEnum.java
  16. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java
  17. 28 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  18. 38 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java
  19. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  20. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  21. 8 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateSendCarDto.java
  22. 28 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateWaybillDto.java
  23. 10 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderFinishDTO.java
  24. 26 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java
  25. 11 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  26. 177 113
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  27. 157 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  28. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  29. 15 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  30. 52 35
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 21 - 0
pom.xml

@@ -428,4 +428,25 @@
             </resource>
         </resources>
     </build>
+    <profiles>
+
+        <profile>
+            <id>dev</id>
+            <properties>
+                <profiles.active>dev</profiles.active>
+                <nacos.server>10.10.10.230:8848</nacos.server>
+                <nacos.namespace>sckw-service-platform-dev</nacos.namespace>
+            </properties>
+        </profile>
+        <!--测试环境-->
+        <profile>
+            <id>test</id>
+            <properties>
+                <profiles.active>test</profiles.active>
+                <nacos.server>10.10.10.224:8848</nacos.server>
+                <nacos.namespace>sckw-service-platform</nacos.namespace>
+            </properties>
+        </profile>
+    </profiles>
+
 </project>

+ 408 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java

@@ -0,0 +1,408 @@
+package com.sckw.core.utils;
+
+import cn.hutool.core.date.DateUtil;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
+
+/**
+ * 日期处理
+ * @author
+ */
+public class DateUtils extends DateUtil {
+    /**
+     * 时间格式(yyyy-MM-dd)
+     */
+    public final static String DATE_PATTERN = "yyyy-MM-dd";
+    /**
+     * 时间格式(yyyy-MM-dd HH:mm:ss)
+     */
+    public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+    public static String FORMAT2 = "yyyy-MM-dd HH:mm:ss";
+
+    public static String FORMAT3 = "yyyyMMddHHmmss";
+
+    public static String FORMAT4 = "yyMMddHHmmss";
+
+    public static String FORMAT5 = "yyMMddHHmmssSSS";
+
+    public static String FORMAT6 = "yyyyMMdd";
+
+    public static String FORMAT7 = "yyyy-MM-dd HH:mm";
+
+    public static String FORMAT8 = "yyMMdd";
+
+    public static String FORMAT9 = "yyyy/MM/dd";
+
+    public static String FORMAT10 = "yyyy-MM";
+
+    public static int THIRTEEN = 13;
+
+    /**
+     * 获取时间
+     *
+     * @return 返回当前时间
+     */
+    public static Date getDate() {
+        return new Date();
+    }
+
+    public static String getCurrentTime() {
+        Date day = new Date();
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        System.out.println(df.format(day));
+        return df.format(day);
+    }
+
+    public static String getCurrentTime(String format) {
+        Date day = new Date();
+        SimpleDateFormat df = new SimpleDateFormat(format);
+        System.out.println(df.format(day));
+        return df.format(day);
+    }
+
+    /**
+     * 获取时间
+     *
+     * @param timeStamp 时间戳
+     * @return Date
+     */
+    public static Date getDate(Long timeStamp) {
+        if (timeStamp == null || timeStamp <= 0) {
+            return null;
+        }
+        return new Date(timeStamp);
+    }
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     *
+     * @param date 日期
+     * @return 返回yyyy-MM-dd格式日期
+     */
+    public static String format(Date date) {
+        return format(date, DATE_PATTERN);
+    }
+
+    /**
+     * 日期格式化 日期格式为:yyyy-MM-dd
+     *
+     * @param date    日期
+     * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN
+     * @return 返回yyyy-MM-dd格式日期
+     */
+    public static String format(Date date, String pattern) {
+        if (date != null) {
+            SimpleDateFormat df = new SimpleDateFormat(pattern);
+            return df.format(date);
+        }
+        return null;
+    }
+
+    /**
+     * @param date
+     * @return String    返回类型
+     * @Title: getYear
+     * @Description: TODO(获取YYYY格式)
+     */
+    public static String getYear(Date date) {
+        return format(date, "yyyy");
+    }
+
+    /**
+     * @param date
+     * @return String    返回类型
+     * @Title: getMonth
+     * @Description: 获取月(获取MM格式)
+     */
+    public static String getMonth(Date date) {
+        return format(date, "MM");
+    }
+
+    /**
+     * @param date
+     * @return String    返回类型
+     * @Title: getTheDay
+     * @Description: 获取日期的天(dd格式)
+     */
+    public static String getTheDay(Date date) {
+        return format(date, "dd");
+    }
+
+    /**
+     * 方法描述:将时间转换为制定格式的日期时间字符串
+     * @param date
+     * @return
+     */
+    public static String dateToString(Date date, String pattern) {
+        SimpleDateFormat df;
+        String returnValue = "";
+
+        if (date != null) {
+            df = new SimpleDateFormat(pattern);
+            returnValue = df.format(date);
+        }
+        return (returnValue);
+    }
+
+    /**
+     * @param beginDateStr
+     * @param endDateStr
+     * @return long    返回类型
+     * @Title: getDaySub
+     * @Description: TODO(功能描述 : 时间相减得到天数)
+     */
+    public static long getDaySub(String beginDateStr, String endDateStr) {
+        long day = 0;
+        SimpleDateFormat format = new SimpleDateFormat(
+                "yyyy-MM-dd");
+        Date beginDate = null;
+        Date endDate = null;
+
+        try {
+            beginDate = format.parse(beginDateStr);
+            endDate = format.parse(endDateStr);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
+        // System.out.println("相隔的天数="+day);
+
+        return day;
+    }
+
+    /**
+     * 10位13位时间戳转String 格式(2018-10-15 16:03:27) 日期
+     *
+     * @param timestamp
+     * @param simpleDateFormatType 时间戳类型("yyyy-MM-dd HH:mm:ss")
+     * @return
+     */
+    public static String numberDateFormat(String timestamp, String simpleDateFormatType) {
+        SimpleDateFormat sdf = new SimpleDateFormat(simpleDateFormatType);//要转换的时间格式
+        String date = null;
+        if (timestamp.length() == THIRTEEN) {
+            date = sdf.format(Long.parseLong(timestamp));
+        } else {
+            date = sdf.format(Long.parseLong(timestamp) * 1000);
+        }
+        return date;
+    }
+
+    /**
+     * 10位13位时间戳转Date
+     *
+     * @param timestamp            参数时间戳
+     * @param simpleDateFormatType 时间戳类型("yyyy-MM-dd HH:mm:ss")
+     * @return
+     */
+    public static Date numberDateFormatToDate(String timestamp, String simpleDateFormatType) {
+        SimpleDateFormat sdf = new SimpleDateFormat(simpleDateFormatType);//要转换的时间格式
+        Date date = null;
+        try {
+            if (timestamp.length() == THIRTEEN) {
+                date = sdf.parse(sdf.format(Long.parseLong(timestamp)));
+            } else {
+                date = sdf.parse(sdf.format(Long.parseLong(timestamp) * 1000));
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return date;
+    }
+
+    /**
+     * Date转10位13位时间戳
+     *
+     * @param date 参数date
+     * @param n    需要转换成几位时间戳
+     * @return
+     */
+    public static String numberDateFormatToDate(Date date, int n) {
+        String result = null;
+        if (n == THIRTEEN) {
+            result = String.valueOf(date.getTime());
+        } else {
+            result = String.valueOf(date.getTime() / 1000);
+        }
+        return result;
+    }
+
+    /**
+     * @Author:Bernie
+     * @Params: seconds 秒数
+     * @Description: 通过秒数转换为时分秒
+     * @Date: 2019/7/18 0018 16:46
+     */
+    public static String getTimeBySecond(long seconds) {
+        long days = seconds / 86400;//转换天数
+        seconds = seconds % 86400;//剩余秒数
+        long hours = seconds / 3600;//转换小时数
+        seconds = seconds % 3600;//剩余秒数
+        long minutes = seconds / 60;//转换分钟
+        seconds = seconds % 60;//剩余秒数
+        if (0 < days) {
+            return days + "天," + hours + "小时," + minutes + "分," + seconds + "秒";
+        } else {
+            return (hours == 0 ? "00" : (hours >= 10 ? hours : "0" + hours)) + ":" + (minutes == 0 ? "00" : (minutes >= 10 ? minutes : "0" + minutes)) + ":" + (seconds == 0 ? "00" : (seconds >= 10 ? seconds : "0" + seconds)) + "秒";
+        }
+
+    }
+
+    /**
+     * @return java.lang.String
+     * @Description 转换iso格式
+     * @Author CHENJUN
+     * @Date 2020/7/10 14:49
+     * @params [isoDate]
+     */
+    public static long getDateFromISO(String isoDate) {
+        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+//        DateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            return sdf.parse(isoDate).getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    public static long getDateFromDate(String date) {
+        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        DateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            return sdf.parse(date).getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    public static int getDifference(String start, String end) {
+        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
+        /*天数差*/
+        Date fromDate1 = null, toDate1 = null;
+        try {
+            fromDate1 = simpleFormat.parse(start);
+            toDate1 = simpleFormat.parse(end);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        long from1 = fromDate1.getTime();
+        long to1 = toDate1.getTime();
+        int days = (int) ((to1 - from1) / (1000 * 60 * 60 * 24));
+        System.out.println("两个时间之间的天数差为:" + days);
+        return days;
+    }
+
+    /**
+     * @return 以小数格式显示的小时
+     * @Description 将毫秒转换成以小数格式显示的小时
+     * @Author SuiYingying
+     * @Date 2021/12/24 14:49
+     * @params time 毫秒格式的时间
+     */
+    public static String getHoursForLong(Long time) {
+        float newTime;
+        time = time / 1000;
+        newTime = (float) time % (1000 * 60 * 60 * 24) / (1000 * 60 * 60);
+        newTime = newTime * 1000;
+        return String.format("%.5f", newTime);
+    }
+
+
+    public static void main(String[] ager) throws InterruptedException {
+
+    }
+
+    /**
+     * ltf 获取
+     * 获取指定日期所在周的周一
+     * @param date
+     * @return
+     */
+    public static Date getFirstDayOfWeek(Date date) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        if (c.get(Calendar.DAY_OF_WEEK) == 1) {
+            c.add(Calendar.DAY_OF_MONTH, -1);
+        }
+        c.add(Calendar.DATE, c.getFirstDayOfWeek() - c.get(Calendar.DAY_OF_WEEK) + 1);
+        return c.getTime();
+    }
+    /**
+     * 获取startDate日期后month月的日期
+     * @param startDate 开始日期
+     * @param month  几个月后
+     * @author wenzhang
+     * @return
+     */
+    public static Date getMonthDate(Date startDate, int month){
+        LocalDateTime localDateTime = startDate.toInstant()
+                .atZone(ZoneId.systemDefault() )
+                .toLocalDateTime().plusMonths(month);
+        Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
+        return date;
+    }
+
+    /**
+     *
+     * @param days
+     * @author wenzhang
+     * @return
+     */
+    public static Date getDateAdd(int days){
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DAY_OF_MONTH, days);
+        return c.getTime();
+
+    }
+
+    /**
+     * 计算两个日期的月数
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static int getMonthSpace(String startDate, String endDate) throws Exception {
+        int monthCount = 0;
+        Calendar startCalendar = Calendar.getInstance();
+        Calendar endCalendar = Calendar.getInstance();
+        startCalendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(startDate));
+        endCalendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(endDate));
+
+        int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
+        int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
+        int day = Math.abs(endCalendar.get(Calendar.DATE) - startCalendar.get(Calendar.DATE));
+
+        if (year == 0 && month == 0){
+            startCalendar.set(Calendar.DATE, 1);
+            endCalendar.set(Calendar.DATE, 1);
+            endCalendar.roll(Calendar.DATE, -1);
+            if (day == (endCalendar.get(Calendar.DATE) - startCalendar.get(Calendar.DATE))) {
+                monthCount = 1;// 两日期间满一个月
+            } else {
+                monthCount = 0;// 两日期间不足一个月
+            }
+        } else if (year != 0 && month == 0) {// 年份不同月份相同
+            if (startCalendar.get(Calendar.DATE) < endCalendar.get(Calendar.DATE)) {// 两日期间的天数,小于等于当月
+                monthCount = 1;
+            }
+            monthCount += year * 12 + month;
+        } else {
+            if (startCalendar.get(Calendar.DATE) >= endCalendar.get(Calendar.DATE)) {// 起始日期DATE 大于等于结束日期DATE
+                monthCount = year * 12 + month;
+            } else {
+                monthCount = year * 12 + month + 1;
+            }
+        }
+
+        return monthCount;
+    }
+
+}

+ 63 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringTimeUtil.java

@@ -0,0 +1,63 @@
+package com.sckw.core.utils;
+
+import com.sckw.core.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-26 11:42:43
+ */
+@Slf4j
+public class StringTimeUtil {
+    private final static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    private final static DateTimeFormatter dateTimeYMD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+    @SuppressWarnings("all")
+    private static void formatCheck(String time) {
+        try {
+            LocalDate.parse(time, dateTimeYMD);
+        } catch (Exception e) {
+            log.error("时间格式化错误", e);
+            throw new BusinessException("时间格式化错误!");
+        }
+    }
+
+    /**
+     * @param time yyyy-MM-dd
+     * @return String yyyy-MM-dd HH:mm:ss
+     * @throws RuntimeException
+     */
+    public static String fillStart(String time) {
+        formatCheck(time);
+        return time + " 00:00:00";
+    }
+
+    /**
+     * @param time yyyy-MM-dd
+     * @return String yyyy-MM-dd HH:mm:ss
+     * @throws RuntimeException
+     */
+    public static String fillEnd(String time) {
+        formatCheck(time);
+        return time + " 23:59:59";
+    }
+
+    /**
+     * @param time yyyy-MM-dd
+     * @return LocalDateTime yyyy-MM-dd HH:mm:ss
+     */
+    public static LocalDateTime startDateTime(String time) {
+        return LocalDateTime.parse(fillStart(time), dateTimeFormatter);
+    }
+
+    /**
+     * @param time yyyy-MM-dd
+     * @return LocalDateTime yyyy-MM-dd HH:mm:ss
+     */
+    public static LocalDateTime endDateTime(String time) {
+        return LocalDateTime.parse(fillEnd(time), dateTimeFormatter);
+    }
+}

+ 77 - 4
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -1,5 +1,6 @@
 package com.sckw.fleet.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
@@ -7,6 +8,8 @@ import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
@@ -20,12 +23,9 @@ import com.sckw.fleet.service.KwfTruckService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author zk
@@ -233,4 +233,77 @@ public class KwfTruckController {
         return truckService.transportLicenseEdit(params);
     }
 
+    /**
+     * @param params {truckNo 車牌號}
+     * @description 车辆查询(业务关联+归属车辆)
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/findTruck")
+    public HttpResult findTruck(@RequestBody Map params) {
+        params.put("entId", LoginUserHolder.getEntId());
+        List<KwfTruckVo> trucks = truckService.findPage(params);
+
+        List data = new ArrayList();
+        for (KwfTruckVo truck:trucks) {
+            data.add(new HashMap(){{put("truckNo", truck.getTruckNo());
+                put("entId", truck.getEntId()); put("firmName",
+                        truck.getFirmName()); put("businessStatus", truck.getStatusName());
+                        put("runStatus", 0);}});
+        }
+
+        return HttpResult.ok(data);
+    }
+
+    /**
+     * @param truckNos 車牌號集
+     * @description 车辆查询GPS(业务关联 + 归属车辆)
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/findTruckGps")
+    public HttpResult findTruckGps(@RequestBody List<String> truckNos) {
+        if (CollectionUtils.isEmpty(truckNos)) {
+            return HttpResult.ok();
+        }
+
+        List data = new ArrayList();
+        for (String truckNo:truckNos) {
+            data.add(new HashMap(){{
+                put("truckNo", truckNo);
+                put("speed", new Random().nextInt(100));
+                put("lng", "30."+new Random().nextInt(1000000));
+                put("lat", "103."+new Random().nextInt(1000000));
+                put("gpsTime", DateUtils.getCurrentTime());}});
+        }
+        return HttpResult.ok(data);
+    }
+
+    /**
+     * @param params {truckNos 車牌號集, startTime 開始實際, endTime 結束時間}
+     * @description 车辆查询GPS(通过车牌号查询)
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/findGpsByTruckNo")
+    public HttpResult findGpsByTruckNo(@RequestBody @Valid GpsByTruckNoDto params) {
+        Long hours = (params.getEndTime().getTime() - params.getStartTime().getTime()) /1000/60;
+        List data = new ArrayList();
+        data.add(new HashMap(){{put("truckNo", params.getTruckNo()); put("speed", 95.0);
+            put("lng", "30.60513"); put("lat", "104.05079");
+            put("gpsTime", DateUtils.format(params.getStartTime(), DateUtils.DATE_TIME_PATTERN));}});
+        for (long i=0; i<hours; i++) {
+            data.add(new HashMap(){{
+                put("truckNo", params.getTruckNo());
+                put("speed", new Random().nextInt(100));
+                put("lng", "30."+new Random().nextInt(1000000));
+                put("lat", "103."+new Random().nextInt(1000000));
+                put("gpsTime", DateUtils.getCurrentTime());}});
+        }
+        data.add(new HashMap(){{put("truckNo", params.getTruckNo()); put("speed", 95.0);
+            put("lng", "29.524931"); put("lat", "103.734587");
+            put("gpsTime", DateUtils.format(params.getEndTime(), DateUtils.DATE_TIME_PATTERN));}});
+        return HttpResult.ok(data);
+    }
+
 }

+ 39 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/GpsByTruckNoDto.java

@@ -0,0 +1,39 @@
+package com.sckw.fleet.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/26 0026
+ */
+@Data
+public class GpsByTruckNoDto {
+
+    /**
+     *車牌號集
+     */
+    @NotBlank(message = "车牌号不能为空!")
+    private String truckNo;
+
+    /**
+     *開始實際
+     */
+    @NotNull(message = "开始时间不能为空!")
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    /**
+     *結束時間
+     */
+    @NotNull(message = "结束时间不能为空!")
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+}

+ 2 - 2
sckw-modules/sckw-fleet/src/main/resources/bootstrap-dev.yml

@@ -5,7 +5,7 @@ spring:
         # 服务注册地址
         server-addr: 10.10.10.230:8848
         # 命名空间
-        namespace: sckw_lfdc
+        namespace: sckw_zk
         # 共享配置
         group: sckw-service-platform
       config:
@@ -14,7 +14,7 @@ spring:
         # 配置文件格式
         file-extension: yaml
         # 命名空间
-        namespace: sckw_lfdc
+        namespace: sckw_zk
         # 共享配置
         group: sckw-service-platform
         #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组

+ 3 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerSuccessReq.java

@@ -7,7 +7,7 @@ import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.time.LocalDateTime;
+import java.time.LocalDate;
 
 /**
  * 对账完成
@@ -25,8 +25,8 @@ public class LedgerSuccessReq {
     private String successUser;
 
     @NotNull(message = "预计收款日期不能为空")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime receiptTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate receiptTime;
 
     @NotBlank(message = "财务联系电话不能为空")
     @Size(max = 11, message = "财务联系电话不能超过11个字符")

+ 4 - 6
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java

@@ -7,7 +7,6 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serial;
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -19,11 +18,10 @@ import java.util.List;
 public class LogisticsReq extends BasePara {
     @Serial
     private static final long serialVersionUID = 5328731681168692784L;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-
-    private LocalDateTime startCreateTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime endCreateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private String startCreateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private String endCreateTime;
     private Integer trading;
     /**
      * @see LedgerEnum

+ 8 - 8
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java

@@ -34,17 +34,17 @@ public class LogisticsSendReq {
     /**
      * 开始日期
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "计划开始日期不能为空")
-    private LocalDateTime startTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @NotNull(message = "计划开始日期不能为空")
+    private String startTime;
     /**
      * 结束日期
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "计划结束日期不能为空")
-    private LocalDateTime endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @NotNull(message = "计划结束日期不能为空")
+    private String endTime;
     /**
      * 实际结算金额
      */

+ 4 - 5
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java

@@ -7,7 +7,6 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serial;
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -19,10 +18,10 @@ import java.util.List;
 public class TradeReq extends BasePara {
     @Serial
     private static final long serialVersionUID = 5328731681168692784L;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime startCreateTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime endCreateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private String startCreateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private String endCreateTime;
     private Integer trading;
     /**
      * @see LedgerEnum

+ 8 - 8
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeSendReq.java

@@ -35,17 +35,17 @@ public class TradeSendReq {
     /**
      * 开始日期
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "计划开始日期不能为空")
-    private LocalDateTime startTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @NotNull(message = "计划开始日期不能为空")
+    private String startTime;
     /**
      * 结束日期
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @NotNull(message = "计划结束日期不能为空")
-    private LocalDateTime endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @NotNull(message = "计划结束日期不能为空")
+    private String endTime;
     /**
      * 实际结算金额
      */

+ 18 - 7
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -8,6 +8,7 @@ import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.OrderGenerateUtils;
+import com.sckw.core.utils.StringTimeUtil;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
 import com.sckw.payment.model.*;
@@ -25,12 +26,14 @@ import com.sckw.transport.api.model.dto.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.dto.vo.LogisticsOrderVO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -77,9 +80,17 @@ public class KwpLedgerLogisticsService extends AbsLedger {
             logisticsDto.setStatusLabel(LedgerEnum.getDesc(logisticsDto.getStatus()));
         }
     }
-
-    public PageRes<ILedger> shipperList(LogisticsReq logisticsReq) {
+    private void fillPara(LogisticsReq logisticsReq) {
         logisticsReq.setEntId(LoginUserHolder.getEntId());
+        if (StringUtils.isNotBlank(logisticsReq.getStartCreateTime())) {
+            logisticsReq.setStartCreateTime(StringTimeUtil.fillStart(logisticsReq.getStartCreateTime()));
+        }
+        if (StringUtils.isNotBlank(logisticsReq.getEndCreateTime())) {
+            logisticsReq.setEndCreateTime(StringTimeUtil.fillEnd(logisticsReq.getEndCreateTime()));
+        }
+    }
+    public PageRes<ILedger> shipperList(LogisticsReq logisticsReq) {
+        fillPara(logisticsReq);
         PageHelper.startPage(logisticsReq.getPage(), logisticsReq.getPageSize());
         List<LedgerShipperDto> kwpLedgerLogisticsList = logisticsMapper.shipperSelect(logisticsReq);
         //字典转换
@@ -92,7 +103,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
     }
 
     public PageRes<ILedger> carrierList(LogisticsReq logisticsReq) {
-        logisticsReq.setEntId(LoginUserHolder.getEntId());
+        fillPara(logisticsReq);
         PageHelper.startPage(logisticsReq.getPage(), logisticsReq.getPageSize());
         List<LedgerCarrierDto> kwpLedgerLogisticsList = logisticsMapper.carrierSelect(logisticsReq);
         //字典转换
@@ -144,8 +155,8 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         kwpLedgerLogistics.setId(Objects.isNull(logisticsSendReq.getId()) ? new IdWorker(1).nextId() : logisticsSendReq.getId());
         kwpLedgerLogistics.setEntId(LoginUserHolder.getEntId());
         kwpLedgerLogistics.setName(logisticsSendReq.getName());
-        kwpLedgerLogistics.setStartTime(logisticsSendReq.getStartTime());
-        kwpLedgerLogistics.setEndTime(logisticsSendReq.getEndTime());
+        kwpLedgerLogistics.setStartTime(StringTimeUtil.startDateTime(logisticsSendReq.getStartTime()));
+        kwpLedgerLogistics.setEndTime(StringTimeUtil.endDateTime(logisticsSendReq.getEndTime()));
         kwpLedgerLogistics.setTaxRate(logisticsSendReq.getTaxRate());
         kwpLedgerLogistics.setTrading(logisticsSendReq.getTrading());
         kwpLedgerLogistics.setTotalPrice(logisticsSendReq.getTotalPrice());
@@ -370,7 +381,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
 
         successCheck(kwpLedgerLogistics.getStatus());
 
-        kwpLedgerLogistics.setReceiptTime(ledgerReq.getReceiptTime());
+        kwpLedgerLogistics.setReceiptTime(LocalDateTime.of(ledgerReq.getReceiptTime(), LocalTime.MIN));
         kwpLedgerLogistics.setStatus(LedgerEnum.SUCCESS.getStatus());
         kwpLedgerLogistics.setUpdateBy(LoginUserHolder.getUserId());
         kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
@@ -389,7 +400,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         kwpSettlementLogistics.setAuditPhone(kwpLedgerLogistics.getAuditPhone());
         kwpSettlementLogistics.setSuccessUser(ledgerReq.getSuccessUser());
         kwpSettlementLogistics.setSuccessPhone(ledgerReq.getSuccessPhone());
-        kwpSettlementLogistics.setReceiptTime(ledgerReq.getReceiptTime());
+        kwpSettlementLogistics.setReceiptTime(LocalDateTime.of(ledgerReq.getReceiptTime(), LocalTime.MIN));
         kwpSettlementLogistics.setStatus(1);//1-待结算
         kwpSettlementLogistics.setCreateBy(LoginUserHolder.getUserId());
         kwpSettlementLogistics.setCreateTime(LocalDateTime.now());

+ 19 - 7
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java

@@ -9,6 +9,7 @@ import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.OrderGenerateUtils;
+import com.sckw.core.utils.StringTimeUtil;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.OrderDetailRes;
@@ -25,12 +26,14 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -79,6 +82,16 @@ public class KwpLedgerTradeService extends AbsLedger {
         }
     }
 
+    private void fillPara(TradeReq tradeReq) {
+        tradeReq.setEntId(LoginUserHolder.getEntId());
+        if (StringUtils.isNotBlank(tradeReq.getStartCreateTime())) {
+            tradeReq.setStartCreateTime(StringTimeUtil.fillStart(tradeReq.getStartCreateTime()));
+        }
+        if (StringUtils.isNotBlank(tradeReq.getEndCreateTime())) {
+            tradeReq.setEndCreateTime(StringTimeUtil.fillEnd(tradeReq.getEndCreateTime()));
+        }
+    }
+
     /**
      * 销售方
      *
@@ -86,7 +99,7 @@ public class KwpLedgerTradeService extends AbsLedger {
      * @return
      */
     public PageRes<ILedger> sellList(TradeReq tradeReq) {
-        tradeReq.setEntId(LoginUserHolder.getEntId());
+        fillPara(tradeReq);
         PageHelper.startPage(tradeReq.getPage(), tradeReq.getPageSize());
         List<LedgerSellDto> ledgerTradeDto = tradeMapper.sellList(tradeReq);
         //字典转换
@@ -105,8 +118,7 @@ public class KwpLedgerTradeService extends AbsLedger {
      * @return
      */
     public PageRes<ILedger> purchaseList(TradeReq tradeReq) {
-        tradeReq.setEntId(LoginUserHolder.getEntId());
-
+        fillPara(tradeReq);
         PageHelper.startPage(tradeReq.getPage(), tradeReq.getPageSize());
         List<LedgerPurchaseDto> ledgerTradeDto = tradeMapper.purchaseList(tradeReq);
         //字典转换
@@ -132,8 +144,8 @@ public class KwpLedgerTradeService extends AbsLedger {
         kwpLedgerTrade.setId(Objects.isNull(tradeSendReq.getId()) ? new IdWorker(1).nextId() : tradeSendReq.getId());
         kwpLedgerTrade.setEntId(LoginUserHolder.getEntId());
         kwpLedgerTrade.setName(tradeSendReq.getName());
-        kwpLedgerTrade.setStartTime(tradeSendReq.getStartTime());
-        kwpLedgerTrade.setEndTime(tradeSendReq.getEndTime());
+        kwpLedgerTrade.setStartTime(StringTimeUtil.startDateTime(tradeSendReq.getStartTime()));
+        kwpLedgerTrade.setEndTime(StringTimeUtil.endDateTime(tradeSendReq.getEndTime()));
         kwpLedgerTrade.setTaxRate(tradeSendReq.getTaxRate());
         kwpLedgerTrade.setTrading(tradeSendReq.getTrading());
         kwpLedgerTrade.setTotalPrice(tradeSendReq.getTotalPrice());
@@ -396,7 +408,7 @@ public class KwpLedgerTradeService extends AbsLedger {
         }
         successCheck(kwpLedgerTrade.getStatus());
 
-        kwpLedgerTrade.setReceiptTime(ledgerReq.getReceiptTime());
+        kwpLedgerTrade.setReceiptTime(LocalDateTime.of(ledgerReq.getReceiptTime(), LocalTime.MIN));
         kwpLedgerTrade.setStatus(LedgerEnum.SUCCESS.getStatus());
         kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
         tradeMapper.updateById(kwpLedgerTrade);
@@ -414,7 +426,7 @@ public class KwpLedgerTradeService extends AbsLedger {
         kwpSettlementTrade.setAuditPhone(kwpLedgerTrade.getAuditPhone());
         kwpSettlementTrade.setSuccessUser(ledgerReq.getSuccessUser());
         kwpSettlementTrade.setSuccessPhone(ledgerReq.getSuccessPhone());
-        kwpSettlementTrade.setReceiptTime(ledgerReq.getReceiptTime());
+        kwpSettlementTrade.setReceiptTime(LocalDateTime.of(ledgerReq.getReceiptTime(), LocalTime.MIN));
         kwpSettlementTrade.setStatus(1);//1-待结算
         kwpSettlementTrade.setCreateBy(LoginUserHolder.getUserId());
         kwpSettlementTrade.setCreateTime(LocalDateTime.now());

+ 515 - 34
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java

@@ -3,20 +3,26 @@ package com.sckw.payment.service;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.TypeReference;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OkHttpUtils;
-import com.sckw.core.utils.StringUtils;
 import com.sckw.payment.api.model.constant.ChannelEnum;
-import com.sckw.payment.api.model.dto.MemberDetail;
-import com.sckw.payment.api.model.dto.R;
-import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.*;
+import com.sckw.payment.api.model.dto.common.BusinessNo;
+import com.sckw.payment.api.model.dto.common.R;
+import com.sckw.payment.api.model.dto.page.CashPage;
+import com.sckw.payment.api.model.dto.page.PrePayIndexPage;
+import com.sckw.payment.api.model.dto.page.RecordPage;
 import com.sckw.payment.model.constant.PayCenterEnum;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 转发中台接口
@@ -26,6 +32,8 @@ import java.util.Objects;
  */
 @Service
 @Slf4j
+@RefreshScope
+@Validated
 public class PayCenterService {
     @Value("${payCenter.address}")
     private String payCenterAddr;
@@ -42,6 +50,72 @@ public class PayCenterService {
         return ok;
     }
 
+    private String getHttp(PayCenterEnum payCenterEnum, Map<String, Object> para) {
+        log.info("{}入参->{}", payCenterEnum.getDesc(), JSONObject.toJSONString(para));
+        OkHttpUtils okHttpUtils = OkHttpUtils.builder().url(payCenterAddr + payCenterEnum.getAddr());
+        if (!CollectionUtils.isEmpty(para)) {
+            for (Map.Entry<String, Object> p : para.entrySet()) {
+                //跳过非空参数
+                if (Objects.isNull(p.getValue())) {
+                    continue;
+                }
+                if (p.getValue() instanceof ChannelEnum channelEnum) {
+                    okHttpUtils.addPara(p.getKey(), channelEnum.getChannel());
+                } else {
+                    okHttpUtils.addPara(p.getKey(), (String) p.getValue());
+                }
+            }
+        }
+        String sync;
+        try {
+            sync = okHttpUtils.get().sync();
+        } catch (Exception e) {
+            log.error("中台服务异常", e.getCause());
+            throw new RuntimeException("支付服务异常!");
+        }
+        log.info("{}返回值->{}", payCenterEnum.getDesc(), sync);
+        return changeRes(sync);
+    }
+
+    private String postHttp(PayCenterEnum payCenterEnum, Map<String, Object> para) {
+        log.info("{}入参->{}", payCenterEnum.getDesc(), JSONObject.toJSONString(para));
+        OkHttpUtils okHttpUtils = OkHttpUtils.builder().url(payCenterAddr + payCenterEnum.getAddr());
+        if (!CollectionUtils.isEmpty(para)) {
+            for (Map.Entry<String, Object> p : para.entrySet()) {
+                //跳过非空参数
+                if (Objects.isNull(p.getValue())) {
+                    continue;
+                }
+                if (p.getValue() instanceof ChannelEnum channelEnum) {
+                    okHttpUtils.addBodyPara(p.getKey(), channelEnum.getChannel());
+                } else {
+                    okHttpUtils.addBodyPara(p.getKey(), (String) p.getValue());
+                }
+            }
+        }
+        String sync;
+        try {
+            sync = okHttpUtils.post(true).sync();
+        } catch (Exception e) {
+            log.error("中台服务异常", e.getCause());
+            throw new RuntimeException("支付服务异常!");
+        }
+        log.info("{}返回值->{}", payCenterEnum.getDesc(), sync);
+        return changeRes(sync);
+    }
+
+    private String changeRes(String sync) {
+        JSONObject jsonObject = JSONObject.parseObject(sync);
+        //我的泛型是对象 返回值有可能 是对象或数组 {} []
+        //data:[]->转换成 data:null 进入if
+        Object data = jsonObject.get("data");
+        if (Objects.nonNull(data) && data instanceof JSONArray d && d.isEmpty()) {
+            jsonObject.put("data", null);
+            sync = jsonObject.toJSONString();
+        }
+        return sync;
+    }
+
     /**
      * 会员详情
      *
@@ -49,23 +123,12 @@ public class PayCenterService {
      * @param channel
      * @return
      */
-    public R<MemberDetail> memberDetail(String uid, ChannelEnum channel) {
-        log.info("{}入参->uid:{} channel:{}", PayCenterEnum.DETAIL.getDesc(), uid, channel);
-        String sync = OkHttpUtils.builder().url(payCenterAddr + PayCenterEnum.DETAIL.getAddr()).addPara("uid", uid).addPara("channel", channel.getChannel()).get().sync();
-        log.info("{}返回值:{}", PayCenterEnum.DETAIL.getDesc(), sync);
-        return JSONObject.parseObject(sync, new TypeReference<R<MemberDetail>>() {
-        });
-    }
-
-    public R<MemberDetail> withdraw(String uid, String view, String orderNo) {
-        log.info("{}入参->uid:{} view:{} orderNo:{}", PayCenterEnum.WITHDRAW.getDesc(), uid, view, orderNo);
-        String sync = OkHttpUtils.builder().url(payCenterAddr + PayCenterEnum.WITHDRAW.getAddr())
-                .addPara("uid", uid)
-                .addPara("view", view)
-                .addPara("orderNo", orderNo)
-                .get().sync();
-        log.info("{}返回值:{}", PayCenterEnum.WITHDRAW.getDesc(), sync);
-        return JSONObject.parseObject(sync, new TypeReference<R<MemberDetail>>() {
+    public R<MemberDetail> memberDetail(String uid, @NotNull(message = "渠道类型不能为空") ChannelEnum channel) {
+        String sync = getHttp(PayCenterEnum.MEMBER_DETAIL, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
         });
     }
 
@@ -78,18 +141,436 @@ public class PayCenterService {
      * @return
      */
     public R<List<WalletDto>> wallet(@NotNull String uid, ChannelEnum channel, String filter) {
-        log.info("钱包清单入参->uid:{} channel:{} filter:{}", uid, channel, filter);
-        OkHttpUtils okHttpUtils = OkHttpUtils.builder().url(payCenterAddr + PayCenterEnum.WALLET.getAddr())
-                .addPara("uid", uid);
-        if (Objects.nonNull(channel)) {
-            okHttpUtils.addPara("channel", channel.getChannel());
-        }
-        if (StringUtils.isNotBlank(filter)) {
-            okHttpUtils.addPara("filter", filter);
-        }
-        String sync = okHttpUtils.get().sync();
-        log.info("钱包清单返回值:{}", sync);
+        String sync = getHttp(PayCenterEnum.MEMBER_WALLET, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+        }});
         return parseArray(sync, WalletDto.class);
     }
 
+    /**
+     * 提现详情
+     *
+     * @param uid
+     * @param view
+     * @param orderNo
+     * @return
+     */
+    public R<CashDetail> withdrawDetail(@NotBlank(message = "提现用户不能为空") String uid, @NotBlank(message = "") String view, @NotBlank(message = "订单编号不能为空") String orderNo) {
+        String sync = getHttp(PayCenterEnum.WITHDRAW_DETAIL, new HashMap<>() {{
+            put("uid", uid);
+            put("view", view);
+            put("order_no", orderNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 提现清单
+     *
+     * @param uid
+     * @param channel
+     * @param page
+     * @param pageSize
+     * @return
+     */
+    public R<CashPage> withdrawIndex(@NotBlank(message = "提现用户不能为空") String uid, @NotNull(message = "支付渠道不能为空") ChannelEnum channel, @NotNull(message = "分页参数不能为空") Integer page, @NotNull(message = "分页大小参数不能为空") Integer pageSize) {
+        String sync = getHttp(PayCenterEnum.WITHDRAW_INDEX, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("page", page);
+            put("pageSize", pageSize);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 订单状态
+     *
+     * @param type
+     * @return
+     */
+    public R<Map<String, String>> withdrawStatus(String type) {
+        if (StringUtils.isBlank(type)) {
+            type = "order";
+        }
+        String finalType = type;
+        String sync = getHttp(PayCenterEnum.WITHDRAW_STATUS, new HashMap<>() {{
+            put("type", finalType);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 取消提现
+     *
+     * @param uid
+     * @param orderNo
+     * @return
+     */
+    public R<Object> withdrawCancel(@NotBlank(message = "提现用户不能为空") String uid, @NotBlank(message = "体现订单号不能为空") String orderNo) {
+        String sync = postHttp(PayCenterEnum.WITHDRAW_CANCEL, new HashMap<>() {{
+            put("uid", uid);
+            put("order_no", orderNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 申请提现
+     *
+     * @param uid
+     * @param channel
+     * @param money
+     * @param remarks
+     * @return
+     */
+    public R<Order> withdrawTake(@NotBlank(message = "提现用户不能为空") String uid, @NotBlank(message = "渠道不能为空") ChannelEnum channel, @NotBlank(message = "金额(分)不能为空") Long money, @NotBlank(message = "备注不能为空") String remarks) {
+        String sync = postHttp(PayCenterEnum.WITHDRAW_TAKE, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("money", money);
+            put("remarks", remarks);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 统计信息
+     *
+     * @param uid
+     * @param channel
+     * @param filter
+     * @return
+     */
+    public R<WalletInfo> totalInfo(@NotBlank(message = "用户不能为空") String uid, @NotBlank(message = "渠道不能为空") ChannelEnum channel, @NotBlank(message = "乙方用户不能为空") String filter) {
+        String sync = getHttp(PayCenterEnum.TOTAL_INFO, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 操作记录-下载
+     *
+     * @param uid
+     * @param channel
+     * @param filter
+     * @return
+     */
+    public R<OperateDown> operateDownload(String uid, ChannelEnum channel, String filter) {
+        String sync = getHttp(PayCenterEnum.OPERATE_DOWNLOAD, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 操作记录-分类
+     *
+     * @return
+     */
+    public R<Map<String, String>> operateCategory() {
+        String sync = getHttp(PayCenterEnum.OPERATE_CATEGORY, new HashMap<>());
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 操作记录
+     *
+     * @param uid
+     * @param channel
+     * @param page
+     * @param pageSize
+     * @return
+     */
+    public R<Operate> operateIndex(String uid, ChannelEnum channel, Integer page, Integer pageSize) {
+        String sync = getHttp(PayCenterEnum.OPERATE_INDEX, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("page", page);
+            put("pageSize", pageSize);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 钱包日志类型
+     *
+     * @return
+     */
+    public R<Map<String, String>> logCategory() {
+        String sync = getHttp(PayCenterEnum.LOG_CATEGORY, new HashMap<>());
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 获取钱包使用明细
+     *
+     * @param uid
+     * @param filter
+     * @param page
+     * @param pageSize
+     * @return
+     */
+    public R<RecordPage> record(String uid, String filter, Integer page, Integer pageSize) {
+        String sync = getHttp(PayCenterEnum.RECORD, new HashMap<>() {{
+            put("uid", uid);
+            put("filter", filter);
+            put("page", page);
+            put("pageSize", pageSize);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 余额转出
+     *
+     * @param uid
+     * @param channel
+     * @param money
+     * @param filter
+     * @return
+     */
+    public R<Object> transfer(String uid, ChannelEnum channel, Long money, String filter) {
+        String sync = postHttp(PayCenterEnum.TRANSFER, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("money", money);
+            put("filter", filter);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 预付订单详情
+     *
+     * @param orderNo
+     * @return
+     */
+    public R<CashDetail> advancePayDetail(String orderNo) {
+        String sync = getHttp(PayCenterEnum.ADVANCE_PAY_DETAIL, new HashMap<>() {{
+            put("order_no", orderNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 发起预付
+     *
+     * @param uid     乙方uid
+     * @param channel 渠道
+     * @param filter  甲方uid
+     * @param money   金额,分
+     * @return
+     */
+    public R<Order> advancePayApply(String uid, ChannelEnum channel, String filter, Long money) {
+        String sync = postHttp(PayCenterEnum.ADVANCE_PAY_APPLY, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("money", money);
+            put("filter", filter);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /***
+     * 预付订单清单
+     * @param uid
+     * @param channel
+     * @param filter
+     * @param page
+     * @param pageSize
+     * @return
+     */
+    public R<PrePayIndexPage> advancePayIndex(String uid, ChannelEnum channel, String filter, Integer page, Integer pageSize) {
+        String sync = getHttp(PayCenterEnum.ADVANCE_PAY_INDEX, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+            put("page", page);
+            put("pageSize", pageSize);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 预付订单状态
+     *
+     * @return
+     */
+    public R<List<String>> advancePayStatus() {
+        String sync = getHttp(PayCenterEnum.ADVANCE_PAY_STATUS, new HashMap<>());
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 获取通道清单
+     *
+     * @return
+     */
+    public R<List<Channel>> index() {
+        String sync = getHttp(PayCenterEnum.INDEX, new HashMap<>());
+        return parseArray(sync, Channel.class);
+    }
+
+    /**
+     * 订单记录
+     *
+     * @param uid
+     * @param channel
+     * @param filter
+     * @param page
+     * @param pageSize
+     * @return
+     */
+    public R<PayRecordPage> memberPayIndex(String uid, ChannelEnum channel, String filter, Integer page, Integer pageSize) {
+        String sync = getHttp(PayCenterEnum.MEMBER_PAY_INDEX, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+            put("page", page);
+            put("pageSize", pageSize);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 创建/更新账户
+     *
+     * @param memberCreate
+     * @return
+     */
+    public R<MemberRes> memberIndex(MemberCreate memberCreate) {
+        Map<String, Object> map = JSONObject.parseObject(JSONObject.toJSONString(memberCreate), new TypeReference<>() {
+        });
+        String sync = postHttp(PayCenterEnum.MEMBER_INDEX, map);
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 在线充值
+     *
+     * @param buyUid  付款方/乙方/买货方 账户
+     * @param sellUid 收款方/甲方/供货方 账户
+     * @param channel 渠道方
+     * @param money   金额,单位分
+     * @return
+     */
+    public R<PayIndex> payIndex(String buyUid, String sellUid, ChannelEnum channel, Long money) {
+        String sync = postHttp(PayCenterEnum.PAY_INDEX, new HashMap<>() {{
+            put("buyUid", buyUid);
+            put("sellUid", sellUid);
+            put("channel", channel);
+            put("money", money);
+        }});
+
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 冻结资金
+     *
+     * @param uid        付款方uid
+     * @param channel    支付通道
+     * @param money      冻结金额,单位分
+     * @param filter     收款方uid
+     * @param businessNo 流水号
+     * @return
+     */
+    public R<Freeze> walletFreeze(String uid, ChannelEnum channel, String filter, Long money, String businessNo) {
+        String sync = postHttp(PayCenterEnum.WALLET_FREEZE, new HashMap<>() {{
+            put("uid", uid);
+            put("filter", filter);
+            put("channel", channel);
+            put("money", money);
+            put("businessNo", businessNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 解冻金额
+     *
+     * @param businessNo
+     * @return
+     */
+    public R<BusinessNo> walletUnFreeze(String businessNo) {
+        String sync = postHttp(PayCenterEnum.WALLET_UNFREEZE, new HashMap<>() {{
+            put("business_no", businessNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 清分
+     *
+     * @param buyUid
+     * @param sellUid
+     * @param channel
+     * @param money
+     * @param batchPayList
+     * @param businessNo
+     * @return
+     */
+    public R<BusinessNo> payAgentPay(String buyUid, String sellUid, ChannelEnum channel, Long money, List<PatchPay> batchPayList, String businessNo) {
+        String sync = postHttp(PayCenterEnum.PAY_AGENT_PAY, new HashMap<>() {{
+            put("buy_uid", buyUid);
+            put("sell_uid", sellUid);
+            put("channel", channel);
+            put("money", money);
+            put("batch_pay_list", JSONObject.toJSONString(batchPayList));
+            put("business_no", businessNo);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
+
+    /**
+     * 创建钱包
+     *
+     * @param uid
+     * @param channel
+     * @param filter
+     * @param nickname
+     * @return
+     */
+    public R<Object> walletIndex(@NotBlank(message = "uid不能为空") String uid,
+                                 @NotNull(message = "支付渠道不能为空") ChannelEnum channel,
+                                 @NotBlank(message = "filter不能为空") String filter, String nickname) {
+        String sync = postHttp(PayCenterEnum.WALLET_INDEX, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("filter", filter);
+            put("nickname", nickname);
+        }});
+        return JSONObject.parseObject(sync, new TypeReference<>() {
+        });
+    }
 }

+ 0 - 50
sckw-modules/sckw-report/src/main/java/com/sckw/report/enums/CarWaybillEnum.java

@@ -1,50 +0,0 @@
-package com.sckw.report.enums;
-
-public enum CarWaybillEnum {
-    PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
-    PENDING_VEHICLE(2, "pendingVehicle", "2", "待出车"),
-    EXIT_COMPLETED(3, "exitCompleted", "3", "已出车"),
-    WAIT_LOADING(4, "waitLoading", "4", "到达装货点"),
-    COMPLETION_LOADING(5, "completionLoading", "5", "已装货"),
-    WAIT_UNLOADING(6, "waitUnloading", "6", "到达卸货点"),
-    COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
-    APPROVAL_COMPLETED(8, "approvalCompleted", "8", "已核单"),
-    REJECT_ORDER(9, "rejectOrder", "9", "拒接单");
-
-    private final Integer code;
-    private final String value;
-    private final String status;
-    private final String destination;
-
-    public Integer getCode() {
-        return code;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public String getDestination() {
-        return destination;
-    }
-
-    CarWaybillEnum(Integer code, String value, String status, String destination) {
-        this.code = code;
-        this.value = value;
-        this.status = status;
-        this.destination = destination;
-    }
-
-    public static String getLogisticsOrderValue(Integer code) {
-        for (CarWaybillEnum waybillEnum : CarWaybillEnum.values()) {
-            if (waybillEnum.getCode().equals(code)) {
-                return waybillEnum.getValue();
-            }
-        }
-        return null;
-    }
-}

+ 1 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java

@@ -1,6 +1,7 @@
 package com.sckw.report.service;
 
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
@@ -12,7 +13,6 @@ import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.report.dao.SckwLogisticsOrderRepository;
-import com.sckw.report.enums.CarWaybillEnum;
 import com.sckw.report.service.param.WaybillOrderQuery;
 import com.sckw.report.service.vo.CarWaybillVo;
 import com.sckw.report.service.vo.WaybillsCountVo;

+ 28 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -1,11 +1,11 @@
 package com.sckw.transport.controller;
 
 import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.model.ValiList;
 import com.sckw.core.web.response.HttpResult;
-import com.sckw.transport.model.dto.ConfirmRefuseSendCarDto;
+import com.sckw.transport.model.dto.OperateWaybillDto;
+import com.sckw.transport.model.dto.OperateSendCarDto;
 import com.sckw.transport.model.dto.SendCarDto1;
 import com.sckw.transport.model.dto.UpdateDriverCarDTO;
 import com.sckw.transport.service.DriverService;
@@ -64,7 +64,7 @@ public class KwtWaybillOrderController {
     }
 
     /**
-     * 承运订单更换司机
+     * 承运订单-更换司机
      * @param dto
      * @return
      */
@@ -79,7 +79,7 @@ public class KwtWaybillOrderController {
     }
 
     /**
-     * 承运订单更换车辆
+     * 承运订单-更换车辆
      * @param dto
      * @return
      */
@@ -125,7 +125,7 @@ public class KwtWaybillOrderController {
      * @date 2023/7/24
      **/
     @PostMapping("/confirmSendCar")
-    public HttpResult confirmSendCar(@RequestBody @Valid ConfirmRefuseSendCarDto params){
+    public HttpResult confirmSendCar(@RequestBody @Valid OperateSendCarDto params){
         return waybillOrderService.confirmSendCar(params);
     }
 
@@ -136,10 +136,32 @@ public class KwtWaybillOrderController {
      * @date 2023/7/24
      **/
     @PostMapping("/refuseSendCar")
-    public HttpResult refuseSendCar(@RequestBody @Valid ConfirmRefuseSendCarDto params){
+    public HttpResult refuseSendCar(@RequestBody @Valid OperateSendCarDto params){
         return waybillOrderService.refuseSendCar(params);
     }
 
+    /**
+     * @param params 确认/拒绝出车参数
+     * @description 确认出车
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/confirmDeparture")
+    public HttpResult confirmDeparture(@RequestBody @Valid OperateWaybillDto params){
+        return waybillOrderService.confirmDeparture(params);
+    }
+
+    /**
+     * @param params 确认/拒绝出车参数
+     * @description 拒绝出车
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/refuseDeparture")
+    public HttpResult refuseDeparture(@RequestBody @Valid OperateWaybillDto params){
+        return waybillOrderService.refuseDeparture(params);
+    }
+
 
 
     //取消派车(未接单前)

+ 38 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java

@@ -6,8 +6,10 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.service.LogisticsConsignmentService;
+import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -76,7 +78,7 @@ public class LogisticsConsignmentController {
      */
     @Validated
     @RequestMapping(value = "/purchaseCancelConsign", method = RequestMethod.POST)
-//    @GlobalTransactional(name = "default_tx_group")
+    @GlobalTransactional(name = "default_tx_group")
     public HttpResult purchaseCancelConsign(@RequestParam("ids") @NotBlank(message = "单据不能为空") List<String> ids) {
         log.info("采购订单-托运订单列表-撤销托运:{}", JSONObject.toJSONString(ids));
         try {
@@ -109,6 +111,23 @@ public class LogisticsConsignmentController {
         }
     }
 
+    /**
+     * 采购订单-托运订单列表-订单完结-数据查询
+     * @param orderId   物流订单id
+     * @return
+     */
+    @Validated
+    @RequestMapping(value = "/selectPurchaseOrderFinish", method = RequestMethod.GET)
+    public HttpResult selectPurchaseOrderFinish(@RequestParam("orderId") @NotNull(message = "数据id不能为空") String orderId) {
+        log.info("采购订单-托运订单列表-订单完结-数据查询 传递参数信息:{}", orderId);
+        try {
+            return logisticsConsignmentService.selectOrderFinishVo(orderId, "1");
+        } catch (Exception e) {
+            log.error("采购订单-托运订单列表-订单完结-数据查询 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * 采购订单-托运订单列表-完结订单
      * @param OrderFinishDTO
@@ -189,7 +208,7 @@ public class LogisticsConsignmentController {
      * @return
      */
     @RequestMapping(value = "/sellCancelConsign", method = RequestMethod.GET)
-//    @GlobalTransactional(name = "default_tx_group")
+    @GlobalTransactional(name = "default_tx_group")
     public HttpResult sellCancelConsign(@RequestParam("ids") @NotBlank(message = "单据id不能为空") List<String> ids) {
         log.info("销售订单-车辆列表 传递参数信息:{}", JSONObject.toJSONString(ids));
         try {
@@ -200,6 +219,23 @@ public class LogisticsConsignmentController {
         }
     }
 
+    /**
+     * 销售订单-托运订单列表-订单完结-数据查询
+     * @param orderId   物流订单id
+     * @return
+     */
+    @Validated
+    @RequestMapping(value = "/selectSellOrderFinish", method = RequestMethod.GET)
+    public HttpResult selectSellOrderFinish(@RequestParam("orderId") @NotNull(message = "数据id不能为空") String orderId) {
+        log.info("销售订单-托运订单列表-订单完结-数据查询 传递参数信息:{}", orderId);
+        try {
+            return logisticsConsignmentService.selectOrderFinishVo(orderId, "2");
+        } catch (Exception e) {
+            log.error("销售订单-托运订单列表-订单完结-数据查询 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * 销售订单-托运订单列表-完结订单
      * @param orderFinishDTO

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -7,6 +7,7 @@ import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.model.vo.DriverListVo;
+import com.sckw.transport.model.vo.OrderFinishVO;
 import com.sckw.transport.model.vo.SubcontractConsignmentVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -92,4 +93,11 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @return
      */
     List<LogisticsOrderVO> selectLogisticOrderList(@Param("ids") List<String> ids);
+
+    /**
+     * 通过物流订单id获取统计数据
+     * @param orderId
+     * @return
+     */
+    OrderFinishVO selectOrderFinishData(@Param("orderId") String orderId);
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -39,6 +39,7 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
 
     /**
      * 根据司机id+运单状态获取物流订单id
+     *
      * @param id
      * @param status
      * @return
@@ -47,9 +48,18 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
 
     /**
      * 根基运单ID查询关联数据
+     *
      * @param id
      * @return
      */
     WayBillDetailDTO selectWaybillRelate(@Param("id") Long id);
 
+    /**
+     * 通过物流订单id+车辆运单状态查询是否存在处理中的数据
+     *
+     * @param id
+     * @param statusList
+     * @return
+     */
+    int selectDataByLorderId(@Param("id") String id, @Param("statusList") List<Integer> statusList);
 }

+ 8 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ConfirmRefuseSendCarDto.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateSendCarDto.java

@@ -2,6 +2,7 @@ package com.sckw.transport.model.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 /**
@@ -10,7 +11,7 @@ import lombok.Data;
  * @date 2023/7/25 0025
  */
 @Data
-public class ConfirmRefuseSendCarDto {
+public class OperateSendCarDto {
 
     /**
      * 派车类型(1:趟次:2:循环)
@@ -46,4 +47,10 @@ public class ConfirmRefuseSendCarDto {
     @JsonProperty("truckId")
     @NotNull(message = "车辆信息ID不能为空")
     private Long truckId;
+
+    /**
+     * 备注
+     */
+    @Size(max=100, message = "原因长度不能大于100个字符!")
+    private String remark;
 }

+ 28 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateWaybillDto.java

@@ -0,0 +1,28 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+/**
+ * @author zk
+ * @desc 确认/拒绝出车参数
+ * @date 2023/7/26 0026
+ */
+@Data
+public class OperateWaybillDto {
+
+    /**
+     * 车辆订单id
+     */
+    @JsonProperty("wOrderId")
+    @NotNull(message = "车辆订单ID不能为空")
+    private Long wOrderId;
+
+    /**
+     * 备注
+     */
+    @Size(max=100, message = "原因长度不能大于100个字符!")
+    private String remark;
+}

+ 10 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderFinishDTO.java

@@ -24,19 +24,19 @@ public class OrderFinishDTO {
     @Length(max = 200,message = "单据编号长度错误最大长度:{max}")
     private String remark;
     /**
-     * 
+     * 装货
      */
 
-    @Digits(integer = 10, fraction=2, message = "量格式错误")
-    @DecimalMin(value = "0.00", message = "总量最小值不能低于0.00元")
+    @Digits(integer = 10, fraction=2, message = "装货量格式错误")
+    @DecimalMin(value = "0.00", message = "装货量最小值不能低于0.00")
 //    @DecimalMax(value = "10.00", message = "资金最大值不能高于10.00元")
-    @NotNull(message = "量不可为空")
-    private BigDecimal amount;
+    @NotNull(message = "装货量不可为空")
+    private BigDecimal loadAmount;
     /**
-     * 交付
+     * 卸货
      */
-    @Digits(integer = 10, fraction=2, message = "交付量格式错误")
-    @DecimalMin(value = "0.00", message = "交付量最小值不能低于0.00元")
-    @NotNull(message = "交付量不可为空")
-    private BigDecimal entrustAmount;
+    @Digits(integer = 10, fraction=2, message = "卸货量格式错误")
+    @DecimalMin(value = "0.00", message = "卸货量最小值不能低于0.00")
+    @NotNull(message = "卸货量不可为空")
+    private BigDecimal unloadAmount;
 }

+ 26 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java

@@ -0,0 +1,26 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 完结订单数据展示返回vo
+ * @date 2023-07-26 08:07:50
+ */
+@Data
+public class OrderFinishVO {
+    /**
+     * 总运单次数
+     */
+    private Integer number;
+    /**
+     * 总卸货量
+     */
+    private BigDecimal unloadAmount;
+    /**
+     * 总装货量
+     */
+    private BigDecimal loadAmount;
+}

+ 11 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -723,6 +723,7 @@ public class AcceptCarriageOrderService {
                     logisticsOrderCirculateMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
                             .set(KwtLogisticsOrderCirculate::getStatus, NumberConstant.ONE)
                             .eq(KwtLogisticsOrderCirculate::getWOrderId, wOrderId));
+//                    /**更新MongoDB*/
                     jsonObject.put("status", HttpStatus.SUCCESS_CODE);
                     jsonObject.put("message", "停止接单成功");
                 }
@@ -783,6 +784,16 @@ public class AcceptCarriageOrderService {
             orderTrack.setUpdateBy(LoginUserHolder.getUserId());
             orderTrack.setUpdateTime(new Date());
             waybillOrderTrackMapper.insert(orderTrack);
+            /**修改mongodb*/
+            //mongodb更新订单状态
+            SckwWaybillOrder updateParam = new SckwWaybillOrder();
+            updateParam.setWOrderId(Long.parseLong(id)).setStatus(CarWaybillEnum.REVOKED.getCode())
+                    .setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+            SckwBusSum busSum = new SckwBusSum();
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            busSum.setMethod(2);
+            busSum.setObject(updateParam);
+            streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
             result.put("status", HttpStatus.SUCCESS_CODE);
             result.put("message", "取消成功");
         }

+ 177 - 113
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -1,7 +1,5 @@
 package com.sckw.transport.service;
 
-import com.alibaba.fastjson.JSON;
-import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
@@ -18,17 +16,17 @@ import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.dto.ConfirmRefuseSendCarDto;
+import com.sckw.transport.model.dto.OperateWaybillDto;
+import com.sckw.transport.model.dto.OperateSendCarDto;
 import com.sckw.transport.model.dto.SendCarDto1;
 import jakarta.annotation.Resource;
-import org.checkerframework.checker.units.qual.K;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -250,7 +248,7 @@ public class KwtWaybillOrderService {
         waybillOrderAddressDao.insert(unloadAddress);
 
         /**车辆运单状态记录**/
-        this.setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus());
+        this.setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), null);
     }
 
     /**
@@ -299,14 +297,16 @@ public class KwtWaybillOrderService {
     /**
      * @param wOrderId 车辆订单ID
      * @param status 车辆运单状态
+     * @param remark 备注
      * @desc 新增运单状态记录
      * @author zk
      * @date 2023/7/20
      **/
-    public KwtWaybillOrderTrack setWaybillOrderTrack(Long wOrderId, int status) {
+    public KwtWaybillOrderTrack setWaybillOrderTrack(Long wOrderId, int status, String remark) {
         KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
         orderTrack.setWOrderId(wOrderId);
         orderTrack.setStatus(status);
+        orderTrack.setRemark(remark);
         int count = waybillOrderTrackDao.insert(orderTrack);
         return count > 0 ? orderTrack : null;
     }
@@ -512,7 +512,7 @@ public class KwtWaybillOrderService {
 
     /**
      * @param ids 车辆运单主键ID,多个已逗号隔开
-     * @description 取消派车
+     * @description 取消派车(趟次派车)
      * @author zk
      * @date 2023/7/24
      **/
@@ -544,56 +544,33 @@ public class KwtWaybillOrderService {
 
         /**业务处理**/
         for (Long id : ids) {
-            KwtWaybillOrder order = waybillOrderDao.selectById(id);
-            if (order != null) {
+            KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(id);
+            if (waybillOrder != null) {
                 //待接单的车辆运单才能撤回
-                if (order.getStatus() == CarWaybillEnum.PENDING_ORDER.getCode()) {
+                if (waybillOrder.getStatus() == CarWaybillEnum.PENDING_ORDER.getCode()) {
                     /**1更新车辆运单**/
-                    order.setStatus(CarWaybillEnum.REVOKED.getCode());
-                    waybillOrderDao.updateById(order);
+                    waybillOrder.setStatus(CarWaybillEnum.REVOKED.getCode());
+                    waybillOrderDao.updateById(waybillOrder);
 
                     /**2新增运单状态记录**/
-                    setWaybillOrderTrack(order.getId(), order.getStatus());
+                    setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), null);
 
                     /**3回退承运订单entrustAmount**/
-                    KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(order.getLOrderId());
+                    KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
                     //承运订单已委派量=承运订单原委派量+当前车辆运单委派量
                     BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
-                    logisticsOrder.setEntrustAmount(entrustAmount.subtract(order.getEntrustAmount()));
+                    logisticsOrder.setEntrustAmount(entrustAmount.subtract(waybillOrder.getEntrustAmount()));
                     logisticsOrderDao.updateById(logisticsOrder);
 
                     /**4Mongodb数据更新**/
-                    //1车辆
+                    //1车辆
                     SckwWaybillOrder wOrder = new SckwWaybillOrder();
-                    wOrder.set_id(order.getId());
-                    wOrder.setWOrderId(order.getId());
-                    wOrder.setStatus(order.getStatus());
-                    wOrder.setUpdateTime(order.getUpdateTime());
-                    wOrder.setUpdateBy(order.getUpdateBy());
-                    //rabbitMq业务汇总数据发送/消费对象
-                    SckwBusSum busSum = new SckwBusSum();
-                    //业务汇总类型
-                    busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-                    //操作对象(1新增/2修改/3替换数据)
-                    busSum.setMethod(2);
-                    //业务汇总数据对象
-                    busSum.setObject(wOrder);
-                    streamBridge.send("sckw-busSum", busSum);
+                    wOrder.set_id(waybillOrder.getId());
+                    editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
                     //2承运订单
                     SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
-                    lOrder.set_id(logisticsOrder.getId());
-                    lOrder.setLOrderId(logisticsOrder.getId());
-                    lOrder.setEntrustAmount(logisticsOrder.getEntrustAmount());
-                    lOrder.setUpdateTime(logisticsOrder.getUpdateTime());
-                    lOrder.setUpdateBy(logisticsOrder.getUpdateBy());
-                    //业务汇总类型
-                    busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
-                    //操作对象(1新增/2修改/3替换数据)
-                    busSum.setMethod(2);
-                    //业务汇总数据对象
-                    busSum.setObject(lOrder);
-                    streamBridge.send("sckw-busSum", busSum);
+                    editSckwLogisticsOrder(lOrder, logisticsOrder);
 
                     /**5发送消息**/
 
@@ -606,6 +583,54 @@ public class KwtWaybillOrderService {
         return HttpResult.ok("车辆运单撤回成功!");
     }
 
+    /**
+     * @param wOrder mongodb中车辆运单信息
+     * @param order 车辆运单信息
+     * @param method 操作对象(1新增/2修改/3替换数据)
+     * @description 更新mongodb中车辆运单信息
+     * @author zk
+     * @date 2023/7/26
+     **/
+    public void editSckwWaybillOrder(SckwWaybillOrder wOrder, KwtWaybillOrder order, int method){
+        wOrder.setWOrderId(order.getId());
+        wOrder.setStatus(order.getStatus());
+        wOrder.setUpdateTime(order.getUpdateTime());
+        wOrder.setUpdateBy(order.getUpdateBy());
+        //rabbitMq业务汇总数据发送/消费对象
+        SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改/3替换数据)
+        busSum.setMethod(method);
+        //业务汇总数据对象
+        busSum.setObject(wOrder);
+        streamBridge.send("sckw-busSum", busSum);
+    }
+
+    /**
+     * @param lOrder mongodb中承运订单信息
+     * @param order 承运订单
+     * @description 更新mongodb中承运订单信息
+     * @author zk
+     * @date 2023/7/26
+     **/
+    public void editSckwLogisticsOrder(SckwLogisticsOrder lOrder, KwtLogisticsOrder order){
+        lOrder.set_id(order.getId());
+        lOrder.setLOrderId(order.getId());
+        lOrder.setEntrustAmount(order.getEntrustAmount());
+        lOrder.setUpdateTime(order.getUpdateTime());
+        lOrder.setUpdateBy(order.getUpdateBy());
+        //rabbitMq业务汇总数据发送/消费对象
+        SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改/3替换数据)
+        busSum.setMethod(2);
+        //业务汇总数据对象
+        busSum.setObject(lOrder);
+        streamBridge.send("sckw-busSum", busSum);
+    }
+
     /**
      * @param params {}
      * @description 确认接单
@@ -613,44 +638,32 @@ public class KwtWaybillOrderService {
      * @date 2023/7/25
      **/
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult confirmSendCar(ConfirmRefuseSendCarDto params) {
+    public HttpResult confirmSendCar(OperateSendCarDto params) {
         /**趟次派车**/
         if (params.getType() == Global.NUMERICAL_ONE) {
             /**数据校验**/
-            KwtWaybillOrder order = waybillOrderDao.selectById(params.getWOrderId());
-            if (order == null) {
+            KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+            if (waybillOrder == null) {
                 return HttpResult.error("车辆趟次运单不存在!");
             }
             //待接单车辆运单才能拒绝接单
-            if (order.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
+            if (waybillOrder.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
                 return HttpResult.error("车辆运单当前状态已不能拒绝接单!");
             }
 
             /**业务处理**/
             /**1更新车辆运单**/
-            order.setStatus(CarWaybillEnum.PENDING_VEHICLE.getCode());
-            waybillOrderDao.updateById(order);
+            waybillOrder.setStatus(CarWaybillEnum.PENDING_VEHICLE.getCode());
+            waybillOrderDao.updateById(waybillOrder);
 
             /**2新增运单状态记录**/
-            setWaybillOrderTrack(order.getId(), order.getStatus());
+            setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
 
             /**3Mongodb数据更新**/
             //1车辆运单
             SckwWaybillOrder wOrder = new SckwWaybillOrder();
-            wOrder.set_id(order.getId());
-            wOrder.setWOrderId(order.getId());
-            wOrder.setStatus(order.getStatus());
-            wOrder.setUpdateTime(order.getUpdateTime());
-            wOrder.setUpdateBy(order.getUpdateBy());
-            //rabbitMq业务汇总数据发送/消费对象
-            SckwBusSum busSum = new SckwBusSum();
-            //业务汇总类型
-            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-            //操作对象(1新增/2修改/3替换数据)
-            busSum.setMethod(2);
-            //业务汇总数据对象
-            busSum.setObject(wOrder);
-            streamBridge.send("sckw-busSum", busSum);
+            wOrder.set_id(waybillOrder.getId());
+            editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
             /**4发送消息**/
 
@@ -693,7 +706,6 @@ public class KwtWaybillOrderService {
             //补上车辆运单待接单状态
             setWaybillOrderTrack(circulate, waybillOrder.getId());
 
-
             /**2更新承运订单信息**/
             //承运单信息
             KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
@@ -707,21 +719,14 @@ public class KwtWaybillOrderService {
             logisticsOrderCirculateDao.updateById(circulate);
 
             /**4Mongodb数据更新**/
+            //1车辆订单
             SckwWaybillOrder wOrder = new SckwWaybillOrder();
             wOrder.set_id(circulate.getId());
-            wOrder.setWOrderId(waybillOrder.getId());
-            wOrder.setStatus(waybillOrder.getStatus());
-            wOrder.setUpdateTime(waybillOrder.getUpdateTime());
-            wOrder.setUpdateBy(waybillOrder.getUpdateBy());
-            //rabbitMq业务汇总数据发送/消费对象
-            SckwBusSum busSum = new SckwBusSum();
-            //业务汇总类型
-            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-            //操作对象(1新增/2修改/3替换数据)
-            busSum.setMethod(3);
-            //业务汇总数据对象
-            busSum.setObject(wOrder);
-            streamBridge.send("sckw-busSum", busSum);
+            editSckwWaybillOrder(wOrder, waybillOrder, 3);
+
+            //2承运订单
+            SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+            editSckwLogisticsOrder(lOrder, logisticsOrder);
 
             /**5发送消息**/
         }
@@ -754,66 +759,43 @@ public class KwtWaybillOrderService {
      * @date 2023/7/25
      **/
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult refuseSendCar(ConfirmRefuseSendCarDto params) {
+    public HttpResult refuseSendCar(OperateSendCarDto params) {
         /**趟次派车**/
         if (params.getType() == Global.NUMERICAL_ONE) {
             /**数据校验**/
-            KwtWaybillOrder order = waybillOrderDao.selectById(params.getWOrderId());
-            if (order == null) {
+            KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+            if (waybillOrder == null) {
                 return HttpResult.error("车辆趟次运单不存在!");
             }
             //待接单车辆运单才能拒绝接单
-            if (order.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
+            if (waybillOrder.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
                 return HttpResult.error("车辆运单当前状态已不能拒绝接单!");
             }
 
             /**业务处理**/
             /**1更新车辆运单**/
-            order.setStatus(CarWaybillEnum.REVOKED.getCode());
-            waybillOrderDao.updateById(order);
+            waybillOrder.setStatus(CarWaybillEnum.REVOKED.getCode());
+            waybillOrderDao.updateById(waybillOrder);
 
             /**2新增运单状态记录**/
-            setWaybillOrderTrack(order.getId(), order.getStatus());
+            setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
 
             /**3回退承运订单entrustAmount**/
-            KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(order.getLOrderId());
+            KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
             //承运订单已委派量=承运订单原委派量+当前车辆运单委派量
             BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
-            logisticsOrder.setEntrustAmount(entrustAmount.subtract(order.getEntrustAmount()));
+            logisticsOrder.setEntrustAmount(entrustAmount.subtract(waybillOrder.getEntrustAmount()));
             logisticsOrderDao.updateById(logisticsOrder);
 
             /**4Mongodb数据更新**/
             //1车辆运单
             SckwWaybillOrder wOrder = new SckwWaybillOrder();
-            wOrder.set_id(order.getId());
-            wOrder.setWOrderId(order.getId());
-            wOrder.setStatus(order.getStatus());
-            wOrder.setUpdateTime(order.getUpdateTime());
-            wOrder.setUpdateBy(order.getUpdateBy());
-            //rabbitMq业务汇总数据发送/消费对象
-            SckwBusSum busSum = new SckwBusSum();
-            //业务汇总类型
-            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-            //操作对象(1新增/2修改/3替换数据)
-            busSum.setMethod(2);
-            //业务汇总数据对象
-            busSum.setObject(wOrder);
-            streamBridge.send("sckw-busSum", busSum);
+            wOrder.set_id(waybillOrder.getId());
+            editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
             //2承运订单
             SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
-            lOrder.set_id(logisticsOrder.getId());
-            lOrder.setLOrderId(logisticsOrder.getId());
-            lOrder.setEntrustAmount(logisticsOrder.getEntrustAmount());
-            lOrder.setUpdateTime(logisticsOrder.getUpdateTime());
-            lOrder.setUpdateBy(logisticsOrder.getUpdateBy());
-            //业务汇总类型
-            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
-            //操作对象(1新增/2修改/3替换数据)
-            busSum.setMethod(2);
-            //业务汇总数据对象
-            busSum.setObject(lOrder);
-            streamBridge.send("sckw-busSum", busSum);
+            editSckwLogisticsOrder(lOrder, logisticsOrder);
 
             /**5发送消息**/
 
@@ -830,6 +812,7 @@ public class KwtWaybillOrderService {
 
             /**1更新循环单状态为失效**/
             circulate.setStatus(Global.YES);
+            circulate.setRemark(params.getRemark());
             logisticsOrderCirculateDao.updateById(circulate);
 
             /**2Mongodb数据更新**/
@@ -854,9 +837,90 @@ public class KwtWaybillOrderService {
         return HttpResult.ok("拒绝接单成功!");
     }
 
+    /**
+     * @param params 确认/拒绝出车参数
+     * @description 确认出车
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult confirmDeparture(OperateWaybillDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //待出车车辆运单才能出车
+        if (waybillOrder.getStatus() != CarWaybillEnum.PENDING_VEHICLE.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能出车!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setStatus(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        waybillOrderDao.updateById(waybillOrder);
+
+        /**2新增运单状态记录**/
+        setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
 
+        /**3Mongodb数据更新**/
+        //1车辆运单
+        SckwWaybillOrder wOrder = new SckwWaybillOrder();
+        wOrder.set_id(waybillOrder.getId());
+        editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
+        /**4发送消息**/
 
+        return HttpResult.ok("确认出车成功!");
+    }
+
+    /**
+     * @param params 确认/拒绝出车参数
+     * @description 拒绝出车
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult refuseDeparture(OperateWaybillDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //待出车车辆运单才能拒绝出车
+        if (waybillOrder.getStatus() != CarWaybillEnum.PENDING_VEHICLE.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能拒绝出车!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setStatus(CarWaybillEnum.REFUSE_TRAFFIC.getCode());
+        waybillOrderDao.updateById(waybillOrder);
+
+        /**2新增运单状态记录**/
+        setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
+
+        /**3回退承运订单entrustAmount**/
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
+        //承运订单已委派量=承运订单原委派量+当前车辆运单委派量
+        BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
+        logisticsOrder.setEntrustAmount(entrustAmount.subtract(waybillOrder.getEntrustAmount()));
+        logisticsOrderDao.updateById(logisticsOrder);
+
+        /**4Mongodb数据更新**/
+        //1车辆运单
+        SckwWaybillOrder wOrder = new SckwWaybillOrder();
+        wOrder.set_id(waybillOrder.getId());
+        editSckwWaybillOrder(wOrder, waybillOrder, 2);
+
+        //2承运订单
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        editSckwLogisticsOrder(lOrder, logisticsOrder);
+
+        /**5发送消息**/
+
+        return HttpResult.ok("拒绝出车成功!");
+    }
 
 
 }

+ 157 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -3,9 +3,11 @@ package com.sckw.transport.service;
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
@@ -32,6 +34,7 @@ import com.sckw.transport.model.dto.LogisticsOrderDTO;
 import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
+import com.sckw.transport.model.vo.OrderFinishVO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -670,7 +673,7 @@ public class LogisticsConsignmentService {
              */
             KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaUpdateWrapper<KwtLogisticsOrder>()
                     .eq(KwtLogisticsOrder::getId, s));
-            if (kwtLogisticsOrder == null || (!String.valueOf(LogisticsOrderEnum.PENDING_ORDER.getCode()).equals(kwtLogisticsOrder.getStatus()))) {
+            if (kwtLogisticsOrder == null || (!LogisticsOrderEnum.PENDING_ORDER.getStatus().equals(String.valueOf(kwtLogisticsOrder.getStatus())))) {
                 log.info("物流订单单据id:{}", s);
                 jsonObject.put("message", "单据状态异常或单据不存在");
                 jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
@@ -715,7 +718,7 @@ public class LogisticsConsignmentService {
         } else {
             throw new RuntimeException("完结订单-单据类型异常!");
         }
-        return null;
+        return HttpResult.ok("完结订单-成功");
     }
 
     /**
@@ -725,9 +728,65 @@ public class LogisticsConsignmentService {
      */
     private void sellOrderFinish(OrderFinishDTO orderFinishDTO) {
         /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
-        /**完结拦截 必须车辆运单无正在运输中的单据才能完结*/
-        /**完结订单 不做页面填写数量与数据库数量进行计算验证*/
-
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        //物流订单id
+        String id = orderFinishDTO.getId();
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, id));
+        if (logisticsOrder == null) {
+            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
+        }
+        /**订单状态验证*/
+        if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+            throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
+        }
+        /**完结拦截*/
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
+        statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
+        statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
+        statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
+        statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
+        if (count > NumberConstant.ZERO) {
+            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**单据完结修改状态以及数据*/
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateTime(new Date());
+        logisticsOrder.setRemark(orderFinishDTO.getRemark());
+        kwtLogisticsOrderMapper.updateById(logisticsOrder);
+        KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+        track.setId(new IdWorker(NumberConstant.ONE).nextId());
+        track.setLOrderId(logisticsOrder.getId());
+        track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        track.setCreateTime(new Date());
+        track.setRemark(orderFinishDTO.getRemark());
+        track.setCreateBy(LoginUserHolder.getUserId());
+        track.setUpdateBy(LoginUserHolder.getUserId());
+        track.setUpdateTime(new Date());
+        kwtLogisticsOrderTrackMapper.insert(track);
+        /**单据完结修改Mongodb*/
+        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+        updateParam.setLOrderId(Long.parseLong(id))
+                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateByName(LoginUserHolder.getUserName())
+                .setUpdateTime(new Date())
+                .setLoadAmount(orderFinishDTO.getLoadAmount())
+                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
+        ;
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(2);
+        busSum.setObject(updateParam);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
     }
 
     /**
@@ -736,6 +795,99 @@ public class LogisticsConsignmentService {
      * @param orderFinishDTO
      */
     private void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        //物流订单id
+        String id = orderFinishDTO.getId();
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, id));
+        if (logisticsOrder == null) {
+            throw new RuntimeException("采购订单-完结订单-物流单据不存在!");
+        }
+        /**订单状态验证*/
+        if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+            throw new RuntimeException("当前运单并不属于【待派车】,【运输中】状态");
+        }
+        /**完结拦截*/
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
+        statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
+        statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
+        statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
+        statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
+        if (count > NumberConstant.ZERO) {
+            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**单据完结修改状态以及数据*/
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateTime(new Date());
+        logisticsOrder.setRemark(orderFinishDTO.getRemark());
+        kwtLogisticsOrderMapper.updateById(logisticsOrder);
+        KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+        track.setId(new IdWorker(NumberConstant.ONE).nextId());
+        track.setLOrderId(logisticsOrder.getId());
+        track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        track.setCreateTime(new Date());
+        track.setRemark(orderFinishDTO.getRemark());
+        track.setCreateBy(LoginUserHolder.getUserId());
+        track.setUpdateBy(LoginUserHolder.getUserId());
+        track.setUpdateTime(new Date());
+        kwtLogisticsOrderTrackMapper.insert(track);
+        /**单据完结修改Mongodb*/
+        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+        updateParam.setLOrderId(Long.parseLong(id))
+                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateByName(LoginUserHolder.getUserName())
+                .setUpdateTime(new Date())
+                .setLoadAmount(orderFinishDTO.getLoadAmount())
+                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
+        ;
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(2);
+        busSum.setObject(updateParam);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+    }
 
+    /**
+     * 采购订单/销售订单-托运订单列表-订单完结-数据查询
+     *
+     * @param orderId 物流订单id
+     * @param type    1采购订单2销售订单
+     * @return
+     */
+    public HttpResult selectOrderFinishVo(String orderId, String type) {
+        HttpResult httpResult = new HttpResult();
+        httpResult.setCode(HttpStatus.SUCCESS_CODE);
+        if (String.valueOf(NumberConstant.ONE).equals(type)) {
+            httpResult = selectOrderFinishData(orderId);
+        } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
+            httpResult = selectOrderFinishData(orderId);
+        } else {
+            httpResult.setCode(HttpStatus.SUCCESS_CODE);
+            httpResult.setMsg("订单完结查询,类型错误!");
+        }
+        return httpResult;
+    }
+
+    /**
+     * 采购订单/销售订单-托运订单列表-订单完结-数据查询
+     *
+     * @param orderId 物流订单id
+     * @return
+     */
+    private HttpResult selectOrderFinishData(String orderId) {
+        HttpResult httpResult = new HttpResult();
+        OrderFinishVO orderFinishVO = kwtLogisticsOrderMapper.selectOrderFinishData(orderId);
+        httpResult.setData(orderFinishVO);
+        return httpResult;
     }
 }

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -300,6 +300,11 @@ public class TransportCommonService {
         return result;
     }
 
+    /**
+     * 对账管理-运费收款对账界面查询接口
+     * @param logisticsOrderParam
+     * @return
+     */
     public HttpResult getAcceptCarriageOrder(LogisticsOrderParam logisticsOrderParam) {
         SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(logisticsOrderParam.getPaymentType(), logisticsOrderParam.getPayment());
         Long dictId = sysDictResDto.getId();

+ 15 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -358,4 +358,19 @@
         </where>
         ORDER BY a.create_time DESC
     </select>
+
+    <select id="selectOrderFinishData" resultType="com.sckw.transport.model.vo.OrderFinishVO">
+        SELECT COUNT(a.id) AS number,
+        SUM(IFNULL(a.load_amount, 0)) as loadAmount,
+        SUM(IFNULL(a.unload_amount, 0)) AS unloadAmount
+        FROM kwt_waybill_order a
+        LEFT JOIN kwt_logistics_order b ON b.id = a.l_order_id
+        AND a.del_flag = 0
+        AND b.del_flag = 0
+        <where>
+            <if test="orderId != null and orderId != ''">
+                and b.id=#{orderId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 52 - 35
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -33,16 +33,16 @@
     update_time, del_flag,start_time,end_time
     </sql>
     <select id="selectWaybillOrderCarList" resultType="com.sckw.transport.model.dto.OrderCarDTO">
-        SELECT a.id               as wOrderId,
-               a.w_order_no       as wOrderNo,
-               a.driver_id        as driverId,
-               a.driver_name      as driverName,
-               a.driver_phone     as driverPhone,
-               a.driver_idcard    as driverIdcard,
-               a.l_order_id       as lOrderId,
-               b.l_order_no       as lOrderNo,
-               b.t_order_id       as tOrderId,
-               b.t_order_no       as tOrderNo
+        SELECT a.id            as wOrderId,
+               a.w_order_no    as wOrderNo,
+               a.driver_id     as driverId,
+               a.driver_name   as driverName,
+               a.driver_phone  as driverPhone,
+               a.driver_idcard as driverIdcard,
+               a.l_order_id    as lOrderId,
+               b.l_order_no    as lOrderNo,
+               b.t_order_id    as tOrderId,
+               b.t_order_no    as tOrderNo
         FROM kwt_waybill_order a
                  LEFT JOIN kwt_logistics_order b ON a.l_order_id = b.id
         WHERE a.del_flag = '0'
@@ -80,34 +80,30 @@
         group by lOrderId
     </select>
     <select id="getWaybillData" resultType="com.sckw.transport.model.vo.WaybillDetailVO">
-
     </select>
 
     <select id="selectWaybillRelate" resultType="com.sckw.transport.model.dto.WayBillDetailDTO">
-        SELECT
-            `order`.`id` AS `wOrderId`,
-            `order`.`w_order_no` AS `wOrderNo`,
-            `order`.`truck_no` AS `truckNo`,
-            `order`.`entrust_amount` AS `entrustAmount`,
-            `order`.`truck_id` AS `truckId`,
-            `order`.`driver_id` AS `driverId`,
-            `order`.`driver_name` AS `driverName`,
-            `order`.`driver_phone` AS `driverPhone`,
-            `order`.`driver_idcard` AS `driverIdcard`,
-            `order`.`type`,
-            `order`.`start_time` AS `startTime`,
-            `order`.`end_time` AS `endTime`,
-            `order`.`create_by` AS `createBy`,
-            `logistics`.`id` AS `lOrderId`,
-            `logistics`.`l_order_no` AS `lOrderNo`,
-            `logistics`.`price_type` AS `priceType`,
-            `goods`.`goods_name` AS goodsName
-        FROM
-            `kwt_waybill_order` `order`
-                LEFT JOIN `kwt_logistics_order` `logistics` ON `logistics`.`id` = `order`.`l_order_id`
-                LEFT JOIN `kwt_logistics_order_goods` `goods` ON `goods`.`l_order_id` = `order`.`l_order_id`
-        WHERE
-            `order`.`id` = #{id,jdbcType=BIGINT}
+        SELECT `order`.`id`             AS `wOrderId`,
+               `order`.`w_order_no`     AS `wOrderNo`,
+               `order`.`truck_no`       AS `truckNo`,
+               `order`.`entrust_amount` AS `entrustAmount`,
+               `order`.`truck_id`       AS `truckId`,
+               `order`.`driver_id`      AS `driverId`,
+               `order`.`driver_name`    AS `driverName`,
+               `order`.`driver_phone`   AS `driverPhone`,
+               `order`.`driver_idcard`  AS `driverIdcard`,
+               `order`.`type`,
+               `order`.`start_time`     AS `startTime`,
+               `order`.`end_time`       AS `endTime`,
+               `order`.`create_by`      AS `createBy`,
+               `logistics`.`id`         AS `lOrderId`,
+               `logistics`.`l_order_no` AS `lOrderNo`,
+               `logistics`.`price_type` AS `priceType`,
+               `goods`.`goods_name`     AS goodsName
+        FROM `kwt_waybill_order` `order`
+                 LEFT JOIN `kwt_logistics_order` `logistics` ON `logistics`.`id` = `order`.`l_order_id`
+                 LEFT JOIN `kwt_logistics_order_goods` `goods` ON `goods`.`l_order_id` = `order`.`l_order_id`
+        WHERE `order`.`id` = #{id,jdbcType=BIGINT}
     </select>
 
     <select id="statistics" resultType="com.sckw.mongo.model.TableTops">
@@ -128,4 +124,25 @@
             </if>
         </where>
     </select>
+
+    <select id="selectDataByLorderId" resultType="int">
+        SELECT
+        COUNT(b.id)
+        FROM
+        kwt_waybill_order a
+        LEFT JOIN kwt_logistics_order b ON a.l_order_id = b.id
+        AND a.del_flag = 0
+        AND b.del_flag = 0
+        <where>
+            <if test="id != null and id !=''">
+                and b.id = #{id}
+            </if>
+            <if test="statusList != null and statusList.size() >0">
+                AND a.`status` IN
+                <foreach collection="statusList" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>