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

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

xucaiqin 1 год назад
Родитель
Сommit
c07fb1f2c7
100 измененных файлов с 4219 добавлено и 1457 удалено
  1. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java
  2. 4 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressTypeEnum.java
  3. 12 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  4. 7 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageHelperUtil.java
  5. 1 2
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/RemoteTransportLineFreightRateService.java
  6. 5 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/AcceptCarriageLogisticsOrderDto.java
  7. 2 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/LogisticsOrderVO.java
  8. 0 25
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/RWaybillOrderVo.java
  9. 10 3
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  10. 3 3
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverMapper.xml
  11. 2 2
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/UpdateLineFreightRateParam.java
  12. 19 19
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java
  13. 44 5
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmLineFreightRateService.java
  14. 0 3
      sckw-modules/sckw-operation/src/main/java/com/sckw/operation/service/BannerService.java
  15. 25 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderStatisticsController.java
  16. 87 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java
  17. 2 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderAddressMapper.java
  18. 17 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java
  19. 86 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OperatorTOrderListStsConditionDTO.java
  20. 50 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderStsInfoDTO.java
  21. 10 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java
  22. 47 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchOrderStsDTO.java
  23. 56 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchPurchaseDTO.java
  24. 24 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderContractParam.java
  25. 35 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderExportQueryVO.java
  26. 39 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderListQueryVO.java
  27. 81 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderStsQueryVO.java
  28. 42 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/WbTOrderDataStsParam.java
  29. 19 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java
  30. 66 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TOrderDataStsResVO.java
  31. 86 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WbTOrderDataStsResVO.java
  32. 69 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WorkbenchPurchaseVO.java
  33. 12 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  34. 65 60
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  35. 202 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java
  36. 143 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java
  37. 13 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderAddressMapper.xml
  38. 203 183
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml
  39. 2 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java
  40. 5 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/dto/OperatorGoodsListQueryDTO.java
  41. 5 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/OperatorGoodsStsQueryVO.java
  42. 4 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/operateService/GoodsManagerService.java
  43. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java
  44. 0 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  45. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java
  46. 108 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  47. 64 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java
  48. 111 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/operate/ManagementWaybillOrderController.java
  49. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderAddressMapper.java
  50. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderLineFreightRateMapper.java
  51. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  52. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderAddressMapper.java
  53. 15 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderSubtaskMapper.java
  54. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderTicketMapper.java
  55. 53 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java
  56. 56 33
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  57. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  58. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderAddress.java
  59. 7 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderSubtask.java
  60. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  61. 75 293
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsConsignmentDto.java
  62. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDto.java
  63. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderLineFreightRateDto.java
  64. 100 86
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderSubcontractDto.java
  65. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarEntrustDto.java
  66. 6 11
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillListAppDTO.java
  67. 18 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderQueryDto.java
  68. 0 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderTicketV4Dto.java
  69. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillSubtaskOrderQueryDto.java
  70. 44 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/ApproveStatusEnum.java
  71. 79 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillAppEnum.java
  72. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillDetailEnum.java
  73. 3 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillNdexTopEnum.java
  74. 3 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillTableTopEnum.java
  75. 4 29
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/AcceptCarriageOrderVO.java
  76. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LineFreightRateVo.java
  77. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LoadAddressVo.java
  78. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ManagementLogisticsOrderVO.java
  79. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java
  80. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java
  81. 24 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/SubcontractConsignmentVO.java
  82. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/UnLoadAddressVo.java
  83. 0 104
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java
  84. 36 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVo.java
  85. 175 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderExportVo.java
  86. 38 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectVo.java
  87. 125 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSubtaskVo.java
  88. 181 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillSubtaskDetailVo.java
  89. 203 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillSubtaskSelectVo.java
  90. 11 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillTicketVO.java
  91. 6 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/Import/KwtAcceptCarriageOrderImportService.java
  92. 183 81
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  93. 4 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java
  94. 92 67
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java
  95. 78 92
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  96. 67 38
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java
  97. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  98. 84 49
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java
  99. 33 192
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillManagementService.java
  100. 452 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillManagementV1Service.java

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java

@@ -40,12 +40,12 @@ public class RequestCheckFilter implements Filter {
     CustomConfig customConfig;
 
     /**
-     * 直接放行不需要校验token的请求
+     * 直接放行不需要校验Access-Token的请求
      */
     private static final List<String> EXCLUDEPATH = new ArrayList<>();
 
     /**
-     * 直接放行不需要校验token的请求
+     * 直接放行不需要校验Access-Special的请求
      */
     private static final List<String> IMPORT_PASS_PATH = new ArrayList<>();
 

+ 4 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressDefaultTypeEnum.java → sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressTypeEnum.java

@@ -8,7 +8,7 @@ import lombok.Getter;
  * @date 2023/6/15
  */
 @Getter
-public enum AddressDefaultTypeEnum {
+public enum AddressTypeEnum {
 
     //普通
     NO(0, ""),
@@ -23,13 +23,13 @@ public enum AddressDefaultTypeEnum {
 
     private final String name;
 
-    AddressDefaultTypeEnum(int code, String name){
+    AddressTypeEnum(int code, String name){
         this.code = code;
         this.name = name;
     }
 
-    public static AddressDefaultTypeEnum getName(int code){
-        for (AddressDefaultTypeEnum addressDefaultTypeEnum : values()) {
+    public static AddressTypeEnum getName(int code){
+        for (AddressTypeEnum addressDefaultTypeEnum : values()) {
             if (addressDefaultTypeEnum.getCode() == code) {
                 return addressDefaultTypeEnum;
             }

+ 12 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -197,6 +197,18 @@ public enum CarWaybillEnum {
                 || code == CarWaybillEnum.APPROVAL_NO_PASS.getCode();
     }
 
+    /**
+     * @param code 状态码
+     * @desc 是否可以变更司机
+     * @author zk
+     * @date 2023/8/2
+     **/
+    public static boolean editTicket(int code) {
+        return code == CarWaybillEnum.APPROVAL_TREAT.getCode()
+                || code == CarWaybillEnum.APPROVAL_NO_PASS.getCode()
+                || code == CarWaybillEnum.APPROVAL_IN.getCode() ;
+    }
+
     /**
      * @param code 状态码
      * @desc 是否可以变更司机/车辆

+ 7 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageHelperUtil.java

@@ -8,6 +8,7 @@ import java.util.List;
 
 /**
  * MyBatis 分页查询助手
+ *
  * @author zk
  * @date Nov 24, 2018
  */
@@ -73,7 +74,12 @@ public class PageHelperUtil {
         pageResult.setPage(pageInfo.getPageNum());
         pageResult.setPageSize(pageInfo.getPageSize());
         pageResult.setSize(pageInfo.getTotal());
-        pageResult.setPages((int)(pageResult.getSize() + pageResult.getPageSize() - 1) / pageResult.getPageSize());
+//        pageResult.setPages((int)(pageResult.getSize() + pageResult.getPageSize() - 1) / pageResult.getPageSize());
+        if (pageResult.getPageSize() < 1) {
+            pageResult.setPages((int) ((pageResult.getSize() + pageResult.getPageSize()) < 1 ? 0 : (pageResult.getSize() + pageResult.getPageSize() - 1)));
+        }else {
+            pageResult.setPages((int) ((pageResult.getSize() + pageResult.getPageSize()) < 1 ? 0 : (pageResult.getSize() + pageResult.getPageSize() - 1)) / pageResult.getPageSize());
+        }
         pageResult.setList(pageInfo.getList());
         return pageResult;
     }

+ 1 - 2
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/RemoteTransportLineFreightRateService.java

@@ -6,8 +6,7 @@ import java.util.List;
  * @author lfdc
  * @version 1.0
  * @className RemoteTransportLineFreightRateService
- * @description 物流订单线路dubbo
- * @company sckw
+ * @description 物流订单线路
  * @date 2024-03-13 10:06:27
  */
 public interface RemoteTransportLineFreightRateService {

+ 5 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/AcceptCarriageLogisticsOrderDto.java

@@ -8,6 +8,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author lfdc
@@ -145,6 +146,10 @@ public class AcceptCarriageLogisticsOrderDto implements Serializable {
      * 运价
      */
     private BigDecimal price;
+    /**
+     * 运价
+     */
+    private List<String> prices;
 
     /**
      * 运价

+ 2 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/LogisticsOrderVO.java

@@ -8,6 +8,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author lfdc
@@ -148,6 +149,7 @@ public class LogisticsOrderVO implements Serializable {
 
     private String priceType;
 
+    private List<String> prices;
     /**
      * 运价方式
      */

+ 0 - 25
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/RWaybillOrderVo.java

@@ -75,31 +75,6 @@ public class RWaybillOrderVo implements Serializable {
      */
     private String driverIdcard;
 
-    /**
-     * 已委托量
-     */
-    private BigDecimal entrustAmount;
-
-    /**
-     * 卸货重量
-     */
-    private BigDecimal unloadAmount;
-
-    /**
-     * 装货重量
-     */
-    private BigDecimal loadAmount;
-
-    /**
-     * 亏吨重量
-     */
-    private BigDecimal deficitAmount;
-
-    /**
-     * 亏吨扣款
-     */
-    private BigDecimal deficitPrice;
-
     /**
      * 计划开始时间
      */

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

@@ -117,10 +117,17 @@ public class KwfTruckService {
             String value = getDictValue(DictTypeEnum.COLOR_TYPE.getType(), StringUtils.objectStr(truck.getColor()));
             truckDetailVo.setColorName(value);
 
+            //数据字典
+            List<String> dictKey = new ArrayList<>();
+            dictKey.add(truck.getColor() != null ? DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor() : null);
+            Map<String, SysDictResDto> dicts = this.dict(dictKey);
+            SysDictResDto color = dicts.get(DictTypeEnum.COLOR_TYPE.getType() + Global.POUND + truck.getColor());
+
             //车队班组
             KwfFleet fleet = this.findByFleetTruck(truckId, LoginUserHolder.getEntId());
             truckDetailVo.setFleetId(fleet != null ? fleet.getId() : null);
             truckDetailVo.setFleetName(fleet != null ? fleet.getName() : null);
+            truckDetailVo.setColorName(color != null ? color.getLabel() : null);
             return truckDetailVo;
         }
         return null;
@@ -239,9 +246,9 @@ public class KwfTruckService {
             createBys.add(Long.parseLong(truck.getCreateBy()));
             entIds.add(Long.parseLong(truck.getEntId()));
             dictKey.add(truck.getColor() != null ? DictTypeEnum.COLOR_TYPE.getType() + pound + truck.getColor() : null);
-            dictKey.add(truck.getColor() != null ? DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getType() : null);
-            dictKey.add(truck.getColor() != null ? DictTypeEnum.USE_TYPE.getType() + pound + truck.getUseType() : null);
-            dictKey.add(truck.getColor() != null ? DictTypeEnum.ENERGY_TYPE.getType() + pound + truck.getEnergyType() : null);
+            dictKey.add(truck.getType() != null ? DictTypeEnum.TRUCK_TYPE.getType() + pound + truck.getType() : null);
+            dictKey.add(truck.getUseType() != null ? DictTypeEnum.USE_TYPE.getType() + pound + truck.getUseType() : null);
+            dictKey.add(truck.getEnergyType() != null ? DictTypeEnum.ENERGY_TYPE.getType() + pound + truck.getEnergyType() : null);
         }
         //用户数据集
         createBys = createBys.stream().distinct().collect(Collectors.toList());

+ 3 - 3
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverMapper.xml

@@ -128,10 +128,10 @@
             and dr.phone = #{params.phone, jdbcType=VARCHAR}
         </if>
         <if test="params.licenseType != null and params.licenseType != ''">
-            and drl.type = #{licenseType, jdbcType=VARCHAR}
+            and drl.type = #{params.licenseType, jdbcType=VARCHAR}
         </if>
-        <if test="sparams.tatus != null and params.status != ''">
-            and dr.status = #{status, jdbcType=VARCHAR}
+        <if test="params.status != null and params.status != ''">
+            and dr.status = #{params.status, jdbcType=VARCHAR}
         </if>
         <if test="params.authStatus != null and params.authStatus != '' and params.authStatus != 0">
             and dr.auth_status = #{params.authStatus, jdbcType=VARCHAR}

+ 2 - 2
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/UpdateLineFreightRateParam.java

@@ -40,7 +40,7 @@ public class UpdateLineFreightRateParam {
     @NotBlank(message = "路径起始位置不能为空")
     private String loadName;
 
-    @NotNull(message = "起始位置所属企业不能为空")
+    //@NotNull(message = "起始位置所属企业不能为空")
     private Long loadEntId;
 
     /**
@@ -49,7 +49,7 @@ public class UpdateLineFreightRateParam {
     @NotBlank(message = "路径结束位置不能为空")
     private String unloadName;
 
-    @NotNull(message = "结束位置所属企业不能为空")
+    //@NotNull(message = "结束位置所属企业不能为空")
     private Long unloadEntId;
 
     /**

+ 19 - 19
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java

@@ -6,7 +6,7 @@ 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.enums.AddressDefaultTypeEnum;
+import com.sckw.core.model.enums.AddressTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
@@ -184,7 +184,7 @@ public class KwmAddressService {
             }
 
             if (Objects.nonNull(item.getDefaultType())) {
-                addressQueryResVo.setDefaultTypeName(AddressDefaultTypeEnum.getName(item.getDefaultType()).getName());
+                addressQueryResVo.setDefaultTypeName(AddressTypeEnum.getName(item.getDefaultType()).getName());
             }
 
             if (Objects.nonNull(entCacheResDto)) {
@@ -218,24 +218,24 @@ public class KwmAddressService {
         Integer setDefaultType = reqVo.getDefaultType();
 
         //当前是收货或者卸货
-        if (!defaultType.equals(AddressDefaultTypeEnum.NO.getCode()) && !defaultType.equals(AddressDefaultTypeEnum.BOTH.getCode())) {
+        if (!defaultType.equals(AddressTypeEnum.NO.getCode()) && !defaultType.equals(AddressTypeEnum.BOTH.getCode())) {
             if (defaultType.equals(setDefaultType)) {
                 //相等则取消
-                kwmAddress.setDefaultType(AddressDefaultTypeEnum.NO.getCode());
+                kwmAddress.setDefaultType(AddressTypeEnum.NO.getCode());
             } else {
-                kwmAddress.setDefaultType(AddressDefaultTypeEnum.BOTH.getCode());
+                kwmAddress.setDefaultType(AddressTypeEnum.BOTH.getCode());
             }
 
         }
 
         //当前是收货也是卸货
-        if (defaultType.equals(AddressDefaultTypeEnum.BOTH.getCode())) {
-            if (setDefaultType.equals(AddressDefaultTypeEnum.SHIPMENT.getCode())) {
-                kwmAddress.setDefaultType(AddressDefaultTypeEnum.TAKE.getCode());
+        if (defaultType.equals(AddressTypeEnum.BOTH.getCode())) {
+            if (setDefaultType.equals(AddressTypeEnum.SHIPMENT.getCode())) {
+                kwmAddress.setDefaultType(AddressTypeEnum.TAKE.getCode());
             }
 
-            if (setDefaultType.equals(AddressDefaultTypeEnum.TAKE.getCode())) {
-                kwmAddress.setDefaultType(AddressDefaultTypeEnum.SHIPMENT.getCode());
+            if (setDefaultType.equals(AddressTypeEnum.TAKE.getCode())) {
+                kwmAddress.setDefaultType(AddressTypeEnum.SHIPMENT.getCode());
             }
         }
 
@@ -244,20 +244,20 @@ public class KwmAddressService {
         lambdaQueryWrapper.eq(KwmAddress::getEntId, entId).
                 eq(KwmAddress::getDelFlag, Global.NO).
                 and(wp -> wp.eq(KwmAddress::getDefaultType, setDefaultType).or().
-                        eq(KwmAddress::getDefaultType, AddressDefaultTypeEnum.BOTH.getCode()));
+                        eq(KwmAddress::getDefaultType, AddressTypeEnum.BOTH.getCode()));
         List<KwmAddress> kwmAddressList = kwmAddressMapper.selectList(lambdaQueryWrapper);
         if (CollectionUtils.isNotEmpty(kwmAddressList)) {
             KwmAddress kwmAddress1 = kwmAddressList.get(0);
-            if (kwmAddress1.getDefaultType().equals(AddressDefaultTypeEnum.BOTH.getCode())) {
-                if (setDefaultType.equals(AddressDefaultTypeEnum.SHIPMENT.getCode())) {
-                    kwmAddress1.setDefaultType(AddressDefaultTypeEnum.TAKE.getCode());
+            if (kwmAddress1.getDefaultType().equals(AddressTypeEnum.BOTH.getCode())) {
+                if (setDefaultType.equals(AddressTypeEnum.SHIPMENT.getCode())) {
+                    kwmAddress1.setDefaultType(AddressTypeEnum.TAKE.getCode());
                 }
 
-                if (setDefaultType.equals(AddressDefaultTypeEnum.TAKE.getCode())) {
-                    kwmAddress1.setDefaultType(AddressDefaultTypeEnum.SHIPMENT.getCode());
+                if (setDefaultType.equals(AddressTypeEnum.TAKE.getCode())) {
+                    kwmAddress1.setDefaultType(AddressTypeEnum.SHIPMENT.getCode());
                 }
             } else {
-                kwmAddress1.setDefaultType(AddressDefaultTypeEnum.NO.getCode());
+                kwmAddress1.setDefaultType(AddressTypeEnum.NO.getCode());
             }
             kwmAddress1.setUpdateBy(userId);
             kwmAddress1.setUpdateTime(date);
@@ -266,7 +266,7 @@ public class KwmAddressService {
             }
         }
 
-        if (defaultType.equals(AddressDefaultTypeEnum.NO.getCode())) {
+        if (defaultType.equals(AddressTypeEnum.NO.getCode())) {
             kwmAddress.setDefaultType(setDefaultType);
         }
 
@@ -321,7 +321,7 @@ public class KwmAddressService {
         kwmAddress.setUpdateBy(userId);
         kwmAddress.setCreateTime(date);
         kwmAddress.setUpdateTime(date);
-        kwmAddress.setDefaultType(AddressDefaultTypeEnum.NO.getCode());
+        kwmAddress.setDefaultType(AddressTypeEnum.NO.getCode());
         kwmAddress.setId(new IdWorker(1L).nextId());
         if (kwmAddressMapper.insert(kwmAddress) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);

+ 44 - 5
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmLineFreightRateService.java

@@ -4,12 +4,16 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.SystemTypeEnum;
+import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.manage.dao.KwmLineFreightRateMapper;
 import com.sckw.manage.model.entity.KwmAddress;
@@ -20,6 +24,7 @@ import com.sckw.manage.model.vo.res.LineFreightRateExport;
 import com.sckw.manage.model.vo.res.LineFreightRateFindListResVO;
 import com.sckw.manage.model.vo.res.LineFreightRateListResVO;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -44,6 +49,9 @@ public class KwmLineFreightRateService {
     private final KwmLineFreightRateMapper lineFreightRateMapper;
     private final KwmAddressService addressService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteUserService remoteUserService;
+
     /**
      * @param addLineFreightRateParam
      * @return void
@@ -152,7 +160,20 @@ public class KwmLineFreightRateService {
      * @date 2024/3/1 16:27
      */
     public PageResult select(SelectLineFreightRateParam params) {
-        LambdaQueryWrapper<KwmLineFreightRate> wrapper = buildWrapper(BeanUtil.copyProperties(params, ExportLineFreightRateParam.class));
+        //新增客户经理权限过滤
+        List<Long> authEntIdList = new ArrayList<>();
+        if (SystemTypeEnum.MANAGE.getCode().equals(LoginUserHolder.getSystemType())) {
+            if (CollectionUtils.isEmpty(authEntIdList)) {
+                List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+                if (CollectionUtils.isEmpty(ids)){
+                    return PageResult.build(params.getPage(), params.getPageSize(), 0L, Collections.emptyList());
+                }
+                authEntIdList.addAll(ids);
+            }
+        } else {
+            authEntIdList.add(LoginUserHolder.getEntId());
+        }
+        LambdaQueryWrapper<KwmLineFreightRate> wrapper = buildWrapper(BeanUtil.copyProperties(params, ExportLineFreightRateParam.class), authEntIdList);
         Page<KwmLineFreightRate> page = new Page<>(params.getPage(), params.getPageSize());
         Page<KwmLineFreightRate> ipage = lineFreightRateMapper.selectPage(page, wrapper);
         List<KwmLineFreightRate> list = ipage.getRecords();
@@ -179,7 +200,20 @@ public class KwmLineFreightRateService {
      * @date 2024/3/1 16:40
      */
     public List<LineFreightRateExport> export(ExportLineFreightRateParam params) {
-        LambdaQueryWrapper<KwmLineFreightRate> wrapper = buildWrapper(params);
+        //新增客户经理权限过滤
+        List<Long> authEntIdList = new ArrayList<>();
+        if (SystemTypeEnum.MANAGE.getCode().equals(LoginUserHolder.getSystemType())) {
+            if (CollectionUtils.isEmpty(authEntIdList)) {
+                List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+                if (CollectionUtils.isEmpty(ids)){
+                    return new ArrayList<>();
+                }
+                authEntIdList.addAll(ids);
+            }
+        } else {
+            authEntIdList.add(LoginUserHolder.getEntId());
+        }
+        LambdaQueryWrapper<KwmLineFreightRate> wrapper = buildWrapper(params, authEntIdList);
         List<KwmLineFreightRate> list = lineFreightRateMapper.selectList(wrapper);
         if (CollectionUtils.isEmpty(list)) {
             return Collections.emptyList();
@@ -208,7 +242,9 @@ public class KwmLineFreightRateService {
      * @author yzc
      * @date 2024/3/1 16:40
      */
-    private LambdaQueryWrapper<KwmLineFreightRate> buildWrapper(ExportLineFreightRateParam params) {
+    private LambdaQueryWrapper<KwmLineFreightRate>
+
+    buildWrapper(ExportLineFreightRateParam params, List<Long> authEntIdList) {
         LambdaQueryWrapper<KwmLineFreightRate> wrapper = new LambdaQueryWrapper<>();
         if (Objects.nonNull(params.getStartCreateTime())) {
             wrapper.ge(KwmLineFreightRate::getCreateTime, params.getStartCreateTime());
@@ -222,14 +258,17 @@ public class KwmLineFreightRateService {
         if (Objects.nonNull(params.getEndMileage())) {
             wrapper.le(KwmLineFreightRate::getTransportMileage, params.getEndMileage());
         }
+        if (CollectionUtils.isNotEmpty(authEntIdList)) {
+            wrapper.in(KwmLineFreightRate::getEntId, authEntIdList);
+        }
+
         String keywords = params.getKeywords();
         if (StringUtils.isNotBlank(keywords)) {
             wrapper.and(e -> e.like(KwmLineFreightRate::getName, keywords)
                     .or().like(KwmLineFreightRate::getLoadName, keywords)
                     .or().like(KwmLineFreightRate::getUnloadName, keywords));
         }
-        wrapper.eq(KwmLineFreightRate::getEntId, LoginUserHolder.getEntId())
-                .eq(KwmLineFreightRate::getDelFlag, Global.NO)
+        wrapper.eq(KwmLineFreightRate::getDelFlag, Global.NO)
                 .orderByDesc(KwmLineFreightRate::getCreateTime);
         return wrapper;
     }

+ 0 - 3
sckw-modules/sckw-operation/src/main/java/com/sckw/operation/service/BannerService.java

@@ -1,6 +1,5 @@
 package com.sckw.operation.service;
 
-import java.io.IOException;
 import java.util.*;
 
 import cn.hutool.core.date.DateUtil;
@@ -9,8 +8,6 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
-import com.sckw.core.model.enums.AddressDefaultTypeEnum;
-import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.BeanUtils;

+ 25 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderStatisticsController.java

@@ -1,15 +1,13 @@
 package com.sckw.order.controller;
 
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.order.model.vo.req.WbTOrderDataStsParam;
 import com.sckw.order.model.vo.req.WbTOrderExcelStsParam;
 import com.sckw.order.serivce.KwoTradeOrderStatisticsService;
 import lombok.AllArgsConstructor;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @desc: 订单统计相关接口
@@ -35,4 +33,27 @@ public class KwoTradeOrderStatisticsController {
     public HttpResult workbenchExcel(@RequestBody @Validated WbTOrderExcelStsParam params) {
         return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchExcel(params));
     }
+
+    /**
+     * @desc: 工作台贸易订单数据统计
+     * @author: yzc
+     * @date: 2023-09-11 14:43
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/workbenchData", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult workbenchData(@RequestBody @Validated WbTOrderDataStsParam params) {
+        return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchData(params));
+    }
+
+    /**
+     * @desc: 工作台采购订单列表
+     * @author: yzc
+     * @date: 2023-09-13 19:13
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping(value = "/workbenchPurchaseList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult workbenchPurchaseList() {
+        return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchPurchaseList());
+    }
 }

+ 87 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java

@@ -0,0 +1,87 @@
+package com.sckw.order.controller;
+
+import com.sckw.core.exception.CustomPromptException;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.order.serivce.TradeOrderManageService;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.AllArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @desc: 运营端贸易订单管理相关接口
+ * @author: yzc
+ * @date: 2023-09-14 11:21
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/kwOrderManage")
+public class TradeOrderManageController {
+
+    private final TradeOrderManageService tradeOrderManageService;
+
+
+    /**
+     * @desc: 贸易订单列表分页查询
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/listPaging", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult listPaging(@RequestBody @Validated OperatorTOrderListQueryVO params) {
+        return HttpResult.ok(tradeOrderManageService.listPaging(params));
+    }
+
+    /**
+     * @desc: 贸易订单列表统计查询
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/listStatistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult listStatistic(@RequestBody @Validated OperatorTOrderStsQueryVO params) {
+        return HttpResult.ok(tradeOrderManageService.listStatistic(params));
+    }
+
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-09-14 14:40
+     * @Param params:
+     * @Param response:
+     * @return: void
+     */
+    @PostMapping(value = "/listExport", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void listExport(@RequestBody @Validated OperatorTOrderExportQueryVO params, HttpServletResponse response) {
+        List<TradeOrderListExport> list = tradeOrderManageService.export(params);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认");
+        }
+        ExcelUtil.downData(response, TradeOrderListExport.class, list);
+    }
+
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-09-14 14:51
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/contractAssociationList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult contractAssociationList(@RequestBody @Validated OperatorTOrderContractParam params) {
+        return HttpResult.ok(tradeOrderManageService.contractAssociationList(params));
+    }
+
+}

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderAddressMapper.java

@@ -23,4 +23,6 @@ public interface KwoTradeOrderAddressMapper extends BaseMapper<KwoTradeOrderAddr
      * @return: void
      */
     void insertBatch(@Param(value = "list") List<KwoTradeOrderAddress> list);
+
+    List<KwoTradeOrderAddress> findByAddress(@Param("tOrderId") Long tOrderId, @Param("type") Integer type);
 }

+ 17 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java

@@ -58,7 +58,8 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      */
     List<OrderListResDTO> tradeOrderSelect(@Param("query") TradeOrderListSelectDTO query,
                                            @Param("goodIds") List<Long> goodIds,
-                                           @Param("authUserIds") List<Long> authUserIds);
+                                           @Param("authUserIds") List<Long> authUserIds,
+                                           @Param("entIds") List<Long> entIds);
 
 
     /***
@@ -125,4 +126,19 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      */
     List<OrderListResDTO> tradeOrderContractList(@Param("query") TradeOrderContractParamDTO query,
                                                  @Param("contractIds") List<Long> contractIds);
+
+    /**
+     * @desc TODO
+     * @param procureTopEntId 
+     * @param excludeStatuses 
+     * @return java.util.List<com.sckw.order.model.dto.WorkbenchPurchaseDTO>
+     * @author yzc
+     * @date 2024/3/18 17:04
+     */
+    List<WorkbenchPurchaseDTO> workbenchPurchaseList(@Param("procureTopEntId") Long procureTopEntId,
+                                                     @Param("excludeStatuses") List<Integer> excludeStatuses);
+
+    WorkbenchOrderStsDTO getOrderStsInfo(@Param("query") OrderStsInfoDTO query,
+                                         @Param("excludeStatuses") List<Integer> excludeStatuses);
+
 }

+ 86 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OperatorTOrderListStsConditionDTO.java

@@ -0,0 +1,86 @@
+package com.sckw.order.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 运营端贸易订单列表统计查询条件dto
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderListStsConditionDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1352493248166762988L;
+
+
+    /**
+     * 订单编号、单位、商品名称(模糊匹配共用)
+     */
+    private String keywords;
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地址code
+     */
+    private String shippingAddressCode;
+
+    /**
+     * 装货地址等级
+     */
+    private Integer shippingAddressLevel;
+
+    /**
+     * 装货地址code
+     */
+    private String unloadingAddressCode;
+
+    /**
+     * 卸货地址等级
+     */
+    private Integer unloadingAddressLevel;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 交付类型(签发交付、签收交付)
+     */
+    private String deliveryType;
+
+    /**
+     * 下单方式(1采购下单/2代客下单)
+     */
+    private String source;
+
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+}

+ 50 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderStsInfoDTO.java

@@ -0,0 +1,50 @@
+package com.sckw.order.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-18  11:12
+ * @desc: 订单统计信息查询dto
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class OrderStsInfoDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6956677587145390841L;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    private Integer orderType;
+
+    /**
+     * 商品单位
+     */
+    private String unit;
+
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    private Date endCreateTime;
+
+}

+ 10 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java

@@ -63,11 +63,21 @@ public class TradeOrderListSelectDTO {
      */
     private String loadAddressCode;
 
+    /**
+     * 装货地址code
+     */
+    private String loadAddressLevel;
+
     /**
      * 卸货地址code
      */
     private String unloadAddressCode;
 
+    /**
+     * 卸货地址code
+     */
+    private String unloadAddressLevel;
+
     /**
      * 交易方式(预付款、货到付款)
      */

+ 47 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchOrderStsDTO.java

@@ -0,0 +1,47 @@
+package com.sckw.order.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 工作台订单统计dto
+ * @author: yzc
+ * @date: 2023-09-11 17:45
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WorkbenchOrderStsDTO implements Serializable {
+
+    public WorkbenchOrderStsDTO() {
+        this.orderAmount = BigDecimal.ZERO.doubleValue();
+        this.orderPrice = BigDecimal.ZERO.doubleValue();
+        this.orderActualAmount = BigDecimal.ZERO.doubleValue();
+    }
+
+    @Serial
+    private static final long serialVersionUID = -925557546832266552L;
+
+    /**
+     * 订单总量
+     */
+    private Double orderAmount;
+
+    /**
+     * 订单总金额
+     */
+    private Double orderPrice;
+
+    /**
+     * 订单总实际成交量
+     */
+    private Double orderActualAmount;
+
+}

+ 56 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchPurchaseDTO.java

@@ -0,0 +1,56 @@
+package com.sckw.order.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-18  09:56
+ * @desc: 工作台采购订单列表DTO
+ */
+@Getter
+@Setter
+@ToString
+public class WorkbenchPurchaseDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2058696103492482712L;
+
+    /**
+     * 订单主键
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 订单成交数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 订单单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 采购企业名称
+     */
+    private String procureFirmName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 24 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderContractParam.java

@@ -0,0 +1,24 @@
+package com.sckw.order.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 合同关联订单列表请求参数
+ * @author: yzc
+ * @date: 2023-07-27 16:48
+ */
+@Getter
+@Setter
+@ToString
+@EqualsAndHashCode(callSuper = true)
+public class OperatorTOrderContractParam extends PageRequest {
+
+    @NotBlank(message = "合同ids不能为空")
+    private String contractIds;
+
+}

+ 35 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderExportQueryVO.java

@@ -0,0 +1,35 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 运营端贸易订单列表导出查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderExportQueryVO extends OperatorTOrderStsQueryVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3904961009951552659L;
+
+    /**
+     * 订单状态
+     */
+    @Range(min = 1, max = 7, message = "非法订单状态")
+    private Integer status;
+
+    /**
+     * 订单ids
+     */
+    private String ids;
+
+}

+ 39 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderListQueryVO.java

@@ -0,0 +1,39 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 运营端贸易订单列表分页查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderListQueryVO extends OperatorTOrderStsQueryVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3904961009951552659L;
+
+    /**
+     * 当前页码
+     */
+    private int page = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+
+    /**
+     * 订单状态
+     */
+    @Range(min = 1, max = 7, message = "非法订单状态")
+    private Integer status;
+
+}

+ 81 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderStsQueryVO.java

@@ -0,0 +1,81 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 运营端贸易订单统计查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderStsQueryVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1352493248166762988L;
+
+
+    /**
+     * 订单编号、单位、商品名称(模糊匹配共用)
+     */
+    private String keywords;
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地址code
+     */
+    private String shippingAddressCode;
+
+    /**
+     * 装货地址等级
+     */
+    private Integer shippingAddressLevel;
+
+    /**
+     * 装货地址code
+     */
+    private String unloadingAddressCode;
+
+    /**
+     * 卸货地址等级
+     */
+    private Integer unloadingAddressLevel;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 交付类型(签发交付、签收交付)
+     */
+    private String deliveryType;
+
+    /**
+     * 下单方式(1采购下单/2代客下单)
+     */
+    private String source;
+
+}

+ 42 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/WbTOrderDataStsParam.java

@@ -0,0 +1,42 @@
+package com.sckw.order.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 工作台贸易订单数据统计请求参数
+ * @author: yzc
+ * @date: 2023-09-11 14:42
+ */
+@Getter
+@Setter
+@ToString
+public class WbTOrderDataStsParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4503103839537525731L;
+
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    @Range(min = 1, max = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+    /**
+     * 商品单位
+     */
+    private String unit;
+    /**
+     * 统计日期类型(2周、3月)
+     */
+    @Range(min = 2, max = 3, message = "非法日期类型")
+    @NotNull(message = "日期类型不能为空")
+    private Integer dateType;
+
+}

+ 19 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListResVO.java

@@ -177,6 +177,25 @@ public class OrderListResVO {
      * 卸货地址信息
      */
     private List<UnloadAddressResVO> unloadAddresses;
+    /**
+     * 装货地点名称
+     */
+    private List<String> loadName;
+
+    /**
+     * 装货地点
+     */
+    private List<String> loadAddress;
+
+    /**
+     * 卸货地点点名称
+     */
+    private List<String> unloadName;
+
+    /**
+     * 卸货地点
+     */
+    private List<String> unloadAddress;
 
     /**
      * 计划开始时间

+ 66 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TOrderDataStsResVO.java

@@ -0,0 +1,66 @@
+package com.sckw.order.model.vo.res;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 贸易订单统计数据响应对象
+ * @author: yzc
+ * @date: 2023-09-11 14:58
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class TOrderDataStsResVO implements Serializable {
+
+    public TOrderDataStsResVO() {
+        this.goodsNum = 0L;
+        this.orderAmount = BigDecimal.ZERO;
+        this.orderPrice = BigDecimal.ZERO;
+        this.waitCollectedPrice = BigDecimal.ZERO;
+        this.notArrivedAmount = BigDecimal.ZERO;
+    }
+
+
+    @Serial
+    private static final long serialVersionUID = -6132733716009809627L;
+
+    /**
+     * 1当前周、月;2上周、月
+     */
+    private Integer type;
+    /**
+     * 商品数量
+     */
+    private Long goodsNum;
+
+    /**
+     * 订单总量
+     */
+    private BigDecimal orderAmount;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal orderPrice;
+
+    /**
+     * 待付款金额
+     */
+    private BigDecimal waitCollectedPrice;
+
+    /**
+     * 未到货量
+     */
+    private BigDecimal notArrivedAmount;
+
+
+
+}

+ 86 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WbTOrderDataStsResVO.java

@@ -0,0 +1,86 @@
+package com.sckw.order.model.vo.res;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @desc: 工作台贸易订单数据统计响应vo
+ * @author: yzc
+ * @date: 2023-09-11 14:58
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WbTOrderDataStsResVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8601548022756611241L;
+
+    public WbTOrderDataStsResVO() {
+        this.tOrderDataStsList = new ArrayList<>();
+        this.goodsNumRingRate = BigDecimal.ZERO;
+        this.orderAmountRingRate = BigDecimal.ZERO;
+        this.orderPriceRingRate = BigDecimal.ZERO;
+        this.waitCollectedPriceRingRate = BigDecimal.ZERO;
+        this.notArrivedAmountRingRate = BigDecimal.ZERO;
+    }
+
+    /**
+     * 贸易订单数据统计列表
+     */
+   private List<TOrderDataStsResVO> tOrderDataStsList;
+
+    /**
+     * 商品数量环比
+     */
+    private BigDecimal goodsNumRingRate;
+    /**
+     * 商品数量环比标识 true上升,false下降
+     */
+    private Boolean goodsNumFlag;
+
+    /**
+     * 订单总量环比
+     */
+    private BigDecimal orderAmountRingRate;
+    /**
+     * 订单总量环比标识 true上升,false下降
+     */
+    private Boolean orderAmountFlag;;
+
+    /**
+     * 订单金额环比
+     */
+    private BigDecimal orderPriceRingRate;
+    /**
+     *  订单金额环比标识  true上升,false下降
+     */
+    private Boolean orderPriceFlag;
+
+    /**
+     * 待付款金额环比
+     */
+    private BigDecimal waitCollectedPriceRingRate;
+    /**
+     * 待付款金额环比标识  true上升,false下降
+     */
+    private Boolean waitCollectedPriceFlag;
+
+    /**
+     * 未到货量环比
+     */
+    private BigDecimal notArrivedAmountRingRate;
+    /**
+     * 未到货量环比标识  true上升,false下降
+     */
+    private Boolean notArrivedAmountFlag;
+
+}

+ 69 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WorkbenchPurchaseVO.java

@@ -0,0 +1,69 @@
+package com.sckw.order.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @desc: 工作台采购订单列表vo
+ * @author: yzc
+ * @date: 2023-09-13 19:22
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WorkbenchPurchaseVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 3393583069721972947L;
+
+    /**
+     * 订单主键
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 订单成交数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 订单单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    private String unitLabel;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    private String goodsTypeLabel;
+
+    /**
+     * 采购企业名称
+     */
+    private String procureFirmName;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 12 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -14,6 +14,7 @@ import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -200,4 +201,15 @@ public class KwoTradeOrderAddressService {
         return list.stream().collect(Collectors.toMap(KwoTradeOrderAddress::getAddressType, KwoTradeOrderAddress::getId, (k1, k2) -> k1));
     }
 
+    /**
+     * @param type 地址类型
+     * @param tOrderId 贸易订单ID
+     * @return List
+     * @desc 查询地址信息
+     * @author zk
+     * @date 2024/4/2
+     */
+    public List<KwoTradeOrderAddress> findByAddress(Long tOrderId, Integer type) {
+        return kwoTradeOrderAddressMapper.findByAddress(tOrderId, type);
+    }
 }

+ 65 - 60
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -16,10 +16,7 @@ import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.CustomPromptException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
-import com.sckw.core.model.enums.ClientTypeEnum;
-import com.sckw.core.model.enums.CooperateTypeEnum;
-import com.sckw.core.model.enums.OrderRuleEnum;
-import com.sckw.core.model.enums.RedisOrderGenerateEnum;
+import com.sckw.core.model.enums.*;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.vo.TableBottom;
@@ -38,6 +35,7 @@ import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.enums.*;
+import com.sckw.order.enums.ContractStatusEnum;
 import com.sckw.order.model.*;
 import com.sckw.order.model.dto.*;
 import com.sckw.order.model.vo.req.*;
@@ -243,17 +241,26 @@ public class KwoTradeOrderService {
         if (CollUtil.isNotEmpty(addressInfos)) {
             BigDecimal amount = Objects.isNull(param.getAmount()) ? BigDecimal.ZERO : param.getAmount();
             if (!isDraft) {
+                boolean isPurchase = OrderSourceEnum.PURCHASE.getType().equals(tradeOrder.getSource());
+                if (isPurchase) {
+                    List<AddressInfo> loadAddress = addressInfos.stream().filter(e -> Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())).toList();
+                    if (CollUtil.isEmpty(loadAddress) || loadAddress.size() != 1) {
+                        throw new BusinessException("采购下单装货地址信息有误!");
+                    }
+                }
                 BigDecimal totalLoadAmount = BigDecimal.ZERO;
                 BigDecimal totalUnloadAmount = BigDecimal.ZERO;
                 boolean loadFlag = false;
                 boolean unloadFlag = false;
                 for (AddressInfo e : addressInfos) {
-                    BigDecimal addressAmount = Objects.isNull(e.getAmount()) ? BigDecimal.ZERO : e.getAmount();
                     if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
-                        totalLoadAmount = totalLoadAmount.add(addressAmount);
+                        if (isPurchase){
+                            e.setAmount(amount);
+                        }
+                        totalLoadAmount = totalLoadAmount.add(e.getAmount());
                         loadFlag = true;
                     } else {
-                        totalUnloadAmount = totalUnloadAmount.add(addressAmount);
+                        totalUnloadAmount = totalUnloadAmount.add(e.getAmount());
                         unloadFlag = true;
                     }
                 }
@@ -1121,9 +1128,11 @@ public class KwoTradeOrderService {
             kwoTradeOrderAddressService.delByIds(oldLoadAddressIds);
             tradeOrderAmountService.delByOrderIdAndAddressIds(param.getId(), oldLoadAddressIds);
         }
+        AtomicInteger loadSort = new AtomicInteger(0);
         loadAddressInfo.forEach(e -> {
             KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
-            address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo());
+            address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo())
+                    .setSort(loadSort.getAndIncrement());
             //地址信息
             Long addressId = kwoTradeOrderAddressService.add(address);
             //分配量信息
@@ -1590,7 +1599,7 @@ public class KwoTradeOrderService {
     public PageResult tradeOrderSelect(TradeOrderListSelectParam params) {
         TradeOrderListSelectDTO dto = buildSelectParam(params);
         PageHelper.startPage(params.getPage(), params.getPageSize());
-        List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
+        List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList(), null);
         return buildResult(list, params.getPageSize());
 
     }
@@ -1603,7 +1612,7 @@ public class KwoTradeOrderService {
      * @author yzc
      * @date 2024/3/15 14:23
      */
-    private PageResult buildResult(List<OrderListResDTO> list, int pageSize) {
+    public PageResult buildResult(List<OrderListResDTO> list, int pageSize) {
         if (CollUtil.isEmpty(list)) {
             return PageHelperUtil.getPageResult(new PageInfo<>());
         }
@@ -1644,58 +1653,54 @@ public class KwoTradeOrderService {
         }
 
         list.forEach(e -> {
-            OrderListResVO vo = BeanUtil.copyProperties(e, OrderListResVO.class);
-            List<LoadAddressDTO> loadAddresses = e.getLoadAddresses();
-            if (CollUtil.isNotEmpty(loadAddresses)) {
-                List<LoadAddressResVO> loadList = new ArrayList<>();
-                loadAddresses.forEach(l -> {
-                    LoadAddressResVO load = new LoadAddressResVO();
-                    load.setLoadAddressId(l.getLoadAddressId()).setLoadName(l.getLoadName())
-                            .setLoadDetailAddressInfo(l.getLoadCityName() + l.getLoadDetailAddress());
-                    loadList.add(load);
-                });
-                vo.setLoadAddresses(loadList);
-            }
-            List<UnloadAddressDTO> unloadAddresses = e.getUnloadAddresses();
-            if (CollUtil.isNotEmpty(unloadAddresses)) {
-                List<UnloadAddressResVO> unloadList = new ArrayList<>();
-                unloadAddresses.forEach(u -> {
-                    UnloadAddressResVO unload = new UnloadAddressResVO();
-                    unload.setUnloadAddressId(u.getUnloadAddressId()).setUnloadName(u.getUnloadName())
-                            .setUnloadDetailAddressInfo(u.getUnloadCityName() + u.getUnloadDetailAddress());
-                    unloadList.add(unload);
-                });
-                vo.setUnloadAddresses(unloadList);
-            }
+            //装货地址
+            List<KwoTradeOrderAddress> loadAddresses = kwoTradeOrderAddressService.findByAddress(e.getTOrderId(), AddressTypeEnum.SHIPMENT.getCode());
+            //卸货地址
+            List<KwoTradeOrderAddress> unloadAddresses = kwoTradeOrderAddressService.findByAddress(e.getTOrderId(), AddressTypeEnum.TAKE.getCode());
+            //装货地点名称
+            List<String> loadName = loadAddresses.stream().map(KwoTradeOrderAddress::getName).toList();
+            //装货地点
+            List<String> loadAddress = loadAddresses.stream().map(item -> item.getCityName() + " " + item.getDetailAddress()).toList();
+            //卸货地点点名称
+            List<String> unloadName = unloadAddresses.stream().map(KwoTradeOrderAddress::getName).toList();
+            //卸货地点
+            List<String> unloadAddress = unloadAddresses.stream().map(item -> item.getCityName() + " " + item.getDetailAddress()).toList();
+
             BigDecimal actualAmount = Objects.isNull(e.getActualAmount()) ? BigDecimal.ZERO : e.getActualAmount();
             BigDecimal unitPrice = Objects.isNull(e.getUnitPrice()) ? BigDecimal.ZERO : e.getUnitPrice();
             KwpGoods goods = goodsMap.get(e.getGoodsId());
             ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
             UserCacheResDto userCache = userMap.get(e.getCreateBy());
+
+            OrderListResVO vo = BeanUtil.copyProperties(e, OrderListResVO.class);
             vo.setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
-                    .setTradingLabel(tradeMap.get(e.getTrading()))
-                    .setTrading(tradeMap.get(e.getTrading()))
-                    .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
-                    .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
-                    .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
-                    .setSourceLabel(sourceMap.get(e.getSource()))
-                    .setSource(sourceMap.get(e.getSource()))
-                    .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
-                    .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
-                    .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
-                    .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
-                    .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
-                    .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
-                    .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
-                    .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
-                    .setUnitPrice(setScale(e.getUnitPrice()))
-                    .setPrice(setScale(e.getPrice()))
-                    .setUnit(e.getUnit())
-                    .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
-                    .setAmount(setScale(vo.getAmount()))
-                    .setEntrustAmount(setScale(e.getEntrustAmount()))
-                    .setActualAmount(setScale(e.getActualAmount()))
-                    .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName());
+            .setTradingLabel(tradeMap.get(e.getTrading()))
+            .setTrading(tradeMap.get(e.getTrading()))
+            .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
+            .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
+            .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
+            .setSourceLabel(sourceMap.get(e.getSource()))
+            .setSource(sourceMap.get(e.getSource()))
+            .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
+            .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
+            .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
+            .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
+            .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
+            .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
+            .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
+            .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
+            .setUnitPrice(setScale(e.getUnitPrice()))
+            .setPrice(setScale(e.getPrice()))
+            .setUnit(e.getUnit())
+            .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
+            .setAmount(setScale(vo.getAmount()))
+            .setEntrustAmount(setScale(e.getEntrustAmount()))
+            .setActualAmount(setScale(e.getActualAmount()))
+            .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
+            .setLoadName(loadName)
+            .setLoadAddress(loadAddress)
+            .setUnloadName(unloadName)
+            .setUnloadAddress(unloadAddress);
             result.add(vo);
         });
         return PageHelperUtil.getPageResult(new PageInfo<>(result), list, pageSize);
@@ -1708,7 +1713,7 @@ public class KwoTradeOrderService {
      * @author yzc
      * @date 2024/3/15 8:52
      */
-    private TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
+    public TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
         TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
         dto.setEntId(LoginUserHolder.getEntId())
                 .setUserId(LoginUserHolder.getUserId())
@@ -1728,10 +1733,10 @@ public class KwoTradeOrderService {
         if (StringUtils.isNotBlank(unloadCode) && Objects.nonNull(params.getUnloadingAddressLevel())) {
             switch (params.getUnloadingAddressLevel()) {
                 case 1 -> dto.setUnloadAddressCode(
-                        loadCode.substring(0, 2).trim());
+                        unloadCode.substring(0, 2).trim());
                 case 2 -> dto.setUnloadAddressCode(
-                        loadCode.substring(0, 4).trim());
-                case 3 -> dto.setUnloadAddressCode(loadCode);
+                        unloadCode.substring(0, 4).trim());
+                case 3 -> dto.setUnloadAddressCode(unloadCode);
             }
         }
         String keywords = params.getKeywords();

+ 202 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java

@@ -1,15 +1,32 @@
 package com.sckw.order.serivce;
 
-import com.sckw.core.model.constant.NumberConstant;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.web.context.LoginUserHolder;
-import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
-import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
+import com.sckw.order.dao.KwoTradeOrderMapper;
+import com.sckw.order.model.dto.*;
+import com.sckw.order.model.vo.req.WbTOrderDataStsParam;
 import com.sckw.order.model.vo.req.WbTOrderExcelStsParam;
+import com.sckw.order.model.vo.res.TOrderDataStsResVO;
+import com.sckw.order.model.vo.res.WbTOrderDataStsResVO;
 import com.sckw.order.model.vo.res.WbTOrderExcelStsResVO;
+import com.sckw.order.model.vo.res.WorkbenchPurchaseVO;
+import com.sckw.payment.api.dubbo.PaymentDubboService;
+import com.sckw.payment.api.model.dto.SettlementMoney;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.dubbo.GoodsStatisticsService;
+import com.sckw.product.api.model.GoodsNumStsParam;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -31,6 +48,16 @@ import java.util.stream.Collectors;
 public class KwoTradeOrderStatisticsService {
 
     private final KwoTradeOrderService kwoTradeOrderService;
+    private final KwoTradeOrderMapper tradeOrderMapper;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private GoodsStatisticsService goodsStatisticsService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private PaymentDubboService paymentDubboService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
     /**
      * @desc: 工作台贸易订单表格统计
@@ -114,5 +141,177 @@ public class KwoTradeOrderStatisticsService {
         }
         return res;
     }
+
+    /**
+     * @desc: 工作台贸易订单数据统计
+     * @author: yzc
+     * @date: 2023-09-11 15:32
+     * @Param params:
+     * @return: com.sckw.report.model.vo.WbTOrderDataStsResVO
+     */
+    public WbTOrderDataStsResVO workbenchData(WbTOrderDataStsParam params) {
+        WbTOrderDataStsResVO res = new WbTOrderDataStsResVO();
+        List<TOrderDataStsResVO> list = new ArrayList<>();
+        Long entId = LoginUserHolder.getEntId();
+        String unit = params.getUnit();
+        Integer orderType = params.getOrderType();
+        Integer dateType = params.getDateType();
+        Date currentStart = DateUtils.getStartTime(dateType, LocalDateTime.now());
+        Date lastEnd = DateUtils.getLastEndTime(dateType);
+        Date lastStart = DateUtils.getStartTime(dateType, DateUtil.toLocalDateTime(lastEnd));
+        //当前数据
+        TOrderDataStsResVO currentDataSts = new TOrderDataStsResVO();
+        //商品数量
+        GoodsNumStsParam goodsNumStsParam = new GoodsNumStsParam();
+        goodsNumStsParam.setTopEntId(entId).setUnit(unit);
+        Long currentGoodsNum = goodsStatisticsService.getOnShelfGoodsNum(goodsNumStsParam);
+        //待付款金额
+        SettlementMoney settlement = Objects.equals(orderType, 1) ?
+                paymentDubboService.countPurchase(entId, dateType) : paymentDubboService.countSell(entId, dateType);
+        //订单统计
+        WorkbenchOrderStsDTO currentOrderSts = getOrderStsInfo(orderType, unit, currentStart, null);
+        BigDecimal currentAmount = BigDecimal.valueOf(currentOrderSts.getOrderAmount());
+        BigDecimal currentPrice = BigDecimal.valueOf(currentOrderSts.getOrderPrice());
+        currentDataSts.setType(NumberConstant.ONE)
+                .setGoodsNum(currentGoodsNum)
+                .setOrderAmount(currentAmount)
+                .setOrderPrice(currentPrice)
+                .setWaitCollectedPrice(new BigDecimal(settlement.getCurrent()))
+                .setNotArrivedAmount(currentAmount.subtract(BigDecimal.valueOf(currentOrderSts.getOrderActualAmount())));
+        list.add(currentDataSts);
+
+        //上周/上月数据
+        TOrderDataStsResVO lastDataSts = new TOrderDataStsResVO();
+        //商品数量
+        goodsNumStsParam.setEndDate(lastEnd);
+        Long lastGoodsNum = goodsStatisticsService.getOnShelfGoodsNum(goodsNumStsParam);
+        //订单统计
+        WorkbenchOrderStsDTO lastOrderSts = getOrderStsInfo(orderType, unit, lastStart, lastEnd);
+        BigDecimal lastAmount = BigDecimal.valueOf(lastOrderSts.getOrderAmount());
+        BigDecimal lastPrice = BigDecimal.valueOf(lastOrderSts.getOrderPrice());
+        lastDataSts.setType(NumberConstant.TWO)
+                .setGoodsNum(lastGoodsNum)
+                .setOrderAmount(lastAmount)
+                .setOrderPrice(lastPrice)
+                .setWaitCollectedPrice(new BigDecimal(settlement.getBefore()))
+                .setNotArrivedAmount(lastAmount.subtract(BigDecimal.valueOf(lastOrderSts.getOrderActualAmount())));
+        list.add(lastDataSts);
+        res.setTOrderDataStsList(list);
+        //商品数量环比
+        BigDecimal goodsNumRingRate = getRingRate(new BigDecimal(currentGoodsNum), new BigDecimal(lastGoodsNum));
+        boolean goodsNumFlag = goodsNumRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        goodsNumRingRate = goodsNumRingRate.abs();
+        //订单总量环比
+        BigDecimal orderAmountRingRate = getRingRate(currentAmount, lastAmount);
+        boolean orderAmountFlag = orderAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        orderAmountRingRate = orderAmountRingRate.abs();
+        //订单总金额环比
+        BigDecimal orderPriceRingRate = getRingRate(currentPrice, lastPrice);
+        boolean orderPriceFlag = orderPriceRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        orderPriceRingRate = orderPriceRingRate.abs();
+        //未到货量环比
+        BigDecimal notArrivedAmountRingRate = getRingRate(currentDataSts.getNotArrivedAmount(), lastDataSts.getNotArrivedAmount());
+        boolean notArrivedAmountFlag = notArrivedAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        notArrivedAmountRingRate = notArrivedAmountRingRate.abs();
+
+        res.setGoodsNumRingRate(goodsNumRingRate)
+                .setGoodsNumFlag(goodsNumFlag)
+                .setOrderAmountRingRate(orderAmountRingRate)
+                .setOrderAmountFlag(orderAmountFlag)
+                .setOrderPriceRingRate(orderPriceRingRate)
+                .setOrderPriceFlag(orderPriceFlag)
+                .setNotArrivedAmountRingRate(notArrivedAmountRingRate)
+                .setNotArrivedAmountFlag(notArrivedAmountFlag)
+                .setWaitCollectedPriceRingRate(new BigDecimal(settlement.getPercent().replace("%", "")))
+                .setWaitCollectedPriceFlag(Objects.equals(settlement.getFlag(), 1));
+        return res;
+    }
+
+    private BigDecimal getRingRate(BigDecimal current, BigDecimal last) {
+        BigDecimal res;
+        if (last.compareTo(BigDecimal.ZERO) == 0) {
+            res = (current.subtract(last)).compareTo(BigDecimal.ZERO) != 0 ? NumberConstant.ONE_HUNDRED : BigDecimal.ZERO;
+        } else {
+            res = (current.subtract(last)).multiply(NumberConstant.ONE_HUNDRED).divide(last, 2, RoundingMode.HALF_UP);
+        }
+        return res;
+    }
+
+    /**
+     * @desc: 获取订单统计信息
+     * @author: yzc
+     * @date: 2023-09-11 17:55
+     * @Param orderType:
+     * @Param unit:
+     * @Param start:
+     * @Param end:
+     * @return: com.sckw.report.model.dto.WorkbenchOrderStsDTO
+     */
+    private WorkbenchOrderStsDTO getOrderStsInfo(Integer orderType, String unit, Date start, Date end) {
+        OrderStsInfoDTO dto = new OrderStsInfoDTO();
+        dto.setOrderType(orderType).setUnit(unit)
+                .setEntId(LoginUserHolder.getEntId())
+                .setStartCreateTime(start)
+                .setEndCreateTime(end);
+        List<Integer> excludeStatuses = Arrays.asList(0, 2);
+        WorkbenchOrderStsDTO result = tradeOrderMapper.getOrderStsInfo(dto, excludeStatuses);
+        return Objects.isNull(result) ? new WorkbenchOrderStsDTO() : result;
+    }
+
+    /**
+     * @desc: 工作台采购订单列表
+     * @author: yzc
+     * @date: 2023-09-13 19:37
+     * @return: java.util.List<com.sckw.report.model.vo.WorkbenchPurchaseVO>
+     */
+    public List<WorkbenchPurchaseVO> workbenchPurchaseList() {
+        Long procureTopEntId = LoginUserHolder.getEntId();
+        List<Integer> excludeStatuses = Arrays.asList(0, 2, 7);
+        List<WorkbenchPurchaseDTO> orders = tradeOrderMapper.workbenchPurchaseList(procureTopEntId, excludeStatuses);
+        if (CollUtil.isEmpty(orders)) {
+            return Collections.emptyList();
+        }
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
+                DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.PRODUCT_NAME_TYPE.getType()));
+        Map<String, String> unitMap, goodsTypeMap;
+        if (CollUtil.isNotEmpty(dict)) {
+            unitMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.UNIT_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            goodsTypeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        } else {
+            unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            goodsTypeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        }
+        List<Long> goodsIds = orders.stream().map(WorkbenchPurchaseDTO::getGoodsId).toList();
+        Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIds);
+        List<WorkbenchPurchaseVO> result = new ArrayList<>();
+        orders.forEach(e -> {
+            WorkbenchPurchaseVO vo = BeanUtils.copyProperties(e, WorkbenchPurchaseVO.class);
+            vo.setUnitLabel(unitMap.get(e.getUnit())).setAmount(setScale(e.getAmount()));
+            KwpGoods goods = goodsMap.get(e.getGoodsId());
+            if (Objects.nonNull(goods)) {
+                vo.setGoodsName(goods.getName()).setGoodsType(goods.getGoodsType())
+                        .setGoodsTypeLabel(goodsTypeMap.get(goods.getGoodsType()));
+            }
+            result.add(vo);
+        });
+        return result;
+    }
+
+
+    /**
+     * @desc: 设置两位小数
+     * @author: yzc
+     * @date: 2023-09-26 10:11
+     * @Param d:
+     * @return: java.lang.BigDecimal
+     */
+    private BigDecimal setScale(BigDecimal d) {
+        if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(d) == 0) {
+            return NumberConstant.ZERO_TWO;
+        }
+        return d.setScale(2, RoundingMode.HALF_UP);
+    }
 }
 

+ 143 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

@@ -0,0 +1,143 @@
+package com.sckw.order.serivce;
+
+import com.github.pagehelper.PageHelper;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.model.vo.TableBottom;
+import com.sckw.core.model.vo.TableStatisticRes;
+import com.sckw.core.model.vo.TableTop;
+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.order.dao.KwoTradeOrderMapper;
+import com.sckw.order.enums.OrderStatusEnum;
+import com.sckw.order.model.dto.OperatorTOrderListStsConditionDTO;
+import com.sckw.order.model.dto.OrderListResDTO;
+import com.sckw.order.model.dto.TradeOrderListSelectDTO;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.system.api.RemoteUserService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @desc: 运营端贸易订单管理相关service
+ * @author: yzc
+ * @date: 2023-09-14 11:23
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class TradeOrderManageService {
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteUserService remoteUserService;
+
+    private final KwoTradeOrderService tradeOrderService;
+    private final KwoTradeOrderMapper tradeOrderMapper;
+
+
+    /**
+     * @desc: 贸易订单列表分页查询
+     * @author: yzc
+     * @date: 2023-09-14 14:24
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult listPaging(OperatorTOrderListQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                return PageResult.build(params.getPage(), params.getPageSize(), 0L, Collections.emptyList());
+            }
+            authEntIdList.addAll(ids);
+        }
+
+        TradeOrderListStatisticParam tradeOrderListStatisticParam = new TradeOrderListExportParam();
+        BeanUtils.copyProperties(params, tradeOrderListStatisticParam);
+        TradeOrderListSelectDTO tradeOrderListSelectDTO = tradeOrderService.buildSelectParam(tradeOrderListStatisticParam);
+        PageHelper.startPage(params.getPage(), params.getPageSize());
+        List<OrderListResDTO> list = tradeOrderMapper.tradeOrderSelect(tradeOrderListSelectDTO, tradeOrderListSelectDTO.getGoodIds(), LoginUserHolder.getAuthUserIdList(), authEntIdList);
+        return tradeOrderService.buildResult(list, params.getPageSize());
+    }
+
+    /**
+     * @desc: 贸易订单列表统计查询
+     * @author: yzc
+     * @date: 2023-09-14 14:22
+     * @Param params:
+     * @return: com.sckw.core.model.vo.TableStatisticRes
+     */
+    public TableStatisticRes listStatistic(OperatorTOrderStsQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                List<OrderStatusEnum> enums = OrderStatusEnum.getSortList();
+                enums.remove(0);
+                List<TableTop> list = new ArrayList<>();
+                for (OrderStatusEnum e : enums) {
+                    Integer value = e.getCode();
+                    TableTop tableTop = new TableTop();
+                    tableTop.setName(e.getMsg()).setValue(value).setTotal(0);
+                    list.add(tableTop);
+                }
+                TableTop all = new TableTop();
+                all.setName("全部").setTotal(0);
+                list.add(0, all);
+                TableBottom tableBottom = new TableBottom();
+                tableBottom.setTotal(0);
+                TableStatisticRes res = new TableStatisticRes();
+                res.setTableTops(list).setTableBottom(tableBottom);
+                return res;
+            }
+            authEntIdList.addAll(ids);
+        }
+        List<OrderStatusEnum> enums = OrderStatusEnum.getSortList();
+        enums.remove(0);
+        return null;
+    }
+
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-09-14 14:40
+     * @Param params:
+     * @return: java.util.List<com.sckw.report.service.param.TradeOrderListExport>
+     */
+    public List<TradeOrderListExport> export(OperatorTOrderExportQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                List<TradeOrderListExport> exports = new ArrayList<>();
+                return exports;
+            }
+            authEntIdList.addAll(ids);
+        }
+        return null;
+    }
+
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-09-14 14:52
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult contractAssociationList(OperatorTOrderContractParam params) {
+        Criteria criteria = new Criteria();
+        List<Long> ids = StringUtils.splitStrToList(params.getContractIds(), ",", Long.class);
+        criteria.and("contractId").in(ids).and("delFlag").is(0);
+        Sort sort = Sort.by(Sort.Direction.DESC, "contractId", "createTime");
+        return null;
+    }
+}

+ 13 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderAddressMapper.xml

@@ -56,4 +56,17 @@
             </trim>
         </foreach>
     </insert>
+
+
+
+    <select id="findByAddress" resultType="com.sckw.order.model.KwoTradeOrderAddress" >
+        select
+        id, t_order_id tOrderId, address_type addressType, `name`, `type`, contacts, phone, city_code cityCode, city_name cityName,
+        detail_address detailAddress, lat, lng, fence, remark, `status`, create_by createBy, create_time createTime,
+        update_by updateBy, update_time updateTime
+        from kwo_trade_order_address
+        where del_flag = 0
+        and t_order_id = #{tOrderId, jdbcType=BIGINT}
+        and address_type = #{type, jdbcType=INTEGER}
+    </select>
 </mapper>

+ 203 - 183
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -57,13 +57,7 @@
         a.source                                            AS source,
         f.contract_id                                       AS contractId,
         f.contract_no                                       AS contractNo,
---         f.contract_name                                     as contractName,
---         f.signing_way                                       AS contractSigningWay,
         g.goods_id                                          AS goodsId,
---         g.goods_name                                        AS goodsName,
---         g.goods_spec                                        AS goodsSpec,
---         g.goods_tax_rate                                    AS goodsTaxRate,
---         g.goods_thumb                                       AS goodsThumb,
         g.unit_price                                        AS unitPrice,
         a.price                                             AS price,
         a.amount                                            AS amount,
@@ -74,91 +68,80 @@
         a.remark                                            AS remark,
         a.unit                                              AS unit,
         a.create_by                                         AS createBy,
-        a.create_time                                       AS createTime,
-        b.id                                                AS loadAddressId,
-        b.name                                              AS loadName,
-        b.city_name                                          AS loadCityName,
-        b.detail_address                                     AS loadDetailAddress,
-        c.id                                                AS unloadAddressId,
-        c.name                                              AS unloadName,
-        c.city_name                                          AS unloadCityName,
-        c.detail_address                                     AS unloadDetailAddress
+        a.create_time                                       AS createTime
     </sql>
 
-    <select id="tradeOrderSelect"
-            resultMap="mainEntityMap">
+    <select id="tradeOrderSelect" resultMap="mainEntityMap">
         SELECT
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
-        AND b.address_type = "1" AND b.del_flag = 0
-        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
-        AND c.address_type = "2" AND c.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
         LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
 --          数据权限匹配
-            <if test="query.isMain == 0">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>
-                <if test="authUserIds != null and authUserIds.size() > 0">
-                    and a.create_by in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
-                </if>
-                )or
-                (<if test="query.orderType == 1">
-                    <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
+            <choose>
+                <when test="entIds == null or entIds.size == 0">
+                    <if test="query.isMain == 0">
+                        and (
+                        <if test="query.orderType == 1">
+                            <if test="query.entId != null">
+                                d.top_ent_id = #{query.entId}
+                            </if>
+                            <if test="authUserIds != null and authUserIds.size() > 0">
+                                and d.contacts_id in
+                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                                or d.create_by in
+                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                        </if>
+                        <if test="query.orderType == 2">
+                            <if test="query.entId != null">
+                                e.top_ent_id = #{query.entId}
+                            </if>
+                            <if test="authUserIds != null and authUserIds.size() > 0">
+                                and e.contacts_id in
+                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                                or e.create_by in
+                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                                    #{authUserId}
+                                </foreach>
+                            </if>
+                        </if>
+                        )
                     </if>
-                    <if test="authUserIds != null and authUserIds.size() > 0">
-                        and d.contacts_id in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
-                    </if>
-                </if>
-                <if test="query.orderType == 2">
-                    <if test="query.entId != null">
-                        e.top_ent_id = #{query.entId}
-                    </if>
-                    <if test="authUserIds != null and authUserIds.size() > 0">
-                        and e.contacts_id in
-                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                            #{authUserId}
-                        </foreach>
-                    </if>
-                </if>)
-                )
-            </if>
-            <if test="query.isMain == 1">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>)
-                or
-                (<if test="query.orderType == 1">
-                    <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
-                    </if>
-                </if>
-                <if test="query.orderType == 2">
-                    <if test="query.entId != null">
-                        e.top_ent_id = #{query.entId}
+                    <if test="query.isMain == 1">
+                        and (
+                        <if test="query.orderType == 1">
+                            <if test="query.entId != null">
+                                d.top_ent_id = #{query.entId}
+                            </if>
+                        </if>
+                        <if test="query.orderType == 2">
+                            <if test="query.entId != null">
+                                e.top_ent_id = #{query.entId}
+                            </if>
+                        </if>
+                        )
                     </if>
-                </if>)
-                )
-            </if>
---          状态匹配
+                </when>
+                <otherwise>
+                    and a.ent_id in <foreach collection="entIds" separator="," open="(" close=")" item="item">
+                            #{item}
+                </foreach>
+                </otherwise>
+            </choose>
+
+--           状态匹配
             <if test="query.status != null">
                 and a.status =#{query.status}
                 <if test="query.status == 0">
@@ -177,7 +160,6 @@
             <if test="query.keywords != null and query.keywords != ''">
                 and (
                 a.t_order_no like concat('%', #{query.keywords}, '%')
-                or a.l_order_no like concat('%', #{query.keywords}, '%')
                 or d.firm_name like concat('%', #{query.keywords}, '%')
                 or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
@@ -194,13 +176,18 @@
             <if test="query.endCreateTime != null ">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
-            <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
-                and b.city_code LIKE CONCAT(#{query.loadAddressCode}
-                , '%')
-            </if>
-            <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
-                and c.city_code LIKE CONCAT(#{query.unloadAddressCode}
-                , '%')
+            <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
+                and a.id in (
+                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
+                    and address_type = 1
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
+                    and address_type = 2
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                )
             </if>
             <if test="query.trading != null and query.trading != ''">
                 and a.trading =#{query.trading}
@@ -214,6 +201,9 @@
             <if test="query.deliveryType != null and query.deliveryType != ''">
                 and a.delivery_type =#{query.deliveryType}
             </if>
+            <if test="query.pickupType != null and query.pickupType != ''">
+                and a.pickup_type =#{query.pickupType}
+            </if>
         </where>
         ORDER BY a.create_time DESC
     </select>
@@ -223,32 +213,16 @@
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
-        AND b.address_type = "1" AND b.del_flag = 0
-        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
-        AND c.address_type = "2" AND c.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
         LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
             <if test="query.isMain == 0">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>
-                <if test="authUserIds != null and authUserIds.size() > 0">
-                    and a.create_by in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
-                </if>
-                )or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -257,6 +231,10 @@
                         <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
                             #{authUserId}
                         </foreach>
+                        or d.create_by in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
                     </if>
                 </if>
                 <if test="query.orderType == 2">
@@ -268,17 +246,17 @@
                         <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
                             #{authUserId}
                         </foreach>
+                        or e.create_by in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
                     </if>
-                </if>)
+                </if>
                 )
             </if>
             <if test="query.isMain == 1">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>)
-                or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -287,7 +265,7 @@
                     <if test="query.entId != null">
                         e.top_ent_id = #{query.entId}
                     </if>
-                </if>)
+                </if>
                 )
             </if>
 --             状态匹配
@@ -309,7 +287,6 @@
             <if test="query.keywords != null and query.keywords != ''">
                 and (
                 a.t_order_no like concat('%', #{query.keywords}, '%')
-                or a.l_order_no like concat('%', #{query.keywords}, '%')
                 or d.firm_name like concat('%', #{query.keywords}, '%')
                 or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
@@ -326,13 +303,18 @@
             <if test="query.endCreateTime != null ">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
-            <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
-                and b.city_code LIKE CONCAT(#{query.loadAddressCode}
-                , '%')
-            </if>
-            <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
-                and c.city_code LIKE CONCAT(#{query.unloadAddressCode}
-                , '%')
+            <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
+                and a.id in (
+                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
+                    and address_type = 1
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
+                    and address_type = 2
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                )
             </if>
             <if test="query.trading != null and query.trading != ''">
                 and a.trading =#{query.trading}
@@ -354,12 +336,12 @@
                 </foreach>
                 <if test="query.orderType == 1">
                     <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
+                        and d.top_ent_id = #{query.entId}
                     </if>
                 </if>
                 <if test="query.orderType == 2">
                     <if test="query.entId != null">
-                        e.top_ent_id = #{query.entId}
+                        and e.top_ent_id = #{query.entId}
                     </if>
                 </if>
             </if>
@@ -459,34 +441,41 @@
         ORDER BY f.contract_id, a.create_time DESC
     </select>
 
-    <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
-        SELECT a.status AS `value`, COUNT(a.status) AS total
+    <select id="workbenchPurchaseList" resultType="com.sckw.order.model.dto.WorkbenchPurchaseDTO">
+        SELECT
+        a.id as tOrderId, a.amount as amount, a.unit as unit, a.create_time as createTime,
+        g.goods_id as goodsId, d.firm_name as procureFirmName
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
-        AND b.address_type = "1" AND b.del_flag = 0
-        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
-        AND c.address_type = "2" AND c.del_flag = 0
         LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
         AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
+        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+        <where>
+            a.del_flag = 0
+            <if test="procureTopEntId != null">
+                and d.top_ent_id = #{procureTopEntId}
+            </if>
+            <if test="excludeStatuses != null and excludeStatuses.size() > 0">
+                and a.status not in
+                <foreach collection="excludeStatuses" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY a.create_time DESC LIMIT 10;
+    </select>
+
+    <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
+        SELECT a.status AS `value`, COUNT(a.status) AS total
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
         LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
             <if test="query.isMain == 0">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>
-                <if test="authUserIds != null and authUserIds.size() > 0">
-                    and a.create_by in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
-                </if>
-                )or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -495,6 +484,10 @@
                         <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
                             #{authUserId}
                         </foreach>
+                        or d.create_by in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
                     </if>
                 </if>
                 <if test="query.orderType == 2">
@@ -506,17 +499,17 @@
                         <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
                             #{authUserId}
                         </foreach>
+                        or e.create_by in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
                     </if>
-                </if>)
+                </if>
                 )
             </if>
             <if test="query.isMain == 1">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>)
-                or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -525,7 +518,7 @@
                     <if test="query.entId != null">
                         e.top_ent_id = #{query.entId}
                     </if>
-                </if>)
+                </if>
                 )
             </if>
 --             状态匹配
@@ -563,13 +556,18 @@
             <if test="query.endCreateTime != null ">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
-            <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
-                and b.city_code LIKE CONCAT(#{query.loadAddressCode}
-                , '%')
-            </if>
-            <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
-                and c.city_code LIKE CONCAT(#{query.unloadAddressCode}
-                , '%')
+            <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
+                and a.id in (
+                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
+                    and address_type = 1
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
+                    and address_type = 2
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                </if>
+                )
             </if>
             <if test="query.trading != null and query.trading != ''">
                 and a.trading =#{query.trading}
@@ -590,26 +588,14 @@
     <select id="appStatistic" resultType="com.sckw.order.model.vo.res.TradeOrderAppStatisticVO">
         SELECT a.status AS `value`, COUNT(a.status) AS total
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
             <if test="query.isMain == 0">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>
-                <if test="authUserIds != null and authUserIds.size() > 0">
-                    and a.create_by in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
-                </if>
-                )or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -630,16 +616,12 @@
                             #{authUserId}
                         </foreach>
                     </if>
-                </if>)
+                </if>
                 )
             </if>
             <if test="query.isMain == 1">
-                and ((
-                <if test="query.entId != null">
-                    a.ent_id = #{query.entId}
-                </if>)
-                or
-                (<if test="query.orderType == 1">
+                and (
+                <if test="query.orderType == 1">
                     <if test="query.entId != null">
                         d.top_ent_id = #{query.entId}
                     </if>
@@ -648,7 +630,7 @@
                     <if test="query.entId != null">
                         e.top_ent_id = #{query.entId}
                     </if>
-                </if>)
+                </if>
                 )
             </if>
             <if test="query.orderType == 1">
@@ -673,6 +655,44 @@
 
     </select>
 
+    <select id="getOrderStsInfo" resultType="com.sckw.order.model.dto.WorkbenchOrderStsDTO">
+        SELECT SUM(a.amount) AS orderAmount, SUM(a.price) AS orderPrice,
+               SUM(a.actual_amount) AS orderActualAmount
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+        AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+        AND e.unit_type = "2" AND e.del_flag = 0
+        <where>
+            a.del_flag = 0
+            <if test="query.unit != null and query.unit != ''">
+                and a.unit =#{query.unit}
+            </if>
+            <if test="query.startCreateTime != null ">
+                and a.create_time &gt;= #{query.startCreateTime}
+            </if>
+            <if test="query.endCreateTime != null ">
+                and a.create_time &lt;= #{query.endCreateTime}
+            </if>
+            <if test="excludeStatuses != null and excludeStatuses.size() > 0">
+                and a.status not in
+                <foreach collection="excludeStatuses" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="query.orderType == 1">
+                <if test="query.entId != null">
+                    and d.top_ent_id = #{query.entId}
+                </if>
+            </if>
+            <if test="query.orderType == 2">
+                <if test="query.entId != null">
+                    and e.top_ent_id = #{query.entId}
+                </if>
+            </if>
+        </where>
+    </select>
+
     <select id="getMaxOrderNoByDate" resultType="java.lang.String">
         SELECT MAX(t_order_no)
         FROM kwo_trade_order

+ 2 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.vo.TableTop;
+import com.sckw.core.utils.FileUtils;
 import com.sckw.core.utils.StringTimeUtil;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.payment.dao.KwpSettlementLogisticsMapper;
@@ -147,6 +148,7 @@ public class KwpSettlementLogisticsService {
                 settlementVoList = kwpSettlementWalletService.queryList(id, SettlementOrderTypeEnum.LOGISTICS.getStatus(), payType);
             }
         }
+        settlementVoList.forEach(item -> item.setUrl(FileUtils.splice(item.getUrl())));
         return new SettlementDetailDto<>(settlementLogisticsDto, settlementVoList);
     }
 

+ 5 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/dto/OperatorGoodsListQueryDTO.java

@@ -45,6 +45,11 @@ public class OperatorGoodsListQueryDTO implements Serializable {
      */
     private String goodsType;
 
+    /**
+     * 供应企业
+     */
+    private String supplyEntId;
+
     /**
      * 商品类型type值
      */

+ 5 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/OperatorGoodsStsQueryVO.java

@@ -50,4 +50,9 @@ public class OperatorGoodsStsQueryVO implements Serializable {
      */
     private String goodsTypeValue;
 
+    /**
+     * 供应企业
+     */
+    private String supplyEntId;
+
 }

+ 4 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/operateService/GoodsManagerService.java

@@ -17,6 +17,7 @@ import com.sckw.product.dao.KwpGoodsMapper;
 import com.sckw.product.enums.GoodsStatusEnum;
 import com.sckw.product.model.GoodsListExport;
 import com.sckw.product.model.KwpGoods;
+import com.sckw.product.model.KwpGoodsUnit;
 import com.sckw.product.model.OperationGoodsListExport;
 import com.sckw.product.model.dto.OperatorGoodsListQueryDTO;
 import com.sckw.product.model.vo.req.OperatorGoodsExportQueryVO;
@@ -140,6 +141,9 @@ public class GoodsManagerService {
                 wrapper.in(KwpGoods::getGoodsType, goodsTypes);
             }
         }
+        if (StringUtils.isNotBlank(params.getSupplyEntId())) {
+            wrapper.eq(KwpGoods::getSupplyEntId, params.getSupplyEntId());
+        }
         wrapper.eq(KwpGoods::getDelFlag, Global.NO).orderByDesc(KwpGoods::getCreateTime);
         return wrapper;
     }

+ 1 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java

@@ -275,7 +275,7 @@ public class KwTransportController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/wayBillOrderExport", produces = MediaType.APPLICATION_JSON_VALUE)
-    public void wayBillOrderExport(@RequestBody @Validated WaybillOrderQuery query, HttpServletResponse response) {
+    public void wayBillOrderExport(@RequestBody WaybillOrderQuery query, HttpServletResponse response) {
         List<WaybillOrderListExport> list = transportService.wayBillOrderExport(query);
         if (CollectionUtils.isEmpty(list)) {
             throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认");

+ 0 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -528,7 +528,6 @@ public class KwsEnterpriseService {
 
         //子公司不用新建机构、角色等,直接返回
         Map<String, Object> map = CollectionUtils.createHashMap();
-        ;
         map.put("entName", kwsEnterprise.getFirmName());
         map.put("createByName", kwsEnterprise.getContacts());
         if (Objects.nonNull(reqVo.getEntPid())) {

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java

@@ -138,7 +138,7 @@ public class KwtLogisticsConsignmentController {
     public HttpResult purchaseLogisticsCar(@Valid @RequestBody OrderQuery orderQuery) {
         log.info("采购订单-车辆详情 传递参数信息:{}", JSONObject.toJSONString(orderQuery));
         try {
-            return HttpResult.ok(logisticsConsignmentService.purchaseLogisticsCar(orderQuery.getIds(), orderQuery.getPage(), orderQuery.getPageSize()));
+            return HttpResult.ok(logisticsConsignmentService.sellLogisticsCar(orderQuery.getIds(), orderQuery.getPage(), orderQuery.getPageSize()));
         } catch (Exception e) {
             log.error("采购订单-车辆详情 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

+ 108 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -1,9 +1,12 @@
 package com.sckw.transport.controller;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.core.exception.CustomPromptException;
 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;
@@ -12,18 +15,25 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.model.ValiList;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.vo.WaybillOrderDriverVo;
+import com.sckw.transport.model.vo.WaybillOrderExportVo;
 import com.sckw.transport.model.vo.WaybillOrderSelectVo;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jdk.jshell.execution.FailOverExecutionControlProvider;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -42,7 +52,6 @@ public class KwtWaybillOrderController {
     @Autowired
     KwtWaybillOrderV1Service waybillOrderV1Service;
 
-
     /**
      * @param params 请求参数
      * @desc 统计
@@ -51,6 +60,10 @@ public class KwtWaybillOrderController {
      **/
     @PostMapping("/statistics")
     public HttpResult statistics(@RequestBody WaybillOrderQueryDto params) throws SystemException {
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        params.setUserIds(userIds);
+        params.setEntId(LoginUserHolder.getEntId());
         return HttpResult.ok(waybillOrderV1Service.statistics(params));
     }
 
@@ -62,7 +75,45 @@ public class KwtWaybillOrderController {
      **/
     @PostMapping("/select")
     public HttpResult findListPage(@RequestBody WaybillOrderQueryDto params) throws SystemException {
-        return HttpResult.ok(waybillOrderV1Service.findListPage(params));
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        params.setUserIds(userIds);
+        params.setEntId(LoginUserHolder.getEntId());
+        // 设置分页参数
+        PageHelper.startPage(params.getPage(), params.getPageSize());
+        List<WaybillOrderSelectVo> list = waybillOrderV1Service.findListPage(params);
+        PageResult result = PageHelperUtil.getPageResult(new PageInfo<>(list));
+        return HttpResult.ok(result);
+    }
+
+    /**
+     * @param params 查询参数
+     * @desc 司机导出
+     * @author zk
+     * @date 2023/07/11
+     **/
+    @PostMapping(value = "/export", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void export(@RequestBody WaybillOrderQueryDto params, HttpServletResponse response) {
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        params.setUserIds(userIds);
+        params.setEntId(LoginUserHolder.getEntId());
+        /*查询数据*/
+        List<WaybillOrderSelectVo> list = waybillOrderV1Service.findListPage(params);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认!");
+        }
+        //数据处理
+        List<WaybillOrderExportVo> orders = new ArrayList<>();
+        for (WaybillOrderSelectVo select:list) {
+            WaybillOrderExportVo exportVo = new WaybillOrderExportVo();
+            exportVo.setLoadName(String.join(Global.COMMA, select.getLoadName()));
+            exportVo.setLoadAddress(String.join(Global.COMMA, select.getLoadAddress()));
+            exportVo.setUnloadName(String.join(Global.COMMA, select.getUnloadName()));
+            exportVo.setUnloadAddress(String.join(Global.COMMA, select.getUnloadAddress()));
+            orders.add(exportVo);
+        }
+        ExcelUtil.downData(response, WaybillOrderExportVo.class, orders);
     }
 
     /**
@@ -73,6 +124,10 @@ public class KwtWaybillOrderController {
      **/
     @PostMapping("/ndex")
     public HttpResult findNdexPage(@RequestBody WaybillOrderQueryDto params) throws SystemException {
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        params.setUserIds(userIds);
+        params.setEntId(LoginUserHolder.getEntId());
         return HttpResult.ok(waybillOrderV1Service.findNdexPage(params));
     }
 
@@ -87,6 +142,49 @@ public class KwtWaybillOrderController {
         return waybillOrderV1Service.waybillDetail(wOrderId);
     }
 
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询(子订单)
+     * @author zk
+     * @date 2024/3/8
+     **/
+    @PostMapping("/subtaskSelect")
+    public HttpResult subtaskSelect(@RequestBody WaybillSubtaskOrderQueryDto params) throws SystemException {
+        return HttpResult.ok(waybillOrderV1Service.subtaskSelect(params));
+    }
+
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询(运力)
+     * @author zk
+     * @date 2024/3/8
+     **/
+    @PostMapping("/transportationCapacitySelect")
+    public HttpResult transportationCapacity(@RequestBody WaybillSubtaskOrderQueryDto params) throws SystemException {
+        return HttpResult.ok(waybillOrderV1Service.transportationCapacitySelect(params));
+    }
+
+    /**
+     * @param wSubtaskId 运单子单ID
+     * @desc 运单详情
+     * @author zk
+     * @date 2024/3/13
+     **/
+    @GetMapping("/waybillSubtaskDetail")
+    public HttpResult waybillSubtaskDetail(@RequestParam("wSubtaskId") Long wSubtaskId){
+        return waybillOrderV1Service.waybillSubtaskDetail(wSubtaskId);
+    }
+
+    /**
+     * @desc 获取企业地址信息
+     * @author zk
+     * @date 2023/9/1
+     **/
+    @GetMapping("/findAddressList")
+    public HttpResult findAddressList(){
+        return HttpResult.ok(waybillOrderV1Service.findAddressList());
+    }
+
     /**
      * @desc 统计司机任务数(待接单/出车/执行/完结)
      * @author zk
@@ -170,7 +268,7 @@ public class KwtWaybillOrderController {
     }
 
     /**
-     * 派车-查询已派车量、待运量数据
+     * 派车-查询已派车量、待运量数据(4.2废弃)
      * @param orderId
      * @return
      */
@@ -458,8 +556,11 @@ public class KwtWaybillOrderController {
      * @date 2024/3/7
      **/
     @PostMapping("/editTicketV3")
-    public HttpResult editTicketV3(@RequestBody @Valid WaybillOrderEditTicketDto params){
-        return waybillOrderV1Service.editTicketV1(params);
+    public HttpResult editTicketV3(@RequestBody @Valid List<WaybillOrderEditTicketDto> params){
+        if (CollectionUtils.isEmpty(params)) {
+            return HttpResult.error("榜单信息不存在,请确认!");
+        }
+        return waybillOrderV1Service.editTicketV2(params);
     }
 
     /**
@@ -475,7 +576,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param wOrderId 运单ID
-     * @desc 运单榜单信
+     * @desc 运单榜单信
      * @author zk
      * @date 2023/8/2
      **/
@@ -486,7 +587,7 @@ public class KwtWaybillOrderController {
 
     /**
      * @param wAddressId 运单地址ID
-     * @desc 运单榜单信
+     * @desc 运单榜单信
      * @author zk
      * @date 2023/8/2
      **/
@@ -496,9 +597,6 @@ public class KwtWaybillOrderController {
     }
 
 
-
-
-
     /**
      * @param params {}
      * @desc 单证审核

+ 64 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -1,9 +1,12 @@
 package com.sckw.transport.controller.enterpriseApp;
 
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
+import com.sckw.transport.model.dto.WaybillOrderQueryDto;
 import com.sckw.transport.service.KwtWaybillManagementService;
+import com.sckw.transport.service.KwtWaybillManagementV1Service;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +25,8 @@ public class AppWayBillController {
 
     @Autowired
     KwtWaybillManagementService waybillManagementService;
+    @Autowired
+    KwtWaybillManagementV1Service waybillManagementV1Service;
 
     /**
      * APP 运单统计分类 - [运输中|已完成] - 数据库
@@ -122,4 +127,63 @@ public class AppWayBillController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
+
+
+
+
+    /**
+     * APP 物流订单详情-根据物流订单ID查询运单统计数据
+     * @param waybillOrderDTO   物流订单ID
+     * @return  车辆运单响应结果
+     */
+    @Valid
+    @RequestMapping(name = "物流订单详情-运单统计", value = "/logisticOrderWaybillStatistic", method = RequestMethod.POST)
+    public HttpResult logisticOrderWaybillStatistic(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
+        try {
+            return waybillManagementV1Service.logisticOrderWaybillStatistic(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("物流订单详情-运单统计:订单id {},error {} ", waybillOrderDTO, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * APP 物流订单详情-根据物流订单ID查询运单列表
+     * @param waybillOrderDTO   物流订单查询
+     * @return  车辆运单响应结果
+     */
+    @Valid
+    @RequestMapping(name = "物流订单详情-运单列表", value = "/logisticOrderWaybill", method = RequestMethod.POST)
+    public HttpResult logisticOrderWaybill(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
+        try {
+            return waybillManagementV1Service.logisticOrderWaybill(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("物流订单详情-运单列表:订单id {},error {} ", waybillOrderDTO, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * @desc 分页查询-看板
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @author zk
+     * @date 2024/4/3
+     **/
+    @PostMapping("/select")
+    public HttpResult findNdexPage(@Validated @RequestBody WaybillListAppDTO params) throws SystemException {
+        return HttpResult.ok(waybillManagementV1Service.findNdexPage(params));
+    }
+
+    /**
+     * @param wOrderId 运单ID
+     * @desc 运单详情
+     * @author zk
+     * @date 2024/3/13
+     **/
+    @GetMapping("/waybillDetail")
+    public HttpResult waybillDetail(@RequestParam("wOrderId") Long wOrderId){
+        return waybillManagementV1Service.waybillDetail(wOrderId);
+    }
+
 }

+ 111 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/operate/ManagementWaybillOrderController.java

@@ -1,23 +1,37 @@
 package com.sckw.transport.controller.operate;
 
 import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.CustomPromptException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.SystemTypeEnum;
+import com.sckw.core.model.page.PageHelperUtil;
+import com.sckw.core.model.page.PageResult;
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.config.easyexcel.RequestHolder;
 import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.system.api.RemoteUserService;
+import com.sckw.transport.model.dto.WaybillOrderQueryDto;
 import com.sckw.transport.model.param.ManagementWaybillOrderQuery;
+import com.sckw.transport.model.vo.WaybillOrderExportVo;
+import com.sckw.transport.model.vo.WaybillOrderSelectVo;
 import com.sckw.transport.model.vo.execlVo.ManagementWaybillOrderExcelVO;
+import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import com.sckw.transport.service.operateService.KwtManagementWaybillOrderService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -31,9 +45,12 @@ import java.util.List;
 @RequiredArgsConstructor
 @RequestMapping(value = "/kwtManagementWaybillOrder")
 public class ManagementWaybillOrderController {
-
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteUserService remoteUserService;
     @Autowired
     KwtManagementWaybillOrderService managementWaybillOrderService;
+    @Autowired
+    KwtWaybillOrderV1Service waybillOrderV1Service;
 
 
     /**
@@ -52,6 +69,40 @@ public class ManagementWaybillOrderController {
         }
     }
 
+    /**
+     * 运营管理端-运单-首页条件查询
+     *
+     * @param query 查询参数
+     * @return  运单响应结果数据
+     */
+    @RequestMapping(value = "/selectV1", method = RequestMethod.POST)
+    public HttpResult selectWaybillOrder(@Valid @RequestBody WaybillOrderQueryDto query) {
+        try {
+            //return managementWaybillOrderService.selectWaybillOrder(query);
+            //新增客户经理权限过滤
+            List<Long> authEntIdList = new ArrayList<>();
+            if (SystemTypeEnum.MANAGE.getCode().equals(LoginUserHolder.getSystemType())) {
+                if (CollectionUtils.isEmpty(authEntIdList)) {
+                    List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+                    if (com.sckw.core.utils.CollectionUtils.isEmpty(ids)){
+                        return HttpResult.ok(PageHelperUtil.getPageResult(new PageInfo<>(new ArrayList<>())));
+                    }
+                    authEntIdList.addAll(ids);
+                }
+            }
+
+            // 设置分页参数
+            PageHelper.startPage(query.getPage(), query.getPageSize());
+            query.setEntIds(authEntIdList);
+            List<WaybillOrderSelectVo> list = waybillOrderV1Service.findListPage(query);
+            PageResult result = PageHelperUtil.getPageResult(new PageInfo<>(list));
+            return HttpResult.ok(result);
+        } catch (Exception e) {
+            log.error("运营管理端-运单-首页条件查询 查询失败:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 
     /**
      * 运营管理端-运单-top统计
@@ -70,6 +121,24 @@ public class ManagementWaybillOrderController {
         }
     }
 
+    /**
+     * 运营管理端-运单-top统计
+     *
+     * @param query 查询参数
+     * @return  运单统计结果
+     */
+    @RequestMapping(value = "/statisticsV1", method = RequestMethod.POST)
+    public HttpResult statisticsWaybillOrder(@Valid @RequestBody WaybillOrderQueryDto query) {
+        log.error("运营管理端-运单-top统计 查询 :{}", JSONObject.toJSONString(query));
+        try {
+            return HttpResult.ok(waybillOrderV1Service.statistics(query));
+        } catch (Exception e) {
+            log.error("运营管理端-运单-top统计 失败 :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+
     /***
      * 运营管理端-运单-导出
      * @param query 查询参数
@@ -85,6 +154,31 @@ public class ManagementWaybillOrderController {
         ExcelUtil.downData(response, ManagementWaybillOrderExcelVO.class, list);
     }
 
+    /***
+     * 运营管理端-运单-导出
+     * @param query 查询参数
+     */
+    @RequestMapping(value = "/exportV1", method = RequestMethod.POST)
+    public void exportWaybillOrder(@Validated @RequestBody WaybillOrderQueryDto query, HttpServletResponse response) {
+        log.error("运营管理端-运单-导出 query :{}", JSONObject.toJSONString(query));
+        /*查询数据*/
+        List<WaybillOrderSelectVo> list = waybillOrderV1Service.findListPage(query);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认!");
+        }
+        //数据处理
+        List<WaybillOrderExportVo> orders = new ArrayList<>();
+        for (WaybillOrderSelectVo select:list) {
+            WaybillOrderExportVo exportVo = new WaybillOrderExportVo();
+            exportVo.setLoadName(String.join(Global.COMMA, select.getLoadName()));
+            exportVo.setLoadAddress(String.join(Global.COMMA, select.getLoadAddress()));
+            exportVo.setUnloadName(String.join(Global.COMMA, select.getUnloadName()));
+            exportVo.setUnloadAddress(String.join(Global.COMMA, select.getUnloadAddress()));
+            orders.add(exportVo);
+        }
+        ExcelUtil.downData(response, WaybillOrderExportVo.class, orders);
+    }
+
 
     /**
      * 运营端-运单-获取订单详情
@@ -102,4 +196,20 @@ public class ManagementWaybillOrderController {
         }
     }
 
+    /**
+     * 运营端-运单-获取订单详情
+     *
+     * @param id 订单id
+     * @return  订单数据
+     */
+    @RequestMapping(value = "/getOrderDetailV1", method = RequestMethod.GET)
+    public HttpResult getOrderDetailV1(@RequestParam("id") Long id) {
+        try {
+            return waybillOrderV1Service.waybillDetail(id);
+        } catch (Exception e) {
+            log.error("运营端-运单-获取订单详情失败:error :单据id:{}, errorMessage:{}", id, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 }

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderAddressMapper.java

@@ -36,4 +36,6 @@ public interface KwtLogisticsOrderAddressMapper extends BaseMapper<KwtLogisticsO
 
 
     List<UnLoadAddressVo> findByAddressAndUnLoadAmount(@Param("lOrderId") Long lOrderId, @Param("addressType") Integer addressType);
+
+    List<KwtLogisticsOrderAddress> findByAddresses(@Param("lOrderId") Long lOrderId, @Param("addressType") Integer addressType);
 }

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderLineFreightRateMapper.java

@@ -21,4 +21,10 @@ public interface KwtLogisticsOrderLineFreightRateMapper extends BaseMapper<KwtLo
      * @return
      */
     List<LineFreightRateVo> selectListByOrderId(@Param("orderId") Long orderId);
+
+    /**
+     * 订单id 获取线路信息
+     * @return
+     */
+    List<KwtLogisticsOrderLineFreightRate> selectListByOrderIdList(@Param("list") List<Long> orderIdList);
 }

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

@@ -136,7 +136,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param driverParam
      * @return
      */
-    List<DriverListVo> selectDriverListById(@Param("driverParam") DriverParam driverParam);
+    List<DriverListVo> selectDriverListById(@Param("driverParam") DriverParam driverParam, @Param("orderStatus") List<Integer> orderStatus);
 
     /**
      * 通过物流订单查看单据下运力司机数据【趟次】
@@ -144,7 +144,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param driverParam
      * @return
      */
-    List<DriverListVo> selectDriverCountById(@Param("driverParam") DriverParam driverParam);
+    List<DriverListVo> selectDriverCountById(@Param("driverParam") DriverParam driverParam, @Param("type") Integer type, @Param("orderStatus") List<Integer> orderStatus);
 
     /**
      * @param ids

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderAddressMapper.java

@@ -46,7 +46,7 @@ public interface KwtWaybillOrderAddressMapper extends BaseMapper<KwtWaybillOrder
      * @param lAddressIds 物流订单地址ID
      * @return 地址信息集
      */
-    List<KwtWaybillOrderAddress> findByLAddressIds(@Param("lAddressIds") List<Long> lAddressIds);
+    List<KwtWaybillOrderAddress> findByLAddressIds(@Param("wOrderId") Long wOrderId, @Param("lAddressIds") List<Long> lAddressIds);
 
     /**
      * 查询车辆运单装卸货地址CODE

+ 15 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderSubtaskMapper.java

@@ -2,10 +2,16 @@ package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
+import com.sckw.transport.model.dto.WaybillListAppDTO;
+import com.sckw.transport.model.dto.WaybillOrderQueryDto;
+import com.sckw.transport.model.dto.WaybillSubtaskOrderQueryDto;
+import com.sckw.transport.model.param.DriverParam;
+import com.sckw.transport.model.vo.DriverListVo;
+import com.sckw.transport.model.vo.WaybillSubtaskSelectVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
-
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author zk
@@ -18,4 +24,12 @@ public interface KwtWaybillOrderSubtaskMapper extends BaseMapper<KwtWaybillOrder
     List<KwtWaybillOrderSubtask> findByWOrderId(@Param("wOrderId") Long wOrderId);
 
     KwtWaybillOrderSubtask findByOrderId(@Param("wOrderId") Long wOrderId, @Param("lOrderId") Long lOrderId);
+
+    List<WaybillSubtaskSelectVo> findListPage(WaybillSubtaskOrderQueryDto params);
+
+    Integer selectCountByOrderId(@Param("orderId") String orderId, @Param("orderStatusList") List<Integer> orderStatusList);
+
+    List<DriverListVo> selectLoopOrderAndDriverListByOrderId(@Param("driverParam") DriverParam driverParam, @Param("type") Integer type, @Param("orderStatus") List<Integer> orderStatus);
+
+    Map<String, Object> findWaybillOrderCount(WaybillOrderQueryDto params);
 }

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

@@ -51,6 +51,16 @@ public interface KwtWaybillOrderTicketMapper extends BaseMapper<KwtWaybillOrderT
      **/
     KwtWaybillOrderTicket findWaybillOrderTicketV2(@Param("wAddressId") Long wAddressId, @Param("unit") String unit);
 
+    /**
+     * 查询车辆运单榜单信息
+     * @param wAddressId 车辆订单地址id
+     * @desc 查询车辆运单榜单信息
+     * @author zk
+     * @date 2023/7/27
+     * @return 榜单信息
+     **/
+    List<KwtWaybillOrderTicket> findWaybillOrderTicketV3(@Param("wAddressId") Long wAddressId, @Param("unit") String unit);
+
     /**
      * 修改榜单删除标识
      * @param wOrderId 运单ID

+ 53 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java

@@ -2,10 +2,14 @@ package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.core.model.vo.TableTop;
+import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderV1;
+import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.WaybillOrderQueryDto;
+import com.sckw.transport.model.dto.WaybillSubtaskOrderQueryDto;
 import com.sckw.transport.model.vo.WaybillCountVo;
 import com.sckw.transport.model.vo.WaybillOrderSelectVo;
+import com.sckw.transport.model.vo.WaybillOrderSubtaskVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import java.util.List;
@@ -33,6 +37,13 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      */
     List<WaybillOrderSelectVo> findListPage(WaybillOrderQueryDto params);
 
+    /**
+     * 查询统计
+     * @param params 查询参数
+     * @return 统计数据
+     */
+    List<WaybillOrderSelectVo> findCapacityListPage(WaybillSubtaskOrderQueryDto params);
+
     /**
      * 司机端任务统计
      * @param driverId 司机ID
@@ -45,7 +56,7 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      * @param params {driverId 司机ID, busStatus  1待接单/2出车/3执行/4完结, month月份, startTime 开始实际, endTime 结束时间}
      * @return 返回值
      */
-    List<KwtWaybillOrderV1> findWaybillOrderByDriver(Map<String, Object> params);
+    List<WaybillOrderSubtaskVo> findWaybillOrderSubtask(Map<String, Object> params);
 
     /**
      * 查询统计司机或车辆关联订单数量信息
@@ -55,6 +66,13 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      */
     WaybillCountVo findCountByDriverOrTruck(@Param("driverId") Long driverId, @Param("truckId") Long truckId);
 
+    /**
+     * 查询统计运单数量信息
+     * @param lOrderId 物流订单ID
+     * @return 统计信息
+     */
+    WaybillCountVo findCountByLOrderId(@Param("lOrderId") Long lOrderId);
+
     /**
      * 查询统计司机或车辆关联订单运量信息
      * @param driverId 司机ID
@@ -83,4 +101,38 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      * @return 统计信息
      */
     WaybillCountVo findTicketCountByAddress(Map<String, Object> params);
+
+    /**
+     * 易订单id查找相关联车辆信息
+     * @param params {tOrderIds 贸易订单ID, page , pageSize}
+     * @return 车辆信息
+     */
+    List<OrderCarDTO> selectWaybillOrderCarPage(Map<String, Object> params);
+
+    /**
+     * 查询车辆运单
+     * @param params {driverId 司机ID, truckNo车牌号, busStatus 状态 2出车/3执行/4完结}
+     * @desc 查询车辆运单
+     * @author zk
+     * @date 2023/9/6
+     * @return 运单信息
+     **/
+    List<KwtWaybillOrderV1> findWaybillOrder(Map<String, Object> params);
+
+    WaybillCountVo findWaybillOrderCount(Map<String, Object> map);
+
+    int selectDataByLorderId(@Param("id") String id, @Param("statusList") List<Integer> statusList);
+
+    int selectDataByLorderIds(@Param("list") List<Long> longList, @Param("status") Integer status);
+
+    /**
+     * 查询订单
+     * @param orderId 订单id
+     * @param type 类型
+     * @param statusList 状态集
+     * @return 订单信息
+     */
+    Map<String,Object> selectOrderByOrderId(@Param("orderId") Long orderId,
+                                            @Param("type") Integer type,
+                                            @Param("statusList") List<Long> statusList);
 }

+ 56 - 33
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -35,6 +35,7 @@ import com.sckw.transport.api.model.dto.*;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
+import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
 import com.sckw.transport.dao.*;
@@ -88,9 +89,6 @@ public class TransportServiceImpl implements TransportRemoteService {
     @Autowired
     private KwtLogisticsOrderUnitMapper logisticsOrderUnitMapper;
 
-    @Autowired
-    private KwtLogisticsOrderAddressMapper logisticsOrderAddressMapper;
-
     @Autowired
     private KwtLogisticsOrderContractMapper logisticsOrderContractMapper;
 
@@ -101,7 +99,10 @@ public class TransportServiceImpl implements TransportRemoteService {
     private KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
 
     @Autowired
-    private KwtWaybillOrderMapper waybillOrderDao;
+    private KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+
+    @Autowired
+    private KwtWaybillOrderSubtaskMapper waybillOrderSubtaskMapper;
 
     @Autowired
     private KwtLogisticsOrderLineFreightRateMapper lineFreightRateMapper;
@@ -149,7 +150,23 @@ public class TransportServiceImpl implements TransportRemoteService {
         /**合理损耗*/
         Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
         if (CollectionUtils.isNotEmpty(list)) {
+
+            List<AcceptCarriageLogisticsOrderDto> collect = list.stream().filter(item -> item.getBillingMode().equals(DictEnum.CHARGING_TYPE_4.getValue())).collect(Collectors.toList());
+            Map<Long, List<KwtLogisticsOrderLineFreightRate>> collect1 = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(collect)) {
+                List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = lineFreightRateMapper.selectListByOrderIdList(collect.stream().map(AcceptCarriageLogisticsOrderDto::getLOrderId).map(Long::parseLong).toList());
+                if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                    collect1 = kwtLogisticsOrderLineFreightRates.stream().collect(Collectors.groupingBy(KwtLogisticsOrderLineFreightRate::getLOrderId));
+                }
+            }
+
             for (AcceptCarriageLogisticsOrderDto logisticsOrderDTO : list) {
+
+                List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = collect1.get(Long.parseLong(logisticsOrderDTO.getLOrderId()));
+                if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                    logisticsOrderDTO.setPrices(kwtLogisticsOrderLineFreightRates.stream().map(item -> item.getName() + " " + item.getTransportPrice()).toList());
+                }
+
                 String tOrderId = logisticsOrderDTO.getTOrderId();
                 if (StringUtils.isNotBlank(tOrderId)) {
                     try {
@@ -178,14 +195,14 @@ public class TransportServiceImpl implements TransportRemoteService {
                 KwtLogisticsOrderUnit carrierOrderUnit = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                         .eq(KwtLogisticsOrderUnit::getLOrderId, logisticsOrderDTO.getLOrderId())
                         .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-                KwtLogisticsOrderAddress loadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
-                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
-                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
-                );
-                KwtLogisticsOrderAddress unloadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
-                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
-                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
-                );
+//                KwtLogisticsOrderAddress loadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+//                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
+//                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
+//                );
+//                KwtLogisticsOrderAddress unloadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+//                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
+//                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
+//                );
                 KwtLogisticsOrderContract contract = logisticsOrderContractMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderContract>()
                         .eq(KwtLogisticsOrderContract::getLOrderId, logisticsOrderDTO.getLOrderId())
                 );
@@ -247,14 +264,14 @@ public class TransportServiceImpl implements TransportRemoteService {
                 logisticsOrderDTO.setContractNo(contract.getContractNo());
                 logisticsOrderDTO.setGoodsPriceLabel(priceDictData.get(logisticsOrderDTO.getPriceType()));
                 logisticsOrderDTO.setCreateByName(remoteSystemService.queryUserCacheById(logisticsOrderDTO.getCreateBy()) == null ? null : remoteSystemService.queryUserCacheById(logisticsOrderDTO.getCreateBy()).getName());
-                logisticsOrderDTO.setLoadAddress(loadOrderAddress.getDetailAddress());
-                logisticsOrderDTO.setLoadName(loadOrderAddress.getName());
-                logisticsOrderDTO.setLoadContacts(loadOrderAddress.getContacts());
-                logisticsOrderDTO.setLoadPhone(loadOrderAddress.getPhone());
-                logisticsOrderDTO.setUnloadAddress(unloadOrderAddress.getDetailAddress());
-                logisticsOrderDTO.setUnloadName(unloadOrderAddress.getName());
-                logisticsOrderDTO.setUnloadContacts(unloadOrderAddress.getContacts());
-                logisticsOrderDTO.setUnloadPhone(unloadOrderAddress.getPhone());
+//                logisticsOrderDTO.setLoadAddress(loadOrderAddress.getDetailAddress());
+//                logisticsOrderDTO.setLoadName(loadOrderAddress.getName());
+//                logisticsOrderDTO.setLoadContacts(loadOrderAddress.getContacts());
+//                logisticsOrderDTO.setLoadPhone(loadOrderAddress.getPhone());
+//                logisticsOrderDTO.setUnloadAddress(unloadOrderAddress.getDetailAddress());
+//                logisticsOrderDTO.setUnloadName(unloadOrderAddress.getName());
+//                logisticsOrderDTO.setUnloadContacts(unloadOrderAddress.getContacts());
+//                logisticsOrderDTO.setUnloadPhone(unloadOrderAddress.getPhone());
                 logisticsOrderDTO.setCarrierCompany(carrierOrderUnit == null ? null : carrierOrderUnit.getFirmName());
                 logisticsOrderDTO.setCarrierPhone(carrierOrderUnit == null ? null : carrierOrderUnit.getPhone());
                 logisticsOrderDTO.setCarrierContacts(carrierOrderUnit == null ? null : carrierOrderUnit.getContacts());
@@ -293,11 +310,7 @@ public class TransportServiceImpl implements TransportRemoteService {
 //                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
         } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
             // 物流订单运单趟次数量
-            Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
-                put("upperlOrderId", logisticsOrderDTO.getLOrderId());
-                put("passStatus", Global.NUMERICAL_ONE);
-            }};
-            WaybillCountVo waybillOrderCount = waybillOrderDao.findWaybillOrderCount(map);
+            WaybillCountVo waybillOrderCount = waybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
             BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
             actualAmount = totalComplete.multiply(price);
         } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
@@ -312,11 +325,12 @@ public class TransportServiceImpl implements TransportRemoteService {
                 Map<Long, LineFreightAddressRes> lineFreightAddress = manageService.findLineFreightAddress(lineFreightRateIds);
                 if (lineFreightAddress != null) {
                     for (LineFreightAddressRes address : lineFreightAddress.values()) {
-                        BigDecimal decimal = amountMap.get(address.getId());
-                        if (decimal != null) {
-                            BigDecimal sum = address.getTransportPrice().multiply(decimal).setScale(2, RoundingMode.HALF_UP);
-                            actualAmount = actualAmount.add(sum);
-                        }
+//                        BigDecimal decimal = amountMap.get(address.getId());
+//                        if (decimal != null) {
+//                            BigDecimal sum = address.getTransportPrice().multiply(decimal).setScale(2, RoundingMode.HALF_UP);
+//                            actualAmount = actualAmount.add(sum);
+//                        }
+                        actualAmount = actualAmount.add(address.getTransportAmount());
                     }
                 }
             }
@@ -655,16 +669,25 @@ public class TransportServiceImpl implements TransportRemoteService {
             put("truckNo", params.getTruckNo());
             put("busStatus", params.getBusStatus());
         }};
-        List<KwtWaybillOrder> waybillOrders = waybillOrderDao.findWaybillOrder(queryParams);
+        List<KwtWaybillOrderV1> waybillOrders = waybillOrderV1Mapper.findWaybillOrder(queryParams);
         if (CollectionUtils.isEmpty(waybillOrders)) {
             return waybillOrderVos;
         }
 
-        for (KwtWaybillOrder waybillOrder : waybillOrders) {
+        for (KwtWaybillOrderV1 waybillOrder : waybillOrders) {
             RWaybillOrderVo order = new RWaybillOrderVo();
             BeanUtils.copyProperties(waybillOrder, order);
+
+            //子运单
+            List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskMapper.findByWOrderId(waybillOrder.getId());
+            //装货时间
+            Optional<KwtWaybillOrderSubtask> unloadDate = subtasks.stream().max(Comparator.comparing(KwtWaybillOrderSubtask::getUnloadTime));
+            //卸货时间
+            Optional<KwtWaybillOrderSubtask> loadDate = subtasks.stream().min(Comparator.comparing(KwtWaybillOrderSubtask::getLoadTime));
             KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), null, null, CarWaybillEnum.EXIT_COMPLETED.getCode());
             order.setDepartureTime(track != null ? track.getOperateTime() : null);
+            order.setStartTime(loadDate.get().getLoadTime());
+            order.setEndTime(unloadDate.get().getUnloadTime());
             waybillOrderVos.add(order);
         }
 
@@ -699,7 +722,7 @@ public class TransportServiceImpl implements TransportRemoteService {
             put("busStatus", Global.NUMERICAL_THREE);
             put("lOrderIds", orderIds);
         }};
-        List<KwtWaybillOrder> waybillOrders = waybillOrderDao.findWaybillOrder(params);
+        List<KwtWaybillOrderV1> waybillOrders = waybillOrderV1Mapper.findWaybillOrder(params);
         waybillOrders.forEach(order -> trucks.add(new RTruckMonitorVo(order.getEntId(), order.getTruckNo(), Global.NUMERICAL_ONE)));
         return trucks;
     }

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java

@@ -31,6 +31,11 @@ public class KwtWaybillOrder implements Serializable {
      */
     private Long lOrderId;
 
+    /**
+     * 运单ID
+     */
+    private String wOrderId;
+
     /**
      * 编号
      */

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderAddress.java

@@ -82,7 +82,7 @@ public class KwtWaybillOrderAddress implements Serializable {
     private String lat;
 
     /**
-     * 
+     * 
      */
     private String lng;
 

+ 7 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderSubtask.java

@@ -3,6 +3,8 @@ package com.sckw.transport.model;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -42,12 +44,12 @@ public class KwtWaybillOrderSubtask extends BaseModel {
     /**
      * 已委托量
      */
-    private Double entrustAmount;
+    private BigDecimal entrustAmount;
 
     /**
      * 卸货重量
      */
-    private Double unloadAmount;
+    private BigDecimal unloadAmount;
 
     /**
      * 计划结束日期
@@ -57,7 +59,7 @@ public class KwtWaybillOrderSubtask extends BaseModel {
     /**
      * 装货重量
      */
-    private Double loadAmount;
+    private BigDecimal loadAmount;
 
     /**
      * 计划开始日期
@@ -67,10 +69,10 @@ public class KwtWaybillOrderSubtask extends BaseModel {
     /**
      * 亏吨重量
      */
-    private Double deficitAmount;
+    private BigDecimal deficitAmount;
 
     /**
      * 亏吨扣款
      */
-    private Double deficitPrice;
+    private BigDecimal deficitPrice;
 }

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

@@ -73,7 +73,7 @@ public class KwtWaybillOrderTicket implements Serializable {
     private Date operateTime;
 
     /**
-     * 状态(0待审核、1审核失败、2审核成功)
+     * 状态(0待审核、1驳回、2审核成功)
      */
     private Integer status;
 

+ 75 - 293
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsConsignmentDto.java

@@ -19,7 +19,7 @@ import java.util.List;
 
 /**
  * @author lfdc
- * @description LogisticsConsignmentDto-V4.2
+ * @desc LogisticsConsignmentDto-V4.2
  * @date 2023-07-06 14:07:50
  */
 
@@ -29,7 +29,7 @@ import java.util.List;
 public class LogisticsConsignmentDto implements Serializable {
 
     /**
-     * 单据类型
+     * 单据类型采购订单1,销售订单2
      */
     @NotBlank(message = "单据类型不能为空")
     private String type;
@@ -41,11 +41,80 @@ public class LogisticsConsignmentDto implements Serializable {
     @com.fasterxml.jackson.annotation.JsonProperty("tOrderId")
     private String tOrderId;
 
+    /**
+     * 贸易订单编号
+     */
+    @NotBlank(message = "贸易订单编号不能为空")
+    @JsonProperty("tOrderNo")
+    private String tOrderNo;
+
+    /**
+     * 托运单位
+     */
+    @NotNull(message = "托运单位名称不能为空")
+    private String checkCompany;
+    /**
+     * 托运单位id
+     */
+    @NotNull(message = "托运单位id不能为空")
+    private String checkCompanyId;
+
+    /**
+     * 联系电话
+     */
+    @NotNull(message = "托运联系电话不能为空")
+    private String checkContactPhone;
+    /**
+     * 联系人
+     */
+    @NotNull(message = "托运联系人不能为空")
+    private String checkContacts;
+    /**
+     * 托运联系人id
+     */
+    @NotNull(message = "托运联系人不能为空")
+    private String checkContactsId;
+
+    /**
+     * 承运单位
+     */
+    @NotBlank(message = "承运单位不能为空")
+    private String consignCompany;
+
+    /**
+     * 承运单位ID
+     */
+    @NotBlank(message = "承运单位ID不能为空")
+    private String consignCompanyId;
+
+    /**
+     * 联系电话
+     */
+    @NotNull(message = "承运联系电话不能为空")
+    private String consignContactPhone;
+    /**
+     * 联系人
+     */
+    @NotNull(message = "承运联系人不能为空")
+    private String consignContacts;
+
+    /**
+     * 承运联系人id
+     */
+    @NotNull(message = "承运联系人id不能为空")
+    private String consignContactsId;
+
     /**
      * 商品ID
      */
+    @NotNull(message = "商品id不能为空")
     private Long goodsId;
 
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
     /**
      * goodsName
      */
@@ -56,13 +125,6 @@ public class LogisticsConsignmentDto implements Serializable {
      */
     private String skuId;
 
-    /**
-     * 贸易订单编号
-     */
-    @NotBlank(message = "贸易订单编号不能为空")
-    @JsonProperty("tOrderNo")
-    private String tOrderNo;
-
     /**
      * 结算周期
      */
@@ -94,7 +156,7 @@ public class LogisticsConsignmentDto implements Serializable {
     /**
      * 扣亏损值单位
      */
-    @NotBlank(message = "扣亏损值单位不能为空")
+    //@NotBlank(message = "扣亏损值单位不能为空")
     private String goodsPriceUnit;
 
     /**
@@ -137,7 +199,7 @@ public class LogisticsConsignmentDto implements Serializable {
      */
     @Digits(integer = 10, fraction = 2, message = "订单总量格式不正确")
     @DecimalMin(value = "0.00", message = "订单总量不能小于{value}")
-    private BigDecimal amount;
+    private BigDecimal carryingCapacity;
 
     /**
      * 开始时间
@@ -160,68 +222,13 @@ public class LogisticsConsignmentDto implements Serializable {
      */
     private String remark;
 
-    /**
-     * 托运单位
-     */
-    @NotNull(message = "托运单位名称不能为空")
-    private String checkCompany;
-    /**
-     * 托运单位id
-     */
-    @NotNull(message = "托运单位id不能为空")
-    private String checkCompanyId;
-
-    /**
-     * 联系电话
-     */
-    @NotNull(message = "托运联系电话不能为空")
-    private String checkContactPhone;
-    /**
-     * 联系人
-     */
-    @NotNull(message = "托运联系人不能为空")
-    private String checkContacts;
-    /**
-     * 托运联系人id
-     */
-    @NotNull(message = "托运联系人不能为空")
-    private String checkContactsId;
-
-    /**
-     * 承运单位
-     */
-    @NotBlank(message = "承运单位不能为空")
-    private String consignCompany;
-
-    /**
-     * 承运单位ID
-     */
-    @NotBlank(message = "承运单位ID不能为空")
-    private String consignCompanyId;
-
-    /**
-     * 联系电话
-     */
-    @NotNull(message = "承运联系电话不能为空")
-    private String consignContactPhone;
-    /**
-     * 联系人
-     */
-    @NotNull(message = "承运联系人不能为空")
-    private String consignContacts;
-
-    /**
-     * 承运联系人id
-     */
-    @NotNull(message = "承运联系人id不能为空")
-    private String consignContactsId;
-
 
     /**
      * 合同信息
      */
     @NotNull(message = "合同信息不能为空")
-    private List<ContractDto> contractInfo;
+    //private List<ContractDto> contractInfo;
+    private Long contractId;
 
     /**
      * 地址信息
@@ -242,229 +249,4 @@ public class LogisticsConsignmentDto implements Serializable {
     @JsonProperty("lineFreightList")
     private List<LineFreightDto> lineFreightList;
 
-
-//
-//    /**
-//     *总量
-//     */
-//    @Digits(integer = 10,fraction = 2,message = "总量格式不正确")
-//    @DecimalMin(value = "0.00",message = "分配总量量不能小于{value}")
-//    private BigDecimal amount;
-//    /**
-//     * 分配承运量
-//     */
-//    @Digits(integer = 10,fraction = 2,message = "分配承运量格式不正确")
-//    @DecimalMin(value = "0.00",message = "分配承运量不能小于{value}")
-//    private BigDecimal carryingCapacity;
-//    /**
-//     * 分配承运量使用的单位(吨、方、箱、件))
-//     */
-//    @NotNull(message = "分配承运量单位不能为空")
-//    private String carryingCapacityUnit;
-//
-//    /**
-//     * 托运单位
-//     */
-//    @NotNull(message = "托运单位名称不能为空")
-//    private String checkCompany;
-//    /**
-//     * 托运单位id
-//     */
-//    @NotNull(message = "托运单位id不能为空")
-//    private String checkCompanyId;
-//
-//    /**
-//     * 联系电话
-//     */
-//    @NotNull(message = "托运联系电话不能为空")
-//    private String checkContactPhone;
-//    /**
-//     * 联系人
-//     */
-//    @NotNull(message = "托运联系人不能为空")
-//    private String checkContacts;
-//    /**
-//     * 托运联系人id
-//     */
-//    @NotNull(message = "托运联系人不能为空")
-//    private String checkContactsId;
-//
-//    /**
-//     * 合理损耗
-//     */
-////    @NotNull(message = "合理损耗不能为空")
-////    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
-//    @Digits(integer = 5, fraction = 2, message = "合理损耗超长")
-//    private BigDecimal loss;
-//    /**
-//     * 合理损耗单位
-//     */
-//    private String lossUnit;
-//
-//    /**
-//     * 商品价值(扣亏货值)
-//     */
-////    @NotNull(message = "扣亏货值不能为空")
-////    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
-//    private BigDecimal goodsPrice;
-//    /**
-//     * 商品价值(扣亏货值)单位
-//     */
-//    private String goodsPriceUnit;
-//    /**
-//     * 承运单位
-//     */
-//    @NotBlank(message = "承运单位不能为空")
-//    private String consignCompany;
-//
-//    /**
-//     * 承运单位ID
-//     */
-//    @NotBlank(message = "承运单位ID不能为空")
-//    private String consignCompanyId;
-//
-//    /**
-//     * 联系电话
-//     */
-//    @NotNull(message = "承运联系电话不能为空")
-//    private String consignContactPhone;
-//    /**
-//     * 联系人
-//     */
-//    @NotNull(message = "承运联系人不能为空")
-//    private String consignContacts;
-//
-//    /**
-//     * 承运联系人id
-//     */
-//    @NotNull(message = "承运联系人id不能为空")
-//    private String consignContactsId;
-//
-//    /**
-//     * 结算周期(周结、月结、季结)
-//     */
-////    @NotNull(message = "结算周期不能为空")
-//    @Digits(integer = 5, fraction = 0, message = "合理损耗超长")
-//    private Long settlementCycle;
-//
-//    /**
-//     * 合同id
-//     */
-//    @NotNull(message = "合同id不能为空")
-//    private String contractId;
-//    /**
-//     * 合同编号
-//     */
-//    @NotNull(message = "合同编号不能为空")
-//    private String contractNo;
-//
-//    /**
-//     * 合同名称
-//     */
-//    @NotNull(message = "合同名称不能为空")
-//    private String contractName;
-//
-//    /**
-//     * 支付方式
-//     */
-//    @NotNull(message = "支付方式不能为空")
-//    private String payment;
-//
-//    /**
-//     * 签约方式
-//     */
-//    @NotNull(message = "签约方式不能为空")
-//    private String signingWay;
-//
-//    /**
-//     * 货物名称
-//     */
-//    @NotNull(message = "货物名称不能为空")
-//    private String goodsName;
-//
-//    /**
-//     * 货物id
-//     */
-//    @NotNull(message = "货物id不能为空")
-//    private String goodsId;
-//
-//    /**
-//     * skuId
-//     */
-//    private String skuId;
-//    /**
-//     * 是否全量
-//     */
-//    @NotNull(message = "是否全量不能为空")
-//    private Boolean isFullDose;
-//    /**
-//     * 订单id-分包时要使用
-//     */
-//    @JsonProperty("lOrderId")
-//    private String lOrderId;
-//    /**
-//     * 订单编号-分包时要使用
-//     */
-//    @JsonProperty("lOrderNo")
-//    private String lOrderNo;
-//    /**
-//     * 贸易订单id
-//     */
-//    @JsonProperty("tOrderId")
-//    @NotNull(message = "贸易订单id不能为空")
-//    private String tOrderId;
-//    /**
-//     * 贸易订单编号
-//     */
-//    @JsonProperty("tOrderNo")
-//    @NotNull(message = "贸易订单编号不能为空")
-//    private String tOrderNo;
-//    /**
-//     * 运价
-//     */
-//    @NotNull(message = "运价不能为空")
-//    @DecimalMin(value = "0.00",message = "运价必须为大于0的正整数")
-//    @Digits(integer = 6,fraction = 2,message = "运价格式填写错误")
-//    private BigDecimal price;
-//    /**
-//     * 运价方式
-//     */
-//    @NotNull(message = "运价方式不能为空")
-//    private String priceType;
-//    /**
-//     * 计划卸货时间
-//     */
-//    @NotNull(message = "计划卸货时间不能为空")
-//    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
-////    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private LocalDate receiveGoodsDateTime;
-//    /**
-//     * 计划发货时间
-//     */
-//    @NotNull(message = "计划发货时间不能为空")
-//    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
-////    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private LocalDate shipmentsDateTime;
-//    /**
-//     * 税率
-//     */
-//    @NotNull(message = "税率不能为空")
-//    private Long taxRate;
-////    /**
-////     * 税率类型
-////     */
-////    @NotNull(message = "税率类型不能为空")
-////    private String taxRateType;
-//    /**
-//     * 备注
-//     */
-//    @Length(max = 100,message = "单据编号长度错误最大长度:{max}")
-//    private String remark;
-//    /**
-//     * 计费方式
-//     */
-//    @NotNull(message = "计费方式不能为空")
-//    private String billingMode;
-
-
 }

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDto.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author lfdc

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderLineFreightRateDto.java

@@ -15,7 +15,7 @@ public class LogisticsOrderLineFreightRateDto implements Serializable {
     /**
      * 线路id
      */
-    private Long lineFreightRateId;
+    private Long lineFreightId;
 
     /**
      * 数量

+ 100 - 86
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderSubcontractDto.java

@@ -19,7 +19,7 @@ import java.util.List;
 
 /**
  * @author lfdc
- * @description 物流订单-分包托运-v4.2
+ * @desc 物流订单-分包托运-v4.2
  * @date 2024-03-05 14:03:45
  */
 @Data
@@ -28,29 +28,29 @@ import java.util.List;
 public class LogisticsOrderSubcontractDto implements Serializable {
 
     /**
-     * 订单类型-托运订单1-承运订单2
-     */
-    private String type;
-    /**
-     *总量
+     * 订单id-分包时要使用
      */
-    private BigDecimal amount;
+    @JsonProperty("lOrderId")
+    private String lOrderId;
+
     /**
-     * 分配承运量
+     * 订单编号-分包时要使用
      */
-    @Digits(integer = 10,fraction = 2,message = "分配承运量填写错误")
-    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
-    private BigDecimal carryingCapacity;
+    @JsonProperty("lOrderNo")
+    private String lOrderNo;
+
     /**
-     * 分配承运量使用的单位
+     * 订单类型-托运订单1-承运订单2
      */
-    private String carryingCapacityUnit;
+    @NotBlank(message = "订单类型不能为空")
+    private String type;
 
     /**
      * 托运单位
      */
     @NotNull(message = "托运单位名称不能为空")
     private String consignCompany;
+
     /**
      * 托运单位id
      */
@@ -62,6 +62,7 @@ public class LogisticsOrderSubcontractDto implements Serializable {
      */
     @NotNull(message = "托运联系电话不能为空")
     private String consignContactPhone;
+
     /**
      * 托运联系人
      */
@@ -73,33 +74,7 @@ public class LogisticsOrderSubcontractDto implements Serializable {
      */
     @NotNull(message = "托运联系人id不能为空")
     private String consignContactsId;
-    /**
-     * 承运联系人id
-     */
-    @NotNull(message = "承运联系人id不能为空")
-    private String acceptContactsId;
 
-    /**
-     * 合理损耗
-     */
-//    @NotNull(message = "合理损耗不能为空")
-    @Digits(integer = 5, fraction = 2,message = "合理损耗格式填写错误")
-    private BigDecimal loss;
-    /**
-     * 合理损耗单位
-     */
-    private String lossUnit;
-
-    /**
-     * 商品价值(扣亏货值)
-     */
-//    @NotNull(message = "扣亏货值不能为空")
-    @Digits(integer = 5, fraction = 2,message = "商品价值(扣亏货值)格式填写错误")
-    private BigDecimal goodsPrice;
-    /**
-     * 商品价值(扣亏货值)单位
-     */
-    private String goodsPriceUnit;
     /**
      * 承运单位
      */
@@ -117,6 +92,7 @@ public class LogisticsOrderSubcontractDto implements Serializable {
      */
     @NotNull(message = "承运联系电话不能为空")
     private String acceptContactPhone;
+
     /**
      * 承运联系人
      */
@@ -124,67 +100,97 @@ public class LogisticsOrderSubcontractDto implements Serializable {
     private String acceptContacts;
 
     /**
-     * 结算周期(周结、月结、季结)
+     * 承运联系人id
      */
-//    @NotNull(message = "结算周期不能为空")
-    private Long settlementCycle;
+    @NotNull(message = "承运联系人id不能为空")
+    private String acceptContactsId;
 
     /**
-     * 合同id
+     * 货物id
      */
-    @NotNull(message = "合同id不能为空")
-    private String contractId;
+    //@NotNull(message = "货物id不能为空")
+    private String goodsId;
+
     /**
-     * 合同编号
+     * 商品类型
      */
-    @NotNull(message = "合同编号不能为空")
-    private String contractNo;
+    private String goodsType;
 
     /**
-     * 合同名称
+     * 货物名称
      */
-    @NotNull(message = "合同名称不能为空")
-    private String contractName;
+    @NotNull(message = "货物名称不能为空")
+    private String goodsName;
+
+    /**
+     * skuId
+     */
+    private String skuId;
+
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    // @NotNull(message = "结算周期不能为空")
+    private Long settlementCycle;
+
+    /**
+     * 税率
+     */
+    @NotNull(message = "税率不能为空")
+    private Long taxRate;
 
     /**
      * 合同签约方式
      */
     @NotNull(message = "合同签约方式不能为空")
     private String payment;
+
     /**
-     * 货物名称
+     * 分配承运量使用的单位
      */
-    @NotNull(message = "货物名称不能为空")
-    private String goodsName;
+    private String carryingCapacityUnit;
 
     /**
-     * 货物id
+     * 商品价值(扣亏货值)
      */
-//    @NotNull(message = "货物id不能为空")
-    private String goodsId;
+    // @NotNull(message = "扣亏货值不能为空")
+    @Digits(integer = 5, fraction = 2,message = "商品价值(扣亏货值)格式填写错误")
+    private BigDecimal goodsPrice;
 
     /**
-     * skuId
+     * 商品价值(扣亏货值)单位
      */
-    private String skuId;
+    private String goodsPriceUnit;
 
     /**
-     * 是否全量
+     * 合理损耗
      */
-    @NotNull(message = "是否全量不能为空")
-    private Boolean isFullDose;
+    // @NotNull(message = "合理损耗不能为空")
+    @Digits(integer = 5, fraction = 2,message = "合理损耗格式填写错误")
+    private BigDecimal loss;
 
     /**
-     * 订单id-分包时要使用
+     * 合理损耗单位
      */
-    @JsonProperty("lOrderId")
-    private String lOrderId;
+    private String lossUnit;
 
     /**
-     * 订单编号-分包时要使用
+     * 扣亏货值
      */
-    @JsonProperty("lOrderNo")
-    private String lOrderNo;
+    @Digits(integer = 5,fraction = 2,message = "扣亏货值格式填写错误")
+    private BigDecimal defectiveValue;
+
+    /**
+     * 计费方式
+     */
+    @NotNull(message = "计费方式不能为空")
+    private String billingMode;
+
+    /**
+     * 是否全量
+     */
+    @NotNull(message = "是否全量不能为空")
+    private Boolean isFullDose;
 
     /**
      * 运价
@@ -199,6 +205,18 @@ public class LogisticsOrderSubcontractDto implements Serializable {
     @NotNull(message = "运价方式不能为空")
     private String priceType;
 
+    /**
+     *总量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 分配承运量
+     */
+    @Digits(integer = 10,fraction = 2,message = "分配承运量填写错误")
+    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
+    private BigDecimal carryingCapacity;
+
     /**
      * 计划卸货日期
      */
@@ -216,26 +234,28 @@ public class LogisticsOrderSubcontractDto implements Serializable {
     private LocalDate endTime;
 
     /**
-     * 税率
+     * 合同id
      */
-    @NotNull(message = "税率不能为空")
-    private Long taxRate;
+    @NotNull(message = "合同id不能为空")
+    private String contractId;
+
     /**
-     * 备注
+     * 合同编号
      */
-    @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
-    private String remark;
+    @NotNull(message = "合同编号不能为空")
+    private String contractNo;
+
     /**
-     * 计费方式
+     * 合同名称
      */
-    @NotNull(message = "计费方式不能为空")
-    private String billingMode;
+    @NotNull(message = "合同名称不能为空")
+    private String contractName;
 
     /**
-     * 扣亏货值
+     * 备注
      */
-    @Digits(integer = 5,fraction = 2,message = "扣亏货值格式填写错误")
-    private BigDecimal defectiveValue;
+    @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
+    private String remark;
 
     /**
      * 地址信息
@@ -244,12 +264,6 @@ public class LogisticsOrderSubcontractDto implements Serializable {
     @JsonProperty("addressInfo")
     private List<AddressInfoDto> addressInfo;
 
-//    /**
-//     * 辅助单位
-//     */
-//    @JsonProperty("assistUnit")
-//    private List<GoodsUnitParam> assistUnit;
-
     /**
      * 线路分配
      */

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarEntrustDto.java

@@ -41,8 +41,8 @@ public class SendCarEntrustDto {
      * 计划时间
      */
     @JsonProperty("planTime")
-    @JsonFormat(locale="zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(locale="zh", pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @NotNull(message = "计划时间不能为空")
     private Date planTime;
 

+ 6 - 11
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillListAppDTO.java

@@ -19,7 +19,7 @@ import java.util.Date;
  */
 @Data
 @Accessors(chain = true)
-public class WaybillListAppDTO {
+public class WaybillListAppDTO extends PageRequest{
 
     /**
      * 搜索关键字
@@ -27,20 +27,15 @@ public class WaybillListAppDTO {
     private String keyword;
 
     /**
-     * 当前页码
-     */
-    private int page;
-
-    /**
-     * 每页数量
+     * 状态
      */
-    private int pageSize;
+    //@NotNull(message = "分类状态不能为空")
+    private String status;
 
     /**
-     * 状态
+     * 业务状态
      */
-    @NotNull(message = "分类状态不能为空")
-    private String status;
+    private String busAppStatus;
 
     /**
      * 查询开始时间

+ 18 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderQueryDto.java

@@ -6,6 +6,7 @@ import com.sckw.core.model.page.PageRequest;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author zk
@@ -22,6 +23,11 @@ public class WaybillOrderQueryDto extends PageRequest{
      */
     private Long  entId;
 
+    /**
+     * 多企业ID
+     */
+    private List<Long> entIds;
+
     /**
      * 关键字搜索
      */
@@ -88,10 +94,21 @@ public class WaybillOrderQueryDto extends PageRequest{
      * 运单状态
      */
     @JsonProperty("status")
-    @NotNull(message = "订单状态不能为空")
+    //@NotNull(message = "订单状态不能为空")
     private Integer status;
+
+    /**
+     * 界面状态匹配实际业务状态
+     */
     private String queryWstatus;
 
+    /**
+     * 用户ID
+     */
+    private List<Long> userIds;
+
+    private String lOrderId;
+
     public void setLoadCityCodeLevel(Integer loadCityCodeLevel) {
         this.loadCityCodeLevel = loadCityCodeLevel != null && loadCityCodeLevel == 3 ? 0 : loadCityCodeLevel == 2 ? 4 : 2;
     }

+ 0 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderTicketV4Dto.java

@@ -52,7 +52,6 @@ public class WaybillOrderTicketV4Dto {
     @JsonProperty("operateTime")
     @JsonFormat(locale="zh", pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-    @NotNull(message = "时间不能为空")
     private Date operateTime;
 
     /**

+ 17 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillSubtaskOrderQueryDto.java

@@ -0,0 +1,17 @@
+package com.sckw.transport.model.dto;
+
+import com.sckw.core.model.page.PageRequest;
+import lombok.Data;
+
+/**
+ * @author zk
+ * @desc 运单查询参数
+ * @date 2024/3/8 0008
+ */
+@Data
+public class WaybillSubtaskOrderQueryDto extends PageRequest{
+    /**
+     * 多个ID已英文逗号隔开
+     */
+    private String ids;
+}

+ 44 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/ApproveStatusEnum.java

@@ -0,0 +1,44 @@
+package com.sckw.transport.model.enuma;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zk
+ * @desc 车辆运单详情状态查询枚举
+ * @date 2024/3/8 0008
+ */
+@Getter
+public enum ApproveStatusEnum {
+    /**
+     * 待审核
+     */
+    TREAT_APPROVE(0, "待审核"),
+    /**
+     * 审核驳回
+     */
+    TREAT_REJECTION(1, "审核驳回"),
+    /**
+     * 审核成功
+     */
+    TREAT_SUCCESSFUL(2, "审核成功");
+
+    private final Integer code;
+    private final String name;
+
+    ApproveStatusEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public static String getName(Integer code) {
+        for (ApproveStatusEnum entity : ApproveStatusEnum.values()) {
+            if (entity.getCode().equals(code)) {
+                return entity.getName();
+            }
+        }
+        return null;
+    }
+}

+ 79 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillAppEnum.java

@@ -0,0 +1,79 @@
+package com.sckw.transport.model.enuma;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zk
+ * @desc 车辆运单详情状态查询枚举
+ * @date 2024/3/8 0008
+ */
+@Getter
+public enum CarWaybillAppEnum {
+    /**
+     * 详情-全部
+     */
+    TOTAL(10, "", "全部", "total"),
+    /**
+     * 详情-进行
+     */
+    PROCEED(20, "101, 201, 203, 301, 302, 401, 402, 501, 503, 504", "进行", "proceed"),
+    /**
+     * 详情-完成
+     */
+    FINISH(30, "502", "完成", "finish"),
+    /**
+     * 详情-退回
+     */
+    CANCEL(40, "102, 103, 202", "退回", "cancel"),
+    /**
+     * 看板-运输中
+     */
+    NDEX_PROCEED(50, "101, 201, 203, 301, 302, 401, 402, 501, 503, 504", "运输中", "ndexProceed"),
+    /**
+     * 看板-完成
+     */
+    NDEX_FINISH(60, "102, 103, 202, 502", "完成", "ndexFinish");
+
+    private final Integer code;
+    private final String value;
+    private final String name;
+    private final String remark;
+
+    CarWaybillAppEnum(Integer code, String value, String name, String remark) {
+        this.code = code;
+        this.value = value;
+        this.name = name;
+        this.remark = remark;
+    }
+
+    public static String getName(Integer code) {
+        for (CarWaybillAppEnum entity : CarWaybillAppEnum.values()) {
+            if (entity.getCode().equals(code)) {
+                return entity.getName();
+            }
+        }
+        return null;
+    }
+
+    public static String getValue(Integer code) {
+        for (CarWaybillAppEnum entity : CarWaybillAppEnum.values()) {
+            if (entity.getCode().equals(code)) {
+                return entity.getValue();
+            }
+        }
+        return null;
+    }
+
+    public static CarWaybillAppEnum getRemark(String remark) {
+        for (CarWaybillAppEnum entity : CarWaybillAppEnum.values()) {
+            if (entity.getRemark().equals(remark)) {
+                return entity;
+            }
+        }
+        return null;
+    }
+
+}

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillDetailEnum.java

@@ -1,7 +1,6 @@
 package com.sckw.transport.model.enuma;
 
-import com.sckw.core.model.enums.CarWaybillEnum;
-
+import lombok.Getter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -10,6 +9,7 @@ import java.util.List;
  * @desc 车辆运单详情状态查询枚举
  * @date 2024/3/8 0008
  */
+@Getter
 public enum CarWaybillDetailEnum {
     /**
      * 待接单

+ 3 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillNdexTopEnum.java

@@ -1,10 +1,13 @@
 package com.sckw.transport.model.enuma;
 
+import lombok.Getter;
+
 /**
  * @author zk
  * @desc 车辆运单看板表头状态查询枚举
  * @date 2024/3/8 0008
  */
+@Getter
 public enum CarWaybillNdexTopEnum {
     /**
      * 待接单

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillTableTopEnum.java

@@ -1,11 +1,13 @@
 package com.sckw.transport.model.enuma;
 
+import lombok.Getter;
+
 /**
  * @author zk
  * @desc 车辆运单表头状态查询枚举
  * @date 2024/3/8 0008
  */
-
+@Getter
 public enum CarWaybillTableTopEnum {
     /**
      * 待接单

+ 4 - 29
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/AcceptCarriageOrderVO.java

@@ -96,24 +96,6 @@ public class AcceptCarriageOrderVO /*extends PageRequest*/ {
      */
     private String goodsName;
 
-    /**
-     * 装货名称
-     */
-    private String loadName;
-
-    /**
-     * 装货名称
-     */
-    private String unloadName;
-
-    /**
-     * 装货地点
-     */
-    private String loadAddress;
-    /**
-     * 装货区域名称
-     */
-    private String loadCityName;
     /**
      * 数据库id
      */
@@ -153,6 +135,8 @@ public class AcceptCarriageOrderVO /*extends PageRequest*/ {
      */
     private BigDecimal price;
 
+    private List<String> prices;
+
     /**
      * 运价
      */
@@ -209,14 +193,7 @@ public class AcceptCarriageOrderVO /*extends PageRequest*/ {
      * 状态
      */
     private String statusLabel;
-    /**
-     * 卸货地点
-     */
-    private String unloadAddress;
-    /**
-     * 卸货区域名称
-     */
-    private String unloadCityName;
+
 //    /**
 //     * 关联承运订单号
 //     */
@@ -341,7 +318,6 @@ public class AcceptCarriageOrderVO /*extends PageRequest*/ {
 
     private List<String> loadAddresses;
 
-
     /**
      * 多卸货地4.2
      */
@@ -349,10 +325,9 @@ public class AcceptCarriageOrderVO /*extends PageRequest*/ {
 
     private List<String> unloadAddresses;
 
-
     /**
      * 多装货地4.2
-     */
+     * */
     private List<LoadAddressVo> loading;
 
     private List<UnLoadAddressVo> unloading;

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LineFreightRateVo.java

@@ -3,6 +3,7 @@ package com.sckw.transport.model.vo;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @author lfdc
@@ -28,4 +29,9 @@ public class LineFreightRateVo implements Serializable {
      * 结算数量
      */
     private Integer lineFreightCount;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LoadAddressVo.java

@@ -16,7 +16,7 @@ public class LoadAddressVo implements Serializable {
     /**
      * 装货ID
      */
-    private String addressId;
+    private Long addressId;
 
     /**
      * 装货地址

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ManagementLogisticsOrderVO.java

@@ -147,6 +147,8 @@ public class ManagementLogisticsOrderVO /*extends PageRequest*/ {
      */
     private BigDecimal price;
 
+    private List<String> prices;
+
     /**
      * 运价
      */

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java

@@ -260,5 +260,7 @@ public class OrderDetailVO {
      */
     private String taxRateLabel;
 
+    private List<LineFreightRateVo> lineFreightRate;
+
 
 }

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

@@ -52,4 +52,13 @@ public class OrderFinishVO {
      * 卸货数量
      */
     private List<LineFreightRateVo> lineFreightRate;
+
+    /**
+     * 計費方式
+     */
+    private String chargingType;
+    /**
+     * 計費方式
+     */
+    private String chargingTypeName;
 }

+ 24 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/SubcontractConsignmentVO.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author lfdc
@@ -264,4 +265,27 @@ public class SubcontractConsignmentVO {
      */
     private String taxRateLabel;
 
+    /**
+     * 多装货地4.2
+     */
+    private List<String> loadNames;
+
+    private List<String> loadAddresses;
+
+
+    /**
+     * 多卸货地4.2
+     */
+    private List<String> unloadNames;
+
+    private List<String> unloadAddresses;
+
+
+    /**
+     * 多装货地4.2
+     */
+    private List<LoadAddressVo> loading;
+
+    private List<UnLoadAddressVo> unloading;
+
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/UnLoadAddressVo.java

@@ -15,7 +15,7 @@ public class UnLoadAddressVo implements Serializable {
     /**
      * 卸货ID
      */
-    private String addressId;
+    private Long addressId;
 
     /**
      * 卸货地名

+ 0 - 104
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java

@@ -1,104 +0,0 @@
-package com.sckw.transport.model.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * @author lfdc
- * @description 运单详情vo
- * @date 2023-07-18 16:07:54
- */
-@Data
-public class WaybillDetailVO {
-    /**
-     * 派车量
-     */
-    private BigDecimal sendCarWeigh;
-    /**
-     * 实装量
-     */
-    private BigDecimal loadAmount;
-    /**
-     * 实卸量
-     */
-    private BigDecimal unloadAmount;
-    /**
-     * 实际装货时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date stowageDateTime;
-    /**
-     * 实际卸货时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date unloadDateTime;
-    /**
-     * 运单类型
-     */
-    private Integer waybillType;
-    /**
-     * 亏吨量
-     */
-    private BigDecimal deficitAmount;
-
-
-    /**
-     * 单位
-     */
-    private String unit;
-
-
-    /**
-     * 单位翻译
-     */
-    private String unitLabel;
-
-    /**
-     * 合理损耗
-     */
-    private BigDecimal loss;
-
-    /**
-     * 合理损耗
-     */
-    private String lossLabel;
-    /**
-     * 扣亏损值
-     */
-    private BigDecimal goodsPrice;
-    /**
-     * 扣亏损值
-     */
-    private String goodsPriceLabel;
-    /**
-     * 派车人
-     */
-    private String appointor;
-    /**
-     * 承运车队
-     */
-    private String fleetName;
-    /**
-     * 车牌号
-     */
-    private String truckNo;
-    /**
-     * 司机姓名
-     */
-    private String driverName;
-    /**
-     * 计划开始时间  HH:mm:ss
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date startTime;
-    /**
-     * 计划结束时间  HH:mm:ss
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date endTime;
-
-}
-

+ 36 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailV1Vo.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVo.java

@@ -1,8 +1,12 @@
 package com.sckw.transport.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.constant.NumberConstant;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -12,7 +16,7 @@ import java.util.Map;
  * @date 2024/3/13 0013
  */
 @Data
-public class WaybillDetailV1Vo {
+public class WaybillDetailVo {
 
     /**
      * 运单ID
@@ -26,6 +30,12 @@ public class WaybillDetailV1Vo {
     @JsonProperty("wOrderNo")
     private String wOrderNo;
 
+    /**
+     * 关联承运订单
+     */
+    @JsonProperty("lOrderNo")
+    private String lOrderNo;
+
     /**
      * 企业类型
      */
@@ -41,6 +51,11 @@ public class WaybillDetailV1Vo {
      */
     private int type;
 
+    /**
+     * 运单类型
+     */
+    private String typeName;
+
     /**
      * 车辆ID
      */
@@ -51,6 +66,16 @@ public class WaybillDetailV1Vo {
      */
     private String truckNo;
 
+    /**
+     * 车辆类型
+     */
+    private String truckType;
+
+    /**
+     * 挂车牌号
+     */
+    private String trailerNo;
+
     /**
      * 司机ID
      */
@@ -81,6 +106,13 @@ public class WaybillDetailV1Vo {
      */
     private String statusName;
 
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
     /**
      * 创建人
      */
@@ -91,11 +123,6 @@ public class WaybillDetailV1Vo {
      */
     private String createByPhone;
 
-    /**
-     * 关联承运订单
-     */
-    private String lOrderNo;
-
     /**
      * 地址信息
      */
@@ -111,4 +138,7 @@ public class WaybillDetailV1Vo {
      */
     private List<Map<String, Object>> trajectory;
 
+    public String getTypeName() {
+        return type == NumberConstant.ONE ? "趟次运单" : "循环运单";
+    }
 }

+ 175 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderExportVo.java

@@ -0,0 +1,175 @@
+package com.sckw.transport.model.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.constant.Global;
+import com.sckw.excel.annotation.ExcelContext;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author zk
+ * @desc 车辆运单列表
+ * @date 2024/3/11 0011
+ */
+@Data
+@Accessors(chain = true)
+@ExcelContext(fileName = "运单信息", sheetName = "运单信息")
+public class WaybillOrderExportVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4526063761808958350L;
+
+    /**
+     * 运单号
+     */
+    @ExcelProperty(value = "运单号")
+    @JsonProperty(value="wOrderNo")
+    private String wOrderNo;
+
+    /**
+     * 物流订单编号
+     */
+    @ExcelProperty(value = "物流订单编号")
+    private String lOrderNo;
+
+    /**
+     * 车辆牌照
+     */
+    @ExcelProperty(value = "车辆牌照")
+    private String truckNo;
+
+    /**
+     * 司机
+     */
+    @ExcelProperty(value = "司机")
+    private String driverName;
+
+    /**
+     * 司机手机号
+     */
+    @ExcelProperty(value = "司机手机号")
+    private String driverPhone;
+
+    /**
+     * 运单类型字符
+     */
+    @ExcelIgnore
+    private Integer type;
+
+    /**
+     * 运单类型字符
+     */
+    @ExcelProperty(value = "运单类型字符")
+    private String typeLabel;
+
+    /**
+     * 采购企业名称
+     */
+    @ExcelProperty(value = "采购企业名称")
+    private String procureFirmName;
+
+    /**
+     * 供应企业名称
+     */
+    @ExcelProperty(value = "供应企业名称")
+    private String supplyFirmName;
+
+    /**
+     * 计划开始时间
+     */
+    @ExcelProperty(value = "计划开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    /**
+     * 计划结束时间
+     */
+    @ExcelProperty(value = "计划结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    /**
+     * 派单量/吨
+     */
+    @ExcelProperty(value = "派单量")
+    private String entrustAmount;
+
+    /**
+     * 装货地点名称
+     */
+    @ExcelProperty(value = "装货地点名称")
+    private String loadName;
+
+    /**
+     * 装货地点
+     */
+    @ExcelProperty(value = "装货地点")
+    private String loadAddress;
+
+    /**
+     * 卸货地点点名称
+     */
+    @ExcelProperty(value = "卸货地点点名称")
+    private String unloadName;
+
+    /**
+     * 卸货地点
+     */
+    @ExcelProperty(value = "卸货地点")
+    private String unloadAddress;
+
+    /**
+     * 实装量/吨
+     */
+    @ExcelProperty(value = "实装量")
+    private String loadAmount;
+
+    /**
+     * 实卸量/吨
+     */
+    @ExcelProperty(value = "实卸量")
+    private String unloadAmount;
+
+    /**
+     * 亏吨重量
+     */
+    @ExcelProperty(value = "亏吨重量")
+    private String deficitAmount;
+
+    /**
+     * 扣亏量(合理损耗-(实装-实卸))-单位
+     */
+    @ExcelProperty(value = "扣亏量")
+    private String deficitRealAmount;
+
+    /**
+     * 派车时间
+     */
+    @ExcelProperty(value = "派车时间")
+    private String sendCarTime;
+
+    /**
+     * 运单状态字符
+     */
+    @ExcelProperty(value = "运单状态")
+    private String  statusLabel;
+
+    /**
+     * 装载量
+     */
+    @ExcelProperty(value = "装载量")
+    private Double actualWeight;
+
+    public String getTypeLabel() {
+        return type != null && type == Global.NUMERICAL_ONE ? "趟次" : "循环";
+    }
+
+}

+ 38 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectVo.java

@@ -8,6 +8,7 @@ import lombok.experimental.Accessors;
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author zk
@@ -38,11 +39,21 @@ public class WaybillOrderSelectVo implements Serializable {
     @JsonProperty(value="wOrderNo")
     private String wOrderNo;
 
+    /**
+     * 车辆ID
+     */
+    private Long truckId;
+
     /**
      * 车辆牌照
      */
     private String truckNo;
 
+    /**
+     * 司机
+     */
+    private Long driverId;
+
     /**
      * 司机
      */
@@ -76,6 +87,7 @@ public class WaybillOrderSelectVo implements Serializable {
     /**
      * 物流订单编号
      */
+    @JsonProperty(value="lOrderNo")
     private String lOrderNo;
 
     /**
@@ -84,12 +96,24 @@ public class WaybillOrderSelectVo implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date startTime;
 
+    /**
+     * 实际开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date loadTime;
+
     /**
      * 计划结束时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date endTime;
 
+    /**
+     * 实际结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date unloadTime;
+
     /**
      * 派单量/吨
      */
@@ -98,22 +122,22 @@ public class WaybillOrderSelectVo implements Serializable {
     /**
      * 装货地点名称
      */
-    private String loadName;
+    private List<String> loadName;
 
     /**
      * 装货地点
      */
-    private String loadAddress;
+    private List<String> loadAddress;
 
     /**
      * 卸货地点点名称
      */
-    private String unloadName;
+    private List<String> unloadName;
 
     /**
      * 卸货地点
      */
-    private String unloadAddress;
+    private List<String> unloadAddress;
 
     /**
      * 实装量/吨
@@ -165,6 +189,16 @@ public class WaybillOrderSelectVo implements Serializable {
      */
     private String  statusLabel;
 
+    /**
+     * 装载量
+     */
+    private Double actualWeight;
+
+    /**
+     * 趟次
+     */
+    private Integer count;
+
     public String getTypeLabel() {
         return type == Global.NUMERICAL_ONE ? "趟次" : "循环";
     }

+ 125 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSubtaskVo.java

@@ -0,0 +1,125 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc 运单子单
+ * @date 2024/4/3 0003
+ */
+@Data
+public class WaybillOrderSubtaskVo {
+
+    /**
+     * 运单ID
+     */
+    private Long id;
+
+    /**
+     * 派车类型(1:趟次:2:循环)
+     */
+    private Integer type;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+
+    /**
+     * 司机手机号
+     */
+    private String driverPhone;
+
+    /**
+     * 司机身份证号码
+     */
+    private String driverIdcard;
+
+    /**
+     * 子单
+     */
+    private Long wSubtaskId;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 物流订单id(kwt_logistics_order)
+     */
+    private Long lOrderId;
+
+    /**
+     * 物流订单id
+     */
+    private Long wOrderId;
+
+    /**
+     * 编号
+     */
+    private String wOrderNo;
+
+    /**
+     * 托量单位
+     */
+    private String unit;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 卸货重量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 计划结束日期
+     */
+    private Date unloadTime;
+
+    /**
+     * 装货重量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 计划开始日期
+     */
+    private Date loadTime;
+
+    /**
+     * 亏吨重量
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 亏吨扣款
+     */
+    private BigDecimal deficitPrice;
+
+    /**
+     * 运单状态
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 181 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillSubtaskDetailVo.java

@@ -0,0 +1,181 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.constant.Global;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zk
+ * @desc 运单详情(子单)
+ * @date 2024/3/13 0013
+ */
+@Data
+public class WaybillSubtaskDetailVo {
+
+    /**
+     * 运单ID
+     */
+    @JsonProperty("wOrderId")
+    private Long wOrderId;
+
+    /**
+     * 运单号
+     */
+    @JsonProperty("wOrderNo")
+    private String wOrderNo;
+
+    /**
+     * 运单号
+     */
+    @JsonProperty("wSubtaskId")
+    private Long wSubtaskId;
+
+    /**
+     * 关联承运订单
+     */
+    private String lOrderNo;
+
+    /**
+     * 企业类型
+     */
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    private String firmName;
+
+    /**
+     * 运单类型
+     */
+    private int type;
+
+    /**
+     * 运单类型字符
+     */
+    private String typeLabel;
+
+    /**
+     * 车辆ID
+     */
+    private Long truckId;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+    /**
+     * 司机ID
+     */
+    private Long driverId;
+
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+
+    /**
+     * 司机电话
+     */
+    private String driverPhone;
+
+    /**
+     * 司机身份证
+     */
+    private String driverIdcard;
+    
+    /**
+     * 运单状态
+     */
+    private Integer status;
+
+    /**
+     * 运单状态
+     */
+    private String statusLabel;
+
+    /**
+     * 创建人
+     */
+    private String createByName;
+
+    /**
+     * 创建人手机号
+     */
+    private String createByPhone;
+
+    /**
+     * 托量单位
+     */
+    private String unit;
+
+    /**
+     * 托量单位
+     */
+    private String unitLabel;
+
+    /**
+     * 已委托量
+     */
+    private Double entrustAmount;
+
+    /**
+     * 卸货重量
+     */
+    private Double unloadAmount;
+
+    /**
+     * 计划结束日期
+     */
+    private Date unloadTime;
+
+    /**
+     * 装货重量
+     */
+    private Double loadAmount;
+
+    /**
+     * 计划开始日期
+     */
+    private Date loadTime;
+
+    /**
+     * 亏吨重量
+     */
+    private Double deficitAmount;
+
+    /**
+     * 亏吨扣款
+     */
+    private Double deficitPrice;
+
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗单位(‰/kG)
+     */
+    private String lossUnitLabe;
+
+    /**
+     * 地址信息
+     */
+    private List<Map<String, Object>> addresses;
+
+    /**
+     * 地址信息
+     */
+    private List<WaybillTicketVO> tickets;
+
+    public String getTypeLabel() {
+        return type == Global.NUMERICAL_ONE ? "趟次" : "循环";
+    }
+}

+ 203 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillSubtaskSelectVo.java

@@ -0,0 +1,203 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.constant.NumberConstant;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zk
+ * @desc 运单详情(子单)
+ * @date 2024/3/13 0013
+ */
+@Data
+public class WaybillSubtaskSelectVo {
+
+    /**
+     * 运单ID
+     */
+    @JsonProperty("wOrderId")
+    private Long wOrderId;
+
+    /**
+     * 运单号
+     */
+    @JsonProperty("wOrderNo")
+    private String wOrderNo;
+
+    /**
+     * 运单子单ID
+     */
+    @JsonProperty("wSubtaskId")
+    private Long wSubtaskId;
+
+    /**
+     * 关联承运订单
+     */
+    @JsonProperty("lOrderNo")
+    private String lOrderNo;
+
+    /**
+     * 企业类型
+     */
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    private String firmName;
+
+    /**
+     * 运单类型
+     */
+    private int type;
+
+    /**
+     * 运单类型
+     */
+    private String waybillType;
+
+    /**
+     * 车辆ID
+     */
+    private Long truckId;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+    /**
+     * 司机ID
+     */
+    private Long driverId;
+
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+
+    /**
+     * 司机电话
+     */
+    private String driverPhone;
+
+    /**
+     * 司机身份证
+     */
+    private String driverIdcard;
+    
+    /**
+     * 运单状态
+     */
+    private Integer status;
+
+    /**
+     * 运单状态
+     */
+    private String statusLabel;
+
+    /**
+     * 派车时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date sendCarDate;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建人
+     */
+    private String createByName;
+
+    /**
+     * 创建人手机号
+     */
+    private String createByPhone;
+
+    /**
+     * 托量单位
+     */
+    private String unit;
+
+    /**
+     * 托量单位
+     */
+    private String unitLabel;
+
+    /**
+     * 已委托量
+     */
+    private Double entrustAmount;
+
+    /**
+     * 卸货重量
+     */
+    private Double unloadAmount;
+
+    /**
+     * 计划结束日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date unloadDateTime;
+
+    /**
+     * 装货重量
+     */
+    private Double loadAmount;
+
+    /**
+     * 计划开始日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date loadDateTime;
+
+    /**
+     * 亏吨重量
+     */
+    private Double deficitAmount;
+
+    /**
+     * 亏吨扣款
+     */
+    private Double deficitPrice;
+
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗
+     */
+    private String lossLabel;
+
+    public String getWaybillType() {
+        return type == NumberConstant.ONE ? "趟次" : "循环";
+    }
+
+    private BigDecimal goodsPrice;
+
+    /**
+     * 派车量
+     */
+    public BigDecimal sendCarWeigh;
+
+    /**
+     * 亏吨量
+     */
+    public BigDecimal defectiveWeigh;
+
+    /**
+     * 扣亏量
+     */
+    public BigDecimal deduct;
+}

+ 11 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillTicketVO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,6 +16,10 @@ import java.util.List;
 @Data
 @Accessors(chain = true)
 public class WaybillTicketVO {
+    /**
+     * 单位
+     */
+    private String unitLabe;
     /**
      * 装载图片
      */
@@ -22,11 +27,11 @@ public class WaybillTicketVO {
     /**
      * 装载时间
      */
-    private String loadTime;
+    private Date loadTime;
     /**
      * 装载重量
      */
-    private String loadWeight;
+    private BigDecimal loadWeight;
     /**
      * 卸货图片
      */
@@ -34,21 +39,21 @@ public class WaybillTicketVO {
     /**
      * 卸货时间
      */
-    private String unloadTime;
+    private Date unloadTime;
     /**
      * 卸货重量
      */
-    private String unloadWeight;
+    private BigDecimal unloadWeight;
 
     /**
      * 亏吨重量
      */
-    private String deficitAmount;
+    private BigDecimal deficitAmount;
 
     /**
      * 扣亏量(合理损耗-(实装-实卸))-单位
      */
-    private String deficitRealAmount;
+    private BigDecimal deficitRealAmount;
 
     /**
      * 装载信息

+ 6 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/Import/KwtAcceptCarriageOrderImportService.java

@@ -564,17 +564,17 @@ public class KwtAcceptCarriageOrderImportService {
      */
     private void insertOrderAddress(List<EntAddressResDto> addressRes, Long lOrderId, String loadAddressName, String unloadAddressName) {
         Map<Integer, List<EntAddressResDto>> collect = addressRes.stream().collect(Collectors.groupingBy(EntAddressResDto::getDefaultType));
-        List<EntAddressResDto> loadAddressRes = collect.get(AddressDefaultTypeEnum.SHIPMENT.getCode());
+        List<EntAddressResDto> loadAddressRes = collect.get(AddressTypeEnum.SHIPMENT.getCode());
         Map<String, EntAddressResDto> loadAddressMap = new HashMap<>();
         if (CollectionUtils.isNotEmpty(loadAddressRes)) {
             loadAddressMap = loadAddressRes.stream().collect(Collectors.toMap(EntAddressResDto::getName, v -> v));
         }
-        List<EntAddressResDto> unloadAddressRes = collect.get(AddressDefaultTypeEnum.TAKE.getCode());
+        List<EntAddressResDto> unloadAddressRes = collect.get(AddressTypeEnum.TAKE.getCode());
         Map<String, EntAddressResDto> unloadAddressMap = new HashMap<>();
         if (CollectionUtils.isNotEmpty(unloadAddressRes)) {
             unloadAddressMap = unloadAddressRes.stream().collect(Collectors.toMap(EntAddressResDto::getName, v -> v));
         }
-        List<EntAddressResDto> allAddressRes = collect.get(AddressDefaultTypeEnum.BOTH.getCode());
+        List<EntAddressResDto> allAddressRes = collect.get(AddressTypeEnum.BOTH.getCode());
         Map<String, EntAddressResDto> allAddressResMap = new HashMap<>();
 
         if (CollectionUtils.isNotEmpty(allAddressRes)) {
@@ -958,17 +958,17 @@ public class KwtAcceptCarriageOrderImportService {
         Map<Integer, List<EntAddressResDto>> collect = addressRes.stream().collect(Collectors.groupingBy(EntAddressResDto::getDefaultType));
         List<String> loadAddress = new ArrayList<>();
         List<String> unloadAddress = new ArrayList<>();
-        List<EntAddressResDto> loadAddressRes = collect.get(AddressDefaultTypeEnum.SHIPMENT.getCode());
+        List<EntAddressResDto> loadAddressRes = collect.get(AddressTypeEnum.SHIPMENT.getCode());
         if (CollectionUtils.isNotEmpty(loadAddressRes)) {
             List<String> loadAddressStr = loadAddressRes.stream().map(EntAddressResDto::getName).collect(Collectors.toList());
             loadAddress.addAll(loadAddressStr);
         }
-        List<EntAddressResDto> unloadAddressRes = collect.get(AddressDefaultTypeEnum.TAKE.getCode());
+        List<EntAddressResDto> unloadAddressRes = collect.get(AddressTypeEnum.TAKE.getCode());
         if (CollectionUtils.isNotEmpty(unloadAddressRes)) {
             List<String> unloadAddressStr = unloadAddressRes.stream().map(EntAddressResDto::getName).collect(Collectors.toList());
             unloadAddress.addAll(unloadAddressStr);
         }
-        List<EntAddressResDto> allAddressRes = collect.get(AddressDefaultTypeEnum.BOTH.getCode());
+        List<EntAddressResDto> allAddressRes = collect.get(AddressTypeEnum.BOTH.getCode());
         if (CollectionUtils.isNotEmpty(allAddressRes)) {
             List<String> allAddress = allAddressRes.stream().map(EntAddressResDto::getName).collect(Collectors.toList());
             loadAddress.addAll(allAddress);

+ 183 - 81
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -12,6 +12,7 @@ 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.StringConstant;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
@@ -32,11 +33,9 @@ import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
+import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.CompleteLogisticsOrderParam;
-import com.sckw.order.api.model.GoodsLoadingParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UnitInfoDetailRes;
+import com.sckw.order.api.model.*;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -59,6 +58,7 @@ import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderStatisticsParam;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.model.vo.execlVo.AcceptCarriageOrderExcelVo;
+import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -98,6 +98,9 @@ public class KwtAcceptCarriageOrderService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteTradeOrderAmountService tradeOrderAmountService;
+
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     GoodsInfoService goodsInfoService;
 
@@ -158,6 +161,9 @@ public class KwtAcceptCarriageOrderService {
     @Autowired
     private KwtLogisticsOrderMapper logisticsOrderMapper;
 
+    @Autowired
+    private KwtWaybillOrderSubtaskMapper waybillOrderSubtaskMapper;
+
     @Autowired
     private KwtWaybillOrderMapper waybillOrderMapper;
 
@@ -166,6 +172,9 @@ public class KwtAcceptCarriageOrderService {
 
     private final RedisLockUtil redisLockUtil;
 
+    @Autowired
+    public KwtLogisticsOrderLineFreightRateMapper lineFreightRateMapper;
+
 
     /**
      * 承运订单-分包托运
@@ -682,7 +691,8 @@ public class KwtAcceptCarriageOrderService {
      * @param orderDTO
      * @return
      */
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
+    @GlobalTransactional
     public HttpResult orderTaking(OrderTakingDTO orderDTO) {
         String key = String.format(RedisConstant.LOGISTICS_ORDER_TAKING_KEY, orderDTO.getLOrderId());
         log.info("接单操作接收数据:{}", JSONObject.toJSONString(orderDTO));
@@ -831,6 +841,26 @@ public class KwtAcceptCarriageOrderService {
                                 log.info("{}拒绝接单->贸易订单失败!,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
                                 throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 拒绝接单->贸易订单失败!");
                             }
+                            Long id = logisticsOrder.getId();
+                            List<LogisticsOrderCancelAmountVo> logisticsOrderCancelAmountVos = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(id, NumberConstant.ONE);
+                            if (CollectionUtils.isNotEmpty(logisticsOrderCancelAmountVos)) {
+                                logisticsOrderCancelAmountVos.forEach(cancelAmountVos -> {
+                                    Long tOrderId = cancelAmountVos.getTOrderId();
+                                    Long tOrderAddressId = cancelAmountVos.getTOrderAddressId();
+                                    UpdateAddressEntrustAmountParam param = new UpdateAddressEntrustAmountParam();
+                                    param.setTOrderId(tOrderId);
+                                    param.setTAddressId(tOrderAddressId);
+                                    param.setEntrustAmount(cancelAmountVos.getAmount().negate());
+                                    param.setUpdateBy(LoginUserHolder.getUserId());
+                                    param.setUpdateByName(LoginUserHolder.getUserName());
+                                    HttpResult httpResult1 = tradeOrderAmountService.updateAddressEntrustAmount(param);
+                                    if (HttpStatus.SUCCESS_CODE != httpResult1.getCode()) {
+                                        log.info("拒绝接单->还原地址的分配量错误:,请求参数:{},{},响应信息:{}",
+                                                logisticsOrder.getTOrderId(), JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult1));
+                                        throw new BusinessException("拒绝接单->还原地址的分配量错误:" + httpResult1.getMsg());
+                                    }
+                                });
+                            }
                         }
                     }
 
@@ -909,40 +939,40 @@ public class KwtAcceptCarriageOrderService {
         List<KwtWaybillOrderTicket> kwtWaybillOrderTickets = waybillOrderTicketMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
                 .eq(KwtWaybillOrderTicket::getWOrderId, Long.parseLong(wOrderId))
         );
-        WaybillDetailVO vo = new WaybillDetailVO();
-        vo.setSendCarWeigh(waybillOrder.getEntrustAmount());
-        vo.setLoadAmount(waybillOrder.getLoadAmount());
-        vo.setUnloadAmount(waybillOrder.getUnloadAmount());
-        for (KwtWaybillOrderTicket waybillOrderTicket : kwtWaybillOrderTickets) {
-            if (waybillOrderTicket != null) {
-                if (waybillOrderTicket.getType() == 1) {
-                    vo.setStowageDateTime(waybillOrderTicket.getOperateTime());
-                }
-                if (waybillOrderTicket.getType() == 2) {
-                    vo.setUnloadDateTime(waybillOrderTicket.getOperateTime());
-                }
-            }
-        }
-        vo.setUnit(kwtLogisticsOrder.getUnit());
-        if (kwtLogisticsOrder.getUnit() != null) {
-            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), kwtLogisticsOrder.getUnit());
-            vo.setUnitLabel(dictResDto == null ? null : dictResDto.getLabel());
-        }
-        vo.setWaybillType(waybillOrder.getType());
-        vo.setDeficitAmount(waybillOrder.getDeficitAmount());
-        vo.setLoss(kwtLogisticsOrder.getLoss());
-        vo.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
-        vo.setGoodsPrice(sckwWaybillOrder.getGoodsPrice());
-        if (kwtLogisticsOrder.getGoodsPriceUnit() != null) {
-            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), kwtLogisticsOrder.getGoodsPriceUnit());
-            vo.setGoodsPriceLabel(dictResDto == null ? null : dictResDto.getLabel());
-        }
-        vo.setAppointor(sckwWaybillOrder.getCreateByName());
-        vo.setFleetName(sckwWaybillOrder.getCarrierFirmName());
-        vo.setTruckNo(waybillOrder.getTruckNo());
-        vo.setDriverName(waybillOrder.getDriverName());
-        vo.setStartTime(waybillOrder.getStartTime());
-        vo.setEndTime(waybillOrder.getEndTime());
+        WaybillDetailVo vo = new WaybillDetailVo();
+//        vo.setSendCarWeigh(waybillOrder.getEntrustAmount());
+//        vo.setLoadAmount(waybillOrder.getLoadAmount());
+//        vo.setUnloadAmount(waybillOrder.getUnloadAmount());
+//        for (KwtWaybillOrderTicket waybillOrderTicket : kwtWaybillOrderTickets) {
+//            if (waybillOrderTicket != null) {
+//                if (waybillOrderTicket.getType() == 1) {
+//                    vo.setStowageDateTime(waybillOrderTicket.getOperateTime());
+//                }
+//                if (waybillOrderTicket.getType() == 2) {
+//                    vo.setUnloadDateTime(waybillOrderTicket.getOperateTime());
+//                }
+//            }
+//        }
+//        vo.setUnit(kwtLogisticsOrder.getUnit());
+//        if (kwtLogisticsOrder.getUnit() != null) {
+//            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), kwtLogisticsOrder.getUnit());
+//            vo.setUnitLabel(dictResDto == null ? null : dictResDto.getLabel());
+//        }
+//        vo.setWaybillType(waybillOrder.getType());
+//        vo.setDeficitAmount(waybillOrder.getDeficitAmount());
+//        vo.setLoss(kwtLogisticsOrder.getLoss());
+//        vo.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
+//        vo.setGoodsPrice(sckwWaybillOrder.getGoodsPrice());
+//        if (kwtLogisticsOrder.getGoodsPriceUnit() != null) {
+//            SysDictResDto dictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), kwtLogisticsOrder.getGoodsPriceUnit());
+//            vo.setGoodsPriceLabel(dictResDto == null ? null : dictResDto.getLabel());
+//        }
+//        vo.setAppointor(sckwWaybillOrder.getCreateByName());
+//        vo.setFleetName(sckwWaybillOrder.getCarrierFirmName());
+//        vo.setTruckNo(waybillOrder.getTruckNo());
+//        vo.setDriverName(waybillOrder.getDriverName());
+//        vo.setStartTime(waybillOrder.getStartTime());
+//        vo.setEndTime(waybillOrder.getEndTime());
 //        if (!ObjectUtils.isEmpty(sckwWaybillOrder)) {
 //            vo.setFleetName(sckwWaybillOrder.getCarrierFirmName());
 //            vo.setTruckNo(sckwWaybillOrder.getTruckNo());
@@ -1038,6 +1068,38 @@ public class KwtAcceptCarriageOrderService {
                 subcontractConsignmentVO.setUnloadAddressDetail(subcontractConsignmentVO.getUnloadCityName() + subcontractConsignmentVO.getUnloadAddress());
                 subcontractConsignmentVO.setOrderSourceLabel(orderSource == null ? null : orderSource.get(subcontractConsignmentVO.getOrderSource()));
                 subcontractConsignmentVO.setTaxRateLabel(subcontractConsignmentVO.getTaxRate() + "%");
+                String lOrderId = subcontractConsignmentVO.getId();
+                List<KwtLogisticsOrderAddress> loadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
+                        .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
+                        .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
+                );
+                List<String> loadName = new ArrayList<String>();
+                List<String> loadAddressList = new ArrayList<String>();
+                loadAddress.forEach(address -> {
+                    loadName.add(address.getName());
+                    loadAddressList.add(address.getDetailAddress());
+                });
+
+                List<String> unloadName = new ArrayList<String>();
+                List<String> unloadAddressList = new ArrayList<String>();
+                List<KwtLogisticsOrderAddress> unloadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
+                        .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
+                        .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
+                );
+                unloadAddress.forEach(address -> {
+                    unloadName.add(address.getName());
+                    unloadAddressList.add(address.getDetailAddress());
+                });
+                subcontractConsignmentVO.setLoadNames(loadName);
+                subcontractConsignmentVO.setLoadAddresses(loadAddressList);
+                subcontractConsignmentVO.setUnloadNames(unloadName);
+                subcontractConsignmentVO.setUnloadAddresses(unloadAddressList);
+                List<LoadAddressVo> loadAddressAmount = logisticsOrderAddressMapper.findByAddressAndLoadAmount(Long.parseLong(lOrderId), NumberConstant.ONE);
+                subcontractConsignmentVO.setLoading(loadAddressAmount);
+                List<UnLoadAddressVo> unloadAddressAmount = logisticsOrderAddressMapper.findByAddressAndUnLoadAmount(Long.parseLong(lOrderId), NumberConstant.TWO);
+                subcontractConsignmentVO.setUnloading(unloadAddressAmount);
             }
             allList.addAll(voList);
         }
@@ -1098,7 +1160,14 @@ public class KwtAcceptCarriageOrderService {
         Map<String, RTruckVo> truck = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (String.valueOf(NumberConstant.ONE).equals(driverParam.getType())) {
             //只展示待接单数据
-            List<DriverListVo> list = logisticsOrderMapper.selectDriverListById(driverParam);
+            List<Integer> orderStatus = new ArrayList<>() {{
+                add(CarWaybillEnum.APPROVAL_PASS.getCode());
+                add(CarWaybillEnum.APPROVAL_IN.getCode());
+                add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+                add(CarWaybillEnum.APPROVAL_TREAT.getCode());
+            }};
+//            List<DriverListVo> list = logisticsOrderMapper.selectDriverListById(driverParam,orderStatus);
+            List<DriverListVo> list = waybillOrderSubtaskMapper.selectLoopOrderAndDriverListByOrderId(driverParam,Integer.valueOf(driverParam.getType()),orderStatus);
             if (CollectionUtils.isNotEmpty(list)) {
                 List<String> collect = list.stream().map(DriverListVo::getTruckNo).distinct().collect(Collectors.toList());
                 if (CollectionUtils.isNotEmpty(collect)) {
@@ -1106,7 +1175,7 @@ public class KwtAcceptCarriageOrderService {
                 }
             }
             //只展示待接单数据统计
-            List<DriverListVo> truckCount = logisticsOrderMapper.selectDriverCountById(driverParam);
+            List<DriverListVo> truckCount = logisticsOrderMapper.selectDriverCountById(driverParam,Integer.valueOf(driverParam.getType()),orderStatus);
             Map<String, Integer> truckMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             truckCount.forEach(entity -> {
                 truckMap.put(entity.getTruckNo(), entity.getCount());
@@ -1132,7 +1201,14 @@ public class KwtAcceptCarriageOrderService {
             }
             result.setData(list);
         } else if (String.valueOf(NumberConstant.TWO).equals(driverParam.getType())) {
-            List<DriverListVo> list = logisticsOrderMapper.selectLoopOrderAndDriverListByOrderId(driverParam);
+            List<Integer> orderStatus = new ArrayList<>() {{
+                add(CarWaybillEnum.APPROVAL_PASS.getCode());
+                add(CarWaybillEnum.APPROVAL_IN.getCode());
+                add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+                add(CarWaybillEnum.APPROVAL_TREAT.getCode());
+            }};
+//            List<DriverListVo> list1 = logisticsOrderMapper.selectLoopOrderAndDriverListByOrderId(driverParam);
+            List<DriverListVo> list = waybillOrderSubtaskMapper.selectLoopOrderAndDriverListByOrderId(driverParam,Integer.valueOf(driverParam.getType()),orderStatus);
             if (CollectionUtils.isNotEmpty(list)) {
                 List<String> collect = list.stream().map(DriverListVo::getTruckNo).distinct().collect(Collectors.toList());
                 if (CollectionUtils.isNotEmpty(collect)) {
@@ -1211,24 +1287,44 @@ public class KwtAcceptCarriageOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult stopDocumentCommit(StopOrderTakingDTO stopOrderTakingDTO) {
-        List<String> stringList = StringUtils.splitStrToList(stopOrderTakingDTO.getIds(), ",", String.class);
-        List<Long> circulateIds = logisticsOrderCirculateMapper.selectEntityBylOrderIdAndOrderIds(stopOrderTakingDTO.getLOrderId(), stringList);
-        if (CollectionUtils.isEmpty(circulateIds)) {
+        List<Long> ids = StringUtils.splitStrToList(stopOrderTakingDTO.getIds(), ",", Long.class);
+        List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
+                        .eq(KwtWaybillOrderSubtask::getDelFlag,0)
+                        .eq(KwtWaybillOrderSubtask::getLOrderId,Long.parseLong(stopOrderTakingDTO.getLOrderId()))
+                                .in(KwtWaybillOrderSubtask::getId,ids)
+        );
+        if (CollectionUtils.isEmpty(subtasks)) {
             return HttpResult.error("循环停止接单,单据不存在!");
         }
-        List<JSONObject> list = new ArrayList<>(stringList.size());
-        acceptStopDocumentCommit(stopOrderTakingDTO, list, circulateIds);
-//        String type = stopOrderTakingDTO.getType();
-//        if (String.valueOf(NumberConstant.TWO).equals(type)) {
-//            acceptStopDocumentCommit(stopOrderTakingDTO, list, wOrderIds);
-//        } else if (String.valueOf(NumberConstant.ONE).equals(type)) {
-//            consignStopDocumentCommit(stopOrderTakingDTO, list, wOrderIds);
-//        } else {
-//            return HttpResult.error("单据类型错误!");
-//        }
+        List<JSONObject> list = new ArrayList<>(subtasks.size());
+        updateWayBillOrderSubtask(stopOrderTakingDTO, list,ids );
         return HttpResult.ok(list);
     }
 
+    /**
+     * 承运订单设置停止接单
+     *
+     * @param stopOrderTakingDTO
+     */
+    private void updateWayBillOrderSubtask(StopOrderTakingDTO stopOrderTakingDTO, List<JSONObject> list, List<Long> ids) {
+        if (CollectionUtils.isNotEmpty(ids)) {
+            ids.forEach(id -> {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("id", id);
+                waybillOrderSubtaskMapper.update(null, new LambdaUpdateWrapper<KwtWaybillOrderSubtask>()
+                        .set(KwtWaybillOrderSubtask::getStatus, NumberConstant.ONE)
+                        .set(KwtWaybillOrderSubtask::getUpdateBy, LoginUserHolder.getUserId())
+                        .set(KwtWaybillOrderSubtask::getUpdateTime, new Date())
+                        .eq(KwtWaybillOrderSubtask::getId, id)
+                );
+                jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                jsonObject.put("message", "停止接单成功");
+                list.add(jsonObject);
+            });
+        }
+    }
+
+
     /**
      * 托运订单-设置停止接单
      *
@@ -2428,11 +2524,9 @@ public class KwtAcceptCarriageOrderService {
         if (CollectionUtils.isEmpty(list)) {
             return PageRes.build(pageInfo, list);
         }
-//        List<AcceptCarriageOrderVO> detailRes = new ArrayList<>();
         /**计量单位*/
         Map<String, String> unitTypeDictData = getDictData(DictTypeEnum.UNIT_TYPE.getType());
         /**运价方式*/
-//        Map<String, String> priceDictData = getDictData(DictTypeEnum.PRICE_TYPE.getType());
         /**计费方式*/
         Map<String, String> chargingDictData = getDictData(DictTypeEnum.CHARGING_TYPE.getType());
         /**结算周期*/
@@ -2440,7 +2534,6 @@ public class KwtAcceptCarriageOrderService {
         /**签约方式*/
         Map<String, String> signingWay = getDictData(DictTypeEnum.SIGNING_TYPE.getType());
         /**合理损耗*/
-//        Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
         /**订单来源*/
         Map<String, String> orderSource = getDictData(DictTypeEnum.ORDER_SOURCE.getType());
         Map<Long, UserCacheResDto> longUserMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -2450,18 +2543,31 @@ public class KwtAcceptCarriageOrderService {
                 longUserMap = remoteSystemService.queryUserCacheMapByIds(collect);
             }
         }
+
+
+        List<AcceptCarriageOrderVO> collect = list.stream().filter(item -> item.getBillingMode().equals(DictEnum.CHARGING_TYPE_4.getValue())).collect(Collectors.toList());
+        Map<Long, List<KwtLogisticsOrderLineFreightRate>> collect1 = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(collect)) {
+            List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = lineFreightRateMapper.selectListByOrderIdList(collect.stream().map(AcceptCarriageOrderVO::getLOrderId).map(Long::parseLong).toList());
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                collect1 = kwtLogisticsOrderLineFreightRates.stream().collect(Collectors.groupingBy(KwtLogisticsOrderLineFreightRate::getLOrderId));
+            }
+        }
+
         for (AcceptCarriageOrderVO vo : list) {
+
+            List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = collect1.get(Long.parseLong(vo.getLOrderId()));
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                vo.setPrices(kwtLogisticsOrderLineFreightRates.stream().map(item -> item.getName() + " " + item.getTransportPrice()).toList());
+            }
+
             vo.setAccountsCycleLabel(settlementDictData.get(vo.getAccountsCycle()));
             vo.setAppointor(longUserMap.get(vo.getCreateBy()) == null ? null : longUserMap.get(vo.getCreateBy()).getName());
             vo.setBillingModeLabel(chargingDictData.get(vo.getBillingMode()));
             vo.setSigningLabel(signingWay.get(vo.getSigning()));
             vo.setOrderSourceLabel(orderSource == null ? null : orderSource.get(vo.getOrderSource()));
             vo.setStatusLabel(LogisticsOrderEnum.getName(vo.getStatus()));
-            vo.setLoadAddress(vo.getLoadCityName() + vo.getLoadAddress());
-            vo.setUnloadAddress(vo.getUnloadCityName() + vo.getUnloadAddress());
-            vo.setLoadCityName(vo.getLoadName());
             vo.setUnitLabel(unitTypeDictData == null ? vo.getUnit() : (unitTypeDictData.get(vo.getUnit()) == null ? vo.getUnit() : unitTypeDictData.get(vo.getUnit())));
-            vo.setUnloadCityName(vo.getUnloadName());
             vo.setWaitDistributionAmount(vo.getCarryingCapacity().subtract(vo.getSubcontractAmount()).subtract(vo.getEntrustAmount()));
             String tOrderId = vo.getTOrderId();
             if (StringUtils.isNotBlank(tOrderId)) {
@@ -2487,36 +2593,32 @@ public class KwtAcceptCarriageOrderService {
                 }
             }
             String lOrderId = vo.getLOrderId();
-            List<String> loadName = new ArrayList<String>();
-            List<String> loadAddressList = new ArrayList<String>();
-            List<KwtLogisticsOrderAddress> loadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+            List<KwtLogisticsOrderAddress> loadAddresses = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
                     .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
                     .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
                     .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
             );
-            loadAddress.forEach(address -> {
-                loadName.add(address.getName());
-                loadAddressList.add(address.getDetailAddress());
-            });
-
-            List<String> unloadName = new ArrayList<String>();
-            List<String> unloadAddressList = new ArrayList<String>();
-            List<KwtLogisticsOrderAddress> unloadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+            List<KwtLogisticsOrderAddress> unloadAddresses = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
                     .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
                     .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
                     .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
             );
-            unloadAddress.forEach(address -> {
-                unloadName.add(address.getName());
-                unloadAddressList.add(address.getDetailAddress());
-            });
+            //装货地点名称
+            List<String> loadName = loadAddresses.stream().map(KwtLogisticsOrderAddress::getCityName).toList();
+            //装货地点
+            List<String> loadAddress = loadAddresses.stream().map(KwtLogisticsOrderAddress::getDetailAddress).toList();
+            //卸货地点点名称
+            List<String> unloadName = unloadAddresses.stream().map(KwtLogisticsOrderAddress::getCityName).toList();
+            //卸货地点
+            List<String> unloadAddress = unloadAddresses.stream().map(KwtLogisticsOrderAddress::getDetailAddress).toList();
+            List<LoadAddressVo> loadAddressAmount = logisticsOrderAddressMapper.findByAddressAndLoadAmount(Long.parseLong(lOrderId), NumberConstant.ONE);
+            List<UnLoadAddressVo> unloadAddressAmount = logisticsOrderAddressMapper.findByAddressAndUnLoadAmount(Long.parseLong(lOrderId), NumberConstant.TWO);
+
             vo.setLoadNames(loadName);
-            vo.setLoadAddresses(loadAddressList);
+            vo.setLoadAddresses(loadAddress);
             vo.setUnloadNames(unloadName);
-            vo.setUnloadAddresses(unloadAddressList);
-            List<LoadAddressVo> loadAddressAmount = logisticsOrderAddressMapper.findByAddressAndLoadAmount(Long.parseLong(lOrderId), NumberConstant.ONE);
+            vo.setUnloadAddresses(unloadAddress);
             vo.setLoading(loadAddressAmount);
-            List<UnLoadAddressVo> unloadAddressAmount = logisticsOrderAddressMapper.findByAddressAndUnLoadAmount(Long.parseLong(lOrderId), NumberConstant.TWO);
             vo.setUnloading(unloadAddressAmount);
         }
         return PageRes.build(pageInfo, list);

+ 4 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java

@@ -28,6 +28,7 @@ import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.KwtLogisticsOrderContractMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.dao.KwtWaybillOrderMapper;
+import com.sckw.transport.dao.KwtWaybillOrderV1Mapper;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderContract;
 import com.sckw.transport.model.KwtLogisticsOrderUnit;
@@ -83,7 +84,7 @@ public class KwtCommonService {
     private KwtLogisticsOrderContractMapper logisticsOrderContractMapper;
 
     @Autowired
-    private KwtWaybillOrderMapper waybillOrderMapper;
+    private KwtWaybillOrderV1Mapper kwtWaybillOrderV1Mapper;
 
     /**
      * 组装返回数据
@@ -215,7 +216,7 @@ public class KwtCommonService {
                 put("upperlOrderId", logisticsOrder.getId());
                 put("passStatus", Global.NUMERICAL_ONE);
             }};
-            WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
+            WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findWaybillOrderCount(map);
             actualAmount = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
         } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
             log.debug("“该方式不处理合同");
@@ -622,7 +623,7 @@ public class KwtCommonService {
         statusList.add(CarWaybillEnum.APPROVAL_IN.getCode());
         statusList.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
 //        statusList.add(CarWaybillEnum.APPROVAL_PASS.getCode());
-        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
+        int count = kwtWaybillOrderV1Mapper.selectDataByLorderId(id, statusList);
         if (count > NumberConstant.ZERO) {
             flag = true;
         }

+ 92 - 67
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java

@@ -10,10 +10,11 @@ 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.model.constant.NumberConstant;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.model.page.PageResult;
@@ -30,10 +31,12 @@ import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
-import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.*;
+import com.sckw.order.api.model.CompleteLogisticsOrderParam;
+import com.sckw.order.api.model.GoodsLoadingParam;
+import com.sckw.order.api.model.OrderDetailRes;
+import com.sckw.order.api.model.UnitInfoDetailRes;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.redis.config.RedisLockUtil;
@@ -216,6 +219,8 @@ public class KwtConsignOrderService {
         if (ObjectUtils.isEmpty(order)) {
             return HttpResult.ok();
         }
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
+                        .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrderSubtask::getLOrderId, order.getId()));
         List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
                         .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
                 /**.eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId())*/);
@@ -235,8 +240,8 @@ public class KwtConsignOrderService {
         BigDecimal defectiveWeighNumber = NumberConstant.ZERO_TWO;
         //扣亏量/吨
         BigDecimal deductWeighNumber = NumberConstant.ZERO_TWO;
-        if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
-            for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
+        if (CollectionUtils.isNotEmpty(waybillOrderSubtasks)) {
+            for (KwtWaybillOrderSubtask kwtWaybillOrder : waybillOrderSubtasks) {
                 //派车量
                 BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                 /**亏吨量/吨->装货量-卸货量
@@ -267,7 +272,7 @@ public class KwtConsignOrderService {
                 deductWeighNumber = deductWeighNumber.add(deduct);
             }
         }
-        statistics.put("count", kwtWaybillOrders.size());
+        statistics.put("count", waybillOrderSubtasks.size());
         statistics.put("sendCarWeighNumber", sendCarWeighNumber);
         statistics.put("loadAmountNumber", loadAmountNumber);
         statistics.put("unloadAmountNumber", unloadAmountNumber);
@@ -473,37 +478,41 @@ public class KwtConsignOrderService {
         if (CollectionUtils.isNotEmpty(list)) {
             list.forEach(circulateId -> {
                 JSONObject jsonObject = new JSONObject();
-                jsonObject.put("circulateId", circulateId);
-                KwtLogisticsOrderCirculate circulate = kwtLogisticsOrderCirculateMapper.selectOne(new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
-                        .eq(KwtLogisticsOrderCirculate::getId, circulateId)
+                jsonObject.put("id", circulateId);
+//                KwtLogisticsOrderCirculate circulate = kwtLogisticsOrderCirculateMapper.selectOne(new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
+//                        .eq(KwtLogisticsOrderCirculate::getId, circulateId)
+//                );
+                List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
+                        .eq(KwtWaybillOrderSubtask::getId, circulateId)
+                        .eq(KwtWaybillOrderSubtask::getDelFlag, 0)
                 );
-                if (circulate == null) {
+                if (subtasks == null) {
                     jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
                     jsonObject.put("message", "单据不存在或者单据异常");
                 } else {
                     /**循环单逻辑失效 如果已生成趟次数据,则不处理趟次数据*/
-                    kwtLogisticsOrderCirculateMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
-                            .set(KwtLogisticsOrderCirculate::getStatus, NumberConstant.ONE)
-                            .set(KwtLogisticsOrderCirculate::getUpdateBy, LoginUserHolder.getUserId())
-                            .set(KwtLogisticsOrderCirculate::getUpdateTime, new Date())
-                            .eq(KwtLogisticsOrderCirculate::getId, circulateId)
-                            .eq(KwtLogisticsOrderCirculate::getLOrderId, Long.parseLong(lOrderId))
+                    waybillOrderSubtaskMapper.update(null, new LambdaUpdateWrapper<KwtWaybillOrderSubtask>()
+                            .set(KwtWaybillOrderSubtask::getStatus, NumberConstant.ONE)
+                            .set(KwtWaybillOrderSubtask::getUpdateBy, LoginUserHolder.getUserId())
+                            .set(KwtWaybillOrderSubtask::getUpdateTime, new Date())
+                            .eq(KwtWaybillOrderSubtask::getId, circulateId)
+                            .eq(KwtWaybillOrderSubtask::getLOrderId, Long.parseLong(lOrderId))
                     );
-                    /**更新MongoDB*/
-                    if (circulate.getWOrderId() != null) {
-                        SckwWaybillOrder order = new SckwWaybillOrder();
-                        order.set_id(circulate.getWOrderId());
-                        order.setWOrderId(circulate.getWOrderId());
-//                        order.setStatus(NumberConstant.ONE);
-                        order.setUpdateTime(new Date());
-                        order.setUpdateByName(LoginUserHolder.getUserName());
-                        order.setUpdateBy(LoginUserHolder.getUserId());
-                        SckwBusSum busSum = new SckwBusSum();
-                        busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-                        busSum.setMethod(NumberConstant.TWO);
-                        busSum.setObject(order);
-                        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
-                    }
+//                    /**更新MongoDB*/
+//                    if (circulate.getWOrderId() != null) {
+//                        SckwWaybillOrder order = new SckwWaybillOrder();
+//                        order.set_id(circulate.getWOrderId());
+//                        order.setWOrderId(circulate.getWOrderId());
+////                        order.setStatus(NumberConstant.ONE);
+//                        order.setUpdateTime(new Date());
+//                        order.setUpdateByName(LoginUserHolder.getUserName());
+//                        order.setUpdateBy(LoginUserHolder.getUserId());
+//                        SckwBusSum busSum = new SckwBusSum();
+//                        busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+//                        busSum.setMethod(NumberConstant.TWO);
+//                        busSum.setObject(order);
+//                        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+//                    }
                     jsonObject.put("status", HttpStatus.SUCCESS_CODE);
                     jsonObject.put("message", "停止接单成功");
                 }
@@ -572,7 +581,14 @@ public class KwtConsignOrderService {
         }
         /**请求参数校验*/
         checkParam(driverParam);
-        List<DriverListVo> list = kwtLogisticsOrderMapper.selectLoopOrderAndDriverListByOrderId(driverParam);
+//        List<DriverListVo> list = kwtLogisticsOrderMapper.selectLoopOrderAndDriverListByOrderId(driverParam);
+        List<Integer> orderStatus = new ArrayList<>() {{
+            add(CarWaybillEnum.APPROVAL_PASS.getCode());
+            add(CarWaybillEnum.APPROVAL_IN.getCode());
+            add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+            add(CarWaybillEnum.APPROVAL_TREAT.getCode());
+        }};
+        List<DriverListVo> list = waybillOrderSubtaskMapper.selectLoopOrderAndDriverListByOrderId(driverParam, Integer.valueOf(driverParam.getType()), orderStatus);
         Map<String, RTruckVo> truck = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollectionUtils.isNotEmpty(list)) {
             List<String> collect = list.stream().map(DriverListVo::getTruckNo).distinct().collect(Collectors.toList());
@@ -1277,12 +1293,14 @@ public class KwtConsignOrderService {
             put("upperlOrderId", orderId);
             put("passStatus", Global.NUMERICAL_ONE);
         }};
-        WaybillCountVo waybillOrderCount = kwtWaybillOrderMapper.findWaybillOrderCount(map);
+        //WaybillCountVo waybillOrderCount = kwtWaybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
         List<OrderGoodsLoadingVo> assistUnit = new ArrayList<>();
         //单位
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, Map<String, String>> chargingType = remoteSystemService.queryDictByType(List.of(DictTypeEnum.CHARGING_TYPE.getType()));
         Map<String, String> unitMap = dict != null ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : null;
+        Map<String, String> chargingTypeMap = chargingType != null ? dict.get(DictTypeEnum.CHARGING_TYPE.getType()) : null;
         //物流订单
         KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectById(orderId);
         //物流订单辅助单位信息
@@ -1309,6 +1327,8 @@ public class KwtConsignOrderService {
         orderFinishVO.setUnloadAmount(logisticsOrder.getTotalUnloadAmount());
         orderFinishVO.setAssistUnit(assistUnit);
         orderFinishVO.setLineFreightRate(lineFreightRateMapper.selectListByOrderId(Long.parseLong(orderId)));
+        orderFinishVO.setChargingType(logisticsOrder.getBillingMode());
+        orderFinishVO.setChargingTypeName(chargingTypeMap != null ? chargingTypeMap.get(logisticsOrder.getBillingMode()) : "");
         return HttpResult.ok(orderFinishVO);
     }
 
@@ -1799,20 +1819,19 @@ public class KwtConsignOrderService {
         if (CollectionUtils.isEmpty(list)) {
             return PageRes.build(pageInfo, list);
         }
-//        List<AcceptCarriageOrderVO> detailRes = new ArrayList<>();
-        /**计量单位*/
+
+        /*计量单位*/
         Map<String, String> unitTypeDictData = commonService.getDictData(DictTypeEnum.UNIT_TYPE.getType());
-        /**运价方式*/
+        /*运价方式*/
         Map<String, String> priceDictData = commonService.getDictData(DictTypeEnum.PRICE_TYPE.getType());
-        /**计费方式*/
+        /*计费方式*/
         Map<String, String> chargingDictData = commonService.getDictData(DictTypeEnum.CHARGING_TYPE.getType());
-        /**结算周期*/
+        /*结算周期*/
         Map<String, String> settlementDictData = commonService.getDictData(DictTypeEnum.SETTLEMENT_CYCLE.getType());
-        /**签约方式*/
+        /*签约方式*/
         Map<String, String> signingWay = commonService.getDictData(DictTypeEnum.SIGNING_TYPE.getType());
         Map<String, String> orderSource = commonService.getDictData(DictTypeEnum.ORDER_SOURCE.getType());
-        /**合理损耗*/
-//        Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
+        /*合理损耗*/
         Map<Long, UserCacheResDto> longUserMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollectionUtils.isNotEmpty(list)) {
             List<Long> collect = list.stream().map(AcceptCarriageOrderVO::getCreateBy).collect(Collectors.toList());
@@ -1820,17 +1839,28 @@ public class KwtConsignOrderService {
                 longUserMap = remoteSystemService.queryUserCacheMapByIds(collect);
             }
         }
+
+        List<AcceptCarriageOrderVO> collect = list.stream().filter(item -> item.getBillingMode().equals(DictEnum.CHARGING_TYPE_4.getValue())).collect(Collectors.toList());
+        Map<Long, List<KwtLogisticsOrderLineFreightRate>> collect1 = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(collect)) {
+            List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = lineFreightRateMapper.selectListByOrderIdList(collect.stream().map(AcceptCarriageOrderVO::getLOrderId).map(Long::parseLong).toList());
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                collect1 = kwtLogisticsOrderLineFreightRates.stream().collect(Collectors.groupingBy(KwtLogisticsOrderLineFreightRate::getLOrderId));
+            }
+        }
+
         for (AcceptCarriageOrderVO vo : list) {
+            List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = collect1.get(Long.parseLong(vo.getLOrderId()));
+            if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                vo.setPrices(kwtLogisticsOrderLineFreightRates.stream().map(item -> item.getName() + " " + item.getTransportPrice()).toList());
+            }
+
             vo.setOrderSourceLabel(orderSource == null ? null : orderSource.get(vo.getOrderSource()));
             vo.setAccountsCycleLabel(settlementDictData.get(vo.getAccountsCycle()));
             vo.setAppointor(longUserMap.get(vo.getCreateBy()) == null ? null : longUserMap.get(vo.getCreateBy()).getName());
             vo.setBillingModeLabel(chargingDictData.get(vo.getBillingMode()));
             vo.setSigningLabel(signingWay.get(vo.getSigning()));
             vo.setStatusLabel(LogisticsOrderEnum.getName(vo.getStatus()));
-            vo.setLoadAddress(vo.getLoadCityName() + vo.getLoadAddress());
-            vo.setUnloadAddress(vo.getUnloadCityName() + vo.getUnloadAddress());
-            vo.setLoadCityName(vo.getLoadName());
-            vo.setUnloadCityName(vo.getUnloadName());
             vo.setPriceLabel(vo.getPriceType() == null ? null : priceDictData.get(vo.getPriceType()));
             vo.setUnitLabel(unitTypeDictData == null ? vo.getUnit() : (unitTypeDictData.get(vo.getUnit()) == null ? vo.getUnit() : unitTypeDictData.get(vo.getUnit())));
             vo.setWaitDistributionAmount(vo.getCarryingCapacity().subtract(vo.getSubcontractAmount()).subtract(vo.getEntrustAmount()));
@@ -1858,36 +1888,32 @@ public class KwtConsignOrderService {
                 }
             }
             String lOrderId = vo.getLOrderId();
-            List<String> loadName = new ArrayList<String>();
-            List<String> loadAddressList = new ArrayList<String>();
-            List<KwtLogisticsOrderAddress> loadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+            List<KwtLogisticsOrderAddress> loadAddresses = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
                     .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
                     .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
-                    .eq(KwtLogisticsOrderAddress::getLOrderId, lOrderId)
+                    .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
             );
-            loadAddress.forEach(address -> {
-                loadName.add(address.getName());
-                loadAddressList.add(address.getDetailAddress());
-            });
-
-            List<String> unloadName = new ArrayList<String>();
-            List<String> unloadAddressList = new ArrayList<String>();
-            List<KwtLogisticsOrderAddress> unloadAddress = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+            List<KwtLogisticsOrderAddress> unloadAddresses = logisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
                     .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
                     .eq(KwtLogisticsOrderAddress::getDelFlag, NumberConstant.ZERO)
-                    .eq(KwtLogisticsOrderAddress::getLOrderId, lOrderId)
+                    .eq(KwtLogisticsOrderAddress::getLOrderId, Long.parseLong(lOrderId))
             );
-            unloadAddress.forEach(address -> {
-                unloadName.add(address.getName());
-                unloadAddressList.add(address.getDetailAddress());
-            });
+            //装货地点名称
+            List<String> loadName = loadAddresses.stream().map(KwtLogisticsOrderAddress::getCityName).toList();
+            //装货地点
+            List<String> loadAddress = loadAddresses.stream().map(KwtLogisticsOrderAddress::getDetailAddress).toList();
+            //卸货地点点名称
+            List<String> unloadName = unloadAddresses.stream().map(KwtLogisticsOrderAddress::getCityName).toList();
+            //卸货地点
+            List<String> unloadAddress = unloadAddresses.stream().map(KwtLogisticsOrderAddress::getDetailAddress).toList();
+            List<LoadAddressVo> loadAddressAmount = logisticsOrderAddressMapper.findByAddressAndLoadAmount(Long.parseLong(lOrderId), NumberConstant.ONE);
+            List<UnLoadAddressVo> unloadAddressAmount = logisticsOrderAddressMapper.findByAddressAndUnLoadAmount(Long.parseLong(lOrderId), NumberConstant.TWO);
+
             vo.setLoadNames(loadName);
-            vo.setLoadAddresses(loadAddressList);
+            vo.setLoadAddresses(loadAddress);
             vo.setUnloadNames(unloadName);
-            vo.setUnloadAddresses(unloadAddressList);
-            List<LoadAddressVo> loadAddressAmount = logisticsOrderAddressMapper.findByAddressAndLoadAmount(Long.parseLong(lOrderId), NumberConstant.ONE);
+            vo.setUnloadAddresses(unloadAddress);
             vo.setLoading(loadAddressAmount);
-            List<UnLoadAddressVo> unloadAddressAmount = logisticsOrderAddressMapper.findByAddressAndUnLoadAmount(Long.parseLong(lOrderId), NumberConstant.TWO);
             vo.setUnloading(unloadAddressAmount);
         }
         return PageRes.build(pageInfo, list);
@@ -1929,7 +1955,6 @@ public class KwtConsignOrderService {
         longs.add(LoginUserHolder.getUserId());
         List<Long> longList = longs.stream().distinct().collect(Collectors.toList());
         List<Long> idsList = StringUtils.splitStrToList(query.getIds(), Long.class);
-//        List<TableTops> list = kwtLogisticsOrderMapper.countLogisticsOrderListByStatus(query, orderList, type, entId, longList, longList,idsList);
         List<TableTops> list = kwtLogisticsOrderMapper.countLogisticsOrderListByConsignStatus(query, orderList, type, entId, longList, longList, idsList);
         List<TableTops> arrayList = new ArrayList<>();
         arrayList.addAll(list);

+ 78 - 92
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -18,6 +18,7 @@ import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
+import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.*;
@@ -30,6 +31,7 @@ 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.order.api.dubbo.RemoteTradeOrderAmountService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.*;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -46,10 +48,7 @@ import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.AddLogisticsOrderParam;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
-import com.sckw.transport.model.vo.OrderFinishVO;
-import com.sckw.transport.model.vo.PurchaseLogisticOrderExcelVo;
-import com.sckw.transport.model.vo.SellLogisticOrderExcelVo;
-import com.sckw.transport.model.vo.WaybillCountVo;
+import com.sckw.transport.model.vo.*;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -105,6 +104,9 @@ public class KwtLogisticsConsignmentService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
     TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
+    RemoteTradeOrderAmountService tradeOrderAmountService;
+
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteFleetService remoteFleetService;
 
@@ -120,6 +122,9 @@ public class KwtLogisticsConsignmentService {
     @Autowired
     public KwtLogisticsOrderContractMapper kwtLogisticsOrderContractMapper;
 
+    @Autowired
+    public KwtLogisticsOrderAmountMapper logisticsOrderAmountMapper;
+
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
@@ -135,6 +140,9 @@ public class KwtLogisticsConsignmentService {
     @Autowired
     public KwtWaybillOrderMapper waybillOrderMapper;
 
+    @Autowired
+    public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+
     /**
      * 采购订单-物流托运生成托运订单
      *
@@ -995,64 +1003,6 @@ public class KwtLogisticsConsignmentService {
         return list;
     }
 
-//    /**
-//     * 采购订单获取车辆信息
-//     *
-//     * @param id
-//     * @param page
-//     * @param pageSize
-//     * @return
-//     */
-//    public HttpResult purchaseLogisticsCar(String id, Integer page, Integer pageSize) {
-//        Long count = getLogisticsCarDataCount(id);
-//        Integer newPage = page - 1;
-//        List<OrderCarDTO> list = getLogisticsCarData(id, newPage, pageSize);
-//        PageResult build = PageResult.build(page, pageSize, count, list);
-//        return HttpResult.ok(build);
-//    }
-
-
-    /**
-     * 采购订单获取车辆信息
-     *
-     * @param ids      订单ids
-     * @param page     当前页
-     * @param pageSize 每页条数
-     * @return 车辆运单数据
-     */
-    public PageRes<OrderCarDTO> purchaseLogisticsCar(String ids, Integer page, Integer pageSize) {
-        PageHelper.startPage(page, pageSize);
-        List<String> stringList = StringUtils.splitStrToList(ids, String.class);
-        if (CollectionUtils.isEmpty(stringList)) {
-            PageRes<OrderCarDTO> pageRes = new PageRes<>();
-            pageRes.setPages(page);
-            pageRes.setPageSize(pageSize);
-            return pageRes;
-        }
-        List<Long> idsList = StringUtils.splitStrToList(ids, Long.class);
-        List<OrderCarDTO> orderCarList = waybillOrderMapper.selectWaybillOrderCarListByTradeOrderId(idsList);
-        PageInfo<OrderCarDTO> info = new PageInfo<>(orderCarList);
-        if (CollectionUtils.isEmpty(orderCarList)) {
-            PageRes<OrderCarDTO> pageRes = new PageRes<>();
-            pageRes.setPage(page);
-            pageRes.setPageSize(pageSize);
-            return pageRes;
-        }
-        List<String> collected = orderCarList.stream().map(OrderCarDTO::getTruckNo).distinct().collect(Collectors.toList());
-        for (OrderCarDTO orderCarDTO : orderCarList) {
-            if (CollectionUtils.isNotEmpty(collected)) {
-                Map<String, RTruckVo> truck = remoteFleetService.findTruck(collected);
-                orderCarDTO.setStatusLabel(CarWaybillEnum.getName(orderCarDTO.getStatus()));
-                orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
-                        null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
-                        null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
-            }
-        }
-        List<OrderCarDTO> returnList = new ArrayList<>();
-        returnList.addAll(orderCarList);
-        return PageRes.build(info, returnList);
-    }
-
     /**
      * 销售订单-车辆列表-销售订单id
      *
@@ -1062,34 +1012,29 @@ public class KwtLogisticsConsignmentService {
      * @return
      */
     public HttpResult sellLogisticsCar(String ids, Integer page, Integer pageSize) {
-        List<String> stringList = StringUtils.splitStrToList(ids, String.class);
+        List<Long> stringList = StringUtils.splitStrToList(ids, Long.class);
         if (CollectionUtils.isEmpty(stringList)) {
             return HttpResult.ok();
         }
-        List<OrderCarDTO> returnList = new ArrayList<>();
-        stringList = stringList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
-        for (String id : stringList) {
-            List<OrderCarDTO> list = waybillOrderMapper.selectWaybillOrderCarListNotPage(id);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("tOrderIds", stringList);
+        params.put("page", page);
+        params.put("pageSize", pageSize);
+        PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
+        List<OrderCarDTO> list = waybillOrderV1Mapper.selectWaybillOrderCarPage(params);
+        if (CollectionUtils.isNotEmpty(list)) {
             List<String> collect = list.stream().map(OrderCarDTO::getTruckNo).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(collect)) {
-                Map<String, RTruckVo> truck = remoteFleetService.findTruck(collect);
-                for (OrderCarDTO orderCarDTO : list) {
-                    orderCarDTO.setStatusLabel(CarWaybillEnum.getName(orderCarDTO.getStatus()));
-                    orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
-                            null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
-                            null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
-                }
-            }
-            if (CollectionUtils.isNotEmpty(list)) {
-                returnList.addAll(list);
+            Map<String, RTruckVo> truck = remoteFleetService.findTruck(collect);
+            for (OrderCarDTO orderCarDTO:list) {
+                orderCarDTO.setStatusLabel(CarWaybillEnum.getName(orderCarDTO.getStatus()));
+                orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
+                        null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
+                        null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
             }
         }
-        List<OrderCarDTO> subList = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(returnList)) {
-            subList = returnList.stream().skip((page - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
-        }
-        PageResult build = PageResult.build(page, pageSize, returnList.stream().count(), subList);
-        return HttpResult.ok(build);
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(list));
+        return HttpResult.ok(pageResult);
     }
 
     private Long getLogisticsCarDataCount(String id) {
@@ -1116,7 +1061,8 @@ public class KwtLogisticsConsignmentService {
      * @param type   单据操作类型
      * @return
      */
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
+    @GlobalTransactional
     public HttpResult cancelConsign(List<String> ids, String remark, String type) {
         if (CollectionUtils.isEmpty(ids) || ids.size() < NumberConstant.ONE) {
             throw new BusinessException("单据id不能为空");
@@ -1173,6 +1119,28 @@ public class KwtLogisticsConsignmentService {
             HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), kwtLogisticsOrder.getTOrderId(), goodsLoading);
             log.info("销售订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
+
+                Long logisticsOrderId =Long.parseLong(s);
+                List<LogisticsOrderCancelAmountVo> logisticsOrderCancelAmountVos = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(logisticsOrderId, NumberConstant.ONE);
+                if (CollectionUtils.isNotEmpty(logisticsOrderCancelAmountVos)) {
+                    logisticsOrderCancelAmountVos.forEach(cancelAmountVos -> {
+                        Long tOrderId = cancelAmountVos.getTOrderId();
+                        Long tOrderAddressId = cancelAmountVos.getTOrderAddressId();
+                        UpdateAddressEntrustAmountParam param = new UpdateAddressEntrustAmountParam();
+                        param.setTOrderId(tOrderId);
+                        param.setTAddressId(tOrderAddressId);
+                        param.setEntrustAmount(cancelAmountVos.getAmount().negate());
+                        param.setUpdateBy(LoginUserHolder.getUserId());
+                        param.setUpdateByName(LoginUserHolder.getUserName());
+                        HttpResult httpResult1 = tradeOrderAmountService.updateAddressEntrustAmount(param);
+                        if (HttpStatus.SUCCESS_CODE != httpResult1.getCode()) {
+                            log.info("销售订单-撤销托运还原地址的分配量错误:,请求参数:{},{},响应信息:{}",
+                                    kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult1));
+                            throw new BusinessException("销售订单-撤销托运还原地址的分配量错误:" + httpResult1.getMsg());
+                        }
+                    });
+                }
+
 //                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
                 kwtLogisticsOrder.setUpdateTime(new Date());
                 kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
@@ -1275,9 +1243,29 @@ public class KwtLogisticsConsignmentService {
             List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(kwtLogisticsOrder, false);
 //            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(kwtLogisticsOrder.getTOrderId(), goodsLoading);
             HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), kwtLogisticsOrder.getTOrderId(), goodsLoading);
-
             log.info("采购订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
+
+                Long logisticsOrderId =Long.parseLong(id);
+                List<LogisticsOrderCancelAmountVo> logisticsOrderCancelAmountVos = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(logisticsOrderId, NumberConstant.ONE);
+                if (CollectionUtils.isNotEmpty(logisticsOrderCancelAmountVos)) {
+                    logisticsOrderCancelAmountVos.forEach(cancelAmountVos -> {
+                        Long tOrderId = cancelAmountVos.getTOrderId();
+                        Long tOrderAddressId = cancelAmountVos.getTOrderAddressId();
+                        UpdateAddressEntrustAmountParam param = new UpdateAddressEntrustAmountParam();
+                        param.setTOrderId(tOrderId);
+                        param.setTAddressId(tOrderAddressId);
+                        param.setEntrustAmount(cancelAmountVos.getAmount().negate());
+                        param.setUpdateBy(LoginUserHolder.getUserId());
+                        param.setUpdateByName(LoginUserHolder.getUserName());
+                        HttpResult httpResult1 = tradeOrderAmountService.updateAddressEntrustAmount(param);
+                        if (HttpStatus.SUCCESS_CODE != httpResult1.getCode()) {
+                            log.info("贸易订单-撤销托运还原地址的分配量错误:,请求参数:{},{},响应信息:{}",
+                                    kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult1));
+                            throw new BusinessException("贸易订单-撤销托运还原地址的分配量错误:" + httpResult1.getMsg());
+                        }
+                    });
+                }
 //                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
 //                    kwtLogisticsOrder.setUpdateTime(new Date());
 //                    kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
@@ -2139,8 +2127,8 @@ public class KwtLogisticsConsignmentService {
      * @param tradeOrderId 贸易订单id
      * @return
      */
-    public Long statisticsWaybillCount(String tradeOrderId) {
-        Long count = 0L;
+    public Integer statisticsWaybillCount(String tradeOrderId) {
+        int count = 0;
         List<KwtLogisticsOrder> orderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
                 .eq(KwtLogisticsOrder::getTOrderId, tradeOrderId).eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO));
         if (org.springframework.util.CollectionUtils.isEmpty(orderList)) {
@@ -2150,10 +2138,8 @@ public class KwtLogisticsConsignmentService {
         if (org.springframework.util.CollectionUtils.isEmpty(longList)) {
             return count;
         }
-        count = waybillOrderMapper.selectCount(new LambdaQueryWrapper<KwtWaybillOrder>()
-                .eq(KwtWaybillOrder::getStatus, CarWaybillEnum.APPROVAL_PASS.getCode())
-                .in(KwtWaybillOrder::getLOrderId, longList));
-        return count;
+
+        return waybillOrderV1Mapper.selectDataByLorderIds(longList, CarWaybillEnum.APPROVAL_PASS.getCode());
     }
 
     /**

+ 67 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java

@@ -12,10 +12,7 @@ import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
-import com.sckw.core.model.enums.CooperateTypeEnum;
-import com.sckw.core.model.enums.LogisticsOrderEnum;
-import com.sckw.core.model.enums.OrderRuleEnum;
-import com.sckw.core.model.enums.RedisOrderGenerateEnum;
+import com.sckw.core.model.enums.*;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.OrderGenerateSeqNoUtils;
@@ -149,6 +146,7 @@ public class KwtLogisticsOrderConsignmentService {
      *
      * @param dto
      */
+    @Transactional
     public void logisticsConsignmentSave(LogisticsConsignmentDto dto) {
         commonService.getRedisGenerateOrderNo();
         Long count = logisticsOrderMapper.selectCount(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getTOrderId, dto.getTOrderId()));
@@ -161,31 +159,35 @@ public class KwtLogisticsOrderConsignmentService {
         KwtLogisticsOrder order = new KwtLogisticsOrder();
         if (!dto.getIsFullDose()) {
             //BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
-            BigDecimal amount = dto.getAmount();
-            if (amount.compareTo(NumberConstant.ZERO_TWO) == 0) {
+            BigDecimal amount = dto.getCarryingCapacity();
+            if (dto.getCarryingCapacity() == null || amount.doubleValue() <= 0) {
                 log.error("可分配量分配错误:{}", dto.getTOrderId());
                 throw new BusinessException("可分配量分配必须填写大于0");
             }
             //可运量校验
-            boolean bool = logisticsOrderGoodsService.chenkLogisticsAmount(dto, tradeOrder);
-            if (!bool) {
+            if (!logisticsOrderGoodsService.chenkLogisticsAmount(dto, tradeOrder)) {
                 log.error("可分配量分配错误:{}", dto.getTOrderId());
                 throw new BusinessException("可分配量分配错误");
             }
-            if (ArrayUtil.isEmpty(dto.getAmount())) {
-                throw new BusinessException("不是全量分配时,分配量不能为空!");
-            }
-            order.setAmount(dto.getAmount());
+            order.setAmount(dto.getCarryingCapacity());
+
         } else {
-            order.setAmount(NumberConstant.ZERO_TWO);
+            order.setAmount(dto.getCarryingCapacity());
             order.setSubcontractAmount(NumberConstant.ZERO_TWO);
         }
+        //地址分配量校验
+        if (!checkCarryingCapacity(dto)) {
+            log.error("地址分配量与总委派量不一致");
+            throw new BusinessException("地址分配量与总委派量不一致");
+        }
+
         /**验证结算方式*/
         checkBillingMode(dto);
+
         Long orderId = new IdWorker(NumberConstant.ONE).nextId();
-        order.setId(orderId);
-        List<ContractDto> contractInfo = dto.getContractInfo();
-        long contractId = contractInfo.get(0).getContractId();
+        order.setId(new IdWorker(NumberConstant.ONE).nextId());
+        //List<ContractDto> contractInfo = dto.getContractInfo();
+        long contractId = dto.getContractId();
         List<Long> contractList = new ArrayList<>();
         contractList.add(contractId);
         Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(contractList);
@@ -247,6 +249,25 @@ public class KwtLogisticsOrderConsignmentService {
         pushConsoleMessage(dto, lOrderNo);
     }
 
+    /**
+     * @param dto 参数
+     * @desc 校验地址分配量与总委托量是否一致
+     * @author zk
+     * @date 2024/4/2
+     **/
+    private boolean checkCarryingCapacity(LogisticsConsignmentDto dto) {
+        //地址信息
+        List<AddressInfoDto> addressInfo = dto.getAddressInfo();
+        //装货地址-委派量
+        BigDecimal loadAmount = addressInfo.stream().map(s -> s.getAddressType() == AddressTypeEnum.SHIPMENT.getCode()
+                ? s.getAmount() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //卸货地址-委派量
+        BigDecimal unloadAmount = addressInfo.stream().map(s -> s.getAddressType() == AddressTypeEnum.TAKE.getCode()
+                ? s.getAmount() : BigDecimal.ZERO).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //总委派量
+        BigDecimal carryingCapacity = dto.getCarryingCapacity();
+        return loadAmount.doubleValue() == carryingCapacity.doubleValue() && unloadAmount.doubleValue() == carryingCapacity.doubleValue();
+    }
 
     private boolean checkBillingMode(LogisticsConsignmentDto dto) {
         if ("4".equals(dto.getBillingMode())) {
@@ -316,12 +337,12 @@ public class KwtLogisticsOrderConsignmentService {
                 null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()).getValue()));
 
         if (!bo.getIsFullDose()) {
-            if (ArrayUtil.isEmpty(bo.getAmount())) {
+            if (ArrayUtil.isEmpty(bo.getCarryingCapacity())) {
                 throw new RuntimeException("不是全量分配时,分配量不能为空!");
             }
-            logisticsOrder.setAmount(bo.getAmount());
+            logisticsOrder.setAmount(bo.getCarryingCapacity());
             logisticsOrder.setUnit(bo.getCarryingCapacityUnit());
-            logisticsOrder.setCarryingCapacity(bo.getAmount());
+            logisticsOrder.setCarryingCapacity(bo.getCarryingCapacity());
         } else {
             logisticsOrder.setAmount(NumberConstant.ZERO_TWO);
             logisticsOrder.setSubcontractAmount(NumberConstant.ZERO_TWO);
@@ -346,9 +367,9 @@ public class KwtLogisticsOrderConsignmentService {
         KwpGoods goods = goodsInfoService.getGoodsById(bo.getGoodsId());
         logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
         logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
-        List<ContractDto> contractInfo = bo.getContractInfo();
-        contractInfo.forEach(contract -> {
-            Long contractId = contract.getContractId();
+        //List<ContractDto> contractInfo = bo.getContractInfo();
+        //contractInfo.forEach(contract -> {
+            Long contractId = bo.getContractId();
             Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(Collections.singletonList(contractId));
             if (longContractCommonInfoResDtoMap != null && (longContractCommonInfoResDtoMap.get(contractId) != null)) {
                 String contractCode = longContractCommonInfoResDtoMap.get(contractId).getContractCode();
@@ -359,7 +380,7 @@ public class KwtLogisticsOrderConsignmentService {
                 logisticsOrder.setContractName(contactName);
                 logisticsOrder.setContractSigningWay(String.valueOf(signingWay));
             }
-        });
+        //});
         logisticsOrder.setCheckEntId(Long.parseLong(bo.getCheckCompanyId()));
         logisticsOrder.setCheckFirmName(bo.getCheckCompany());
         logisticsOrder.setCheckContacts(bo.getCheckContacts());
@@ -719,9 +740,9 @@ public class KwtLogisticsOrderConsignmentService {
     }
 
     private void saveLogisticsOrderContract(LogisticsConsignmentDto dto, Long orderId) {
-        List<ContractDto> contractInfo = dto.getContractInfo();
-        contractInfo.forEach(contract -> {
-            Long contractId = contract.getContractId();
+        //List<ContractDto> contractInfo = dto.getContractInfo();
+        //contractInfo.forEach(contract -> {
+            Long contractId = dto.getContractId();
             Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(Collections.singletonList(contractId));
             if (longContractCommonInfoResDtoMap != null && (longContractCommonInfoResDtoMap.get(contractId) != null)) {
                 String contractCode = longContractCommonInfoResDtoMap.get(contractId).getContractCode();
@@ -741,7 +762,7 @@ public class KwtLogisticsOrderConsignmentService {
                 kwtLogisticsOrderContract.setUpdateTime(new Date());
                 logisticsOrderContractMapper.insert(kwtLogisticsOrderContract);
             }
-        });
+        //});
     }
 
     private void saveLogisticsOrder(LogisticsConsignmentDto bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId, Integer orderStatus) {
@@ -893,9 +914,9 @@ public class KwtLogisticsOrderConsignmentService {
     private void checkLogisticsOrder(AddLogisticsOrderParam addOrderDTO) {
         /**计费方式验证*/
         if (!DictEnum.CHARGING_TYPE_4.getValue().equals(addOrderDTO.getBillingMode())) {
-            if (Objects.isNull(addOrderDTO.getGoodsId())) {
-                throw new RuntimeException("商品id不能为空");
-            }
+//            if (Objects.isNull(addOrderDTO.getGoodsId())) {
+//                throw new RuntimeException("商品id不能为空");
+//            }
             if (addOrderDTO.getPrice() == null || addOrderDTO.getPrice().compareTo(NumberConstant.ZERO_TWO) < 1) {
                 throw new RuntimeException("运价填写错误");
             }
@@ -1410,6 +1431,7 @@ public class KwtLogisticsOrderConsignmentService {
      * @param logisticsOrderSubcontractDto
      * @return
      */
+    @Transactional
     public HttpResult logisticsOrderSubcontract(LogisticsOrderSubcontractDto bo) {
         HttpResult httpResult = ValidUtil.serviceValid(bo);
         String key = String.format(RedisConstant.LOGISTICS_ORDER_SUBCONTRACT_KEY, bo.getLOrderId());
@@ -1570,6 +1592,7 @@ public class KwtLogisticsOrderConsignmentService {
                             MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT, MessageEnum.NEW_CARRIAGE_ORDER,
                             "1");
                 }
+                /** 2024-03-26 停止mq->mongodb数据*/
                 //修改父级mongodb数据
                 //更新mongodb
                 SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
@@ -1589,10 +1612,10 @@ public class KwtLogisticsOrderConsignmentService {
                 //操作对象(1新增/2修改/3替换数据)
                 busSum.setMethod(2);
                 //业务汇总数据对象
-                busSum.setObject(lOrder);
-                streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
-                //新增当前分包mongodb数据
-                subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder, orderStatus);
+//                busSum.setObject(lOrder);
+//                streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+//                //新增当前分包mongodb数据
+//                subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder, orderStatus);
             } finally {
                 redisLockUtil.unlock(key);
             }
@@ -1754,12 +1777,13 @@ public class KwtLogisticsOrderConsignmentService {
             parentLoadOrderMap = orderLoadAddress.stream().collect(Collectors.toMap(KwtLogisticsOrderAddress::getId, Function.identity()));
         }
         if (!CollectionUtils.isEmpty(loadAddress)) {
+            int sort = 1;
             for (AddressInfoDto address : loadAddress) {
                 if (address.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
                     continue;
                 }
-                if (parentLoadOrderMap.get(address.getAddressId()) != null) {
-                    KwtLogisticsOrderAddress loadAddressData = parentLoadOrderMap.get(address.getAddressId());
+                if (parentLoadOrderMap.get(Long.parseLong(address.getAddressId())) != null) {
+                    KwtLogisticsOrderAddress loadAddressData = parentLoadOrderMap.get(Long.parseLong(address.getAddressId()));
                     KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
                     long addressId = new IdWorker(NumberConstant.ONE).nextId();
                     loadOrderAddress.setId(addressId);
@@ -1769,6 +1793,7 @@ public class KwtLogisticsOrderConsignmentService {
                     loadOrderAddress.setDetailAddress(loadAddressData.getDetailAddress());
                     loadOrderAddress.setContacts(loadAddressData.getContacts());
                     loadOrderAddress.setLOrderId(orderId);
+                    loadOrderAddress.setSort(sort);
                     loadOrderAddress.setLat(loadAddressData.getLat());
                     loadOrderAddress.setFence(loadAddressData.getFence());
                     loadOrderAddress.setCityName(loadAddressData.getCityName());
@@ -1804,6 +1829,7 @@ public class KwtLogisticsOrderConsignmentService {
                     orderAmount.setUpdateTime(new Date());
                     orderAmount.setDelFlag(0);
                     logisticsOrderAmountMapper.insert(orderAmount);
+                    sort += 1;
                 }
             }
 
@@ -1822,12 +1848,13 @@ public class KwtLogisticsOrderConsignmentService {
         }
 
         if (!ObjectUtils.isEmpty(unloadAddress)) {
+            int sort = 1;
             for (AddressInfoDto address : unloadAddress) {
                 if (address.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
                     continue;
                 }
-                if (parentLoadOrderMap.get(address.getAddressId()) != null) {
-                    KwtLogisticsOrderAddress loadAddressData = parentLoadOrderMap.get(address.getAddressId());
+                if (parentUnloadOrderMap.get(Long.parseLong(address.getAddressId())) != null) {
+                    KwtLogisticsOrderAddress loadAddressData = parentUnloadOrderMap.get(Long.parseLong(address.getAddressId()));
                     KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
                     long addressId = new IdWorker(NumberConstant.ONE).nextId();
                     unloadOrderAddress.setId(addressId);
@@ -1853,6 +1880,7 @@ public class KwtLogisticsOrderConsignmentService {
                     unloadOrderAddress.setLng(loadAddressData.getLng());
                     unloadOrderAddress.setRemark(loadAddressData.getRemark());
                     unloadOrderAddress.setStatus(loadAddressData.getStatus());
+                    unloadOrderAddress.setSort(sort);
                     logisticsOrderAddressMapper.insert(unloadOrderAddress);
 
                     KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
@@ -1873,6 +1901,7 @@ public class KwtLogisticsOrderConsignmentService {
                     orderAmount.setUpdateTime(new Date());
                     orderAmount.setDelFlag(0);
                     logisticsOrderAmountMapper.insert(orderAmount);
+                    sort += 1;
                 }
             }
         }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java

@@ -444,7 +444,7 @@ public class KwtLogisticsOrderGoodsService {
     public boolean chenkLogisticsAmount(LogisticsConsignmentDto logisticsOrder, OrderDetailRes tradeOrder) {
         List<GoodsUnitParam> assistUnit = logisticsOrder.getAssistUnit();
         BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
-        BigDecimal arryingCapacity = logisticsOrder.getAmount();
+        BigDecimal arryingCapacity = logisticsOrder.getCarryingCapacity();
         String unit = tradeOrder.getUnit();
         if (logisticsOrder.getCarryingCapacityUnit().equals(unit)) {
             if (amount.compareTo(arryingCapacity) >= 0) {

+ 84 - 49
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -14,6 +14,7 @@ import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.model.page.PageResult;
@@ -111,6 +112,9 @@ public class KwtTransportCommonService {
     @Autowired
     public KwtLogisticsOrderAmountMapper logisticsOrderAmountMapper;
 
+    @Autowired
+    public KwtWaybillOrderSubtaskMapper waybillOrderSubtaskMapper;
+
     @Autowired
     public KwtLogisticsOrderTrackMapper logisticsOrderTrackMapper;
 
@@ -123,12 +127,16 @@ public class KwtTransportCommonService {
     @Autowired
     public KwtLogisticsOrderMapper logisticsOrderMapper;
 
+
     @Autowired
-    public KwtWaybillOrderMapper waybillOrderMapper;
+    private KwtWaybillOrderV1Mapper kwtWaybillOrderV1Mapper;
 
     @Resource
     private StreamBridge streamBridge;
 
+    @Autowired
+    private KwtLogisticsOrderLineFreightRateMapper kwtLogisticsOrderLineFreightRateMapper;
+
     /**
      * 查看订单详情
      *
@@ -168,14 +176,10 @@ public class KwtTransportCommonService {
      * @return
      */
     private OrderDetailVO getOrderData(DocumentParamDTO dto) {
-        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, dto.getId())
-                .eq(StringUtils.isNotBlank(dto.getDocumentNo()), KwtLogisticsOrder::getLOrderNo, dto.getDocumentNo())
-        );
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(dto.getId());
         if (logisticsOrder == null) {
             log.info("查无单据:{}", JSONObject.toJSONString(dto));
             throw new RuntimeException("查无单据");
-
         }
         KwtLogisticsOrderContract contract = logisticsOrderContractMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderContract>()
                 .eq(StringUtils.isNotBlank(dto.getId()), KwtLogisticsOrderContract::getLOrderId, dto.getId()));
@@ -248,12 +252,14 @@ public class KwtTransportCommonService {
             vo.setLoadContacts(loadAddress.getContacts());
             vo.setLoadPhone(loadAddress.getPhone());
             vo.setLoadAddressDetail(loadAddress.getDetailAddress());
-            KwtLogisticsOrderAmount orderAmount = logisticsOrderAmountMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAmount>()
-                    .eq(KwtLogisticsOrderAmount::getLOrderId, loadAddress.getLOrderId())
-                    .eq(KwtLogisticsOrderAmount::getLAddressId, loadAddress.getId())
-                    .eq(KwtLogisticsOrderAmount::getDelFlag, 0)
+            KwtLogisticsOrderAmount orderAmount = logisticsOrderAmountMapper.selectOne(
+                    new LambdaQueryWrapper<KwtLogisticsOrderAmount>()
+                            .eq(KwtLogisticsOrderAmount::getLOrderId, loadAddress.getLOrderId())
+                            .eq(KwtLogisticsOrderAmount::getLAddressId, loadAddress.getId())
+                            .eq(KwtLogisticsOrderAmount::getDelFlag, 0)
             );
-            vo.setLoadAmount(orderAmount != null ? orderAmount.getLoadAmount() : new BigDecimal("0.00"));
+            vo.setLoadAmount(orderAmount != null ? orderAmount.getAmount() : new BigDecimal("0.00"));
+            vo.setAddressId(loadAddress.getId());
             loadAddressList.add(vo);
 
         });
@@ -272,7 +278,8 @@ public class KwtTransportCommonService {
                     .eq(KwtLogisticsOrderAmount::getLAddressId, unloadAddress.getId())
                     .eq(KwtLogisticsOrderAmount::getDelFlag, 0)
             );
-            vo.setUnloadAmount(orderAmount != null ? orderAmount.getUnloadAmount() : new BigDecimal("0.00"));
+            vo.setUnloadAmount(orderAmount != null ? orderAmount.getAmount() : new BigDecimal("0.00"));
+            vo.setAddressId(unloadAddress.getId());
             unloadAddressList.add(vo);
 
         });
@@ -392,13 +399,18 @@ public class KwtTransportCommonService {
                     put("upperlOrderId", logisticsOrder.getId());
                     put("passStatus", Global.NUMERICAL_ONE);
                 }};
-                WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
+                WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findWaybillOrderCount(map);
                 int count = waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete();
                 orderDetailVO.setOrderAmount(new BigDecimal(count).multiply(price).subtract(fineValue));
             }
         } else {
-            orderDetailVO.setOrderAmount(logisticsOrder.getAmount().multiply(logisticsOrder.getPrice()));
+            orderDetailVO.setOrderAmount(NumberUtils.parseBigDecimal(logisticsOrder.getAmount()).multiply(NumberUtils.parseBigDecimal(logisticsOrder.getPrice())));
         }
+
+
+        List<LineFreightRateVo> lineFreightRateVos = kwtLogisticsOrderLineFreightRateMapper.selectListByOrderId(Long.parseLong(dto.getId()));
+        orderDetailVO.setLineFreightRate(lineFreightRateVos);
+
         return orderDetailVO;
     }
 
@@ -604,9 +616,9 @@ public class KwtTransportCommonService {
                 String key = String.valueOf(lOrderId) + "-" + String.valueOf(tOrderAddressId);
                 if (currentOrderMap.get(key) != null) {
                     logisticsOrderCancelAmountVo.setAmount(logisticsOrderCancelAmountVo.getAmount().subtract(currentOrderMap.get(key)));
-                    logisticsOrderAmountMapper.update(null,new LambdaUpdateWrapper<KwtLogisticsOrderAmount>()
-                            .set(KwtLogisticsOrderAmount::getEntrustAmount,logisticsOrderCancelAmountVo.getAmount())
-                            .eq(KwtLogisticsOrderAmount::getId,logisticsOrderCancelAmountVo.getAmountId())
+                    logisticsOrderAmountMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderAmount>()
+                            .set(KwtLogisticsOrderAmount::getEntrustAmount, logisticsOrderCancelAmountVo.getAmount())
+                            .eq(KwtLogisticsOrderAmount::getId, logisticsOrderCancelAmountVo.getAmountId())
                     );
                 }
             }
@@ -687,8 +699,21 @@ public class KwtTransportCommonService {
         /**合理损耗*/
         Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
         if (CollectionUtils.isNotEmpty(list)) {
-            for (LogisticsOrderVO logisticsOrderDTO : list) {
 
+            List<LogisticsOrderVO> collect = list.stream().filter(item -> item.getBillingMode().equals(DictEnum.CHARGING_TYPE_4.getValue())).collect(Collectors.toList());
+            Map<Long, List<KwtLogisticsOrderLineFreightRate>> collect1 = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(collect)) {
+                List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = lineFreightRateMapper.selectListByOrderIdList(collect.stream().map(LogisticsOrderVO::getLOrderId).map(Long::parseLong).toList());
+                if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                    collect1 = kwtLogisticsOrderLineFreightRates.stream().collect(Collectors.groupingBy(KwtLogisticsOrderLineFreightRate::getLOrderId));
+                }
+            }
+
+            for (LogisticsOrderVO logisticsOrderDTO : list) {
+                List<KwtLogisticsOrderLineFreightRate> kwtLogisticsOrderLineFreightRates = collect1.get(Long.parseLong(logisticsOrderDTO.getLOrderId()));
+                if (CollectionUtils.isNotEmpty(kwtLogisticsOrderLineFreightRates)) {
+                    logisticsOrderDTO.setPrices(kwtLogisticsOrderLineFreightRates.stream().map(item -> item.getName() + " " + item.getTransportPrice()).toList());
+                }
                 String tOrderId = logisticsOrderDTO.getTOrderId();
                 if (StringUtils.isNotBlank(tOrderId)) {
                     try {
@@ -717,14 +742,14 @@ public class KwtTransportCommonService {
                 KwtLogisticsOrderUnit carrierOrderUnit = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                         .eq(KwtLogisticsOrderUnit::getLOrderId, logisticsOrderDTO.getLOrderId())
                         .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-                KwtLogisticsOrderAddress loadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
-                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
-                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
-                );
-                KwtLogisticsOrderAddress unloadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
-                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
-                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
-                );
+//                KwtLogisticsOrderAddress loadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+//                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
+//                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE)
+//                );
+//                KwtLogisticsOrderAddress unloadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+//                        .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrderDTO.getLOrderId())
+//                        .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO)
+//                );
                 KwtLogisticsOrderContract contract = logisticsOrderContractMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderContract>()
                         .eq(KwtLogisticsOrderContract::getLOrderId, logisticsOrderDTO.getLOrderId())
                 );
@@ -787,11 +812,12 @@ public class KwtTransportCommonService {
                     actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
                 } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
                     // 物流订单运单趟次数量
-                    Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
-                        put("upperlOrderId", logisticsOrderDTO.getLOrderId());
-                        put("passStatus", Global.NUMERICAL_ONE);
-                    }};
-                    WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
+//                    Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
+//                        put("upperlOrderId", logisticsOrderDTO.getLOrderId());
+//                        put("passStatus", Global.NUMERICAL_ONE);
+//                    }};
+
+                    WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
                     BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
                     actualAmount = totalComplete.multiply(price);
                 } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
@@ -806,11 +832,12 @@ public class KwtTransportCommonService {
                         Map<Long, LineFreightAddressRes> lineFreightAddress = manageService.findLineFreightAddress(lineFreightRateIds);
                         if (lineFreightAddress != null) {
                             for (LineFreightAddressRes address : lineFreightAddress.values()) {
-                                BigDecimal decimal = amountMap.get(address.getId());
-                                if (decimal != null) {
-                                    BigDecimal sum = address.getTransportPrice().multiply(decimal).setScale(2, RoundingMode.HALF_UP);
-                                    actualAmount = actualAmount.add(sum);
-                                }
+//                                BigDecimal decimal = amountMap.get(address.getId());
+//                                if (decimal != null) {
+//                                    BigDecimal sum = address.getTransportPrice().multiply(decimal).setScale(2, RoundingMode.HALF_UP);
+//                                    actualAmount = actualAmount.add(address.getTransportAmount());
+//                                }
+                                actualAmount = actualAmount.add(address.getTransportAmount());
                             }
                         }
                     }
@@ -822,14 +849,14 @@ public class KwtTransportCommonService {
                 logisticsOrderDTO.setContractNo(contract.getContractNo());
                 logisticsOrderDTO.setGoodsPriceLabel(priceDictData.get(logisticsOrderDTO.getPriceType()));
                 logisticsOrderDTO.setCreateByName(remoteSystemService.queryUserCacheById(logisticsOrderDTO.getCreateBy()) == null ? null : remoteSystemService.queryUserCacheById(logisticsOrderDTO.getCreateBy()).getName());
-                logisticsOrderDTO.setLoadAddress(loadOrderAddress.getDetailAddress());
-                logisticsOrderDTO.setLoadName(loadOrderAddress.getName());
-                logisticsOrderDTO.setLoadContacts(loadOrderAddress.getContacts());
-                logisticsOrderDTO.setLoadPhone(loadOrderAddress.getPhone());
-                logisticsOrderDTO.setUnloadAddress(unloadOrderAddress.getDetailAddress());
-                logisticsOrderDTO.setUnloadName(unloadOrderAddress.getName());
-                logisticsOrderDTO.setUnloadContacts(unloadOrderAddress.getContacts());
-                logisticsOrderDTO.setUnloadPhone(unloadOrderAddress.getPhone());
+//                logisticsOrderDTO.setLoadAddress(loadOrderAddress.getDetailAddress());
+//                logisticsOrderDTO.setLoadName(loadOrderAddress.getName());
+//                logisticsOrderDTO.setLoadContacts(loadOrderAddress.getContacts());
+//                logisticsOrderDTO.setLoadPhone(loadOrderAddress.getPhone());
+//                logisticsOrderDTO.setUnloadAddress(unloadOrderAddress.getDetailAddress());
+//                logisticsOrderDTO.setUnloadName(unloadOrderAddress.getName());
+//                logisticsOrderDTO.setUnloadContacts(unloadOrderAddress.getContacts());
+//                logisticsOrderDTO.setUnloadPhone(unloadOrderAddress.getPhone());
                 logisticsOrderDTO.setCarrierCompany(carrierOrderUnit == null ? null : carrierOrderUnit.getFirmName());
                 logisticsOrderDTO.setCarrierPhone(carrierOrderUnit == null ? null : carrierOrderUnit.getPhone());
                 logisticsOrderDTO.setCarrierContacts(carrierOrderUnit == null ? null : carrierOrderUnit.getContacts());
@@ -979,7 +1006,7 @@ public class KwtTransportCommonService {
             put("upperlOrderId", orderId);
             put("passStatus", Global.NUMERICAL_ONE);
         }};
-        WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
+        //WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
         List<OrderGoodsLoadingVo> assistUnit = new ArrayList<>();
         //单位
@@ -994,14 +1021,22 @@ public class KwtTransportCommonService {
                 assistUnit.add(new OrderGoodsLoadingVo(e.getUnit(), unitMap != null ? unitMap.get(e.getUnit()) : null, e.getTotalLoadAmount(), e.getTotalUnloadAmount()));
             });
         }
-
-        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+        List<Integer> orderStatus = new ArrayList<>() {{
+            add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        }};
+//        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+        orderFinishVO.setNumber(waybillOrderSubtaskMapper.selectCount(
+                new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
+                        .eq(KwtWaybillOrderSubtask::getLOrderId, Long.parseLong(orderId))
+                        .eq(KwtWaybillOrderSubtask::getDelFlag, 0)
+                        .in(KwtWaybillOrderSubtask::getStatus, orderStatus)).intValue());
         orderFinishVO.setUnit(logisticsOrder.getUnit());
         orderFinishVO.setUnitName(unitMap != null ? unitMap.get(logisticsOrder.getUnit()) : null);
         orderFinishVO.setAmount(logisticsOrder.getAmount());
         orderFinishVO.setLoadAmount(logisticsOrder.getTotalLoadAmount());
         orderFinishVO.setUnloadAmount(logisticsOrder.getTotalUnloadAmount());
         orderFinishVO.setAssistUnit(assistUnit);
+        orderFinishVO.setLineFreightRate(lineFreightRateMapper.selectListByOrderId(Long.parseLong(orderId)));
         return HttpResult.ok(orderFinishVO);
     }
 
@@ -1393,7 +1428,7 @@ public class KwtTransportCommonService {
             }
 
             //车辆运单统计(运输中的物流订单+车辆运单审核通过)
-            WaybillCountVo waybillCount = waybillOrderMapper.findWaybillOrderCount(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
+            WaybillCountVo waybillCount = kwtWaybillOrderV1Mapper.findWaybillOrderCount(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
                 //put("ownOrderId", order.getId());
                 put("upperlOrderId", order.getId());
                 put("passStatus", Global.NUMERICAL_ONE);
@@ -1719,7 +1754,7 @@ public class KwtTransportCommonService {
         Long orderId = logisticsOrder.getId();
         List<LogisticsOrderLineFreightRateDto> lineFreightRate = params.getLineFreightRate();
         lineFreightRate.forEach(dto -> {
-            Long lineFreightRateId = dto.getLineFreightRateId();
+            Long lineFreightRateId = dto.getLineFreightId();
             KwtLogisticsOrderLineFreightRate orderLineFreightRate = lineFreightRateMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderLineFreightRate>()
                     .eq(KwtLogisticsOrderLineFreightRate::getLOrderId, orderId)
                     .eq(KwtLogisticsOrderLineFreightRate::getLineFreightRateId, lineFreightRateId)

+ 33 - 192
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillManagementService.java

@@ -1,11 +1,16 @@
 package com.sckw.transport.service;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.CarWaybillQueryEnum;
+import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.*;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -58,6 +63,9 @@ public class KwtWaybillManagementService {
     @Autowired
     public KwtWaybillOrderMapper kwtWaybillOrderMapper;
 
+    @Autowired
+    public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
@@ -243,196 +251,6 @@ public class KwtWaybillManagementService {
         return HttpResult.ok(waybillDataVO);
     }
 
-    /**
-     * 运单详情
-     *
-     * @param id
-     * @return
-     */
-    public HttpResult waybillDataOld(Long id) {
-        if (Objects.isNull(id)) {
-            return HttpResult.error("id不能为空");
-        }
-        WaybillDataVO waybillDataVO = new WaybillDataVO();
-        Criteria criteria = new Criteria();
-        //criteria.and("wOrderId").is(id);
-        criteria.and("_id").is(id);
-//        criteria.and("entId").is(LoginUserHolder.getAuthUserIdList());
-        criteria.and("delFlag").is(NumberConstant.ZERO);
-        Query queryFormat = new Query(criteria);
-        SckwWaybillOrder info = mongoTemplate.findOne(queryFormat, SckwWaybillOrder.class);
-        WayBillDetailDTO wayBillDetailDTO = new WayBillDetailDTO();
-        WaybillTicketVO waybillTicketVO = new WaybillTicketVO();
-        WaybillCarVO waybillCarVO = new WaybillCarVO();
-        if (!ObjectUtils.isEmpty(info)) {
-            // 基础信息
-            wayBillDetailDTO.setTruckId(info.getTruckId());
-            wayBillDetailDTO.setStatus(String.valueOf(info.getStatus()));
-            wayBillDetailDTO.setTruckNo(info.getTruckNo());
-            wayBillDetailDTO.setDriverId(info.getDriverId());
-            wayBillDetailDTO.setDriverName(info.getDriverName());
-            wayBillDetailDTO.setDriverPhone(info.getDriverPhone());
-            wayBillDetailDTO.setDriverId(info.getDriverId());
-            wayBillDetailDTO.setWOrderId(info.getWOrderId());
-            wayBillDetailDTO.setWOrderNo(info.getWOrderNo());
-            wayBillDetailDTO.setLOrderId(info.getLOrderId());
-            wayBillDetailDTO.setLOrderNo(info.getLOrderNo());
-            wayBillDetailDTO.setLOrderNo(info.getLOrderNo());
-            wayBillDetailDTO.setEntrustAmount(String.valueOf(info.getEntrustAmount()));
-            wayBillDetailDTO.setType(String.valueOf(info.getType()));
-            wayBillDetailDTO.setTypeLabel(info.getType().equals(NumberConstant.ONE) ? "趟次" : "循环");
-            wayBillDetailDTO.setStartTime(info.getStartTime());
-            wayBillDetailDTO.setEndTime(info.getEndTime());
-            wayBillDetailDTO.setCreateBy(info.getCreateByName());
-            wayBillDetailDTO.setGoodsName(info.getGoodsName());
-            if (info.getLoadDetailAddress().contains(info.getLoadCityName())){
-                wayBillDetailDTO.setLoadDetailAddress(info.getLoadDetailAddress());
-            }else {
-                wayBillDetailDTO.setLoadDetailAddress(info.getLoadCityName().concat(info.getLoadDetailAddress()));
-            }
-            if (info.getUnloadDetailAddress().contains(info.getUnloadCityName())){
-                wayBillDetailDTO.setUnloadDetailAddress(info.getUnloadDetailAddress());
-            }else {
-                wayBillDetailDTO.setUnloadDetailAddress(info.getUnloadCityName().concat(info.getUnloadDetailAddress()));
-            }
-            wayBillDetailDTO.setLoadName(info.getLoadName());
-            wayBillDetailDTO.setUnloadName(info.getUnloadName());
-            wayBillDetailDTO.setCarrierFirmName(info.getCarrierFirmName());
-            wayBillDetailDTO.setCheckFirmName(info.getCheckFirmName());
-            // 计费方式
-            KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectById(info.getLOrderId());
-            if (!ObjectUtils.isEmpty(kwtLogisticsOrder)) {
-                wayBillDetailDTO.setPriceType(kwtLogisticsOrder.getBillingMode());
-                SysDictResDto billingMode = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.CHARGING_TYPE.getType(), kwtLogisticsOrder.getBillingMode());
-                if (!ObjectUtils.isEmpty(billingMode)) {
-                    wayBillDetailDTO.setPriceTypeLabe(billingMode.getLabel());
-                }
-            }
-            wayBillDetailDTO.setCheckFirmName(info.getCheckFirmName());
-            // 运输量单位
-            wayBillDetailDTO.setUnit(info.getUnit() == null ? null : info.getUnit());
-            if (info.getUnit() != null) {
-                Map<String, SysDictResDto> unitType = remoteSystemService.queryDictMapByType(DictTypeEnum.UNIT_TYPE.getType());
-                SysDictResDto sysDict = unitType.get(info.getUnit());
-                wayBillDetailDTO.setUnitLabel(sysDict == null ? null : sysDict.getLabel());
-            }
-            // 派车人信息
-            UserCacheResDto createUser = remoteSystemService.queryUserCacheById(info.getCreateBy());
-            if (!ObjectUtils.isEmpty(createUser)) {
-                wayBillDetailDTO.setCreateByPhone(createUser.getPhone());
-            }
-            // 车辆信息
-            SysDictResDto truckTypeString = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TRUCK_TYPE.getType(), info.getTruckType());
-            if (!ObjectUtils.isEmpty(truckTypeString)) {
-                waybillCarVO.setTypeLabel(truckTypeString.getLabel());
-            }
-            waybillCarVO.setTruckId(String.valueOf(info.getTruckId()));
-            waybillCarVO.setTruckNo(info.getTruckNo());
-            waybillCarVO.setType(info.getTruckType());
-            waybillCarVO.setDriverName(info.getDriverName());
-            waybillCarVO.setDriverPhone(info.getDriverPhone());
-            waybillCarVO.setDriverId(String.valueOf(info.getTruckId()));
-            waybillCarVO.setTrailerNo(info.getTruckTrailerNo());
-            // 票据
-            List<KwtWaybillOrderTicket> waybillOrderTickets = kwtWaybillOrderTicketMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
-                    .eq(KwtWaybillOrderTicket::getWOrderId, id)
-            );
-            if (!org.springframework.util.CollectionUtils.isEmpty(waybillOrderTickets)) {
-                for (KwtWaybillOrderTicket waybillOrderTicket : waybillOrderTickets) {
-                    //1装货单/2卸货单
-                    if (waybillOrderTicket.getType() == 1) {
-                        if (info.getLoadTime() != null) {
-                            waybillTicketVO.setLoadTime(waybillOrderTicket.getOperateTime() == null ? null : DateUtil.getDateTime(waybillOrderTicket.getOperateTime()));
-                        }
-                        waybillTicketVO.setLoadWeight(String.valueOf(info.getLoadAmount()));
-                        waybillTicketVO.setLoadUrl(FileUtils.splice(String.valueOf(info.getLoadUrls())));
-                    }
-                    if (waybillOrderTicket.getType() == 2) {
-                        if (info.getUnloadTime() != null) {
-                            waybillTicketVO.setUnloadTime(waybillOrderTicket.getOperateTime() == null ? null : DateUtil.getDateTime(waybillOrderTicket.getOperateTime()));
-                        }
-                        waybillTicketVO.setUnloadWeight(String.valueOf(info.getUnloadAmount()));
-                        waybillTicketVO.setUnloadUrl(FileUtils.splice(String.valueOf(info.getUnloadUrls())));
-                    }
-                }
-            }
-            waybillTicketVO.setDeficitAmount(String.valueOf(info.getDeficitAmount()));
-            // 计算扣亏量
-            BigDecimal deficitLoss = info.getLoss() == null ? BigDecimal.valueOf(0) : info.getLoss();
-            BigDecimal loadAmount = info.getLoadAmount() == null ? NumberConstant.ZERO_TWO : info.getLoadAmount();
-            BigDecimal unloadAmount = info.getUnloadAmount() == null ? NumberConstant.ZERO_TWO : info.getUnloadAmount();
-            BigDecimal deficitRealAmount = commonService.deficitLossAmount(
-                    info.getLoadAmount(),
-                    loadAmount.subtract(unloadAmount),
-                    deficitLoss,
-                    info.getLossUnit()
-            );
-            waybillTicketVO.setDeficitRealAmount(deficitRealAmount.toString());
-        }
-
-        List<Integer> statuses = initWaybillIndexStatus();
-        // 初始化各状态
-        List<WaybillStatusVO> statusVOS = new ArrayList<>();
-        statuses.forEach(e -> {
-            WaybillStatusVO waybillStatusVO = new WaybillStatusVO();
-            waybillStatusVO.setStatus(false);
-            if(e.equals(CarWaybillEnum.PENDING_ORDER.getCode())) {
-                // 默认选中 待接单 状态
-                waybillStatusVO.setStatus(true);
-            }
-            waybillStatusVO.setCode(e);
-            waybillStatusVO.setDestination(CarWaybillEnum.getName(e));
-            statusVOS.add(waybillStatusVO);
-        });
-
-        List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper
-                .selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
-                        .eq(KwtWaybillOrderTrack::getWOrderId, id));
-        List<WaybillTrackVO> waybillTrackVOS = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
-            List<Long> userIds = new ArrayList<>();
-            kwtWaybillOrderTracks.forEach(e -> userIds.add(e.getCreateBy()));
-            List<UserInfoVo> users = commonService.findUserList(userIds);
-            Map<Long, String> userNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            users.forEach(e -> userNameMap.put(e.getId(), e.getName()));
-            Map<Long, String> userPhoneMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            users.forEach(e -> userPhoneMap.put(e.getId(), e.getPhone()));
-
-            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
-                for (WaybillStatusVO statusVO : statusVOS) {
-                    if (statusVO.getCode().equals(track.getStatus())) {
-                        statusVO.setStatus(true);
-                        statusVO.setId(track.getId());
-                        statusVO.setCreateTime(DateUtil.getDateTime(track.getCreateTime()));
-                        statusVO.setOperateTime(DateUtil.getDateTime(track.getOperateTime()));
-                        statusVO.setCreateByName(userNameMap.get(track.getCreateBy()));
-                        break;
-                    }
-                }
-
-                WaybillTrackVO waybillTrackVO = new WaybillTrackVO();
-                waybillTrackVO.setId(String.valueOf(track.getId()))
-                        .setRemark(track.getRemark())
-                        .setStatus(String.valueOf(track.getStatus()))
-                        .setStatusLabel(CarWaybillEnum.getName(track.getStatus()))
-                        .setCreateBy(track.getCreateBy())
-                        .setCreateByPhone(userPhoneMap.get(track.getCreateBy()))
-                        .setCreateByName(userNameMap.get(track.getCreateBy()))
-                        .setCreateTime(DateUtil.getDateTime(track.getCreateTime()))
-                        .setOperateTime(DateUtil.getDateTime(track.getOperateTime()));
-                waybillTrackVOS.add(waybillTrackVO);
-            }
-        }
-
-        waybillDataVO.setAgreement(waybillTicketVO);
-        waybillDataVO.setCar(waybillCarVO);
-        waybillDataVO.setTransport(wayBillDetailDTO);
-        waybillDataVO.setProcess(statusVOS);
-        waybillTrackVOS = waybillTrackVOS.stream().sorted(Comparator.comparing(WaybillTrackVO::getCreateTime).reversed()).collect(Collectors.toList());
-        waybillDataVO.setLogs(waybillTrackVOS);
-        return HttpResult.ok(waybillDataVO);
-    }
-
     /**
      * 简洁版运单详情
      *
@@ -1101,8 +919,7 @@ public class KwtWaybillManagementService {
         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"))));
+        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> returnList = new ArrayList<>();
@@ -1122,6 +939,30 @@ public class KwtWaybillManagementService {
         return HttpResult.ok(build);
     }
 
+    public HttpResult logisticOrderWaybillDataV1(WaybillListAppDTO query) {
+        Map<String, Object> params = BeanUtil.beanToMap(query);
+        // 设置分页参数
+        PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
+        /*数据查询**/
+        List<WaybillOrderSubtaskVo> waybillOrders = waybillOrderV1Mapper.findWaybillOrderSubtask(params);
+
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WaybillOrderSubtaskVo subtask:waybillOrders) {
+            Map<String, Object> order = BeanUtil.beanToMap(subtask);
+            order.put("statusLabel", CarWaybillEnum.getName(subtask.getStatus()));
+            order.put("unitLabel", unitMap.get(subtask.getUnit()));
+            order.put("typeLabel", subtask.getType() == NumberConstant.ONE ? "趟次" : "循环");
+            result.add(order);
+        }
+
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(result));
+        return HttpResult.ok(pageResult);
+    }
+
 
     /**
      * app 运单分类吨量统计数据 [运输中|已完成]

+ 452 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillManagementV1Service.java

@@ -0,0 +1,452 @@
+package com.sckw.transport.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.model.enums.AddressTypeEnum;
+import com.sckw.core.model.enums.CarWaybillEnum;
+import com.sckw.core.model.page.PageHelperUtil;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.*;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.dao.*;
+import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.enuma.ApproveStatusEnum;
+import com.sckw.transport.model.enuma.CarWaybillAppEnum;
+import com.sckw.transport.model.enuma.CarWaybillDetailEnum;
+import com.sckw.transport.model.vo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Service;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author jc
+ * @description 运单相关服务
+ * @date 2023-06-29 15:06:45
+ */
+@Slf4j
+@Service
+public class KwtWaybillManagementV1Service {
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    RemoteFleetService remoteFleetService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    RemoteSystemService remoteSystemService;
+
+    @Autowired
+    public KwtWaybillOrderMapper kwtWaybillOrderMapper;
+
+    @Autowired
+    public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+
+    @Autowired
+    public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
+
+    @Autowired
+    public KwtWaybillOrderAddressMapper kwtWaybillOrderAddressMapper;
+
+    @Autowired
+    public KwtWaybillOrderTicketMapper kwtWaybillOrderTicketMapper;
+
+    @Autowired
+    private KwtLogisticsOrderCirculateMapper orderCirculateMapper;
+
+    @Autowired
+    public KwtWaybillOrderTrackMapper kwtWaybillOrderTrackMapper;
+
+    @Autowired
+    public KwtWaybillOrderSubtaskMapper waybillOrderSubtaskMapper;
+
+    @Autowired
+    public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
+
+    @Autowired
+    public KwtLogisticsOrderUnitMapper logisticsOrderUnitMapper;
+
+    @Autowired
+    KwtWaybillOrderTicketService kwtWaybillOrderTicketService;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private KwtCommonService commonService;
+
+
+    /**
+     * @desc 物流订单详情-根据物流订单ID查询运单列表
+     * @param query 参数
+     * @author zk
+     * @date 2024/4/3
+     **/
+    public HttpResult logisticOrderWaybillStatistic(WaybillListAppDTO query) {
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        WaybillOrderQueryDto queryDto = new WaybillOrderQueryDto();
+        query.setStatus(null);
+        BeanUtil.copyProperties(query, queryDto);
+        queryDto.setEntId(LoginUserHolder.getEntId());
+        queryDto.setUserIds(userIds);
+        Map<String, Object> statistic = waybillOrderSubtaskMapper.findWaybillOrderCount(queryDto);
+        return HttpResult.ok(statistic);
+    }
+
+    /**
+     * @desc 物流订单详情-根据物流订单ID查询运单列表
+     * @param query 参数
+     * @author zk
+     * @date 2024/4/3
+     **/
+    public HttpResult logisticOrderWaybill(WaybillListAppDTO query) {
+        query.setBusAppStatus(Objects.requireNonNull(CarWaybillAppEnum.getRemark(query.getStatus())).getValue());
+        query.setStatus(null);
+        Map<String, Object> params = BeanUtil.beanToMap(query);
+        // 设置分页参数
+        PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
+        /*数据查询**/
+        List<WaybillOrderSubtaskVo> list = waybillOrderV1Mapper.findWaybillOrderSubtask(params);
+
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WaybillOrderSubtaskVo subtask:list) {
+            Map<String, Object> order = BeanUtil.beanToMap(subtask);
+            order.put("statusLabel", CarWaybillEnum.getName(subtask.getStatus()));
+            order.put("unitLabel", unitMap.get(subtask.getUnit()));
+            order.put("typeLabel", subtask.getType() == NumberConstant.ONE ? "趟次" : "循环");
+            result.add(order);
+        }
+
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(result));
+        return HttpResult.ok(pageResult);
+    }
+
+
+    /**
+     * @desc 物流订单详情-根据物流订单ID查询运单列表
+     * @param query 参数
+     * @author zk
+     * @date 2024/4/3
+     **/
+    public HttpResult findNdexPage(WaybillListAppDTO query) {
+        // 运单创建人或有关授权用户
+        List<Long> userIds = LoginUserHolder.getAuthUserIdList();
+        String queryWstatus = Objects.requireNonNull(CarWaybillAppEnum.getRemark(query.getStatus())).getValue();
+        WaybillOrderQueryDto queryDto = new WaybillOrderQueryDto();
+        query.setStatus(null);
+        BeanUtil.copyProperties(query, queryDto);
+        queryDto.setQueryWstatus(queryWstatus);
+        queryDto.setEntId(LoginUserHolder.getEntId());
+        queryDto.setUserIds(userIds);
+        /*数据查询**/
+        List<WaybillOrderSelectVo> list = waybillOrderV1Mapper.findListPage(queryDto);
+
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
+
+        //数据处理
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (WaybillOrderSelectVo waybillOrder:list) {
+            //运单地址信息
+            List<KwtWaybillOrderAddress> addresses = kwtWaybillOrderAddressMapper.findByAddresses(waybillOrder.getWOrderId(), null);
+            List<JSONObject> addressList = new ArrayList<>();
+            for (KwtWaybillOrderAddress address:addresses) {
+                //运单子单
+                KwtWaybillOrderSubtask subtask = waybillOrderSubtaskMapper.selectById(address.getWSubtaskId());
+                //物流订单商品信息
+                KwtLogisticsOrderGoods goods = logisticsOrderGoodsMapper.findByGoods(subtask != null ? subtask.getLOrderId() : null);
+                //榜单信息
+                KwtWaybillOrderTicket ticket = kwtWaybillOrderTicketMapper.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
+                //数据组装
+                JSONObject addressJson = new JSONObject();
+                addressJson.put("wAddressId", address.getId());
+                addressJson.put("addressType", address.getAddressType());
+                addressJson.put("addressName", address.getName());
+                addressJson.put("addressCityName", address.getCityName());
+                addressJson.put("addressDetail", address.getDetailAddress());
+                addressJson.put("planTime", DateUtils.format(address.getPlanTime(), DateUtils.FORMAT12));
+
+                addressJson.put("entrustAmount", address.getEntrustAmount());
+                addressJson.put("goodsName", goods != null ? goods.getGoodsName() : null);
+                addressJson.put("unit", subtask.getUnit());
+                addressJson.put("unitName", unitMap.get(subtask.getUnit()));
+                addressJson.put("amount", ticket != null ? ticket.getAmount() : null);
+                addressJson.put("urls", ticket != null ? ticket.getUrls() : null);
+                addressJson.put("operateStatus", ticket != null);
+                addressJson.put("operateTime", ticket != null ? DateUtils.format(address.getPlanTime(), DateUtils.FORMAT11) : null);
+                addressJson.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
+                addressList.add(addressJson);
+            }
+
+            Map<String, Object> order = BeanUtil.beanToMap(waybillOrder);
+            order.put("statusLabel", CarWaybillEnum.getName(waybillOrder.getStatus()));
+            order.put("addresses", addressList);
+            order.put("typeLabel", waybillOrder.getType() == NumberConstant.ONE ? "趟次" : "循环");
+            result.add(order);
+        }
+
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(result));
+        return HttpResult.ok(pageResult);
+    }
+
+    /**
+     * @param wOrderId 运单ID
+     * @desc 运单详情
+     * @author zk
+     * @date 2024/3/13
+     **/
+    public HttpResult waybillDetail1(Long wOrderId) {
+        //运单信息
+        KwtWaybillOrderV1 waybillOrder = waybillOrderV1Mapper.selectById(wOrderId);
+        if (waybillOrder == null) {
+            return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
+        }
+
+        //运单状态记录
+        List<KwtWaybillOrderTrack> tracks = kwtWaybillOrderTrackMapper.findTrack(wOrderId, null, null, null);
+        //用户信息
+        List<Long> userIds = tracks.stream().map(KwtWaybillOrderTrack::getCreateBy).toList();
+        List<Long> userIdList = new ArrayList<>(NumberConstant.SIXTEEN){{add(waybillOrder.getCreateBy());}};
+        userIdList.addAll(userIds);
+        List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIdList);
+        Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        users.forEach(e -> usersMap.put(e.getId(), e));
+        //企业ID
+        List<Long> entIds = new ArrayList<>(){{add(waybillOrder.getEntId());}};
+        Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
+
+        /*数据处理*/
+        List<Map<String, Object>> trackList = new ArrayList<>();
+        List<Integer> statusList = CarWaybillDetailEnum.initWaybillStatus();
+        //使用for-each循环来遍历Color枚举类的所有值
+        for (Integer value:statusList) {
+            List<String> asList = Arrays.asList(CarWaybillDetailEnum.getValue(value).split(Global.COMMA));
+            for (String status:asList) {
+                KwtWaybillOrderTrack track = kwtWaybillOrderTrackMapper.findWaybillOrderTrack(wOrderId, null, null, Integer.valueOf(status));
+                Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+                trackData.put("operateByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : waybillOrder.getDriverName());
+                trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
+                trackData.put("operateStatus", track != null);
+                trackData.put("createTime", track != null ? track.getCreateTime() : null);
+                trackData.put("status", status);
+                trackData.put("statusName", CarWaybillDetailEnum.getName1(Integer.valueOf(status)));
+                trackList.add(trackData);
+            }
+        }
+
+        //运单地址状态处理(到达装货点、已装货、到达卸货点、已卸货)
+        List<KwtWaybillOrderAddress> addresses = kwtWaybillOrderAddressMapper.findByAddresses(wOrderId, null);
+        for (KwtWaybillOrderAddress address:addresses) {
+            //运单子单
+            KwtWaybillOrderSubtask subtask = waybillOrderSubtaskMapper.selectById(address.getWSubtaskId());
+            //物流订单商品信息
+            KwtLogisticsOrderGoods goods = logisticsOrderGoodsMapper.findByGoods(subtask != null ? subtask.getLOrderId() : null);
+            //榜单信息
+            KwtWaybillOrderTicket ticket = kwtWaybillOrderTicketMapper.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
+            Map<String, Object> addressData = new HashMap<>(NumberConstant.SIXTEEN);
+            addressData.put("addressType", address.getAddressType());
+            addressData.put("addressName", address.getName());
+            addressData.put("addressCityName", address.getCityName());
+            addressData.put("addressDetail", address.getDetailAddress());
+            addressData.put("planTime", DateUtils.format(address.getPlanTime(), DateUtils.FORMAT12));
+            addressData.put("entrustAmount", address.getEntrustAmount());
+            addressData.put("goodsName", goods != null ? goods.getGoodsName() : null);
+            addressData.put("unit", subtask.getUnit());
+            addressData.put("unitName", unitMap.get(subtask.getUnit()));
+            addressData.put("amount", ticket != null ? ticket.getAmount() : null);
+            addressData.put("urls", ticket != null ? FileUtils.spliceBatch(ticket.getUrls()) : null);
+            addressData.put("operateStatus", ticket != null);
+            addressData.put("operateTime", ticket != null ? DateUtils.format(address.getPlanTime(), DateUtils.FORMAT11) : null);
+            addressData.put("operateByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : waybillOrder.getDriverName());
+            addressData.put("status", ticket != null ? ticket.getStatus() : null);
+            addressData.put("statusName", ticket != null ? ApproveStatusEnum.getName(ticket.getStatus()) : null);
+            trackList.add(addressData);
+        }
+
+        //审核状态
+        KwtWaybillOrderTrack track = kwtWaybillOrderTrackMapper.findWaybillOrderTrackV1(wOrderId, CarWaybillDetailEnum.WAIT_APPROVAL.getValue());
+        Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+        trackData.put("operateByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : waybillOrder.getDriverName());
+        trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
+        trackData.put("operateStatus", track != null);
+        trackData.put("createTime", track != null ? track.getCreateTime() : null);
+        trackData.put("status", CarWaybillDetailEnum.WAIT_APPROVAL.getCode());
+        trackData.put("statusName", CarWaybillDetailEnum.WAIT_APPROVAL.getName());
+        trackList.add(trackData);
+
+        //榜单信息
+        List<KwtWaybillOrderTicket> tickets = kwtWaybillOrderTicketMapper.findWaybillOrderTicket(wOrderId, null, null);
+        //数据处理
+        List<String> loadUrl = new ArrayList<>(), unloadUrl = new ArrayList<>();
+        for (KwtWaybillOrderTicket ticket:tickets) {
+            if(ticket.getType().equals(AddressTypeEnum.SHIPMENT.getCode())){
+                loadUrl.add(FileUtils.spliceBatch(ticket.getUrls()));
+            } else {
+                unloadUrl.add(FileUtils.spliceBatch(ticket.getUrls()));
+            }
+        }
+
+        //返回信息
+        Map<String, Object> waybillDetail = BeanUtil.beanToMap(waybillOrder);
+        waybillDetail.put("loadUrl", loadUrl);
+        waybillDetail.put("unloadUrl", unloadUrl);
+        waybillDetail.put("wOrederId", waybillOrder.getId());
+        waybillDetail.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
+        waybillDetail.put("createByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : null);
+        waybillDetail.put("createByPhone", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getPhone() : null);
+        waybillDetail.put("firmName", ents.get(waybillOrder.getEntId()) != null ? ents.get(waybillOrder.getEntId()).getFirmName() : null);
+        waybillDetail.put("trackList", trackList);
+        return HttpResult.ok(waybillDetail);
+    }
+
+    public HttpResult waybillDetail(Long wOrderId) {
+        //车辆运单信息
+        KwtWaybillOrderV1 waybillOrder = waybillOrderV1Mapper.selectById(wOrderId);
+        if (waybillOrder == null) {
+            return HttpResult.ok("车辆运单信息不存在!");
+        }
+        //运单状态
+        List<KwtWaybillOrderTrack> tracks = kwtWaybillOrderTrackMapper.findTrack(wOrderId, null, null, null);
+        //操作人
+        List<Long> userIds = tracks.stream().map(KwtWaybillOrderTrack::getCreateBy).toList();
+        List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
+        Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        users.forEach(e -> usersMap.put(e.getId(), e));
+        //单位
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
+        Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
+
+        /*数据处理*/
+        List<Map<String, Object>> trackList = new ArrayList<>();
+        //运单状态(待接单、待出车、出车)
+        List<Integer> statusList = CarWaybillDetailEnum.initWaybillStatus();
+        //使用for-each循环来遍历Color枚举类的所有值
+        for (Integer value:statusList) {
+            List<String> asList = Arrays.asList(CarWaybillDetailEnum.getValue(value).split(Global.COMMA));
+            for (String status:asList) {
+                KwtWaybillOrderTrack track = kwtWaybillOrderTrackMapper.findWaybillOrderTrack(wOrderId, null, null, Integer.valueOf(status));
+                Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+                trackData.put("operateByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : waybillOrder.getDriverName());
+                trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
+                trackData.put("operateStatus", track != null);
+                trackData.put("createTime", track != null ? track.getCreateTime() : null);
+                trackData.put("status", status);
+                trackData.put("statusName", CarWaybillDetailEnum.getName1(Integer.valueOf(status)));
+                trackList.add(trackData);
+            }
+        }
+
+        //运单状态处理(到达装货点、已装货、到达卸货点、已卸货)
+        List<KwtWaybillOrderAddress> addresses = kwtWaybillOrderAddressMapper.findByAddresses(wOrderId, null);
+        for (KwtWaybillOrderAddress address:addresses) {
+            if (address.getAddressType().equals(AddressTypeEnum.SHIPMENT.getCode())) {
+                statusList = new ArrayList<>(){{add(CarWaybillEnum.WAIT_LOADING.getCode()); add(CarWaybillEnum.COMPLETION_LOADING.getCode());}};
+            } else {
+                statusList = new ArrayList<>(){{add(CarWaybillEnum.WAIT_UNLOADING.getCode()); add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());}};
+            }
+
+            //子单信息
+            KwtWaybillOrderSubtask subtask = waybillOrderSubtaskMapper.selectById(address.getWSubtaskId());
+            //物流订单商品信息
+            KwtLogisticsOrderGoods goods = logisticsOrderGoodsMapper.findByGoods(subtask != null ? subtask.getLOrderId() : null);
+            for (Integer status:statusList) {
+                //状态记录
+                KwtWaybillOrderTrack track = kwtWaybillOrderTrackMapper.findWaybillOrderTrack(wOrderId, subtask.getId(), address.getId(), status);
+                Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+                trackData.put("id", track != null ? track.getId() : null);
+                trackData.put("wOrderId", address.getWOrderId());
+                trackData.put("wSubtaskId", address.getWSubtaskId());
+                trackData.put("wAddressId", address.getId());
+                trackData.put("operateByName", track != null ? usersMap.get(track.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(track.getCreateBy()).getName() : null);
+                trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
+                trackData.put("operateStatus", track != null);
+                trackData.put("createTime", track != null ? DateUtils.format(track.getCreateTime(), DateUtils.DATE_TIME_PATTERN) : null);
+                trackData.put("status", status);
+                trackData.put("statusName", CarWaybillEnum.getName(status));
+                trackData.put("planTime", track != null ? address.getPlanTime() : null);
+                trackData.put("entrustAmount", track != null ? address.getEntrustAmount() : null);
+                trackData.put("unit", subtask.getUnit());
+                trackData.put("unitName", unitMap.get(subtask.getUnit()));
+                trackData.put("goodsName", goods != null ? goods.getGoodsName() : null);
+                trackData.put("addressName", address.getName());
+                trackData.put("addressCityName", address.getCityName());
+                trackData.put("addressDetail", address.getDetailAddress());
+                trackList.add(trackData);
+            }
+        }
+
+        //审核状态
+        KwtWaybillOrderTrack track = kwtWaybillOrderTrackMapper.findWaybillOrderTrackV1(wOrderId, CarWaybillDetailEnum.WAIT_APPROVAL.getValue());
+        Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+        trackData.put("operateByName", usersMap.get(waybillOrder.getCreateBy()) != null ? usersMap.get(waybillOrder.getCreateBy()).getName() : waybillOrder.getDriverName());
+        trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
+        trackData.put("operateStatus", track != null);
+        trackData.put("createTime", track != null ? DateUtils.format(track.getCreateTime(), DateUtils.DATE_TIME_PATTERN) : null);
+        trackData.put("status", CarWaybillDetailEnum.WAIT_APPROVAL.getCode());
+        trackData.put("statusName", CarWaybillDetailEnum.WAIT_APPROVAL.getName());
+        trackList.add(trackData);
+
+        //运单子单
+        List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskMapper.findByWOrderId(wOrderId);
+        List<Long> lOrderIds = subtasks.stream().map(KwtWaybillOrderSubtask::getLOrderId).toList();
+        List<KwtLogisticsOrderUnit> units = logisticsOrderUnitMapper.selectCompanyBylOrderId(lOrderIds, null);
+        String checkFirmName = units.stream().filter(item -> item.getUnitType().equals(NumberConstant.ONE)).map(KwtLogisticsOrderUnit::getFirmName).collect(Collectors.joining(", "));
+        String carrierFirmName = units.stream().filter(item -> item.getUnitType().equals(NumberConstant.TWO)).map(KwtLogisticsOrderUnit::getFirmName).collect(Collectors.joining(", "));
+
+        List<KwtWaybillOrderTicket> waybillOrderTicketV1 = kwtWaybillOrderTicketMapper.findWaybillOrderTicketV1(wOrderId, null, null, null);
+        String loadUrls = "";
+        String downUrls = "";
+        if (CollectionUtils.isNotEmpty(waybillOrderTicketV1)) {
+            Map<Integer, List<KwtWaybillOrderTicket>> collect = waybillOrderTicketV1.stream().collect(Collectors.groupingBy(KwtWaybillOrderTicket::getType));
+            List<KwtWaybillOrderTicket> kwtWaybillOrderTickets = collect.get(Global.NUMERICAL_ONE);
+            if (CollectionUtils.isNotEmpty(kwtWaybillOrderTickets)) {
+                loadUrls = kwtWaybillOrderTickets.stream().map(item -> FileUtils.splice(item.getUrls())).collect(Collectors.joining(Global.COMMA));
+            }
+
+            List<KwtWaybillOrderTicket> kwtWaybillOrderTickets1 = collect.get(Global.NUMERICAL_TWO);
+            if (CollectionUtils.isNotEmpty(kwtWaybillOrderTickets1)) {
+                downUrls = kwtWaybillOrderTickets1.stream().map(item -> FileUtils.splice(item.getUrls())).collect(Collectors.joining(Global.COMMA));
+            }
+        }
+
+        //数据拼接
+        Map<String, Object> result = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        result.put("wOrderId", wOrderId);
+        result.put("wOrderNo", waybillOrder.getWOrderNo());
+        result.put("status", waybillOrder.getStatus());
+        result.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
+        result.put("truckNo", waybillOrder.getTruckNo());
+        result.put("driverName", waybillOrder.getDriverName());
+        result.put("driverPhone", waybillOrder.getDriverPhone());
+        result.put("driverIdcard", waybillOrder.getDriverIdcard());
+        result.put("createTime", DateUtils.format(waybillOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
+        result.put("checkFirmName", checkFirmName);
+        result.put("carrierFirmName", carrierFirmName);
+        result.put("trackList", trackList);
+        result.put("loadUrls", loadUrls);
+        result.put("downUrls", downUrls);
+        return HttpResult.ok(result);
+    }
+
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов