Browse Source

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

czh 2 năm trước cách đây
mục cha
commit
af49c50ab2
41 tập tin đã thay đổi với 1515 bổ sung359 xóa
  1. 8 17
      sckw-gateway/src/main/resources/bootstrap-test.yml
  2. 1 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/TestController.java
  3. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  4. 6 6
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  5. 10 10
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  6. 9 14
      sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml
  7. 9 14
      sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml
  8. 26 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/PayCenterEnum.java
  9. 0 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java
  10. 6 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/AbsLedger.java
  11. 11 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  12. 14 17
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java
  13. 4 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/dubbo/PayCenterServiceImpl.java
  14. 5 1
      sckw-modules/sckw-payment/src/main/resources/bootstrap.yml
  15. 1 1
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml
  16. 1 1
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml
  17. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  18. 5 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsList.java
  19. 16 7
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  20. 9 14
      sckw-modules/sckw-product/src/main/resources/bootstrap-test.yml
  21. 40 18
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java
  22. 2 4
      sckw-modules/sckw-report/src/main/resources/bootstrap-dev.yml
  23. 1 1
      sckw-modules/sckw-system/src/main/resources/mapper/SysDictDao.xml
  24. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  25. 6 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java
  26. 57 16
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  27. 13 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java
  28. 0 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderTicketMapper.java
  29. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  30. 2 38
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  31. 68 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderDTO.java
  32. 65 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderTicketDto.java
  33. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CarDataVO.java
  34. 105 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillBoardListVO.java
  35. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillStatusVO.java
  36. 191 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  37. 202 17
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  38. 213 13
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  39. 141 83
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  40. 174 26
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java
  41. 2 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTicketMapper.xml

+ 8 - 17
sckw-gateway/src/main/resources/bootstrap-test.yml

@@ -2,28 +2,19 @@ spring:
   cloud:
     nacos:
       discovery:
-      # 服务注册地址
-        server-addr: @nacos.server@
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
       config:
-      # 配置中心地址
-        server-addr: @nacos.server@
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
-        # 配置文件格式
-        file-extension: yaml
-        shared-configs:
-          - data-id: sckw-common.yml
-            group: sckw-common
-            refresh: true
 
-        #可以读多个配置文件 需要在同一个命名空间下面可以是不同的组
-        extension-configs:
-          - dataId: sckw-common.yml
-            group: sckw-service-platform
-            refresh: true

+ 1 - 1
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/TestController.java

@@ -3,8 +3,8 @@ package com.sckw.example.controller;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 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.common.R;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.web.bind.annotation.GetMapping;

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
@@ -20,8 +22,11 @@ import com.sckw.fleet.model.dto.*;
 import com.sckw.fleet.model.vo.KwfDriverVo;
 import com.sckw.fleet.model.vo.KwfTruckVo;
 import com.sckw.fleet.service.KwfTruckService;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -38,6 +43,8 @@ public class KwfTruckController {
 
     @Autowired
     KwfTruckService truckService;
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
     /**
      * @param id 主键ID
@@ -59,12 +66,17 @@ public class KwfTruckController {
         //车队班组
         KwfFleet fleet = truckService.findByFleetTruck(id, LoginUserHolder.getEntId());
 
+        //字典
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor());
+        SysDictResDto color = dicts == null ? null : dicts.get(DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor());
+
         //数据组装
         JSONObject truckJson = JSONObject.parseObject(JSON.toJSONString(truck));
         truckJson.put("truckLicense", truckLicense);
         truckJson.put("transportLicense", transportLicense);
         truckJson.put("fleetId", fleet.getId());
         truckJson.put("fleetName", fleet.getName());
+        truckJson.put("colorName", color != null ? color.getLabel() : null);
         return HttpResult.ok(truckJson);
     }
 
@@ -100,12 +112,16 @@ public class KwfTruckController {
         //车队班组
         KwfFleet fleet = truckService.findByFleetTruck(id, LoginUserHolder.getEntId());
 
+        //字典
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor());
+        SysDictResDto color = dicts == null ? null : dicts.get(DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor());
         //数据组装
         JSONObject truckJson = JSONObject.parseObject(JSON.toJSONString(truck));
         truckJson.put("truckLicense", truckLicense);
         truckJson.put("transportLicense", transportLicense);
         truckJson.put("fleetId", fleet.getId());
         truckJson.put("fleetName", fleet.getName());
+        truckJson.put("colorName", color != null ? color.getLabel() : null);
         return HttpResult.ok(truckJson);
     }
 

+ 6 - 6
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java

@@ -127,7 +127,7 @@ public class KwfTruckReportService {
         }
 
         /**获取查询数据**/
-        String prefix = Global.REDIS_SYS_DICT_PREFIX, pound = Global.POUND;
+        String pound = Global.POUND;
         List<Long> createBys = new ArrayList<>();
         List<Long> entIds = new ArrayList<>();
         List<String> dictKey = new ArrayList<>();
@@ -135,8 +135,8 @@ public class KwfTruckReportService {
             createBys.add(Long.parseLong(truck.getCreateBy()));
             entIds.add(Long.parseLong(truck.getDriverEntId()));
             entIds.add(Long.parseLong(truck.getTruckEntId()));
-            dictKey.add(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
-            dictKey.add(prefix + DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getTruckType());
+            dictKey.add(DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
+            dictKey.add(DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getTruckType());
         }
         //用户数据集
         createBys = createBys.stream().distinct().collect(Collectors.toList());
@@ -146,14 +146,14 @@ public class KwfTruckReportService {
         Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
         //数据字典
         dictKey = dictKey.stream().distinct().collect(Collectors.toList());
-        Map<Long, SysDictResDto> dicts = null;//remoteSystemService.queryDictByType(dictKey);
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(",", dictKey));
 
         /**数据组装**/
         for (KwfTruckReportVo truck:trucks) {
             UserCacheResDto user = users == null ? null : users.get(Long.parseLong(truck.getCreateBy()));
             EntCacheResDto ent = ents == null ? null : ents.get(Long.parseLong(truck.getDriverEntId()));
-            SysDictResDto color = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
-            SysDictResDto type = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getTruckType());
+            SysDictResDto color = dicts == null ? null : dicts.get(DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
+            SysDictResDto type = dicts == null ? null : dicts.get(DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getTruckType());
             truck.setCreateByName(user != null ? user.getName() : null);
             truck.setDriverFirmName(ent != null ? ent.getFirmName() : null);
             ent = ents == null ? null : ents.get(Long.parseLong(truck.getTruckEntId()));

+ 10 - 10
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -118,7 +118,7 @@ public class KwfTruckService {
         }
 
         /**获取查询数据**/
-        String prefix = Global.REDIS_SYS_DICT_PREFIX, pound = Global.POUND;
+        String pound = Global.POUND;
         List<Long> createBys = new ArrayList<>();
         List<Long> entIds = new ArrayList<>();
         List<String> dictKey = new ArrayList<>();
@@ -126,10 +126,10 @@ public class KwfTruckService {
         for (KwfTruckVo truck:trucks) {
             createBys.add(Long.parseLong(truck.getCreateBy()));
             entIds.add(Long.parseLong(truck.getEntId()));
-            dictKey.add(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
-            dictKey.add(prefix + DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getType());
-            dictKey.add(prefix + DictTypeEnum.USE_TYPE.getType() + pound + truck.getUseType());
-            dictKey.add(prefix + DictTypeEnum.ENERGY_TYPE.getType() + pound + truck.getEnergyType());
+            dictKey.add(DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
+            dictKey.add(DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getType());
+            dictKey.add(DictTypeEnum.USE_TYPE.getType() + pound + truck.getUseType());
+            dictKey.add(DictTypeEnum.ENERGY_TYPE.getType() + pound + truck.getEnergyType());
         }
         //用户数据集
         createBys = createBys.stream().distinct().collect(Collectors.toList());
@@ -139,16 +139,16 @@ public class KwfTruckService {
         Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
         //数据字典
         dictKey = dictKey.stream().distinct().collect(Collectors.toList());
-        Map<Long, SysDictResDto> dicts = null;//remoteSystemService.queryDictByType(dictKey);
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(",", dictKey));
 
         /**数据组装**/
         for (KwfTruckVo truck:trucks) {
             UserCacheResDto user = users == null ? null : users.get(Long.parseLong(truck.getCreateBy()));
             EntCacheResDto ent = ents == null ? null : ents.get(Long.parseLong(truck.getEntId()));
-            SysDictResDto color = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
-            SysDictResDto type = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getType());
-            SysDictResDto useType = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getUseType());
-            SysDictResDto energyType = dicts == null ? null : dicts.get(prefix + DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getEnergyType());
+            SysDictResDto color = dicts == null ? null : dicts.get(DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor());
+            SysDictResDto type = dicts == null ? null : dicts.get(DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getType());
+            SysDictResDto useType = dicts == null ? null : dicts.get(DictTypeEnum.USE_TYPE.getType() + pound + truck.getUseType());
+            SysDictResDto energyType = dicts == null ? null : dicts.get(DictTypeEnum.ENERGY_TYPE.getType() + pound + truck.getEnergyType());
             truck.setCreateByName(user != null ? user.getName() : null);
             truck.setFirmName(ent != null ? ent.getFirmName() : null);
             truck.setColorName(color != null ? color.getLabel() : null);

+ 9 - 14
sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml

@@ -2,27 +2,22 @@ spring:
   cloud:
     nacos:
       discovery:
-      # 服务注册地址
-        server-addr: @nacos.server@
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
       config:
-      # 配置中心地址
-        server-addr: @nacos.server@
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
-        # 配置文件格式
-        file-extension: yaml
-        shared-configs:
-          - data-id: sckw-common.yml
-            group: sckw-common
-            refresh: true
-
-        #可以读多个配置文件 需要在同一个命名空间下面可以是不同的组
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
         extension-configs:
           - dataId: sckw-common.yml
             group: sckw-service-platform

+ 9 - 14
sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml

@@ -2,27 +2,22 @@ spring:
   cloud:
     nacos:
       discovery:
-      # 服务注册地址
-        server-addr: @nacos.server@
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
       config:
-      # 配置中心地址
-        server-addr: @nacos.server@
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
-        # 配置文件格式
-        file-extension: yaml
-        shared-configs:
-          - data-id: sckw-common.yml
-            group: sckw-common
-            refresh: true
-
-        #可以读多个配置文件 需要在同一个命名空间下面可以是不同的组
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
         extension-configs:
           - dataId: sckw-common.yml
             group: sckw-service-platform

+ 26 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/PayCenterEnum.java

@@ -10,9 +10,32 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum PayCenterEnum {
-    DETAIL("/v1/member/detail", "会员详情"),
-    WITHDRAW("/v1/wallet/withdraw/detail", "提现详情"),
-    WALLET("/v1/member/wallet", "钱包清单");
+    MEMBER_DETAIL("/v1/member/detail", "会员详情"),
+    MEMBER_WALLET("/v1/member/wallet", "钱包清单"),
+    WITHDRAW_DETAIL("/v1/wallet/withdraw/detail", "提现详情"),
+    WITHDRAW_INDEX("/v1/wallet/withdraw/index", "提现清单"),
+    WITHDRAW_STATUS("/v1/wallet/withdraw/status", "订单状态"),
+    WITHDRAW_CANCEL("/v1/wallet/withdraw/cancel", "取消提现"),
+    WITHDRAW_TAKE("/v1/wallet/withdraw/take", "申请提现"),
+    TOTAL_INFO("/v1/wallet/totalInfo", "统计信息"),
+    OPERATE_DOWNLOAD("/v1/wallet/operate/download", "操作记录-下载"),
+    OPERATE_CATEGORY("/v1/wallet/operate/category", "操作记录-分类"),
+    OPERATE_INDEX("/v1/wallet/operate/index", "操作记录"),
+    LOG_CATEGORY("/v1/wallet/log/category", "钱包日志类型"),
+    RECORD("/v1/wallet/record", "获取钱包使用明细"),
+    TRANSFER("/v1/wallet/transfer", "余额转出"),
+    ADVANCE_PAY_DETAIL("/v1/wallet/advancepay/detail", "预付订单详情"),
+    ADVANCE_PAY_APPLY("/v1/wallet/advancepay/apply", "发起预付"),
+    ADVANCE_PAY_INDEX("/v1/wallet/advancepay/index", "预付订单清单"),
+    ADVANCE_PAY_STATUS("/v1/wallet/advancepay/statusCategory", "预付订单状态"),
+    INDEX("/v1/index/index", "获取通道清单"),
+    MEMBER_PAY_INDEX("/v1/member/pay/index", "订单记录"),
+    MEMBER_INDEX("/v1/member/index", "创建/更新账户"),
+    PAY_INDEX("/v1/pay/index", "在线充值"),
+    WALLET_FREEZE("/v1/wallet/freeze", "冻结资金"),
+    WALLET_UNFREEZE("/v1/wallet/unfreeze", "解冻金额"),
+    PAY_AGENT_PAY("/v1/pay/agent_pay", "清分"),
+    WALLET_INDEX("/v1/wallet/index", "创建钱包");
     private final String addr;
     private final String desc;
 

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

@@ -1,6 +1,5 @@
 package com.sckw.payment.model.vo.req;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.core.model.vo.BasePara;
 import com.sckw.payment.model.constant.LedgerEnum;
 import lombok.Getter;
@@ -18,9 +17,7 @@ import java.util.List;
 public class TradeReq extends BasePara {
     @Serial
     private static final long serialVersionUID = 5328731681168692784L;
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private String startCreateTime;
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private String endCreateTime;
     private Integer trading;
     /**

+ 6 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/AbsLedger.java

@@ -18,6 +18,12 @@ public abstract class AbsLedger {
         }
     }
 
+    public void backQueryCheck(Integer status) {
+        if (Objects.nonNull(status) && LedgerEnum.BACK.getStatus() != status) {
+            throw new BusinessException("只有【已退回】的单据才支持驳回查询!");
+        }
+    }
+
     public void detailCheck(Integer status) {
         List<Integer> objects = Lists.newArrayList(LedgerEnum.SAVE.getStatus(), LedgerEnum.BACK.getStatus(), LedgerEnum.REVOCATION.getStatus());
         if (Objects.nonNull(status) && !objects.contains(status)) {

+ 11 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -80,6 +80,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
             logisticsDto.setStatusLabel(LedgerEnum.getDesc(logisticsDto.getStatus()));
         }
     }
+
     private void fillPara(LogisticsReq logisticsReq) {
         logisticsReq.setEntId(LoginUserHolder.getEntId());
         if (StringUtils.isNotBlank(logisticsReq.getStartCreateTime())) {
@@ -89,6 +90,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
             logisticsReq.setEndCreateTime(StringTimeUtil.fillEnd(logisticsReq.getEndCreateTime()));
         }
     }
+
     public PageRes<ILedger> shipperList(LogisticsReq logisticsReq) {
         fillPara(logisticsReq);
         PageHelper.startPage(logisticsReq.getPage(), logisticsReq.getPageSize());
@@ -155,8 +157,12 @@ 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(StringTimeUtil.startDateTime(logisticsSendReq.getStartTime()));
-        kwpLedgerLogistics.setEndTime(StringTimeUtil.endDateTime(logisticsSendReq.getEndTime()));
+        if (StringUtils.isNotBlank(logisticsSendReq.getStartTime())) {
+            kwpLedgerLogistics.setStartTime(StringTimeUtil.startDateTime(logisticsSendReq.getStartTime()));
+        }
+        if (StringUtils.isNotBlank(logisticsSendReq.getEndTime())) {
+            kwpLedgerLogistics.setEndTime(StringTimeUtil.endDateTime(logisticsSendReq.getEndTime()));
+        }
         kwpLedgerLogistics.setTaxRate(logisticsSendReq.getTaxRate());
         kwpLedgerLogistics.setTrading(logisticsSendReq.getTrading());
         kwpLedgerLogistics.setTotalPrice(logisticsSendReq.getTotalPrice());
@@ -324,6 +330,9 @@ public class KwpLedgerLogisticsService extends AbsLedger {
      * @return 物流对账单驳回记录
      */
     public List<KwpLedgerLogisticsTrack> queryBack(Long id) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(id);
+        orderCheck(kwpLedgerLogistics);
+        backQueryCheck(kwpLedgerLogistics.getStatus());
         return logisticsTrackService.selectList(id, LedgerTrackEnum.REJECT);
     }
 

+ 14 - 17
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java

@@ -144,8 +144,12 @@ 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(StringTimeUtil.startDateTime(tradeSendReq.getStartTime()));
-        kwpLedgerTrade.setEndTime(StringTimeUtil.endDateTime(tradeSendReq.getEndTime()));
+        if(StringUtils.isNotBlank(tradeSendReq.getStartTime())){
+            kwpLedgerTrade.setStartTime(StringTimeUtil.startDateTime(tradeSendReq.getStartTime()));
+        }
+        if(StringUtils.isNotBlank(tradeSendReq.getEndTime())){
+            kwpLedgerTrade.setEndTime(StringTimeUtil.endDateTime(tradeSendReq.getEndTime()));
+        }
         kwpLedgerTrade.setTaxRate(tradeSendReq.getTaxRate());
         kwpLedgerTrade.setTrading(tradeSendReq.getTrading());
         kwpLedgerTrade.setTotalPrice(tradeSendReq.getTotalPrice());
@@ -307,9 +311,7 @@ public class KwpLedgerTradeService extends AbsLedger {
 
     public String remove(Long id) {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
-        if (Objects.isNull(kwpLedgerTrade)) {
-            throw new BusinessException("对账单不存在!");
-        }
+        orderCheck(kwpLedgerTrade);
         deleteCheck(kwpLedgerTrade.getStatus());
         kwpLedgerTrade.setDelFlag(1);
         kwpLedgerTrade.setUpdateBy(LoginUserHolder.getUserId());
@@ -327,9 +329,7 @@ public class KwpLedgerTradeService extends AbsLedger {
      */
     public String backOrder(Long id) {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
-        if (Objects.isNull(kwpLedgerTrade)) {
-            throw new BusinessException("对账单不存在!");
-        }
+        orderCheck(kwpLedgerTrade);
         revokeCheck(kwpLedgerTrade.getStatus());
         kwpLedgerTrade.setStatus(LedgerEnum.REVOCATION.getStatus());
         kwpLedgerTrade.setUpdateBy(LoginUserHolder.getUserId());
@@ -347,6 +347,9 @@ public class KwpLedgerTradeService extends AbsLedger {
      * @return
      */
     public List<KwpLedgerTradeTrack> queryBack(Long id) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
+        orderCheck(kwpLedgerTrade);
+        backQueryCheck(kwpLedgerTrade.getStatus());
         return tradeTrackService.selectList(id, LedgerTrackEnum.REJECT);
     }
 
@@ -358,9 +361,7 @@ public class KwpLedgerTradeService extends AbsLedger {
      */
     public String doBack(LedgerReq ledgerReq) {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
-        if (Objects.isNull(kwpLedgerTrade)) {
-            throw new BusinessException("对账单不存在!");
-        }
+        orderCheck(kwpLedgerTrade);
         backCheck(kwpLedgerTrade.getStatus());
         kwpLedgerTrade.setStatus(LedgerEnum.BACK.getStatus());
         kwpLedgerTrade.setUpdateBy(LoginUserHolder.getUserId());
@@ -379,9 +380,7 @@ public class KwpLedgerTradeService extends AbsLedger {
     @Transactional(rollbackFor = Exception.class)
     public String confirmOrder(LedgerConfirmReq confirmReq) {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(confirmReq.getId());
-        if (Objects.isNull(kwpLedgerTrade)) {
-            throw new BusinessException("对账单不存在!");
-        }
+        orderCheck(kwpLedgerTrade);
         confirmCheck(kwpLedgerTrade.getStatus());
         kwpLedgerTrade.setStatus(LedgerEnum.LEDGERED.getStatus());
         kwpLedgerTrade.setAuditPhone(confirmReq.getAuditPhone());
@@ -403,9 +402,7 @@ public class KwpLedgerTradeService extends AbsLedger {
     @Transactional(rollbackFor = Exception.class)
     public String orderSuccess(LedgerSuccessReq ledgerReq) {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
-        if (Objects.isNull(kwpLedgerTrade)) {
-            throw new BusinessException("对账单不存在!");
-        }
+        orderCheck(kwpLedgerTrade);
         successCheck(kwpLedgerTrade.getStatus());
 
         kwpLedgerTrade.setReceiptTime(LocalDateTime.of(ledgerReq.getReceiptTime(), LocalTime.MIN));

+ 4 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/dubbo/PayCenterServiceImpl.java

@@ -4,7 +4,7 @@ import com.sckw.core.exception.BusinessException;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 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.common.R;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.service.KwpWalletRelationService;
 import com.sckw.payment.service.PayCenterService;
@@ -31,7 +31,9 @@ public class PayCenterServiceImpl implements PayCenterDubboService {
         if (StringUtils.isBlank(uid)) {
             throw new BusinessException("企业未开通电子钱包");
         }
-        return payCenterService.memberDetail(uid, channel);
+        payCenterService.walletUnFreeze("kll_0001");
+//        payCenterService.payAgentPay("kll_0001");
+        return payCenterService.memberDetail(uid, ChannelEnum.HF);
     }
 
     @Override

+ 5 - 1
sckw-modules/sckw-payment/src/main/resources/bootstrap.yml

@@ -12,4 +12,8 @@ spring:
 
 mybatis-plus:
   configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+logging:
+  level:
+    root: info
+    com.sckw.payment: debug

+ 1 - 1
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml

@@ -94,7 +94,7 @@
             <if test="logisticsReq.trading != null">
                 and kll.trading = #{logisticsReq.trading,jdbcType=INTEGER}
             </if>
-            <if test="logisticsReq.startCreateTime != null and logisticsReq.endCreateTime != null">
+            <if test="logisticsReq.startCreateTime != null and logisticsReq.startCreateTime != '' and logisticsReq.endCreateTime != null and logisticsReq.endCreateTime != ''">
                 and kll.generate_time between #{logisticsReq.startCreateTime,jdbcType=TIMESTAMP}
                     and #{logisticsReq.endCreateTime,jdbcType=TIMESTAMP}
             </if>

+ 1 - 1
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml

@@ -141,7 +141,7 @@
             <if test="tradeReq.trading != null">
                 and klt.trading = #{tradeReq.trading,jdbcType=INTEGER}
             </if>
-            <if test="tradeReq.startCreateTime != null and tradeReq.endCreateTime != null">
+            <if test="tradeReq.endCreateTime != null and tradeReq.endCreateTime != '' and tradeReq.startCreateTime != null and tradeReq.startCreateTime != ''">
                 and klt.generate_time between #{tradeReq.startCreateTime,jdbcType=TIMESTAMP} and
                     #{tradeReq.endCreateTime,jdbcType=TIMESTAMP}
             </if>

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -88,7 +88,7 @@ public class KwpGoodsController {
      */
     @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult select(@RequestBody SelectGoodsListParam params) {
-        return HttpResult.ok(kwpGoodsService.select(params));
+        return HttpResult.ok(kwpGoodsService.select(params, true));
     }
 
     /**

+ 5 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsList.java

@@ -40,6 +40,11 @@ public class GoodsList {
      */
     private String name;
 
+    /**
+     * 商品缩略图
+     */
+    private String thumb;
+
     /**
      * 商品类型
      */

+ 16 - 7
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -397,8 +397,8 @@ public class KwpGoodsService {
      * @Param params:
      * @return: java.util.List<com.sckw.product.model.vo.res.GoodsList>
      */
-    public PageResult select(SelectGoodsListParam params) {
-        IPage<KwpGoods> goodsIpage = getGoodsLists(params, true);
+    public PageResult select(SelectGoodsListParam params, Boolean isPage) {
+        IPage<KwpGoods> goodsIpage = getGoodsLists(params, isPage);
         List<KwpGoods> goodsLists = goodsIpage.getRecords();
         if (CollectionUtils.isEmpty(goodsLists)) {
             return PageResult.build(params.getPage(), params.getPageSize(), goodsIpage.getTotal(), Collections.emptyList());
@@ -409,9 +409,15 @@ public class KwpGoodsService {
         List<Long> userIds = new ArrayList<>();
         goodsLists.forEach(e -> {
             goodsIds.add(e.getId());
-            supplyEntIds.add(e.getSupplyEntId());
-            userIds.add(e.getManager());
-            userIds.add(e.getCreateBy());
+            if (Objects.nonNull(e.getSupplyEntId())){
+                supplyEntIds.add(e.getSupplyEntId());
+            }
+            if (Objects.nonNull(e.getManager())){
+                supplyEntIds.add(e.getManager());
+            }
+            if (Objects.nonNull(e.getCreateBy())){
+                userIds.add(e.getCreateBy());
+            }
         });
         //地址信息
         Map<Long, KwpGoodsAddress> addressMap = kwpGoodsAddressService.getByGoodsIds(goodsIds)
@@ -423,7 +429,10 @@ public class KwpGoodsService {
         List<UserCacheResDto> userList = remoteSystemService.queryUserCacheByIds(userIds);
         Map<Long, UserCacheResDto> userMap = userList.stream().collect(Collectors.toMap(UserCacheResDto::getId, e -> e, (k1, k2) -> k1));
         //供应企业信息
-        List<EntCacheResDto> entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
+        List<EntCacheResDto> entList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(supplyEntIds)) {
+            entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
+        }
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
         goodsLists.forEach(e -> {
             Long id = e.getId();
@@ -523,7 +532,7 @@ public class KwpGoodsService {
      * @return: void
      */
     public List<GoodsListExport> export(ExportGoodsListParam params) {
-        PageResult pageResult = select(BeanUtils.copyProperties(params, SelectGoodsListParam.class));
+        PageResult pageResult = select(BeanUtils.copyProperties(params, SelectGoodsListParam.class), false);
         List<GoodsList> goodsLists = pageResult.getList();
         if (CollectionUtils.isEmpty(goodsLists)) {
             return Collections.emptyList();

+ 9 - 14
sckw-modules/sckw-product/src/main/resources/bootstrap-test.yml

@@ -2,27 +2,22 @@ spring:
   cloud:
     nacos:
       discovery:
-      # 服务注册地址
-        server-addr: @nacos.server@
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
       config:
-      # 配置中心地址
-        server-addr: @nacos.server@
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
         # 命名空间
-        namespace: @nacos.namespace@
+        namespace: sckw-service-platform
         # 共享配置
         group: sckw-service-platform
-        # 配置文件格式
-        file-extension: yaml
-        shared-configs:
-          - data-id: sckw-common.yml
-            group: sckw-common
-            refresh: true
-
-        #可以读多个配置文件 需要在同一个命名空间下面可以是不同的组
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
         extension-configs:
           - dataId: sckw-common.yml
             group: sckw-service-platform

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

@@ -175,7 +175,16 @@ public class KwTransportService {
         criteria.and("delFlag").is(NumberConstant.ZERO);
 
         if (StringUtils.isNotBlank(query.getStatus())) {
-            criteria.and("status").is(query.getStatus());
+            // TODO 此处需要修改
+            if(query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
+                List<Long> statuses = new ArrayList<>();
+                statuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
+                statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
+                statuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
+                criteria.and("status").in(statuses);
+            } else {
+                criteria.and("status").is(query.getStatus());
+            }
         }
         // 装载时间
         if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
@@ -193,21 +202,16 @@ public class KwTransportService {
                     .lte(query.getEndUnloadTime()));
         }
         // 多条件模糊查询
-        Criteria c1 = new Criteria();
-        Criteria c2 = new Criteria();
-        Criteria c3 = new Criteria();
-        Criteria c4 = new Criteria();
-        Criteria c5 = new Criteria();
-        Criteria c6 = new Criteria();
+        List<Criteria> orCriteria = new ArrayList<>();
         if (StringUtils.isNotBlank(query.getKeywords())) {
             Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
-            c1 = Criteria.where("wOrderNo").regex(pattern);
-            c2 = Criteria.where("truckNo").regex(pattern);
-            c3 = Criteria.where("driverName").regex(pattern);
-            c4 = Criteria.where("firmName").regex(pattern);
-            c5 = Criteria.where("loadAddress").regex(pattern);
-            c6 = Criteria.where("unloadAddress").regex(pattern);
-            criteria.orOperator(c1, c2, c3, c4, c5, c6);
+            orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
+            orCriteria.add(Criteria.where("truckNo").regex(pattern));
+            orCriteria.add(Criteria.where("driverName").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            orCriteria.add(Criteria.where("loadAddress").regex(pattern));
+            orCriteria.add(Criteria.where("unloadAddress").regex(pattern));
+            criteria.orOperator(orCriteria);
         }
         return criteria;
     }
@@ -231,21 +235,39 @@ public class KwTransportService {
         List<TableTops> results = outputTypeCount.getMappedResults();
         // 填充默认值
         List<TableTops> list = new ArrayList<>();
+        TableTops topExpired = new TableTops();
+        topExpired.setName("已作废");
+        topExpired.setValue(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
+        topExpired.setTotal(0);
+        ArrayList<Long> expiredStatuses = new ArrayList<>();
+        expiredStatuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
+        expiredStatuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
+        expiredStatuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
+
         for (CarWaybillEnum status : CarWaybillEnum.values()) {
+            boolean expiredFlag = expiredStatuses.contains(status.getCode().longValue());
             TableTops top = new TableTops();
             top.setName(status.getDestination());
             top.setValue(String.valueOf(status.getCode()));
             top.setTotal(0);
             if (CollectionUtils.isNotEmpty(results)) {
                 for (TableTops result : results) {
-                    if (StringUtils.isNotEmpty(result.getValue()) && String.valueOf(result.getValue()).equals(String.valueOf(status.getCode()))) {
-                        top.setTotal(result.getTotal());
-                        continue;
+                    if (StringUtils.isNotEmpty(result.getValue())
+                            && String.valueOf(result.getValue()).equals(String.valueOf(status.getCode()))) {
+                        if(expiredFlag) {
+                            topExpired.setTotal(topExpired.getTotal() + result.getTotal());
+                        } else {
+                            top.setTotal(result.getTotal());
+                        }
+                        break;
                     }
                 }
             }
-            list.add(top);
+            if(!expiredFlag) {
+                list.add(top);
+            }
         }
+        list.add(topExpired);
         // 查询结果
         return HttpResult.ok(list);
     }

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

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

+ 1 - 1
sckw-modules/sckw-system/src/main/resources/mapper/SysDictDao.xml

@@ -239,7 +239,7 @@
     from sys_dict
     where del_flag = 0
       and type = #{type}
-      and value = #{value}
+      and value = #{value} limit 1
   </select>
 
   <select id="selectAll" resultType="com.sckw.system.model.SysDict">

+ 17 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java

@@ -195,4 +195,21 @@ public class AcceptCarriageOrderController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
+
+    /**
+     * 承运订单-完结订单
+     *
+     * @param orderFinishDTO
+     * @return
+     */
+    @RequestMapping(value = "/commitAcceptCarriageOrderFinish", method = RequestMethod.POST)
+    public HttpResult commitAcceptCarriageOrderFinish(@Validated @RequestBody OrderFinishDTO orderFinishDTO) {
+        try {
+            return acceptCarriageOrderService.commitAcceptCarriageOrderFinish(orderFinishDTO);
+        } catch (Exception e) {
+            log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

+ 6 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java

@@ -3,6 +3,7 @@ package com.sckw.transport.controller;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.model.dto.OrderDTO;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.service.ConsignOrderService;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
@@ -72,15 +73,15 @@ public class ConsignOrderController {
     /**
      * 托运订单-完结订单
      *
-     * @param orderDto
+     * @param orderFinishDTO
      * @return
      */
-    @RequestMapping(value = "/commitOrderFinish", method = RequestMethod.POST)
-    public HttpResult commitOrderFinish(@Validated @RequestBody OrderDTO orderDto) {
+    @RequestMapping(value = "/commitConsignOrderFinish", method = RequestMethod.POST)
+    public HttpResult commitConsignOrderFinish(@Validated @RequestBody OrderFinishDTO orderFinishDTO) {
         try {
-            return null;
+            return consignOrderService.commitConsignOrderFinish(orderFinishDTO);
         } catch (Exception e) {
-            log.error("托运订单-完结订单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
+            log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }

+ 57 - 16
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -4,10 +4,7 @@ import com.sckw.core.utils.CollectionUtils;
 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.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.model.dto.*;
 import com.sckw.transport.service.DriverService;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import jakarta.validation.Valid;
@@ -15,7 +12,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-
 import java.util.List;
 
 /**
@@ -95,7 +91,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param params {}
-     * @description 派车-趟次/循环
+     * @desc 派车-趟次/循环
      * @author zk
      * @date 2023/5/30
      **/
@@ -109,7 +105,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param ids 车辆运单主键ID,多个已逗号隔开
-     * @description 取消派车
+     * @desc 取消派车
      * @author zk
      * @date 2023/7/24
      **/
@@ -120,7 +116,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param params {}
-     * @description 确认接单
+     * @desc 确认接单
      * @author zk
      * @date 2023/7/24
      **/
@@ -131,7 +127,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param params {}
-     * @description 拒绝接单
+     * @desc 拒绝接单
      * @author zk
      * @date 2023/7/24
      **/
@@ -141,8 +137,8 @@ public class KwtWaybillOrderController {
     }
 
     /**
-     * @param params 确认/拒绝出车参数
-     * @description 确认出车
+     * @param params {}
+     * @desc 确认出车
      * @author zk
      * @date 2023/7/26
      **/
@@ -152,8 +148,8 @@ public class KwtWaybillOrderController {
     }
 
     /**
-     * @param params 确认/拒绝出车参数
-     * @description 拒绝出车
+     * @param params {}
+     * @desc 拒绝出车
      * @author zk
      * @date 2023/7/26
      **/
@@ -162,6 +158,50 @@ public class KwtWaybillOrderController {
         return waybillOrderService.refuseDeparture(params);
     }
 
+    /**
+     * @param params {}
+     * @desc 到达装货地点
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/arriveLoadLocation")
+    public HttpResult arriveLoadLocation(@RequestBody @Valid OperateWaybillDto params){
+        return waybillOrderService.arriveLoadLocation(params);
+    }
+
+    /**
+     * @param params {}
+     * @desc 装货
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/loading")
+    public HttpResult loading(@RequestBody @Valid WaybillOrderTicketDto params){
+        return waybillOrderService.loading(params);
+    }
+
+    /**
+     * @param params {}
+     * @desc 到达卸货地点
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/arriveUnloadLocation")
+    public HttpResult arriveUnloadLocation(@RequestBody @Valid OperateWaybillDto params){
+        return waybillOrderService.arriveUnloadLocation(params);
+    }
+
+    /**
+     * @param params {}
+     * @desc 卸货
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @PostMapping("/unloading")
+    public HttpResult unloading(@RequestBody @Valid WaybillOrderTicketDto params){
+        return waybillOrderService.unloading(params);
+    }
+
 
 
     //取消派车(未接单前)
@@ -170,10 +210,11 @@ public class KwtWaybillOrderController {
     //确认接单-趟次/循环
     //拒绝接单-趟次/循环
     //确认/拒绝出车
-    //到达装货地点
+    //到达装货地点 arriveLoadLocation
     //确认装货
-    //到达卸货地点
+    //到达卸货地点 arriveUnloadLocation
     //确认卸货
-
+    //修改单证
+    //单证审核
 
 }

+ 13 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java

@@ -2,14 +2,14 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.WaybillOrderDTO;
 import com.sckw.transport.service.WaybillManagementService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
 
 /**
  * @author lfdc
@@ -25,7 +25,7 @@ public class WaybillManagementController {
     @Autowired
     WaybillManagementService waybillManagementService;
 
-    @RequestMapping(value = "/waybillData", method = RequestMethod.GET)
+    @RequestMapping(name = "运单详情", value = "/waybillData", method = RequestMethod.GET)
     public HttpResult waybillData(@Param("id") Long id) {
         try {
             return waybillManagementService.waybillData(id);
@@ -34,4 +34,13 @@ public class WaybillManagementController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+    @RequestMapping(name = "运单看板", value = "/waybillIndex", method = RequestMethod.GET)
+    public HttpResult waybillIndex(WaybillOrderDTO waybillOrderDTO) {
+        try {
+            return waybillManagementService.waybillIndex(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("运单看板:订单id {},error {} ", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

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

@@ -6,15 +6,5 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface KwtWaybillOrderTicketMapper extends BaseMapper<KwtWaybillOrderTicket> {
-    int deleteByPrimaryKey(Long id);
 
-    int insert(KwtWaybillOrderTicket record);
-
-    int insertSelective(KwtWaybillOrderTicket record);
-
-    KwtWaybillOrderTicket selectByPrimaryKey(Long id);
-
-    int updateByPrimaryKeySelective(KwtWaybillOrderTicket record);
-
-    int updateByPrimaryKey(KwtWaybillOrderTicket record);
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -145,6 +145,16 @@ public class KwtLogisticsOrder implements Serializable {
      */
     private BigDecimal deficitPrice;
 
+    /**
+     * 实际开始时间(装货)
+     */
+    private Date loadTime;
+
+    /**
+     * 实际结束时间(卸货)
+     */
+    private Date unloadTime;
+
     /**
      * 付款方式(预付款、线下支付、第三方支付)
      */

+ 2 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java

@@ -1,12 +1,9 @@
 package com.sckw.transport.model;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
-
-import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * @author lfdc
@@ -15,11 +12,7 @@ import java.util.Date;
  */
 @Data
 @TableName("kwt_waybill_order_ticket")
-public class KwtWaybillOrderTicket implements Serializable {
-    /**
-     * 主键
-     */
-    private Long id;
+public class KwtWaybillOrderTicket extends BaseModel {
 
     /**
      * 车辆运单id
@@ -51,33 +44,4 @@ public class KwtWaybillOrderTicket implements Serializable {
      */
     private String urls;
 
-    /**
-     * 备注
-     */
-    private String remark;
-
-    /**
-     * 用户状态(0正常、1已锁)
-     */
-    private Integer status;
-
-    private Long createBy;
-
-    private Date createTime;
-
-    private Long updateBy;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    /**
-     * 是否删除(0未删除,1删除)
-     */
-    @TableLogic("0")
-    private Integer delFlag;
-
-    private static final long serialVersionUID = 1L;
-
 }

+ 68 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderDTO.java

@@ -0,0 +1,68 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author JC
+ * @version 1.0
+ * @desc TODO
+ * @date 2023/{07}/19 10:20:44
+ **/
+@Data
+@Accessors(chain = true)
+public class WaybillOrderDTO extends PageRequest implements Serializable {
+    private List<Long> ids;
+    /**
+     * 派车开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String startSendCarTime;
+
+    /**
+     * 派车结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String endSendCarTime;
+
+    /**
+     * 装载开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String startLoadTime;
+
+    /**
+     * 装载结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String endLoadTime;
+
+    /**
+     * 卸载开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String startUnloadTime;
+
+    /**
+     * 卸载结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String endUnloadTime;
+
+    /**
+     * 关键字搜索
+     */
+    @NotBlank(message = "关键字不能为空")
+    private String keywords;
+
+    /**
+     * 运单状态
+     */
+    private String status;
+}

+ 65 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderTicketDto.java

@@ -0,0 +1,65 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * @author zk
+ * @desc 装卸货榜单信息
+ * @date 2023/7/26 0026
+ */
+@Data
+public class WaybillOrderTicketDto {
+
+    /**
+     * 车辆运单id
+     */
+    @JsonProperty("wOrderId")
+    @NotNull(message = "车辆运单ID不能为空")
+    private Long wOrderId;
+
+    /**
+     * 磅单类型(1装货单/2卸货单)
+
+    @JsonProperty("type")
+    @NotNull(message = "磅单类型不能为空")
+    private Integer type;*/
+
+    /**
+     * 装卸货数量
+     */
+    @JsonProperty("amount")
+    @NotNull(message = "装卸货净重不能为空")
+    @DecimalMin(value= "0", inclusive=false, message = "装卸货净重必须等于或大于0")
+    private BigDecimal amount;
+
+    /**
+     * 毛重
+     */
+    @JsonProperty("grossAmount")
+    private BigDecimal grossAmount;
+
+    /**
+     * 皮重
+     */
+    @JsonProperty("tareAmount")
+    private BigDecimal tareAmount;
+
+    /**
+     * 上传凭证地址,多个以英文逗号隔开
+     */
+    @JsonProperty("urls")
+    @NotBlank(message = "凭证不能为空")
+    private String urls;
+
+    /**
+     * 备注
+     */
+    @Size(max=100, message = "原因长度不能大于100个字符!")
+    private String remark;
+}

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CarDataVO.java

@@ -15,10 +15,19 @@ public class CarDataVO {
      * 司机姓名
      */
     private String driverName;
+
+    /**
+     * 司机id
+     */
+    private String driverId;
+
     /**
      * 司机电话
      */
     private String driverPhone;
+    /**
+     * 数据id
+     */
     private String id;
     /**
      * 身份证号

+ 105 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillBoardListVO.java

@@ -0,0 +1,105 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author JC
+ * @version 1.0
+ * @desc TODO
+ * @date 2023/07/26 17:03:22
+ **/
+@Data
+@Accessors(chain = true)
+public class WaybillBoardListVO {
+    /**
+     * 运单Id
+     */
+    private String wOrderId;
+    /**
+     * 运单号
+     */
+    private String wOrderNo;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 装货地点
+     */
+    private String loadDetailAddress;
+
+    /**
+     * 卸货地点
+     */
+    private String unloadDetailAddress;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * 托运单位
+     */
+    private String firmName;
+
+    /**
+     * 派单人员
+     */
+    private String createByName;
+
+    /**
+     * 派单时间
+     */
+    private String createTime;
+
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+
+    /**
+     * 司机电话
+     */
+    private String driverPhone;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+    /**
+     * 装载重量
+     */
+    private String loadGrossAmount;
+
+    /**
+     * 卸货重量
+     */
+    private String unloadGrossAmount;
+
+    /**
+     * 装载图片
+     */
+    private String loadUrls;
+
+    /**
+     * 卸货图片
+     */
+    private String unloadUrls;
+
+    /**
+     * 进度列表
+     */
+    private List<WaybillStatusVO> tracks;
+}

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillStatusVO.java

@@ -0,0 +1,39 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author JC
+ * @version 1.0
+ * @desc TODO
+ * @date 2023/07/26 17:03:22
+ **/
+@Data
+@Accessors(chain = true)
+public class WaybillStatusVO {
+    /**
+     * 状态描述
+     */
+    private String destination;
+
+    /**
+     * 状态码
+     */
+    private Integer code;
+
+    /**
+     * 进行状态
+     */
+    private boolean status;
+
+    /**
+     * 记录时间
+     */
+    private String createTime;
+
+    /**
+     * 记录时间
+     */
+    private String createByName;
+}

+ 191 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -35,6 +37,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.dto.OrderTakingDTO;
 import com.sckw.transport.model.dto.StopOrderTakingDTO;
 import com.sckw.transport.model.dto.SubcontractConsignmentDTO;
@@ -75,6 +78,9 @@ public class AcceptCarriageOrderService {
     @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
     RemoteFleetService fleetService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService remoteContractService;
+
     @Resource
     private StreamBridge streamBridge;
 
@@ -183,15 +189,43 @@ public class AcceptCarriageOrderService {
         } else {
             pids = bo.getLOrderId() + StringConstant.COMMA + orderId;
         }
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(bo.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId())) == null) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId()));
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 0 已签约 1待签约
+        Integer status = infoResDto.getStatus();
+        Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        if (NumberConstant.ONE == status) {
+            orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
+        } else if (NumberConstant.ZERO == status) {
+            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        } else {
+            log.info("承运订单生成物流托运 承运订单id:{}," +
+                            "承运订单编号:{},合同id:{},合同信息:{}",
+                    bo.getLOrderId(), bo.getLOrderNo(),
+                    bo.getContractId(), JSONObject.toJSONString(infoResDto));
+            throw new RuntimeException("生成物流托运合同异常");
+        }
         insertSubcontractLogisticsGoods(bo, lOrderNo, orderId);
-        insertSubcontractLogisticsOrder(bo, lOrderNo, order, orderId, pids);
+        insertSubcontractLogisticsOrder(bo, lOrderNo, order, orderId, pids,orderStatus);
         insertSubcontractLogisticsOrderContract(bo, orderId);
         insertSubcontractLogisticsOrderUnit(bo, orderId);
         insertSubcontractLogisticsOrderAddress(bo, orderId, logisticsOrder);
-        insertLogisticsOrderTrack(bo, orderId);
+        insertLogisticsOrderTrack(bo, orderId,orderStatus);
         //修改上级分配量以及可分配量委托量等
         logisticsOrder.setSubcontractAmount(logisticsOrder.getSubcontractAmount().add(new BigDecimal(bo.getCarryingCapacity())));
-        subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder);
+        subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder,orderStatus);
         return HttpResult.ok();
     }
 
@@ -203,8 +237,9 @@ public class AcceptCarriageOrderService {
      * @param bo                页面传输实体
      * @param kwtLogisticsOrder 物流订单数据(上一级)
      */
-    private void subcontractSendMongoDB(String lOrderNo, Long orderId, SubcontractConsignmentDTO bo, KwtLogisticsOrder kwtLogisticsOrder) {
+    private void subcontractSendMongoDB(String lOrderNo, Long orderId, SubcontractConsignmentDTO bo, KwtLogisticsOrder kwtLogisticsOrder,Integer orderStatus) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setStatus(String.valueOf(orderStatus));
         logisticsOrder.setLOrderId(orderId);
         logisticsOrder.setLOrderNo(lOrderNo);
         logisticsOrder.setLOrderPid(Long.parseLong(bo.getLOrderId()));
@@ -309,11 +344,11 @@ public class AcceptCarriageOrderService {
      * @param bo
      * @param orderId
      */
-    private void insertLogisticsOrderTrack(SubcontractConsignmentDTO bo, Long orderId) {
+    private void insertLogisticsOrderTrack(SubcontractConsignmentDTO bo, Long orderId,Integer orderStatus) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
         entity.setId(new IdWorker(NumberConstant.ONE).nextId());
         entity.setLOrderId(orderId);
-        entity.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        entity.setStatus(orderStatus);
         entity.setCreateTime(new Date());
         entity.setUpdateTime(new Date());
         entity.setCreateBy(LoginUserHolder.getUserId());
@@ -443,7 +478,7 @@ public class AcceptCarriageOrderService {
      */
     private void insertSubcontractLogisticsOrder(SubcontractConsignmentDTO bo, String lOrderNo,
                                                  KwtLogisticsOrder order,
-                                                 Long orderId, String pids) {
+                                                 Long orderId, String pids,Integer orderStatus) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
         order.setTOrderId(order.getTOrderId());
@@ -476,7 +511,7 @@ public class AcceptCarriageOrderService {
         order.setCreateTime(new Date());
         order.setUpdateBy(LoginUserHolder.getUserId());
         order.setUpdateTime(new Date());
-        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        order.setStatus(orderStatus);
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         order.setEntrustAmount(decimal);
         order.setSubcontractAmount(decimal);
@@ -656,7 +691,9 @@ public class AcceptCarriageOrderService {
         checkParam(driverParam);
         List<DriverListVo> list = logisticsOrderMapper.selectDriverListById(driverParam);
         for (DriverListVo driverListVo : list) {
-            Map<Long, RTruckVo> truck = fleetService.findTruck(driverListVo.getTruckNo());
+            List<String> objects = new ArrayList<>();
+            objects.add(driverListVo.getTruckNo());
+            Map<String, RTruckVo> truck = fleetService.findTruck(objects);
             if (!ObjectUtils.isEmpty(truck)) {
                 driverListVo.setCarType(truck.get(driverListVo.getDriverId()).getTruckType());
             }
@@ -799,4 +836,149 @@ public class AcceptCarriageOrderService {
         }
         return HttpResult.ok(result);
     }
+
+    /**
+     * 承运订单-分包托运-完结订单
+     *
+     * @param orderFinishDTO
+     * @return
+     */
+    public HttpResult commitAcceptCarriageOrderFinish(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("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
+        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
+            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
+                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
+                if (split.length > NumberConstant.ONE) {
+                    for (String s : split) {
+                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
+                            //本身订单
+                            //只存在当前订单无分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataByItself(logisticsOrder, orderFinishDTO);
+                        } else {
+                            //修改分包后的订单-代表存在分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataBySubset(orderFinishDTO, s);
+                        }
+                    }
+                } else {
+                    //只存在当前订单无分包订单
+                    /**单据完结修改状态以及数据*/
+                    updateDataByItself(logisticsOrder, orderFinishDTO);
+                }
+            }
+        }
+        return HttpResult.ok("承运订单-分包托运完结订单成功");
+    }
+
+
+    /**
+     * 承运订单-分包托运-完结订单-修改本身数据
+     * @param logisticsOrder    本身物流订单数据
+     * @param orderFinishDTO    页面传递数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setUpdateBy(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());
+        logisticsOrderTrackMapper.insert(track);
+        /**单据完结修改Mongodb*/
+        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
+                .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 orderFinishDTO
+     * @param orderId   分包物流订单id
+     */
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            kwtLogisticsOrder.setUpdateTime(new Date());
+            kwtLogisticsOrder.setRemark(orderFinishDTO.getRemark());
+            kwtLogisticsOrderMapper.updateById(kwtLogisticsOrder);
+            KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+            track.setId(new IdWorker(NumberConstant.ONE).nextId());
+            track.setLOrderId(kwtLogisticsOrder.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());
+            logisticsOrderTrackMapper.insert(track);
+            /**单据完结修改Mongodb*/
+            SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+            updateParam.setLOrderId(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            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));
+        }
+    }
 }

+ 202 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -1,31 +1,45 @@
 package com.sckw.transport.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.DateUtil;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.mongo.enums.BusinessTypeEnum;
+import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
+import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.OrderDTO;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.vo.CarDataVO;
 import com.sckw.transport.model.vo.CarWaybillVO;
+import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author lfdc
@@ -39,9 +53,15 @@ public class ConsignOrderService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    RemoteFleetService remoteFleetService;
+
     @Autowired
     public MongoTemplate mongoTemplate;
 
+    @Resource
+    private StreamBridge streamBridge;
+
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
@@ -51,6 +71,9 @@ public class ConsignOrderService {
     @Autowired
     public KwtLogisticsOrderUnitMapper kwtLogisticsOrderUnitMapper;
 
+    @Autowired
+    public KwtLogisticsOrderTrackMapper kwtLogisticsOrderTrackMapper;
+
     @Autowired
     public KwtWaybillOrderMapper kwtWaybillOrderMapper;
 
@@ -66,6 +89,7 @@ public class ConsignOrderService {
 
     /**
      * 托运订单/承运订单-获取车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -83,6 +107,7 @@ public class ConsignOrderService {
 
     /**
      * 通过订单id+类型 查询承运订单-车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -162,6 +187,7 @@ public class ConsignOrderService {
 
     /**
      * 通过订单id+类型 查询托运订单-车辆运单
+     *
      * @param orderDto
      * @return
      */
@@ -237,25 +263,37 @@ public class ConsignOrderService {
         }
         return HttpResult.ok(returnList);
     }
+
+    /**
+     * 托运订单获取车辆信息
+     *
+     * @param orderDto
+     * @return
+     */
     public HttpResult getCarListByOrder(OrderDTO orderDto) {
-        KwtWaybillOrder waybillOrder = kwtWaybillOrderMapper.selectOne(new LambdaQueryWrapper<KwtWaybillOrder>()
-                .eq(KwtWaybillOrder::getLOrderId, orderDto.getId())
-                .eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId()));
-        List<KwtLogisticsOrderCirculate> list = kwtLogisticsOrderCirculateMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderCirculate>()
-                .eq(KwtLogisticsOrderCirculate::getLOrderId, orderDto.getId())
-                .eq(KwtLogisticsOrderCirculate::getEntId, LoginUserHolder.getEntId()));
-        List<CarDataVO> carDataVOS = new ArrayList<CarDataVO>();
-        if (CollectionUtils.isNotEmpty(list)) {
-            for (KwtLogisticsOrderCirculate circulate : list) {
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, orderDto.getId()));
+        if (logisticsOrder == null) {
+            log.error("托运订单获取车辆信息 error id:{},请求参数:{}", orderDto.getId(), JSONObject.toJSONString(orderDto));
+            HttpResult.error("物流订单不存在");
+        }
+        List<KwtWaybillOrder> waybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                .eq(KwtWaybillOrder::getLOrderId, orderDto.getId()));
+        List<CarDataVO> carDataVOS = new ArrayList<CarDataVO>(NumberConstant.SIXTEEN);
+        if (CollectionUtils.isNotEmpty(waybillOrders)) {
+            List<String> stringList = waybillOrders.stream().map(KwtWaybillOrder::getTruckNo).collect(Collectors.toList());
+            Map<String, RTruckVo> truck = remoteFleetService.findTruck(stringList);
+            for (KwtWaybillOrder KwtWaybillOrder : waybillOrders) {
                 CarDataVO carDataVo = new CarDataVO();
-                //todo dubbo查询
-//                circulate.getDriverId() ;
-//                carDataVo.setDriverName();
-//                carDataVo.getDriverPhone();
-//                carDataVo.getIdCard();
-//                carDataVo.getLoadAmount();
-                carDataVo.setTruckNo(circulate.getTruckNo());
-                carDataVo.setWOrderNo(waybillOrder.getWOrderNo());
+                carDataVo.setDriverId(String.valueOf(KwtWaybillOrder.getDriverId()));
+                carDataVo.setDriverName(KwtWaybillOrder.getDriverName());
+                carDataVo.setDriverPhone(KwtWaybillOrder.getDriverPhone());
+                carDataVo.setIdCard(KwtWaybillOrder.getDriverIdcard());
+                carDataVo.setLoadAmount(truck.get(KwtWaybillOrder.getTruckNo()) == null ?
+                        null : (truck.get(KwtWaybillOrder.getTruckNo()).getActualWeight() == null ?
+                        null : (String.valueOf(truck.get(KwtWaybillOrder.getTruckNo()).getActualWeight()))));
+                carDataVo.setTruckNo(KwtWaybillOrder.getTruckNo());
+                carDataVo.setWOrderNo(KwtWaybillOrder.getWOrderNo());
                 carDataVOS.add(carDataVo);
             }
         }
@@ -272,4 +310,151 @@ public class ConsignOrderService {
         Map<String, String> map = kwtLogisticsOrderMapper.getRejectReason(id, LogisticsOrderEnum.SEND_BACK.getStatus());
         return HttpResult.ok(map);
     }
+
+    /**
+     * 托运订单-完结订单
+     *
+     * @param orderFinishDTO 页面传递数据dto
+     * @return
+     */
+    public HttpResult commitConsignOrderFinish(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 = kwtWaybillOrderMapper.selectDataByLorderId(id, statusList);
+        if (count > NumberConstant.ZERO) {
+            throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
+        }
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
+        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
+            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
+                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
+                if (split.length > NumberConstant.ONE) {
+                    for (String s : split) {
+                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
+                            //本身订单
+                            //只存在当前订单无分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataByItself(logisticsOrder, orderFinishDTO);
+                        } else {
+                            //修改分包后的订单-代表存在分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataBySubset(orderFinishDTO, s);
+                        }
+                    }
+                } else {
+                    //只存在当前订单无分包订单
+                    /**单据完结修改状态以及数据*/
+                    updateDataByItself(logisticsOrder, orderFinishDTO);
+                }
+            }
+        }
+        return HttpResult.ok("承运订单-分包托运完结订单成功");
+    }
+
+
+    /**
+     * 承运订单-分包托运-完结订单-修改本身数据
+     *
+     * @param logisticsOrder 本身物流订单数据
+     * @param orderFinishDTO 页面传递数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setUpdateBy(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(orderFinishDTO.getId()))
+                .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 orderFinishDTO
+     * @param orderId        分包物流订单id
+     */
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            kwtLogisticsOrder.setUpdateTime(new Date());
+            kwtLogisticsOrder.setRemark(orderFinishDTO.getRemark());
+            kwtLogisticsOrderMapper.updateById(kwtLogisticsOrder);
+            KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+            track.setId(new IdWorker(NumberConstant.ONE).nextId());
+            track.setLOrderId(kwtLogisticsOrder.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(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            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));
+        }
+    }
 }

+ 213 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -19,12 +19,14 @@ import com.sckw.transport.model.*;
 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.WaybillOrderTicketDto;
 import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
 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 org.springframework.web.bind.annotation.RequestBody;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
@@ -50,6 +52,8 @@ public class KwtWaybillOrderService {
     @Autowired
     KwtWaybillOrderTrackMapper waybillOrderTrackDao;
     @Autowired
+    KwtWaybillOrderTicketMapper waybillOrderTicketDao;
+    @Autowired
     KwtLogisticsOrderUnitMapper logisticsOrderUnitDao;
     @Autowired
     KwtLogisticsOrderGoodsMapper logisticsOrderGoodsDao;
@@ -818,18 +822,11 @@ public class KwtWaybillOrderService {
             /**2Mongodb数据更新**/
             SckwWaybillOrder wOrder = new SckwWaybillOrder();
             wOrder.set_id(circulate.getId());
-            wOrder.setStatus(CarWaybillEnum.REJECT_ORDER.getCode());
-            wOrder.setUpdateTime(circulate.getUpdateTime());
-            wOrder.setUpdateBy(circulate.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);
+            KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
+            waybillOrder.setStatus(CarWaybillEnum.REJECT_ORDER.getCode());
+            waybillOrder.setUpdateTime(circulate.getUpdateTime());
+            waybillOrder.setUpdateBy(circulate.getUpdateBy());
+            editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
             /**3发送消息**/
         }
@@ -922,5 +919,208 @@ public class KwtWaybillOrderService {
         return HttpResult.ok("拒绝出车成功!");
     }
 
+    /**
+     * @param params {}
+     * @desc 到达装货地点
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult arriveLoadLocation(OperateWaybillDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //已出车车辆运单才能到达装货地点
+        if (waybillOrder.getStatus() != CarWaybillEnum.EXIT_COMPLETED.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能到达装货地点!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setStatus(CarWaybillEnum.WAIT_LOADING.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 {}
+     * @desc 装货
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult loading(WaybillOrderTicketDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //到达装货地车辆运单才能装货
+        if (waybillOrder.getStatus() != CarWaybillEnum.WAIT_LOADING.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能装货!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setLoadAmount(params.getAmount());
+        waybillOrder.setStatus(CarWaybillEnum.COMPLETION_LOADING.getCode());
+        waybillOrderDao.updateById(waybillOrder);
+
+        /**2新增运单状态记录**/
+        setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
+
+        /**3新增装卸货榜单信息**/
+        KwtWaybillOrderTicket ticket = new KwtWaybillOrderTicket();
+        ticket.setWOrderId(waybillOrder.getId());
+        ticket.setType(Global.NUMERICAL_ONE);
+        ticket.setAmount(waybillOrder.getLoadAmount());
+        ticket.setUrls(params.getUrls());
+        waybillOrderTicketDao.insert(ticket);
+
+        /**4更新承运订单entrustAmount**/
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
+        //承运订单已装货量=承运订单原装货量+当前车辆运单装货量
+        BigDecimal loadAmount = logisticsOrder.getLoadAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getLoadAmount();
+        logisticsOrder.setLoadAmount(loadAmount.add(waybillOrder.getLoadAmount()));
+        logisticsOrder.setLoadTime(waybillOrder.getUpdateTime());
+        logisticsOrderDao.updateById(logisticsOrder);
+
+        /**5Mongodb数据更新**/
+        //1车辆运单
+        SckwWaybillOrder wOrder = new SckwWaybillOrder();
+        wOrder.set_id(waybillOrder.getId());
+        wOrder.setLoadAmount(waybillOrder.getLoadAmount());
+        wOrder.setLoadUrls(params.getUrls());
+        wOrder.setLoadTime(waybillOrder.getUpdateTime());
+        editSckwWaybillOrder(wOrder, waybillOrder, 2);
+
+        //2承运订单
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.setLoadTime(logisticsOrder.getLoadTime());
+        lOrder.setLoadAmount(logisticsOrder.getLoadAmount());
+        editSckwLogisticsOrder(lOrder, logisticsOrder);
+
+        /**6发送消息**/
+
+        return HttpResult.ok("装货成功!");
+    }
+
+    /**
+     * @param params {}
+     * @desc 到达卸货地点
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult arriveUnloadLocation(OperateWaybillDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //已装货车辆运单才能到达卸货地点
+        if (waybillOrder.getStatus() != CarWaybillEnum.COMPLETION_LOADING.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能到达卸货地点!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setStatus(CarWaybillEnum.WAIT_UNLOADING.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 {}
+     * @desc 卸货
+     * @author zk
+     * @date 2023/7/26
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult unloading(@RequestBody @Valid WaybillOrderTicketDto params){
+        /**数据校验**/
+        KwtWaybillOrder waybillOrder = waybillOrderDao.selectById(params.getWOrderId());
+        if (waybillOrder == null) {
+            return HttpResult.error("车辆运单不存在!");
+        }
+        //到达卸货地车辆运单才能卸货
+        if (waybillOrder.getStatus() != CarWaybillEnum.WAIT_UNLOADING.getCode()) {
+            return HttpResult.error("车辆运单当前状态已不能装货!");
+        }
+
+        /**业务处理**/
+        /**1更新车辆运单**/
+        waybillOrder.setUnloadAmount(params.getAmount());
+        waybillOrder.setDeficitAmount(waybillOrder.getLoadAmount().subtract(waybillOrder.getUnloadAmount()));
+        waybillOrder.setStatus(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        waybillOrderDao.updateById(waybillOrder);
+
+        /**2新增运单状态记录**/
+        setWaybillOrderTrack(waybillOrder.getId(), waybillOrder.getStatus(), params.getRemark());
+
+        /**3新增装卸货榜单信息**/
+        KwtWaybillOrderTicket ticket = new KwtWaybillOrderTicket();
+        ticket.setWOrderId(waybillOrder.getId());
+        ticket.setType(Global.NUMERICAL_TWO);
+        ticket.setAmount(waybillOrder.getUnloadAmount());
+        ticket.setUrls(params.getUrls());
+        waybillOrderTicketDao.insert(ticket);
+
+        /**4更新承运订单entrustAmount**/
+        //更新卸货量/卸货时间/亏吨/亏吨扣款
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
+        //承运订单已卸货量=承运订单原卸货量+当前车辆运单卸货量
+        BigDecimal unloadAmount = logisticsOrder.getUnloadAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getUnloadAmount();
+        logisticsOrder.setUnloadAmount(unloadAmount.add(waybillOrder.getUnloadAmount()));
+        logisticsOrder.setUnloadTime(waybillOrder.getUpdateTime());
+        logisticsOrder.setDeficitAmount(logisticsOrder.getLoadAmount().subtract(logisticsOrder.getUnloadAmount()));
+        logisticsOrder.setDeficitPrice(null);
+        logisticsOrderDao.updateById(logisticsOrder);
+
+        /**5Mongodb数据更新**/
+        //1车辆运单
+        SckwWaybillOrder wOrder = new SckwWaybillOrder();
+        wOrder.set_id(waybillOrder.getId());
+        wOrder.setUnloadAmount(waybillOrder.getUnloadAmount());
+        wOrder.setUnloadUrls(params.getUrls());
+        wOrder.setUnloadTime(waybillOrder.getUpdateTime());
+        editSckwWaybillOrder(wOrder, waybillOrder, 2);
+
+        //2承运订单
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.setUnloadTime(logisticsOrder.getUnloadTime());
+        lOrder.setUnloadAmount(logisticsOrder.getUnloadAmount());
+        editSckwLogisticsOrder(lOrder, logisticsOrder);
+
+        /**6发送消息**/
+
+        return HttpResult.ok("装货成功!");
+    }
 
 }

+ 141 - 83
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -5,7 +5,10 @@ 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.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
@@ -71,6 +74,9 @@ public class LogisticsConsignmentService {
     @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
     RemoteFleetService remoteFleetService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService remoteContractService;
+
     @Autowired
     public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
 
@@ -92,7 +98,12 @@ public class LogisticsConsignmentService {
     @Autowired
     public KwtWaybillOrderMapper waybillOrderMapper;
 
-
+    /**
+     * 采购订单-物流托运生成托运订单
+     *
+     * @param bo
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult purchaseLogisticsConsignment(LogisticsConsignmentParam bo) {
         HttpResult httpResult = ValidUtil.serviceValid(bo);
@@ -117,6 +128,11 @@ public class LogisticsConsignmentService {
         }
     }
 
+    /**
+     * 销售订单-物流托运生成托运订单
+     * @param bo
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult sellLogisticsConsignment(LogisticsConsignmentParam bo) {
         HttpResult httpResult = ValidUtil.serviceValid(bo);
@@ -152,24 +168,55 @@ public class LogisticsConsignmentService {
         }
         String lOrderNo = com.sckw.transport.utils.StringUtils.getLOrderNo();
         Long orderId = new IdWorker(NumberConstant.ONE).nextId();
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(bo.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId())) == null) {
+            throw new RuntimeException("并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(Long.parseLong(bo.getContractId()));
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 0 已签约 1待签约
+        Integer status = infoResDto.getStatus();
+        Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        if (NumberConstant.ONE == status) {
+            orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
+        } else if (NumberConstant.ZERO == status) {
+            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        } else {
+            log.info("采购/销售生成物流托运 贸易订单id:{}," +
+                            "贸易订单编号:{},合同id:{},合同信息:{}",
+                    bo.getTOrderId(), bo.getTOrderNo(),
+                    bo.getContractId(), JSONObject.toJSONString(infoResDto));
+            throw new RuntimeException("生成物流托运合同异常");
+        }
         insertLogisticsGoods(bo, lOrderNo, orderId);
-        insertLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId);
+        insertLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId, orderStatus);
         insertLogisticsOrderContract(bo, orderId);
         insertLogisticsOrderUnit(bo, orderId);
         insertLogisticsOrderAddress(bo, orderId);
-        insertLogisticsOrderTrack(bo, orderId);
-        sendMongoDB(lOrderNo, orderId, bo, tradeOrder);
+        insertLogisticsOrderTrack(bo, orderId, orderStatus);
+        sendMongoDB(lOrderNo, orderId, bo, tradeOrder, orderStatus);
     }
 
     /**
      * 组装数据发送至mongoDb
      *
-     * @param lOrderNo
-     * @param orderId
-     * @param bo
+     * @param lOrderNo    物流订单编号
+     * @param orderId     物流订单id
+     * @param bo          页面请求数据
+     * @param tradeOrder  贸易单据
+     * @param orderStatus 物流订单状态
      */
-    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder) {
+    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder, Integer orderStatus) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setStatus(String.valueOf(orderStatus));
         logisticsOrder.setLOrderId(orderId);
         logisticsOrder.setLOrderNo(lOrderNo);
         logisticsOrder.setLOrderPid(null);
@@ -312,7 +359,7 @@ public class LogisticsConsignmentService {
      * @param bo
      * @param orderId
      */
-    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId) {
+    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId, Integer orderStatus) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
         entity.setId(new IdWorker(NumberConstant.ONE).nextId());
         entity.setLOrderId(orderId);
@@ -328,8 +375,9 @@ public class LogisticsConsignmentService {
     /**
      * 物流订单-商品信息
      *
-     * @param bo
-     * @param lOrderNo
+     * @param bo       页面请求数据
+     * @param lOrderNo 物流订单编号
+     * @param orderId  物流订单表编号
      */
     private void insertLogisticsGoods(LogisticsConsignmentParam bo, String lOrderNo, Long orderId) {
         KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
@@ -349,20 +397,21 @@ public class LogisticsConsignmentService {
     /**
      * 物流订单-主体
      *
-     * @param bo
-     * @param lOrderNo
-     * @param order
-     * @param tradeOrder
+     * @param bo          页面请求参数
+     * @param lOrderNo    物流订单编号
+     * @param order       物流订单数据
+     * @param tradeOrder  贸易订单数据
+     * @param orderId     物流订单id
+     * @param orderStatus 物流订单状态
      */
-    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId) {
+    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId, Integer orderStatus) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
         order.setTOrderId(Long.parseLong(bo.getTOrderId()));
         order.setTOrderNo(bo.getTOrderNo());
         order.setLOrderNo(lOrderNo);
         order.setPid(null);
-//        order.setPids(orderId + StringConstant.COMMA);
-        order.setPids(orderId.toString());
+        order.setPids(orderId + StringConstant.COMMA);
         order.setSettlementCycle(bo.getSettlementCycle());
         order.setPrice(new BigDecimal(bo.getPrice()));
         order.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()) == null ?
@@ -387,7 +436,7 @@ public class LogisticsConsignmentService {
         order.setCreateTime(new Date());
         order.setUpdateBy(LoginUserHolder.getUserId());
         order.setUpdateTime(new Date());
-        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        order.setStatus(orderStatus);
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         /**补充默认值*/
         order.setEntrustAmount(decimal);
@@ -505,7 +554,7 @@ public class LogisticsConsignmentService {
     public HttpResult logisticsOrder(String id, Integer page, Integer pageSize) {
         HttpResult httpResult = new HttpResult();
         OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(id));
-        /**根据下单方式决定托运数据是否展示*/
+        /**根据下单方式(代客下单/自主下单)决定托运数据是否展示*/
         boolean flag = false;
         if (String.valueOf(NumberConstant.ONE).equals(orderDetailRes.getSource())) {
             flag = true;
@@ -705,6 +754,7 @@ public class LogisticsConsignmentService {
      * @param type           类型
      * @return
      */
+    @Transactional(rollbackFor = Exception.class)
     public HttpResult orderFinish(OrderFinishDTO orderFinishDTO, String type) {
         HttpResult httpResult = ValidUtil.serviceValid(orderFinishDTO);
         if (!String.valueOf(httpResult.getCode()).equals(String.valueOf(HttpStatus.SUCCESS_CODE))) {
@@ -727,66 +777,7 @@ public class LogisticsConsignmentService {
      * @param orderFinishDTO
      */
     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));
+        purchaseOrderFinish(orderFinishDTO);
     }
 
     /**
@@ -797,6 +788,7 @@ public class LogisticsConsignmentService {
     private void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
         /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
         /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
         /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
         //物流订单id
         String id = orderFinishDTO.getId();
@@ -822,11 +814,77 @@ public class LogisticsConsignmentService {
         if (count > NumberConstant.ZERO) {
             throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
         }
-        /**单据完结修改状态以及数据*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
+        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
+            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
+                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
+                if (split.length > NumberConstant.ONE) {
+                    for (String s : split) {
+                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
+                            //本身订单
+                            //只存在当前订单无分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataByItself(logisticsOrder, orderFinishDTO);
+                        } else {
+                            //修改分包后的订单-代表存在分包订单
+                            /**单据完结修改状态以及数据*/
+                            updateDataBySubset(orderFinishDTO, s);
+                        }
+                    }
+                } else {
+                    //只存在当前订单无分包订单
+                    /**单据完结修改状态以及数据*/
+                    updateDataByItself(logisticsOrder, orderFinishDTO);
+                }
+            }
+        }
+    }
+
+    private void updateDataBySubset(OrderFinishDTO orderFinishDTO, String orderId) {
+        KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, Long.parseLong(orderId)));
+        if (kwtLogisticsOrder != null) {
+            kwtLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            kwtLogisticsOrder.setUpdateTime(new Date());
+            kwtLogisticsOrder.setRemark(orderFinishDTO.getRemark());
+            kwtLogisticsOrderMapper.updateById(kwtLogisticsOrder);
+            KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+            track.setId(new IdWorker(NumberConstant.ONE).nextId());
+            track.setLOrderId(kwtLogisticsOrder.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(kwtLogisticsOrder.getId())
+                    .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+                    .setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName())
+                    .setUpdateTime(new Date())
+            ;
+            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));
+        }
+    }
+
+    /**
+     * 完结订单-修改本身数据
+     */
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
         logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
         logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
         logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
-        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
         logisticsOrder.setUpdateTime(new Date());
         logisticsOrder.setRemark(orderFinishDTO.getRemark());
         kwtLogisticsOrderMapper.updateById(logisticsOrder);
@@ -842,7 +900,7 @@ public class LogisticsConsignmentService {
         kwtLogisticsOrderTrackMapper.insert(track);
         /**单据完结修改Mongodb*/
         SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
-        updateParam.setLOrderId(Long.parseLong(id))
+        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
                 .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
                 .setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateByName(LoginUserHolder.getUserName())

+ 174 - 26
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -1,31 +1,45 @@
 package com.sckw.transport.service;
 
-import cn.hutool.log.Log;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.DateUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.dao.*;
+import com.sckw.transport.dao.KwtWaybillOrderAddressMapper;
+import com.sckw.transport.dao.KwtWaybillOrderMapper;
+import com.sckw.transport.dao.KwtWaybillOrderTicketMapper;
+import com.sckw.transport.dao.KwtWaybillOrderTrackMapper;
 import com.sckw.transport.model.KwtWaybillOrderAddress;
 import com.sckw.transport.model.KwtWaybillOrderTicket;
 import com.sckw.transport.model.KwtWaybillOrderTrack;
 import com.sckw.transport.model.dto.WayBillDetailDTO;
-import com.sckw.transport.model.vo.WaybillCarVO;
-import com.sckw.transport.model.vo.WaybillDataVO;
-import com.sckw.transport.model.vo.WaybillTicketVO;
-import com.sckw.transport.model.vo.WaybillTrackVO;
+import com.sckw.transport.model.dto.WaybillOrderDTO;
+import com.sckw.transport.model.vo.*;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Value;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -56,8 +70,12 @@ public class WaybillManagementService {
     @Autowired
     public KwtWaybillOrderTrackMapper kwtWaybillOrderTrackMapper;
 
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
     /**
      * 运单详情
+     *
      * @param id
      * @return
      */
@@ -66,8 +84,8 @@ public class WaybillManagementService {
         // 收发地址
         List<KwtWaybillOrderAddress> kwtWaybillOrderAddressList = kwtWaybillOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderAddress>()
                 .eq(KwtWaybillOrderAddress::getWOrderId, kwtWaybillOrder.getLOrderId()));
-        if(CollectionUtils.isNotEmpty(kwtWaybillOrderAddressList)) {
-            for (KwtWaybillOrderAddress kwtWaybillOrderAddress:kwtWaybillOrderAddressList) {
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddressList)) {
+            for (KwtWaybillOrderAddress kwtWaybillOrderAddress : kwtWaybillOrderAddressList) {
                 // 1装货地址、2卸货地址
                 if (kwtWaybillOrderAddress.getAddressType().equals(NumberConstant.ONE)) {
                     kwtWaybillOrder.setStartLocationName(kwtWaybillOrderAddress.getName());
@@ -83,35 +101,37 @@ public class WaybillManagementService {
         waybillDataVO.setTransportMessage(kwtWaybillOrder);
 
         // 车辆信息
-        Map<Long, RTruckVo> trucks  = remoteFleetService.findTruck(kwtWaybillOrder.getTruckNo());
+        List<String> list = new ArrayList<>(NumberConstant.SIXTEEN);
+        list.add(kwtWaybillOrder.getTruckNo());
+        Map<String, RTruckVo> trucks = remoteFleetService.findTruck(list);
         WaybillCarVO waybillCarVO = new WaybillCarVO();
-        if(CollectionUtils.isNotEmpty(trucks)) {
+        if (CollectionUtils.isNotEmpty(trucks)) {
             waybillCarVO.setType(trucks.get(0).getTruckType());
             waybillCarVO.setTruckId(String.valueOf(trucks.get(0).getId()));
             waybillCarVO.setTrailerNo(trucks.get(0).getTrailerNo());
         }
         waybillCarVO.setDriverId(String.valueOf(kwtWaybillOrder.getDriverId()))
-            .setTruckNo(kwtWaybillOrder.getTruckNo())
-            .setDriverName(kwtWaybillOrder.getDriverName())
-            .setDriverPhone(kwtWaybillOrder.getDriverPhone());
+                .setTruckNo(kwtWaybillOrder.getTruckNo())
+                .setDriverName(kwtWaybillOrder.getDriverName())
+                .setDriverPhone(kwtWaybillOrder.getDriverPhone());
         waybillDataVO.setCarMessage(waybillCarVO);
         // 履约信息
         List<KwtWaybillOrderTicket> kwtWaybillOrderTicket = kwtWaybillOrderTicketMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
                 .eq(KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getWOrderId()));
         WaybillTicketVO waybillTicketVO = new WaybillTicketVO();
-        if(CollectionUtils.isNotEmpty(kwtWaybillOrderTicket)) {
-            for (KwtWaybillOrderTicket ticket: kwtWaybillOrderTicket) {
+        if (CollectionUtils.isNotEmpty(kwtWaybillOrderTicket)) {
+            for (KwtWaybillOrderTicket ticket : kwtWaybillOrderTicket) {
                 // 装货
                 if (ticket.getType().equals(NumberConstant.ONE)) {
                     waybillTicketVO.setLoadUrl(ticket.getUrls())
-                        .setLoadWeight(String.valueOf(ticket.getGrossAmount()))
-                        .setLoadTime(String.valueOf(ticket.getCreateTime()));
+                            .setLoadWeight(String.valueOf(ticket.getGrossAmount()))
+                            .setLoadTime(String.valueOf(ticket.getCreateTime()));
                 }
                 // 卸货
                 if (ticket.getType().equals(NumberConstant.TWO)) {
                     waybillTicketVO.setUnloadUrl(ticket.getUrls())
-                        .setUnloadWeight(String.valueOf(ticket.getGrossAmount()))
-                        .setUnloadTime(String.valueOf(ticket.getCreateTime()));
+                            .setUnloadWeight(String.valueOf(ticket.getGrossAmount()))
+                            .setUnloadTime(String.valueOf(ticket.getCreateTime()));
                 }
             }
         }
@@ -122,17 +142,17 @@ public class WaybillManagementService {
                 .eq(KwtWaybillOrderTrack::getWOrderId, kwtWaybillOrder.getWOrderId()));
         if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
             List<Long> userIds = new ArrayList<>();
-            for (KwtWaybillOrderTrack track: kwtWaybillOrderTracks) {
+            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
                 userIds.add(track.getCreateBy());
             }
             List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
-            for (KwtWaybillOrderTrack track: kwtWaybillOrderTracks) {
+            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
                 WaybillTrackVO waybillTrackVO = new WaybillTrackVO();
                 waybillTrackVO.setId(String.valueOf(track.getId()))
-                    .setRemark(track.getRemark())
-                    .setStatus(String.valueOf(track.getStatus()))
-                    .setCreateBy(String.valueOf(track.getCreateBy()));
-                for (UserCacheResDto user: users) {
+                        .setRemark(track.getRemark())
+                        .setStatus(String.valueOf(track.getStatus()))
+                        .setCreateBy(String.valueOf(track.getCreateBy()));
+                for (UserCacheResDto user : users) {
                     if (Long.valueOf(user.getId()).equals(track.getCreateBy())) {
                         waybillTrackVO.setCreateByName(user.getName())
                                 .setCreateByPhone(user.getPhone());
@@ -145,4 +165,132 @@ public class WaybillManagementService {
         waybillDataVO.setLogsMessage(waybillTrackVOS);
         return HttpResult.ok(waybillDataVO);
     }
+
+    /**
+     * 运单看板列表
+     * @return
+     */
+    public HttpResult waybillIndex(WaybillOrderDTO query) {
+        // mongo查询列数据,不足的数据单独关联表查询
+        // 状态查询 status [2-8]
+        List<Integer> statuses = new ArrayList<>();
+        statuses.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
+        statuses.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        statuses.add(CarWaybillEnum.WAIT_LOADING.getCode());
+        statuses.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
+        statuses.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
+        statuses.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        statuses.add(CarWaybillEnum.APPROVAL_COMPLETED.getCode());
+        // 初始化各状态
+        List<WaybillStatusVO> statusVOS = new ArrayList<>();
+        statuses.forEach(e -> {
+            WaybillStatusVO waybillStatusVO = new WaybillStatusVO();
+            waybillStatusVO.setStatus(false);
+            waybillStatusVO.setCode(e);
+            switch (e){
+                case 2 -> waybillStatusVO.setDestination("司机接单");
+                case 3 -> waybillStatusVO.setDestination("出车");
+                case 4 -> waybillStatusVO.setDestination("到装货地");
+                case 5 -> waybillStatusVO.setDestination("装货");
+                case 6 -> waybillStatusVO.setDestination("到卸货地");
+                case 7 -> waybillStatusVO.setDestination("卸货");
+                case 8 -> waybillStatusVO.setDestination("核单");
+            }
+            statusVOS.add(waybillStatusVO);
+        });
+
+        Criteria criteria = new Criteria();
+        criteria.and("entId").is(LoginUserHolder.getEntId());
+        criteria.and("delFlag").is(NumberConstant.ZERO);
+
+        if (StringUtils.isNotBlank(query.getStatus())) {
+            criteria.and("status").is(query.getStatus());
+        } else {
+            criteria.and("status").in(statuses);
+        }
+        // 装载时间
+        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
+            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
+                    .lte(query.getEndLoadTime()));
+        }
+        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
+            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
+                    .lte(query.getEndLoadTime()));
+        }
+        // 派车时间
+        if (StringUtils.isNotBlank(query.getStartSendCarTime()) && StringUtils.isNotEmpty(query.getEndSendCarTime())) {
+            criteria.andOperator(Criteria.where("sendCarTime").gte(query.getStartSendCarTime()), Criteria.where("sendCarTime")
+                    .lte(query.getEndSendCarTime()));
+        }
+        // 卸货时间
+        if (StringUtils.isNotBlank(query.getStartUnloadTime()) && StringUtils.isNotEmpty(query.getEndUnloadTime())) {
+            criteria.andOperator(Criteria.where("unloadTime").gte(query.getStartUnloadTime()), Criteria.where("unloadTime")
+                    .lte(query.getEndUnloadTime()));
+        }
+        // 多条件模糊查询
+        List<Criteria> orCriteria = new ArrayList<>();
+        if (StringUtils.isNotBlank(query.getKeywords())) {
+            /*Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
+            orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
+            orCriteria.add(Criteria.where("truckNo").regex(pattern));
+            orCriteria.add(Criteria.where("driverName").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            orCriteria.add(Criteria.where("loadAddress").regex(pattern));
+            orCriteria.add(Criteria.where("unloadAddress").regex(pattern));
+            criteria.orOperator(orCriteria);*/
+        }
+        Query queryFormat = new Query(criteria);
+        long total = mongoTemplate.count(queryFormat, SckwWaybillOrder.class);
+        queryFormat.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
+                Sort.by(Sort.Order.desc("createTime"))));
+        // 执行查询
+        List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
+        // 查询关联单据信息
+        List<WaybillBoardListVO> orders = new ArrayList<>();
+        for (SckwWaybillOrder sckwWaybillOrder:list) {
+            WaybillBoardListVO waybillBoardListVO = new WaybillBoardListVO();
+            waybillBoardListVO.setWOrderId(String.valueOf(sckwWaybillOrder.getWOrderId()));
+            waybillBoardListVO.setWOrderNo(String.valueOf(sckwWaybillOrder.getWOrderNo()));
+            waybillBoardListVO.setGoodsName(String.valueOf(sckwWaybillOrder.getGoodsName()));
+            waybillBoardListVO.setLoadDetailAddress(String.valueOf(sckwWaybillOrder.getLoadDetailAddress()));
+            waybillBoardListVO.setUnloadDetailAddress(String.valueOf(sckwWaybillOrder.getUnloadDetailAddress()));
+            waybillBoardListVO.setStartTime(DateUtil.getDateTime(sckwWaybillOrder.getStartTime()));
+            waybillBoardListVO.setEndTime(DateUtil.getDateTime(sckwWaybillOrder.getEndTime()));
+            waybillBoardListVO.setFirmName(String.valueOf(sckwWaybillOrder.getFirmName()));
+            waybillBoardListVO.setCreateByName(String.valueOf(sckwWaybillOrder.getCreateByName()));
+            waybillBoardListVO.setCreateTime(DateUtil.getDateTime(sckwWaybillOrder.getCreateTime()));
+            waybillBoardListVO.setDriverName(String.valueOf(sckwWaybillOrder.getDriverName()));
+            waybillBoardListVO.setDriverPhone(String.valueOf(sckwWaybillOrder.getDriverPhone()));
+            waybillBoardListVO.setTruckNo(String.valueOf(sckwWaybillOrder.getTruckNo()));
+            waybillBoardListVO.setLoadGrossAmount(sckwWaybillOrder.getLoadGrossAmount() != null ? String.valueOf(sckwWaybillOrder.getLoadGrossAmount()) : null);
+            waybillBoardListVO.setUnloadGrossAmount(sckwWaybillOrder.getUnloadGrossAmount() != null ? String.valueOf(sckwWaybillOrder.getUnloadGrossAmount()) : null);
+            waybillBoardListVO.setLoadUrls(sckwWaybillOrder.getLoadUrls() != null ? String.valueOf(sckwWaybillOrder.getLoadUrls()) : null);
+            waybillBoardListVO.setUnloadUrls(sckwWaybillOrder.getUnloadUrls() != null ? String.valueOf(sckwWaybillOrder.getUnloadUrls()) : null);
+            // 运单进度
+            List<WaybillStatusVO> statusVOS2 = new ArrayList<>();
+            BeanUtils.copyProperties(statusVOS, statusVOS2);
+            log.error("XXXX-11 {}", statusVOS);
+            log.error("XXXX-12 {}", statusVOS2);
+            List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
+                    .eq(KwtWaybillOrderTrack::getWOrderId, sckwWaybillOrder.getWOrderId()));
+            if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
+                for (WaybillStatusVO waybillStatusVO: statusVOS2) {
+                    for (KwtWaybillOrderTrack waybillOrderTrack: kwtWaybillOrderTracks) {
+                        log.error("XXXX-1 {}", waybillStatusVO.getCode());
+                        log.error("XXXX-2 {}", waybillOrderTrack.getStatus());
+                        if(waybillStatusVO.getCode().equals(waybillOrderTrack.getStatus())) {
+                            waybillStatusVO.setStatus(true);
+                            waybillStatusVO.setCreateTime(DateUtil.getDateTime(waybillOrderTrack.getCreateTime()));
+                            waybillStatusVO.setCreateByName(String.valueOf(waybillOrderTrack.getCreateBy()));
+                        }
+                    }
+                }
+            }
+            waybillBoardListVO.setTracks(statusVOS);
+            orders.add(waybillBoardListVO);
+        }
+
+        PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, orders);
+        return HttpResult.ok(build);
+    }
 }

+ 2 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTicketMapper.xml

@@ -19,6 +19,7 @@
     </resultMap>
     <sql id="Base_Column_List">
         id, w_order_id, `type`, amount, gross_amount, tare_amount, urls, remark, `status`,
-    create_by, create_time, update_by, update_time, del_flag
+        create_by, create_time, update_by, update_time, del_flag
     </sql>
+
 </mapper>