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

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

czh 2 лет назад
Родитель
Сommit
9a7a5decdd

+ 153 - 0
sckw-auth/src/main/resources/bootstrap-lfdc.yml

@@ -0,0 +1,153 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true
+  data:
+    redis:
+      host: 10.10.10.230
+      password: dev
+      port: 6379
+      database: 1
+      timeout: 10000
+#oss上传
+aliyun:
+  oss:
+    endpoint: oss-cn-chengdu.aliyuncs.com
+    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+    bucket: kaiwu-saas
+#直接放行的请求链接
+links: /auth/login,/auth/register,/auth/resetPassword,/auth/updatePassword,/auth/forgetPassword,/auth/auth,/auth/smsAuth
+
+#是否允许一个账号绑定多个角色
+isBindManyRole: 0
+#
+#    sentinel:
+#      transport:
+#        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+#        port: 8719  #默认8719端口,如果被占用会向上扫描。
+#        #控制台地址
+#        dashboard: 127.0.0.1:19527
+#      log:
+#        #日志路径
+#        dir: logs/sentinel
+#        # 默认将调用链路收敛,导致链路流控效果无效
+#        web-context-unify: false
+#        #持久化nacos配置中
+#      datasource:
+#        #sentinel-rule: # 唯一名称可自定义
+#        #限流
+#        flow:
+#          nacos:
+#            # 设置Nacos的连接地址、命名空间和Group ID
+#            namespace: sckw-service-platform-dev
+#            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            # username: ${spring.cloud.nacos.discovery.username}
+#            # password: ${spring.cloud.nacos.discovery.password}
+#            # 设置Nacos中配置文件的命名规则
+#            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+#            data-id: sckw-auth-sentinel-flow-rules
+#            group-id: SENTINEL_GROUP
+#            data-type: json
+#            # 必填的重要字段,指定当前规则类型是"限流"
+#            rule-type: flow
+#        #熔断
+#        degrade:
+#          nacos:
+#            namespace: sckw-service-platform-dev
+#            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            #data-id: ${spring.application.name}-sentinel-degrade-rules
+#            data-id: sckw-auth-sentinel-degrade-rules
+#            group-id: SENTINEL_GROUP
+#            #熔断
+#            rule-type: degrade
+#      #取消慢加载
+#      eager: true
+#  data:
+#    redis:
+#      #redis机器ip
+#      host: 127.0.0.1
+#      #redis端口
+#      port: 6379
+#      #redis密码
+#      password:
+#      #数据库
+#      database: 1
+#      #redis超时时间(毫秒),如果不设置,取默认值2000
+#      timeout: 10000
+#      #最大空闲数
+#      maxIdle: 300
+#        #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
+#        #maxActive=600
+#        #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
+#      maxTotal: 1000
+#        #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
+#      maxWaitMillis: 1000
+#        #连接的最小空闲时间 默认1800000毫秒(30分钟)
+#      minEvictableIdleTimeMillis: 300000
+#        #每次释放连接的最大数目,默认3
+#      numTestsPerEvictionRun: 1024
+#        #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
+#      timeBetweenEvictionRunsMillis: 30000
+#        #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
+#      testOnBorrow: true
+#        #在空闲时检查有效性, 默认false
+#      testWhileIdle: true
+#        #连接池最大连接数(如果配置<=0,则没有限制)
+#      jedis:
+#        pool:
+#          max-active: -1
+#  datasource:
+#    dynamic:
+#      primary: master #设置默认的数据源或者数据源组,默认值即为master
+#      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+#      datasource:
+#        master:
+#          url: jdbc:mysql://10.10.10.230:3306/sckw_system?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
+#          username: sckw_dev
+#          password: Yy123...
+#          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
+#        slave_1:
+#          url: jdbc:mysql://10.10.10.230:3306/sckw_system?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
+#          username: sckw_dev
+#          password: Yy123...
+#          driver-class-name: com.mysql.jdbc.Driver
+#
+#dubbo:
+#  application:
+#    name: auth-dubbo-server
+#    # 该配置在producer-server中是没有的,但是在consumer这里要配置一下
+#    # 如果不配置这个QOS的端口,它会延用dubbo自动生成的端口,在启动的时候,QOS注册就会提示该端口已经被使用的错误
+#    # 虽然启动时有打印端口已经被使用的错误,但是依旧可以正常启动服务,并且dubbo也可以正常调用,但是为了解决启动报错还是加上这个端口
+#    # 这个也是apache官方给出的解决方案,这个端口不能给-1,它不会自动找到一个可用的端口,给-1会报错,端口1-65535自己选择一个
+#    qos-port: 3334
+#  protocol:
+#    name: dubbo
+#    # port为-1表示自动找一个可用的端口
+#    port: -1
+#  registry:
+#    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+#    group: ${spring.cloud.nacos.config.group}
+#    protocol: nacos
+#
+#links: /auth/login,/kwsUser/resetPassword,/kwsUser/updatePassword,/kwsUser/forgetPassword

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

@@ -54,11 +54,11 @@ public enum CarWaybillEnum {
      */
     REVOKED(11, "revoked", "11", "单趟撤回"),
     /**
-     * 已核单-不通过
+     * 已核单-不通过[审核不通过]
      */
-    APPROVAL_NO_PASS(12, "revoked", "12", "审核不通过"),
+    APPROVAL_NO_PASS(12, "revoked", "12", "核单驳回"),
     /**
-     * 已核单-不通过
+     * 单证更新审核中
      */
     APPROVAL_IN(13, "approvalIn", "13", "单证更新审核中"),
     ;

+ 164 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillQueryEnum.java

@@ -0,0 +1,164 @@
+package com.sckw.core.model.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 车辆运单状态枚举[仅查询使用]
+ * @date 2023-07-14 14:07:23
+ */
+public enum CarWaybillQueryEnum {
+    /**
+     * 待接单
+     */
+    PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
+    /**
+     * 待出车
+     */
+    PENDING_VEHICLE(2, "pendingVehicle", "2", "待出车"),
+    /**
+     * 已出车
+     */
+    EXIT_COMPLETED(3, "exitCompleted", "3", "已出车"),
+    /**
+     * 到达装货点
+     */
+    WAIT_LOADING(4, "waitLoading", "4", "到达装货点"),
+    /**
+     * 已装货
+     */
+    COMPLETION_LOADING(5, "completionLoading", "5", "已装货"),
+    /**
+     * 到达卸货点
+     */
+    WAIT_UNLOADING(6, "waitUnloading", "6", "到达卸货点"),
+    /**
+     * 已卸货
+     */
+    COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
+    /**
+     * 已核-通过
+     */
+    APPROVAL_PASS(8, "approvalPass", "8", "审核通过"),
+    /**
+     * 拒接单
+     */
+    REJECT_ORDER(9, "rejectOrder", "9", "拒接单"),
+    /**
+     * 拒出车
+     */
+    REFUSE_TRAFFIC(10, "refuseTraffic", "10", "拒出车"),
+    /**
+     * 已撤销
+     */
+    REVOKED(11, "revoked", "11", "单趟撤回"),
+    /**
+     * 已核单-不通过[审核不通过]
+     */
+    APPROVAL_NO_PASS(12, "revoked", "12", "核单驳回"),
+    /**
+     * 单证更新审核中
+     */
+    APPROVAL_IN(13, "approvalIn", "13", "单证更新审核中"),
+
+    /**
+     * 单证审核
+     */
+    DOCUMENT_CHECK(100, "documentCheck", "100", "单证审核"),
+
+    /**
+     * 已作废
+     */
+    ABROGATE(200, "abrogate", "200", "已作废"),
+    ;
+
+    private final Integer code;
+    private final String value;
+    private final String status;
+    private final String destination;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public String getDestination() {
+        return destination;
+    }
+
+    CarWaybillQueryEnum(Integer code, String value, String status, String destination) {
+        this.code = code;
+        this.value = value;
+        this.status = status;
+        this.destination = destination;
+    }
+
+    public static String getLogisticsOrderValue(Integer code) {
+        for (CarWaybillQueryEnum waybillEnum : CarWaybillQueryEnum.values()) {
+            if (waybillEnum.getCode().equals(code)) {
+                return waybillEnum.getValue();
+            }
+        }
+        return null;
+    }
+
+    public static String getWaybillOrderDestination(String status) {
+        for (CarWaybillQueryEnum waybillEnum : CarWaybillQueryEnum.values()) {
+            if (waybillEnum.getStatus().equals(status)) {
+                return waybillEnum.getDestination();
+            }
+        }
+        return null;
+    }
+
+    public static String getName(Integer code) {
+        for (CarWaybillQueryEnum waybillEnum : CarWaybillQueryEnum.values()) {
+            if (waybillEnum.getCode().equals(code)) {
+                return waybillEnum.getDestination();
+            }
+        }
+        return null;
+    }
+
+    public static List<Integer> getCodes() {
+        List<Integer> codes = new ArrayList<>();
+        for (CarWaybillQueryEnum waybillEnum : CarWaybillQueryEnum.values()) {
+            codes.add(waybillEnum.getCode());
+        }
+        return codes;
+    }
+
+    public static List<String> getStringCodes() {
+        List<String> codes = new ArrayList<>();
+        for (CarWaybillQueryEnum waybillEnum : CarWaybillQueryEnum.values()) {
+            codes.add(waybillEnum.getStatus());
+        }
+        return codes;
+    }
+
+    /**
+     * @param code 状态码
+     * @desc 是否可以变更司机/车辆
+     * @author zk
+     * @date 2023/8/2
+     **/
+    public static boolean changeDriverAndTruck(int code) {
+        if (code == CarWaybillQueryEnum.COMPLETION_UNLOADING.getCode()
+                || code == CarWaybillQueryEnum.APPROVAL_PASS.getCode()
+                || code == CarWaybillQueryEnum.REJECT_ORDER.getCode()
+                || code == CarWaybillQueryEnum.REFUSE_TRAFFIC.getCode()
+                || code == CarWaybillQueryEnum.REVOKED.getCode()
+                || code == CarWaybillQueryEnum.APPROVAL_NO_PASS.getCode()) {
+            return false;
+        }
+        return true;
+    }
+}

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Result.java

@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 /**
  * @description:
  * @author: LengFaQiang
- * @copyright 北京联众信安科技有限公司
+ * @copyright
  * @create: 2022-01-27 10:17
  **/
 public class Result {

+ 1 - 1
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TableTops.java

@@ -23,7 +23,7 @@ public class TableTops {
     private Integer total;
 
     /**
-     * 数量
+     * 排序
      */
     private Integer sort;
 }

+ 29 - 0
sckw-modules/sckw-file/src/main/resources/bootstrap-lfdc.yml

@@ -0,0 +1,29 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true
+file:
+  list:
+    oss: pdf,gif,jpg,jpeg,png,doc,docx,xls,xlsx,PDF,GIF,JPG,JGEG,PNG,DOC,DOCX,XLS,XLSX,HEIC,heic
+    aliyun: pdf,gif,jpg,jpeg,png,doc,docx,xls,xlsx
+    qiniu: pdf,gif,jpg,jpeg,png,doc,docx,xls,xlsx

+ 209 - 0
sckw-modules/sckw-manage/src/main/resources/bootstrap-lfdc.yml

@@ -0,0 +1,209 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true
+
+message:
+  logistics:
+    order:
+      #托运订单地址
+      consignLogisticsOrderUrl: /orderManagement/consignmentOrder
+      #承运订单地址
+      carriageLogisticsOrderUrl: /orderManagement/acceptanceOrder
+#spring:
+#  rabbitmq:
+#    username: admin
+#    password: admin
+#    host: 10.10.10.138
+#    port: 5672
+#    virtual-host: /
+#  cloud:
+#    nacos:
+#      discovery:
+#        # 服务注册地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # nacos用户名
+#        username: nacos
+#        # nacos密码
+#        password: nacos
+#        # 共享配置
+#        group: sckw-service-platform
+#        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+#      #        weight: 100
+#      config:
+#        # 配置中心地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 配置文件格式
+#        file-extension: yaml
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # 共享配置
+#        group: sckw-service-platform
+#        enabled: true
+#    stream:
+#      bindings:
+#        sckwSms-out-0:
+#          destination: sckw-sms
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#        sckwMessage-out-0:
+#          destination: sckw-message
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#      binders:
+#        defaultRabbit:
+#          type: rabbit
+#          environment:
+#            spring:
+#              rabbitmq:
+#                virtual-host: /
+#                host: 39.104.134.114
+#                port: 5672
+#                username: wph
+#                password: Yy123...
+#    # sentinel降级配置
+#    sentinel:
+#      transport:
+#        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+#        port: 8719  #默认8719端口,如果被占用会向上扫描。
+#        #控制台地址
+#        #dashboard: 47.108.162.14:19527
+#        dashboard: 127.0.0.1:19527
+#      log:
+#        #日志路径
+#        dir: logs/sentinel
+#        # 默认将调用链路收敛,导致链路流控效果无效
+#        web-context-unify: false
+#        #持久化nacos配置中
+#      datasource:
+#        #sentinel-rule: # 唯一名称可自定义
+#        #限流
+#        flow:
+#          nacos:
+#            # 设置Nacos的连接地址、命名空间和Group ID
+#            namespace:  sckw-service-platform-dev
+#            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+#            # username: ${spring.cloud.nacos.discovery.username}
+#            # password: ${spring.cloud.nacos.discovery.password}
+#            # 设置Nacos中配置文件的命名规则
+#            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+#            data-id:  sckw-file-sentinel-flow-rules
+#            group-id: SENTINEL_GROUP
+#            data-type: json
+#            # 必填的重要字段,指定当前规则类型是"限流"
+#            rule-type: flow
+#        #熔断
+#        degrade:
+#          nacos:
+#            namespace:  sckw-service-platform-dev
+#            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            #data-id: ${spring.application.name}-sentinel-degrade-rules
+#            data-id: sckw-file-sentinel-degrade-rules
+#            group-id: SENTINEL_GROUP
+#            #熔断
+#            rule-type: degrade
+#      #取消慢加载
+#      eager: true
+#  datasource:
+#    dynamic:
+#      seata: true
+##sfs:
+##  nacos:
+##    server-addr: 127.0.0.1:8848
+##    namespace: 967df0d8-156b-441a-a5ab-615b4a865168
+##    group: MY_GROUP
+##
+##    nacos:
+##      server-addr: ${sfs.nacos.server-addr}
+##      namespace: ${sfs.nacos.namespace}
+##      group: ${sfs.nacos.group}
+#
+##seata:
+##  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+##  # 事务分组名称,要和服务端对应
+##  tx-service-group: sckw-transport-seata-service-group
+##  service:
+##    vgroup-mapping:
+##      # key是事务分组名称 value要和服务端的机房名称保持一致
+##      sckw-transport-seata-service-group: default
+##  registry:
+##    # 指定nacos作为注册中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      #      group: SEATA_GROUP
+##      group: ${spring.cloud.nacos.discovery.group}
+##  config:
+##    # 指定nacos作为配置中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      group: ${spring.cloud.nacos.discovery.group}
+##  application-id: ${spring.application.name}
+##  #  当前不生效,使用驼峰
+##  enabled: true
+##  #  enable-auto-data-source-proxy: false
+##  enableAutoDataSourceProxy: false
+##  application-id: sckw-seata-file
+## 支持feign对sentinel支持
+##feign:
+##  sentinel:
+##    enabled: true
+#
+#dubbo:
+#  application:
+#    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+#    name: transport-dubbo-server
+#  protocol:
+#    name: dubbo
+#    port: -1
+#    prefer-serialization: java
+#  registry:
+#    # 配置dubbo的注册中心为nacos
+#    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+#    group: ${spring.cloud.nacos.config.group}
+#    protocol: nacos
+#    #use-as-config-center: false
+#    #use-as-metadata-center: false
+#aliyun:
+#  oss:
+#    endpoint: oss-cn-chengdu.aliyuncs.com
+#    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+#    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+#    bucket: kaiwu-saas
+#links:
+#isBindManyRole:
+#mybatis-plus:
+#  configuration:
+#    # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台)
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 209 - 0
sckw-modules/sckw-message/src/main/resources/bootstrap-lfdc.yml

@@ -0,0 +1,209 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.230:8848
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.230:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw_lfdc
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true
+
+message:
+  logistics:
+    order:
+      #托运订单地址
+      consignLogisticsOrderUrl: /orderManagement/consignmentOrder
+      #承运订单地址
+      carriageLogisticsOrderUrl: /orderManagement/acceptanceOrder
+#spring:
+#  rabbitmq:
+#    username: admin
+#    password: admin
+#    host: 10.10.10.138
+#    port: 5672
+#    virtual-host: /
+#  cloud:
+#    nacos:
+#      discovery:
+#        # 服务注册地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # nacos用户名
+#        username: nacos
+#        # nacos密码
+#        password: nacos
+#        # 共享配置
+#        group: sckw-service-platform
+#        # 权重 1-100 数值越大权重越大分配的流量就越大,通常结合权重负载均衡策略
+#      #        weight: 100
+#      config:
+#        # 配置中心地址
+##        server-addr: 47.108.162.14:8848
+#        server-addr: 127.0.0.1:8848
+#        # 配置文件格式
+#        file-extension: yaml
+#        # 命名空间
+#        namespace: sckw-service-platform-dev
+#        # 共享配置
+#        group: sckw-service-platform
+#        enabled: true
+#    stream:
+#      bindings:
+#        sckwSms-out-0:
+#          destination: sckw-sms
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#        sckwMessage-out-0:
+#          destination: sckw-message
+#          content-type: application/json
+#          default-binder: defaultRabbit
+#          group: sckw
+#      binders:
+#        defaultRabbit:
+#          type: rabbit
+#          environment:
+#            spring:
+#              rabbitmq:
+#                virtual-host: /
+#                host: 39.104.134.114
+#                port: 5672
+#                username: wph
+#                password: Yy123...
+#    # sentinel降级配置
+#    sentinel:
+#      transport:
+#        client-ip: ${spring.cloud.client.ip-address} # 获取本机IP地址
+#        port: 8719  #默认8719端口,如果被占用会向上扫描。
+#        #控制台地址
+#        #dashboard: 47.108.162.14:19527
+#        dashboard: 127.0.0.1:19527
+#      log:
+#        #日志路径
+#        dir: logs/sentinel
+#        # 默认将调用链路收敛,导致链路流控效果无效
+#        web-context-unify: false
+#        #持久化nacos配置中
+#      datasource:
+#        #sentinel-rule: # 唯一名称可自定义
+#        #限流
+#        flow:
+#          nacos:
+#            # 设置Nacos的连接地址、命名空间和Group ID
+#            namespace:  sckw-service-platform-dev
+#            server-addr:  ${spring.cloud.nacos.discovery.server-addr}
+#            # username: ${spring.cloud.nacos.discovery.username}
+#            # password: ${spring.cloud.nacos.discovery.password}
+#            # 设置Nacos中配置文件的命名规则
+#            #            data-id:  ${spring.application.name}-sentinel-flow-rules
+#            data-id:  sckw-file-sentinel-flow-rules
+#            group-id: SENTINEL_GROUP
+#            data-type: json
+#            # 必填的重要字段,指定当前规则类型是"限流"
+#            rule-type: flow
+#        #熔断
+#        degrade:
+#          nacos:
+#            namespace:  sckw-service-platform-dev
+#            server-addr: ${spring.cloud.nacos.discovery.server-addr}
+#            #data-id: ${spring.application.name}-sentinel-degrade-rules
+#            data-id: sckw-file-sentinel-degrade-rules
+#            group-id: SENTINEL_GROUP
+#            #熔断
+#            rule-type: degrade
+#      #取消慢加载
+#      eager: true
+#  datasource:
+#    dynamic:
+#      seata: true
+##sfs:
+##  nacos:
+##    server-addr: 127.0.0.1:8848
+##    namespace: 967df0d8-156b-441a-a5ab-615b4a865168
+##    group: MY_GROUP
+##
+##    nacos:
+##      server-addr: ${sfs.nacos.server-addr}
+##      namespace: ${sfs.nacos.namespace}
+##      group: ${sfs.nacos.group}
+#
+##seata:
+##  # seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
+##  # 事务分组名称,要和服务端对应
+##  tx-service-group: sckw-transport-seata-service-group
+##  service:
+##    vgroup-mapping:
+##      # key是事务分组名称 value要和服务端的机房名称保持一致
+##      sckw-transport-seata-service-group: default
+##  registry:
+##    # 指定nacos作为注册中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      #      group: SEATA_GROUP
+##      group: ${spring.cloud.nacos.discovery.group}
+##  config:
+##    # 指定nacos作为配置中心
+##    type: nacos
+##    nacos:
+##      server-addr: ${spring.cloud.nacos.discovery.server-addr}
+##      #server-addr: 47.108.162.14:8848
+##      namespace: ${spring.cloud.nacos.discovery.namespace}
+##      group: ${spring.cloud.nacos.discovery.group}
+##  application-id: ${spring.application.name}
+##  #  当前不生效,使用驼峰
+##  enabled: true
+##  #  enable-auto-data-source-proxy: false
+##  enableAutoDataSourceProxy: false
+##  application-id: sckw-seata-file
+## 支持feign对sentinel支持
+##feign:
+##  sentinel:
+##    enabled: true
+#
+#dubbo:
+#  application:
+#    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+#    name: transport-dubbo-server
+#  protocol:
+#    name: dubbo
+#    port: -1
+#    prefer-serialization: java
+#  registry:
+#    # 配置dubbo的注册中心为nacos
+#    address: nacos://${spring.cloud.nacos.discovery.server-addr}
+#    group: ${spring.cloud.nacos.config.group}
+#    protocol: nacos
+#    #use-as-config-center: false
+#    #use-as-metadata-center: false
+#aliyun:
+#  oss:
+#    endpoint: oss-cn-chengdu.aliyuncs.com
+#    accessKeyId: LTAI5tPEbubCGq5Rdwygbz4Q
+#    secret: 7mQLWMaBJeZPRV1SRGogctYGXwppjQ
+#    bucket: kaiwu-saas
+#links:
+#isBindManyRole:
+#mybatis-plus:
+#  configuration:
+#    # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台)
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

@@ -3,6 +3,7 @@ package com.sckw.report.service;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.enums.CarWaybillEnum;
+import com.sckw.core.model.enums.CarWaybillQueryEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.BeanUtils;
@@ -154,7 +155,8 @@ public class KwTransportService {
      * @date 2023/07/21
      */
     public HttpResult getWaybillOrders(WaybillOrderListSelect query) throws ParseException {
-        Criteria criteria = buildWaybillOrdersQuery(query);
+//        Criteria criteria = buildWaybillOrdersQuery(query);
+        Criteria criteria = newBuildWaybillOrdersQuery(query);
         Query queryFormat = new Query(criteria);
         // in查询
         List<Long> wOrderIds = StringUtils.splitStrToList(query.getIds(), ",", Long.class);
@@ -270,6 +272,103 @@ public class KwTransportService {
         return criteria;
     }
 
+
+    /**
+     * 构造运单关联查询条件
+     *
+     * @param query
+     * @return
+     */
+    public Criteria newBuildWaybillOrdersQuery(WaybillOrderQuery query) {
+        // 模糊匹配
+        // 根据条件查询所有并排序,且分页
+        // 设置模糊查询匹配规则  忽略大小写
+        // 创建条件对象
+        Criteria criteria = new Criteria();
+        criteria.and("entId").is(LoginUserHolder.getEntId());
+        criteria.and("delFlag").is(NumberConstant.ZERO);
+
+        /**
+         * 【拒绝接单】、【拒绝出车】、【已撤销】状态在列表页的表头,都归类到【已作废】状态中;
+         *
+         * 【审核通过】、【核单驳回】、【修改审核】状态都归类于【单证审核】大类状态下
+         * */
+        if (StringUtils.isNotBlank(query.getStatus()) && (!"all".equals(query.getStatus()))) {
+            List<Integer> statuses = new ArrayList<>();
+            if (query.getStatus().equals(CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus())) {
+                statuses.add(CarWaybillEnum.APPROVAL_IN.getCode());
+                statuses.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+                statuses.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+                criteria.and("status").in(statuses);
+            } else if (query.getStatus().equals(String.valueOf(CarWaybillQueryEnum.ABROGATE.getCode()))) {
+                statuses.clear();
+                statuses.add(CarWaybillEnum.REJECT_ORDER.getCode());
+                statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode());
+                statuses.add(CarWaybillEnum.REVOKED.getCode());
+                criteria.and("status").in(statuses);
+            }else {
+                criteria.and("status").is(Integer.valueOf(query.getStatus()));
+            }
+        }
+        // 装载时间
+        if (Objects.nonNull(query.getStartLoadTime()) && Objects.nonNull(query.getEndLoadTime())) {
+            criteria.and("loadTime").gte(query.getStartLoadTime()).lte(DateUtil.offsetDay(query.getEndLoadTime(), 1));
+        } else if (Objects.nonNull(query.getStartLoadTime())) {
+            criteria.and("loadTime").gte(query.getStartLoadTime());
+        } else if (Objects.nonNull(query.getEndLoadTime())) {
+            criteria.and("loadTime").lte(DateUtil.offsetDay(query.getEndLoadTime(), 1));
+        }
+        // 派车时间
+        if (Objects.nonNull(query.getStartSendCarTime()) && Objects.nonNull(query.getEndSendCarTime())) {
+            criteria.and("sendCarTime").gte(query.getStartSendCarTime()).lte(DateUtil.offsetDay(query.getEndSendCarTime(), 1));
+        } else if (Objects.nonNull(query.getStartSendCarTime())) {
+            criteria.and("sendCarTime").gte(query.getStartSendCarTime());
+        } else if (Objects.nonNull(query.getEndSendCarTime())) {
+            criteria.and("sendCarTime").lte(DateUtil.offsetDay(query.getEndSendCarTime(), 1));
+        }
+        // 卸货时间
+        if (Objects.nonNull(query.getStartUnloadTime()) && Objects.nonNull(query.getEndUnloadTime())) {
+            criteria.and("unloadTime").gte(query.getStartUnloadTime()).lte(DateUtil.offsetDay(query.getEndUnloadTime(), 1));
+        } else if (Objects.nonNull(query.getStartUnloadTime())) {
+            criteria.and("unloadTime").gte(query.getStartUnloadTime());
+        } else if (Objects.nonNull(query.getEndUnloadTime())) {
+            criteria.and("unloadTime").lte(DateUtil.offsetDay(query.getEndUnloadTime(), 1));
+        }
+        // 装货地址
+        String loadCode = query.getLoadCityCode();
+        if (StringUtils.isNotBlank(loadCode)) {
+            switch (query.getLoadCityCodeLevel()) {
+                case 1 -> criteria.and("loadCityCode")
+                        .regex(Pattern.compile("^" + loadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 2 -> criteria.and("loadCityCode")
+                        .regex(Pattern.compile("^" + loadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 3 -> criteria.and("loadCityCode").is(loadCode);
+            }
+        }
+        // 卸货地址
+        String unloadCode = query.getUnloadCityCode();
+        if (StringUtils.isNotBlank(unloadCode)) {
+            switch (query.getUnloadCityCodeLevel()) {
+                case 1 -> criteria.and("unloadCityCode")
+                        .regex(Pattern.compile("^" + unloadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 2 -> criteria.and("unloadCityCode")
+                        .regex(Pattern.compile("^" + unloadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 3 -> criteria.and("unloadCityCode").is(unloadCode);
+            }
+        }
+        // 多条件模糊查询
+        List<Criteria> orCriteria = new ArrayList<>();
+        if (StringUtils.isNotBlank(query.getKeywords())) {
+            Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
+            orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
+            orCriteria.add(Criteria.where("truckNo").regex(pattern));
+            orCriteria.add(Criteria.where("driverName").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            criteria.orOperator(orCriteria);
+        }
+        return criteria;
+    }
+
     /**
      * 运单管理-运单列表 top 统计
      *
@@ -279,7 +378,8 @@ public class KwTransportService {
      * @date 2023/07/21
      */
     public HttpResult getWayBillStatistics(WaybillOrderQuery query) {
-        Criteria criteria = buildWaybillOrdersQuery(query);
+//        Criteria criteria = buildWaybillOrdersQuery(query);
+        Criteria criteria = newBuildWaybillOrdersQuery(query);
         Aggregation aggregation = Aggregation.newAggregation(
                 Aggregation.match(criteria),
                 Aggregation.group("status").count().as("total"),
@@ -294,15 +394,21 @@ public class KwTransportService {
         topTotal.setValue("all");
         topTotal.setTotal(0);
 
-
+        //已作废
         TableTops topExpired = new TableTops();
-        topExpired.setName("已作废");
-        topExpired.setValue(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
-        topExpired.setSort(NumberConstant.ONE_ZERO_ZERO);
+        topExpired.setName(CarWaybillQueryEnum.ABROGATE.getDestination());
+        topExpired.setValue(CarWaybillQueryEnum.ABROGATE.getStatus());
         topExpired.setTotal(0);
 
+        //单据审核
+        TableTops documentCheck = new TableTops();
+        documentCheck.setName(CarWaybillQueryEnum.DOCUMENT_CHECK.getDestination());
+        documentCheck.setValue(CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus());
+        documentCheck.setTotal(0);
+
         list.addAll(results);
         list.add(topExpired);
+        list.add(documentCheck);
 //        ArrayList<Long> expiredStatuses = new ArrayList<>();
 //        expiredStatuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
 //        expiredStatuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
@@ -332,7 +438,10 @@ public class KwTransportService {
 //            }
 //        }
         /**数据统计计算*/
-        orderNumberCount(list);
+        //单证审核合并计算
+        documentCheckNumberCount(list);
+        //已作废合并计算
+        abrogateNumberCount(list);
         /**补齐全部状态值*/
         List<String> codeList = CarWaybillEnum.getStringCodes();
         List<String> collect = list.stream().map(e -> e.getValue()).collect(Collectors.toList());
@@ -362,13 +471,16 @@ public class KwTransportService {
                     && (!CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(tops.getValue()))
                     && (!CarWaybillEnum.REVOKED.getStatus().equals(tops.getValue()))
                     && (!CarWaybillEnum.REJECT_ORDER.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_IN.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_PASS.getStatus().equals(tops.getValue()))
             ) {
                 returnList.add(tops);
             }
         }
         /**排序*/
         returnList = returnList.stream().sorted(Comparator.comparing(TableTops::getSort)).collect(Collectors.toList());
-        returnList.add(0,topTotal);
+        returnList.add(0, topTotal);
         // 总计
         topTotal.setTotal(returnList.parallelStream().mapToInt(item -> item.getTotal()).sum());
         // 查询结果
@@ -380,17 +492,40 @@ public class KwTransportService {
      *
      * @param results
      */
-    private void orderNumberCount(List<TableTops> results) {
+    private void documentCheckNumberCount(List<TableTops> results) {
+        if (!org.springframework.util.CollectionUtils.isEmpty(results)) {
+            //单证审核计算包含审核通过、审核更新审核中以及审核不通过
+            Integer documentCheck = 0;
+            for (TableTops result : results) {
+                //单证审核计算
+                if (CarWaybillEnum.APPROVAL_IN.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.APPROVAL_PASS.getStatus().equals(result.getValue()))
+                {
+                    documentCheck = documentCheck + result.getTotal();
+                }
+            }
+            for (TableTops result : results) {
+                if (CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus().equals(result.getValue())) {
+                    result.setTotal(documentCheck);
+                    result.setSort(CarWaybillQueryEnum.DOCUMENT_CHECK.getCode());
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * 统计top计算
+     *
+     * @param results
+     */
+    private void abrogateNumberCount(List<TableTops> results) {
         if (!org.springframework.util.CollectionUtils.isEmpty(results)) {
-            //已卸货包含本身以及审核不通过
-            Integer orderCancel = 0;
             //已作废包含本身以及拒绝出车、已撤销、拒绝接单
             Integer orderCancellation = 0;
             for (TableTops result : results) {
-                if (CarWaybillEnum.COMPLETION_UNLOADING.getStatus().equals(result.getValue())
-                        || CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(result.getValue())) {
-                    orderCancel = orderCancel + result.getTotal();
-                }
+                //已作废计算
                 if (CarWaybillEnum.REJECT_ORDER.getStatus().equals(result.getValue())
                         || CarWaybillEnum.REVOKED.getStatus().equals(result.getValue())
                         || CarWaybillEnum.REFUSE_TRAFFIC.getStatus().equals(result.getValue())
@@ -399,13 +534,9 @@ public class KwTransportService {
                 }
             }
             for (TableTops result : results) {
-                if (CarWaybillEnum.COMPLETION_UNLOADING.getStatus().equals(result.getValue())) {
-                    result.setTotal(orderCancel);
-                    result.setSort(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-                }
-                if (String.valueOf(NumberConstant.ONE_ZERO_ZERO).equals(result.getValue())) {
+                if (CarWaybillQueryEnum.ABROGATE.getStatus().equals(result.getValue())) {
                     result.setTotal(orderCancellation);
-                    result.setSort(NumberConstant.ONE_ZERO_ZERO);
+                    result.setSort(CarWaybillQueryEnum.ABROGATE.getCode());
                 }
             }
         }
@@ -445,7 +576,7 @@ public class KwTransportService {
         for (SckwWaybillOrder waybillOrder : list) {
             CarWaybillVo vo = new CarWaybillVo();
             vo.setWOrderNo(waybillOrder.getWOrderNo() == null ?
-                    null : String.valueOf(waybillOrder.getWOrderNo()));
+                    null : waybillOrder.getWOrderNo());
             vo.setWOrderId(waybillOrder.getWOrderId() == null ?
                     String.valueOf(waybillOrder.get_id()) : String.valueOf(waybillOrder.getWOrderId()));
             vo.setTruckNo(waybillOrder.getTruckNo());
@@ -460,12 +591,14 @@ public class KwTransportService {
                 typeString = "循环";
             }
             vo.setTypeLabel(typeString);
-            if (status.equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
-                vo.setStatus(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
-            } else {
-                vo.setStatus(waybillOrder.getStatus() == null ?
-                        null : String.valueOf(waybillOrder.getStatus()));
-            }
+//            if (status.equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
+//                vo.setStatus(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
+//            } else {
+//                vo.setStatus(waybillOrder.getStatus() == null ?
+//                        null : String.valueOf(waybillOrder.getStatus()));
+//            }
+            vo.setStatus(waybillOrder.getStatus() == null ?
+                    null : String.valueOf(waybillOrder.getStatus()));
             vo.setStatusLabel(CarWaybillEnum.getName(waybillOrder.getStatus()));
             vo.setSendCarTime(waybillOrder.getCreateTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getCreateTime()));

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

@@ -2048,7 +2048,7 @@ public class KwtWaybillOrderService {
         result.put("unloadDetailAddress", unloadAddress != null ? unloadAddress.getDetailAddress() : null);
         result.put("approvalTime", track != null ? track.getCreateTime() : null);
         result.put("approvalOpinions", track != null ? track.getRemark() : null);
-        result.put("approver", usersMap.get(track.getUpdateBy()));
+        result.put("approver", usersMap.get(track != null ? track.getUpdateBy() : null));
         return HttpResult.ok(result);
     }
 

+ 199 - 47
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -5,6 +5,7 @@ import com.sckw.core.common.enums.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.PageResult;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
@@ -42,6 +43,7 @@ import org.springframework.util.ObjectUtils;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * @author jc
@@ -89,7 +91,7 @@ public class WaybillManagementService {
      * @return
      */
     public HttpResult waybillData(Long id) {
-        if (Objects.isNull(id)){
+        if (Objects.isNull(id)) {
             return HttpResult.error("id不能为空");
         }
         WaybillDataVO waybillDataVO = new WaybillDataVO();
@@ -202,7 +204,7 @@ public class WaybillManagementService {
 
         List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper
                 .selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
-                .eq(KwtWaybillOrderTrack::getWOrderId, id));
+                        .eq(KwtWaybillOrderTrack::getWOrderId, id));
         List<WaybillTrackVO> waybillTrackVOS = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
             List<Long> userIds = new ArrayList<>();
@@ -407,7 +409,7 @@ public class WaybillManagementService {
         for (SckwWaybillOrder sckwWaybillOrder : list) {
             WaybillBoardListVO waybillBoardListVO = new WaybillBoardListVO();
             waybillBoardListVO.setWOrderId(String.valueOf(sckwWaybillOrder.getWOrderId()));
-            waybillBoardListVO.setWOrderNo(String.valueOf(sckwWaybillOrder.getWOrderNo()));
+            waybillBoardListVO.setWOrderNo(sckwWaybillOrder.getWOrderNo() == null ? null : sckwWaybillOrder.getWOrderNo());
             waybillBoardListVO.setStatus(String.valueOf(sckwWaybillOrder.getStatus()));
             waybillBoardListVO.setType(String.valueOf(sckwWaybillOrder.getType()));
             waybillBoardListVO.setStatusLabel(CarWaybillEnum.getName(sckwWaybillOrder.getStatus()));
@@ -442,7 +444,7 @@ public class WaybillManagementService {
             // 运单进度
             List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper
                     .selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
-                    .eq(KwtWaybillOrderTrack::getWOrderId, sckwWaybillOrder.getWOrderId()));
+                            .eq(KwtWaybillOrderTrack::getWOrderId, sckwWaybillOrder.getWOrderId()));
 
             if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
                 List<Long> userIds = new ArrayList<>();
@@ -498,26 +500,46 @@ public class WaybillManagementService {
         if (CollectionUtils.isNotEmpty(wOrderIds)) {
             Criteria.where("wOrderId").in(wOrderIds);
         }
-        if (StringUtils.isNotBlank(query.getStatus())) {
-            if (query.getStatus().equals(String.valueOf(CarWaybillEnum.COMPLETION_UNLOADING.getCode()))) {
-                List<Integer> _statuses = new ArrayList<>();
-                _statuses.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-                _statuses.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
-                criteria.and("status").in(_statuses);
-            } else if (query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
-                List<Integer> _statuses = new ArrayList<>();
-                _statuses.add(CarWaybillEnum.REJECT_ORDER.getCode());
-                _statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode());
-                _statuses.add(CarWaybillEnum.REVOKED.getCode());
-                criteria.and("status").in(_statuses);
-            } else if (!query.getStatus().equals("all")
-                    && (!query.getStatus().equals(String.valueOf(CarWaybillEnum.COMPLETION_UNLOADING.getCode())))
-                    && (!query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO)))
-            ) {
+//        if (StringUtils.isNotBlank(query.getStatus())) {
+//            if (query.getStatus().equals(String.valueOf(CarWaybillEnum.COMPLETION_UNLOADING.getCode()))) {
+//                List<Integer> _statuses = new ArrayList<>();
+//                _statuses.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+//                _statuses.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+//                criteria.and("status").in(_statuses);
+//            } else if (query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
+//                List<Integer> _statuses = new ArrayList<>();
+//                _statuses.add(CarWaybillEnum.REJECT_ORDER.getCode());
+//                _statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode());
+//                _statuses.add(CarWaybillEnum.REVOKED.getCode());
+//                criteria.and("status").in(_statuses);
+//            } else if (!query.getStatus().equals("all")
+//                    && (!query.getStatus().equals(String.valueOf(CarWaybillEnum.COMPLETION_UNLOADING.getCode())))
+//                    && (!query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO)))
+//            ) {
+//                criteria.and("status").is(Integer.valueOf(query.getStatus()));
+//            }
+//        }
+        /**
+         * 【拒绝接单】、【拒绝出车】、【已撤销】状态在列表页的表头,都归类到【已作废】状态中;
+         *
+         * 【审核通过】、【核单驳回】、【修改审核】状态都归类于【单证审核】大类状态下
+         * */
+        if (StringUtils.isNotBlank(query.getStatus()) && (!"all".equals(query.getStatus()))) {
+            List<Long> statuses = new ArrayList<>();
+            if (query.getStatus().equals(CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus())) {
+                statuses.add(CarWaybillEnum.APPROVAL_IN.getCode().longValue());
+                statuses.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode().longValue());
+                statuses.add(CarWaybillEnum.APPROVAL_PASS.getCode().longValue());
+                criteria.and("status").in(statuses);
+            } else if (query.getStatus().equals(String.valueOf(CarWaybillQueryEnum.ABROGATE.getCode()))) {
+                statuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
+                statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
+                statuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
+                criteria.and("status").in(statuses);
+            } else {
                 criteria.and("status").is(Integer.valueOf(query.getStatus()));
             }
         }
-
         // 装载时间
         if (Objects.nonNull(query.getStartLoadTime()) && Objects.nonNull(query.getEndLoadTime())) {
             criteria.and("loadTime").gte(query.getStartLoadTime()).lte(DateUtil.offsetDay(query.getEndLoadTime(), 1));
@@ -597,51 +619,181 @@ public class WaybillManagementService {
         AggregationResults<TableTops> outputTypeCount = mongoTemplate.aggregate(aggregation, SckwWaybillOrder.class, TableTops.class);
         List<TableTops> results = outputTypeCount.getMappedResults();
         Integer allTotal = 0;
-        Map<String, TableTops> listMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        // 填充默认值
+        List<TableTops> list = new ArrayList<>();
         TableTops topTotal = new TableTops();
         topTotal.setName("全部");
         topTotal.setValue("all");
-        topTotal.setTotal(allTotal);
-        listMap.put("all", topTotal);
-        statuses.forEach(e -> {
-            TableTops top = new TableTops();
-            top.setValue(String.valueOf(e));
-            top.setTotal(0);
-            top.setName(CarWaybillEnum.getName(e));
-            listMap.put(String.valueOf(e), top);
-        });
+        topTotal.setTotal(0);
+
+        //已作废
+        TableTops topExpired = new TableTops();
+        topExpired.setName(CarWaybillQueryEnum.ABROGATE.getDestination());
+        topExpired.setValue(CarWaybillQueryEnum.ABROGATE.getStatus());
+        topExpired.setTotal(0);
+
+        //单据审核
+        TableTops documentCheck = new TableTops();
+        documentCheck.setName(CarWaybillQueryEnum.DOCUMENT_CHECK.getDestination());
+        documentCheck.setValue(CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus());
+        documentCheck.setTotal(0);
+
+        list.addAll(results);
+        list.add(topExpired);
+        list.add(documentCheck);
+
+//        statuses.forEach(e -> {
+//            TableTops top = new TableTops();
+//            top.setValue(String.valueOf(e));
+//            top.setTotal(0);
+//            top.setName(CarWaybillEnum.getName(e));
+//            listMap.put(String.valueOf(e), top);
+//        });
         /**计算总条数*/
-        if (CollectionUtils.isNotEmpty(results)) {
-            for (TableTops result : results) {
-                if (listMap.containsKey(result.getValue())) {
-                    listMap.get(result.getValue()).setTotal(result.getTotal());
+//        if (CollectionUtils.isNotEmpty(results)) {
+//            for (TableTops result : results) {
+//                if (listMap.containsKey(result.getValue())) {
+//                    listMap.get(result.getValue()).setTotal(result.getTotal());
+//                }
+//                allTotal += result.getTotal();
+//            }
+//        }
+
+        /**数据统计计算*/
+        //单证审核合并计算
+        documentCheckNumberCount(list);
+        //已作废合并计算
+        abrogateNumberCount(list);
+        /**补齐全部状态值*/
+        List<String> codeList = CarWaybillEnum.getStringCodes();
+        List<String> collect = list.stream().map(e -> e.getValue()).collect(Collectors.toList());
+        List<String> diffrentList = getDiffrentList(collect, codeList);
+        for (String s : diffrentList) {
+            TableTops top = new TableTops();
+            top.setValue(s);
+            top.setTotal(NumberConstant.ZERO);
+            top.setSort(Integer.valueOf(s));
+            list.add(top);
+        }
+        /**状态赋值翻译*/
+        for (CarWaybillEnum waybillEnum : CarWaybillEnum.values()) {
+            for (TableTops tops : list) {
+                if (waybillEnum.getStatus().equals(tops.getValue())) {
+                    tops.setName(waybillEnum.getDestination());
+                    tops.setSort(waybillEnum.getCode());
+                    continue;
                 }
-                allTotal += result.getTotal();
             }
         }
+//        list.add(topExpired);
+        /**去除不展示统计字段*/
+        List<TableTops> returnList = new ArrayList<>();
+        for (TableTops tops : list) {
+            if ((!CarWaybillEnum.REFUSE_TRAFFIC.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.REVOKED.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.REJECT_ORDER.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_IN.getStatus().equals(tops.getValue()))
+                    && (!CarWaybillEnum.APPROVAL_PASS.getStatus().equals(tops.getValue()))
+            ) {
+                returnList.add(tops);
+            }
+        }
+
+        /**排序*/
+        returnList = returnList.stream().sorted(Comparator.comparing(TableTops::getSort)).collect(Collectors.toList());
+        allTotal = results.stream().collect(Collectors.summingInt(TableTops::getTotal));
         // allTotal= Math.toIntExact(results.stream().filter(item -> ObjectUtil.isNotEmpty(item.getTotal())).collect(Collectors.summarizingInt(item -> item.getTotal())).getSum());
-        listMap.get("all").setTotal(allTotal);
+//        long sum = results.stream().filter(item -> ObjectUtil.isNotEmpty(item.getTotal())).collect(Collectors.summarizingInt(TableTops::getTotal)).getSum();
+        topTotal.setTotal(allTotal);
+        returnList.add(0, topTotal);
 
         /**数据状态整合做计算
          * 整合页面数据状态查询*/
-        if (CollectionUtils.isNotEmpty(results)) {
-            //已卸货包含本身以及审核不通过
-            Integer number = 0;
+//        if (CollectionUtils.isNotEmpty(results)) {
+//            //已卸货包含本身以及审核不通过
+//            Integer number = 0;
+//            for (TableTops result : results) {
+//                if (CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(result.getValue())) {
+//                    Integer total = result.getTotal();
+//                    number = number + total;
+//                }
+//            }
+//            for (TableTops result : results) {
+//                if (CarWaybillEnum.COMPLETION_UNLOADING.getStatus().equals(result.getValue())) {
+//                    result.setTotal(result.getTotal() + number);
+//                    listMap.put(result.getValue(), result);
+//                }
+//            }
+//        }
+
+        return HttpResult.ok(returnList);
+    }
+
+    /**
+     * 统计top计算
+     *
+     * @param results
+     */
+    private void documentCheckNumberCount(List<TableTops> results) {
+        if (!org.springframework.util.CollectionUtils.isEmpty(results)) {
+            //单证审核计算包含审核通过、审核更新审核中以及审核不通过
+            Integer documentCheck = 0;
+            for (TableTops result : results) {
+                //单证审核计算
+                if (CarWaybillEnum.APPROVAL_IN.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.APPROVAL_PASS.getStatus().equals(result.getValue())) {
+                    documentCheck = documentCheck + result.getTotal();
+                }
+            }
+            for (TableTops result : results) {
+                if (CarWaybillQueryEnum.DOCUMENT_CHECK.getStatus().equals(result.getValue())) {
+                    result.setTotal(documentCheck);
+                    result.setSort(CarWaybillQueryEnum.DOCUMENT_CHECK.getCode());
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * 统计top计算
+     *
+     * @param results
+     */
+    private void abrogateNumberCount(List<TableTops> results) {
+        if (!org.springframework.util.CollectionUtils.isEmpty(results)) {
+            //已作废包含本身以及拒绝出车、已撤销、拒绝接单
+            Integer orderCancellation = 0;
             for (TableTops result : results) {
-                if (CarWaybillEnum.APPROVAL_NO_PASS.getStatus().equals(result.getValue())) {
-                    Integer total = result.getTotal();
-                    number = number + total;
+                //已作废计算
+                if (CarWaybillEnum.REJECT_ORDER.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.REVOKED.getStatus().equals(result.getValue())
+                        || CarWaybillEnum.REFUSE_TRAFFIC.getStatus().equals(result.getValue())
+                ) {
+                    orderCancellation = orderCancellation + result.getTotal();
                 }
             }
             for (TableTops result : results) {
-                if (CarWaybillEnum.COMPLETION_UNLOADING.getStatus().equals(result.getValue())) {
-                    result.setTotal(result.getTotal() + number);
-                    listMap.put(result.getValue(), result);
+                if (CarWaybillQueryEnum.ABROGATE.getStatus().equals(result.getValue())) {
+                    result.setTotal(orderCancellation);
+                    result.setSort(CarWaybillQueryEnum.ABROGATE.getCode());
                 }
             }
         }
+    }
+
 
-        return HttpResult.ok(listMap.values());
+    /**
+     * @param sourceList 源数据  [1]
+     * @param targetList 目标数据 [1,2,3]
+     * @Description: 获取targetList中在sourceList中不存在的项
+     * @return: List<String>    [2,3]
+     */
+    public List<String> getDiffrentList(List<String> sourceList, List<String> targetList) {
+        return targetList.stream().filter(item -> sourceList.stream().allMatch(each -> !item.equals(each))).collect(Collectors.toList());
     }
 
     /**