Procházet zdrojové kódy

Merge branch 'dev' into dev_spt

sptkw před 2 roky
rodič
revize
e99a84e0ee
100 změnil soubory, kde provedl 2769 přidání a 960 odebrání
  1. 21 0
      pom.xml
  2. 25 0
      sckw-auth/src/main/java/com/sckw/auth/model/vo/res/EntInfoResVo.java
  3. 11 8
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  4. 29 0
      sckw-auth/src/main/resources/bootstrap-test.yml
  5. 0 199
      sckw-auth/src/main/resources/logback-spring.xml
  6. 4 1
      sckw-common/sckw-common-bom/pom.xml
  7. 9 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  8. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  9. 7 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/GlobalSystemExceptionHandler.java
  10. 8 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java
  11. 0 27
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilterConfig.java
  12. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/BaseModel.java
  13. 25 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/IdsList.java
  14. 6 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressDefaultTypeEnum.java
  15. 37 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  16. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CooperateStatusEnum.java
  17. 64 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GlobalTransactionalEnum.java
  18. 47 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  19. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/SigningWayEnum.java
  20. 408 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java
  21. 52 5
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/RegularUtils.java
  22. 63 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringTimeUtil.java
  23. 156 127
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java
  24. 7 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  25. 25 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginEntInfo.java
  26. 4 2
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/ExcelContext.java
  27. 5 0
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/ExcelSelected.java
  28. 14 4
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java
  29. 1 1
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/BusSumStatusCount.java
  30. 2 0
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java
  31. 10 0
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TableBottom.java
  32. 11 2
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TableTops.java
  33. 20 0
      sckw-gateway/src/main/resources/bootstrap-test.yml
  34. 0 199
      sckw-gateway/src/main/resources/logback-spring.xml
  35. 11 1
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractCommonInfoResDto.java
  36. 4 2
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  37. 16 2
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/dubbo/PayCenterDubboService.java
  38. 14 3
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java
  39. 11 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetail.java
  40. 15 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetailItem.java
  41. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashItem.java
  42. 18 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Channel.java
  43. 26 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Detail.java
  44. 14 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Filter.java
  45. 17 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Freeze.java
  46. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/LogItem.java
  47. 37 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberCreate.java
  48. 5 5
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberDetail.java
  49. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberRes.java
  50. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Money.java
  51. 59 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Operate.java
  52. 22 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/OperateDown.java
  53. 19 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Order.java
  54. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PatchPay.java
  55. 23 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayIndex.java
  56. 39 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecord.java
  57. 18 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecordPage.java
  58. 31 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PrePayIndex.java
  59. 32 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Record.java
  60. 21 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/RrePayDetail.java
  61. 10 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Tips.java
  62. 54 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletDto.java
  63. 44 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletInfo.java
  64. 21 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/BusinessNo.java
  65. 23 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/Page.java
  66. 78 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/R.java
  67. 22 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/CashPage.java
  68. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/PrePayIndexPage.java
  69. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/RecordPage.java
  70. 9 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java
  71. 8 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java
  72. 5 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntCacheResDto.java
  73. 73 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntTypeResDto.java
  74. 2 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/vo/LogisticsOrderDTO.java
  75. 2 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/vo/LogisticsOrderVO.java
  76. 14 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCarrierController.java
  77. 4 7
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCheckedController.java
  78. 15 3
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  79. 12 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcPurchaseController.java
  80. 16 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  81. 6 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java
  82. 3 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogistics.java
  83. 38 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/CompleteReqVo.java
  84. 7 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsBaseInfoReqVo.java
  85. 5 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsGoodsInfoReqVo.java
  86. 32 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java
  87. 21 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java
  88. 8 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeGoodsInfoResVo.java
  89. 21 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsGoodsService.java
  90. 79 51
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java
  91. 59 27
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java
  92. 144 41
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java
  93. 16 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java
  94. 29 0
      sckw-modules/sckw-contract/src/main/resources/bootstrap-test.yml
  95. 10 7
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml
  96. 3 4
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  97. 11 6
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/TestController.java
  98. 29 0
      sckw-modules/sckw-example/src/main/resources/bootstrap-test.yml
  99. 154 0
      sckw-modules/sckw-example/src/main/resources/log4j2.xml
  100. 0 199
      sckw-modules/sckw-example/src/main/resources/logback-spring.xml

+ 21 - 0
pom.xml

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

+ 25 - 0
sckw-auth/src/main/java/com/sckw/auth/model/vo/res/EntInfoResVo.java

@@ -42,6 +42,26 @@ public class EntInfoResVo {
      */
     private Boolean valid;
 
+    /**
+     * 企业联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 法人姓名
+     */
+    private String legalName;
+
+    /**
+     * 法人联系电话
+     */
+    private String legalPhone;
+
     /**
      * 机构信息
      */
@@ -52,4 +72,9 @@ public class EntInfoResVo {
      */
     private List<EntCertificateResDto> certificateInfo;
 
+    /**
+     * 企业属性
+     */
+    private String entTypes;
+
 }

+ 11 - 8
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -83,8 +83,6 @@ public class AuthServiceImpl implements IAuthService {
             afterProcessor(loginResVo);
             return loginResVo;
         }
-        EntInfoResVo entInfoResVo = new EntInfoResVo();
-        entInfoResVo.setDeptInfo(BeanUtils.copyToList(kwsDepts, DeptInfoResVo.class));
 
         /*3、查企业*/
         //目前一个人只能归属于一个企业,所以这里取第一个就行
@@ -95,7 +93,16 @@ public class AuthServiceImpl implements IAuthService {
             afterProcessor(loginResVo);
             return loginResVo;
         }
+
+        EntInfoResVo entInfoResVo = new EntInfoResVo();
         BeanUtils.copyProperties(kwsEnterpriseResDto, entInfoResVo);
+        entInfoResVo.setDeptInfo(BeanUtils.copyToList(kwsDepts, DeptInfoResVo.class));
+
+        //查企业类型
+        List<EntTypeResDto> entTypeResDtos = remoteUserService.queryEntTypeById(entId);
+        if (CollectionUtils.isNotEmpty(entTypeResDtos)) {
+            entInfoResVo.setEntTypes(String.join(Global.COMMA, entTypeResDtos.stream().map(EntTypeResDto::getType).map(String::valueOf).distinct().toList()));
+        }
         loginResVo.setEntInfo(entInfoResVo);
 
         /* 4、查资质*/
@@ -244,7 +251,7 @@ public class AuthServiceImpl implements IAuthService {
                 return;
             }
             //单独存用户企业
-            RedissonUtils.putString(Global.getFullUserEntKey(loginResVo.getSystemType(), loginResVo.getId()), JSON.toJSONString(entInfo), Global.PC_TOKEN_EXPIRE);
+//            RedissonUtils.putString(Global.getFullUserEntKey(loginResVo.getSystemType(), loginResVo.getId()), JSON.toJSONString(entInfo), Global.PC_TOKEN_EXPIRE);
 
             //存企业信息
             saveEntLoginInfo(entInfo);
@@ -258,12 +265,8 @@ public class AuthServiceImpl implements IAuthService {
          */
         private void saveEntLoginInfo(EntInfoResVo entInfo) {
             LoginEntInfo loginEntInfo = new LoginEntInfo();
-            loginEntInfo.setId(entInfo.getId());
-            loginEntInfo.setFirmName(entInfo.getFirmName());
-            loginEntInfo.setApproval(entInfo.getApproval());
-            loginEntInfo.setRegTime(entInfo.getRegTime());
+            BeanUtils.copyProperties(entInfo, loginEntInfo);
             loginEntInfo.setCertificateInfo(BeanUtils.copyToList(entInfo.getCertificateInfo(), EntCertificateInfo.class));
-            loginEntInfo.setValid(entInfo.getValid());
             RedissonUtils.putString(Global.REDIS_ENTERPRISE_PREFIX + entInfo.getId(), JSON.toJSONString(loginEntInfo), Global.PC_TOKEN_EXPIRE);
         }
 

+ 29 - 0
sckw-auth/src/main/resources/bootstrap-test.yml

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

+ 0 - 199
sckw-auth/src/main/resources/logback-spring.xml

@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
-<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
-<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
-                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
-<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
-<configuration  scan="true" scanPeriod="10 seconds">
-    <contextName>logback</contextName>
-    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
-
-    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
-    <property name="log.path" value="/logs/${applicationName}" />
-
-    <!--0. 日志格式和颜色渲染 -->
-    <!-- 彩色日志依赖的渲染类 -->
-    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
-    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
-    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
-    <!-- 彩色日志格式 -->
-    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-
-    <!--1. 输出到控制台-->
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>debug</level>
-        </filter>
-        <encoder>
-            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
-            <!-- 设置字符集 -->
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <!--2. 输出到文档-->
-    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
-    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_debug.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志归档 -->
-            <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录debug级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>debug</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
-    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_info.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 每天日志归档路径以及格式 -->
-            <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录info级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
-    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_warn.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录warn级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>warn</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
-    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_error.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录ERROR级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>ERROR</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!--
-        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
-        以及指定<appender>。<logger>仅有一个name属性,
-        一个可选的level和一个可选的addtivity属性。
-        name:用来指定受此logger约束的某一个包或者具体的某一个类。
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
-              如果未设置此属性,那么当前logger将会继承上级的级别。
-        addtivity:是否向上级logger传递打印信息。默认是true。
-        <logger name="org.springframework.web" level="info"/>
-        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-    -->
-    <!-- hibernate logger -->
-    <logger name="com.atguigu" level="debug" />
-    <!-- Spring framework logger -->
-    <logger name="org.springframework" level="debug" additivity="false"></logger>
-
-
-    <!--
-        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
-        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
-        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-        【logging.level.org.mybatis=debug logging.level.dao=debug】
-     -->
-
-    <!--
-        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-        不能设置为INHERITED或者同义词NULL。默认是DEBUG
-        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-    -->
-
-    <!-- 4. 最终的策略 -->
-    <!-- 4.1 开发环境:打印控制台-->
-    <springProfile name="dev">
-        <logger name="com.sdcm.pmp" level="debug"/>
-    </springProfile>
-
-    <root level="info">
-        <appender-ref ref="CONSOLE" />
-        <appender-ref ref="DEBUG_FILE" />
-        <appender-ref ref="INFO_FILE" />
-        <appender-ref ref="WARN_FILE" />
-        <appender-ref ref="ERROR_FILE" />
-    </root>
-
-    <!-- 4.2 生产环境:输出到文档 -->
-    <springProfile name="pro">
-        <root level="info">
-            <appender-ref ref="CONSOLE" />
-            <appender-ref ref="DEBUG_FILE" />
-            <appender-ref ref="INFO_FILE" />
-            <appender-ref ref="ERROR_FILE" />
-            <appender-ref ref="WARN_FILE" />
-        </root>
-    </springProfile>
-
-</configuration>

+ 4 - 1
sckw-common/sckw-common-bom/pom.xml

@@ -9,7 +9,10 @@
     <version>1.0.0</version>
     <packaging>pom</packaging>
     <description>common依赖项</description>
-
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
     <dependencyManagement>
         <dependencies>
             <!-- 核心模块 -->

+ 9 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -29,7 +29,9 @@ public enum DictEnum {
     TAX_RATE_0("tax_rate","13", "13%"),
     TAX_RATE_1("tax_rate","11", "11%"),
     TAX_RATE_2("tax_rate","10", "10%"),
-    TRADE_TYPE_0("trade_type", "0", "预付款"),
+    TRADE_TYPE_01("trade_type", "01", "预付款-汇付"),
+    TRADE_TYPE_02("trade_type", "02", "预付款-新生"),
+    TRADE_TYPE_03("trade_type", "03", "预付款-中信"),
     TRADE_TYPE_1("trade_type", "1", "货到付款"),
     TRADE_TYPE_2("trade_type", "2", "线下付款"),
     TRADE_TYPE_3("trade_type", "3", "第三方支付"),
@@ -47,8 +49,8 @@ public enum DictEnum {
     TORDER_STATUS_5("tOrder_status", "5", "已完结"),
     TORDER_STATUS_6("tOrder_status", "6", "已对账"),
     TORDER_STATUS_7("tOrder_status", "7", "已结算"),
-    CONTRACT_STATUS_0("contract_status", "0", "待签约"),
-    CONTRACT_STATUS_1("contract_status", "1", "已签约"),
+    CONTRACT_STATUS_0("contract_status", "1", "待签约"),
+    CONTRACT_STATUS_1("contract_status", "0", "已签约"),
     SETTLEMENT_CYCLE_0("settlement_cycle", "0", "周结"),
     SETTLEMENT_CYCLE_1("settlement_cycle", "1", "月结"),
     SETTLEMENT_CYCLE_2("settlement_cycle", "2", "季结"),
@@ -70,7 +72,10 @@ public enum DictEnum {
     CHARGING_TYPE_2("charging_type", "2", "按卸货量") ,
     CHARGING_TYPE_3("charging_type", "3", "按车次"),
     SIGNING_WAY_1("signing_way", "1", "线上签约"),
-    SIGNING_WAY_2("signing_way", "2", "线下签约");
+    SIGNING_WAY_2("signing_way", "2", "线下签约"),
+    TRANSPORT_DEMAND_STATUS_0("transport_demand_status", "0","已保存"),
+    TRANSPORT_DEMAND_STATUS_1("transport_demand_status", "1","已上架"),
+    TRANSPORT_DEMAND_STATUS_2("transport_demand_status", "2","已下架");
 
     private final String type;
     private final String value;

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java

@@ -39,6 +39,7 @@ public enum DictTypeEnum {
     USE_TYPE("use_type", "使用性质"),
     SIGNING_WAY("signing_way", "签约方式"),
     WEIGHT_CAR("weight_car", "以车的限重"),
+    TRANSPORT_DEMAND_STATUS("transport_demand_status", "运需状态"),
     ;
 
     private final String type;

+ 7 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/GlobalSystemExceptionHandler.java

@@ -9,6 +9,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.FieldError;
 import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -53,6 +54,12 @@ public class GlobalSystemExceptionHandler {
         return HttpResult.error(HttpStatus.UN_LOGIN_CODE, HttpStatus.UN_LOGIN_MESSAGE, ex.getMessage());
     }
 
+    @ResponseBody
+    @ExceptionHandler(MissingServletRequestParameterException.class)
+    public HttpResult noArgs(MissingServletRequestParameterException ex) {
+        String format = "参数:[%s]不能为空";
+        return HttpResult.error(HttpStatus.PARAMETERS_PATTERN_ERROR_CODE, String.format(format, ex.getParameterName()));
+    }
 
     /**
      * 注解校验异常处理

+ 8 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilter.java

@@ -1,11 +1,8 @@
 package com.sckw.core.filter;
 
-import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.sckw.core.model.enums.ApprovalEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
-import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.web.config.CustomConfig;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -14,7 +11,6 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.RequestConstant;
 import com.sckw.core.web.context.LoginUserHolder;
-import com.sckw.core.web.model.EntCertificateInfo;
 import com.sckw.core.web.model.LoginEntInfo;
 import com.sckw.core.web.model.LoginUserInfo;
 import com.sckw.redis.utils.RedissonUtils;
@@ -98,6 +94,13 @@ public class LoginFilter implements Filter {
         //将redis里的用户信息存入内存中,避免业务操作多次从redis获取值*/
         LoginUserInfo loginUserInfo = JSONObject.parseObject(userInfo, LoginUserInfo.class);
         LoginUserHolder.set(loginUserInfo);
+        //暂时这样写一下,有的接口需要给LoginUserHolder赋值
+        if ("/kwsMenu/findMenuTree".equals(requestUri) || "/kwsDept/findDeptTree".equals(requestUri)) {
+            RedissonUtils.putString(Global.getFullUserLoginKey(Integer.parseInt(systemType), Long.parseLong(key), clientType), JSON.toJSONString(loginUserInfo), Global.PC_TOKEN_EXPIRE);
+            filterChain.doFilter(servletRequest, servletResponse);
+            LoginUserHolder.remove();
+            return;
+        }
 
         /*3、平台管理员直接放行*/
         if (loginUserInfo.getIsMain() == Global.YES && Integer.parseInt(systemType) == SystemTypeEnum.MANAGE.getCode()) {
@@ -147,6 +150,7 @@ public class LoginFilter implements Filter {
             LoginUserHolder.remove();
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.ENTCERTIFICATES_INVAILD);
         }
+        RedissonUtils.putString(Global.REDIS_ENTERPRISE_PREFIX + entId, enterpriseInfo, Global.PC_TOKEN_EXPIRE);
 //        int approval = loginEntInfo.getApproval();
 //        if (approval == ApprovalEnum.NO.getCode() || approval == ApprovalEnum.PROCESS.getCode() || approval == ApprovalEnum.PASS.getCode()) {
 //            LoginUserHolder.remove();

+ 0 - 27
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/LoginFilterConfig.java

@@ -1,27 +0,0 @@
-//package com.sckw.core.filter;
-//
-//import jakarta.annotation.Resource;
-//import org.springframework.boot.web.servlet.FilterRegistrationBean;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.core.annotation.Order;
-//import org.springframework.stereotype.Component;
-//
-///**
-// * @author czh
-// * @desc TODO
-// * @date 2023/6/14
-// */
-//@Component
-//public class LoginFilterConfig {
-//
-//
-//    @Bean
-//    public FilterRegistrationBean registerBusExceptionFilter() {
-//        FilterRegistrationBean registration = new FilterRegistrationBean();
-//        registration.setFilter(new ExceptionFilterConfig());
-//        registration.setName("ExceptionFilter");
-//        registration.setOrder(-1);
-//        return registration;
-//    }
-//}

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/BaseModel.java

@@ -1,6 +1,7 @@
 package com.sckw.core.model.base;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -26,6 +27,7 @@ public class BaseModel implements Serializable {
 	/**
 	 * 备注
 	 */
+	@Size(max = 200, message = "备注长度不能超过200")
 	private String remark;
 
 	/**

+ 25 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/IdsList.java

@@ -0,0 +1,25 @@
+package com.sckw.core.model.base;
+
+import com.sckw.core.utils.StringUtils;
+
+import java.util.List;
+
+/**
+ * ids处理接口类
+ *
+ * @author xucaiqin
+ * @date 2023-07-27 16:40:15
+ */
+public interface IdsList {
+    default String getIds() {
+        return "";
+    }
+
+    default List<Long> getIdList() {
+        return StringUtils.splitStrToList(getIds(), Long.class);
+    }
+
+    default List<String> getIdsList() {
+        return StringUtils.splitStrToList(getIds(), String.class);
+    }
+}

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

@@ -10,12 +10,14 @@ import lombok.Getter;
 @Getter
 public enum AddressDefaultTypeEnum {
 
+    //普通
+    NO(0, "普通"),
     //装货地址
-    SHIPMENT(1, "装货地址"),
+    SHIPMENT(1, "装货"),
     //收货地址
-    TAKE(2, "收货地址"),
-    //已拒绝
-    BOTH(3, "装货/收货地址");
+    TAKE(2, "卸货"),
+    //装/卸
+    BOTH(3, "装/卸");
 
     private final int code;
 

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

@@ -6,15 +6,51 @@ package com.sckw.core.model.enums;
  * @date 2023-07-14 14:07:23
  */
 public enum CarWaybillEnum {
+    /**
+     * 待接单
+     */
     PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
+    /**
+     * 待出车
+     */
     PENDING_VEHICLE(2, "pendingVehicle", "2", "待出车"),
+    /**
+     * 已出车
+     */
     EXIT_COMPLETED(3, "exitCompleted", "3", "已出车"),
+    /**
+     * 到达装货点
+     */
     WAIT_LOADING(4, "waitLoading", "4", "到达装货点"),
+    /**
+     * 已装货
+     */
     COMPLETION_LOADING(5, "completionLoading", "5", "已装货"),
+    /**
+     * 到达卸货点
+     */
     WAIT_UNLOADING(6, "waitUnloading", "6", "到达卸货点"),
+    /**
+     * 已卸货
+     */
     COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
+    /**
+     * 已核单
+     */
     APPROVAL_COMPLETED(8, "approvalCompleted", "8", "已核单"),
-    REJECT_ORDER(9, "rejectOrder", "9", "拒接单");
+    /**
+     * 拒接单
+     */
+    REJECT_ORDER(9, "rejectOrder", "9", "拒接单"),
+    /**
+     * 拒出车
+     */
+    REFUSE_TRAFFIC(10, "refuseTraffic", "10", "拒出车"),
+    /**
+     * 已撤销
+     */
+    REVOKED(11, "revoked", "11", "已撤销"),
+    ;
 
     private final Integer code;
     private final String value;

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CooperateStatusEnum.java

@@ -27,12 +27,12 @@ public enum CooperateStatusEnum {
 
     private final String name;
 
-    CooperateStatusEnum(int code, String name){
+    CooperateStatusEnum(int code, String name) {
         this.code = code;
         this.name = name;
     }
 
-    public static CooperateStatusEnum getName(int code){
+    public static CooperateStatusEnum getName(int code) {
         for (CooperateStatusEnum cooperateStatusEnum : values()) {
             if (cooperateStatusEnum.getCode() == code) {
                 return cooperateStatusEnum;

+ 64 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GlobalTransactionalEnum.java

@@ -0,0 +1,64 @@
+package com.sckw.core.model.enums;
+
+import org.springframework.util.ObjectUtils;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className GlobalTransactionalEnum
+ * @description 全局事务枚举值
+ * @company sckw
+ * @date 2023-06-05 13:06:54
+ */
+public enum GlobalTransactionalEnum {
+    /**
+     * 默认全局事务
+     */
+    DEFAULT_TX_GROUP(1, "default_tx_group"),
+    /**
+     * 对应系统服务全局事务
+     */
+    SCKW_SYSTEM_SEATA_SERVICE_GROUP(2, "sckw-system-seata-service-group"),
+    /**
+     * 对应报表服务全局事务
+     */
+    SCKW_REPORT_SEATA_SERVICE_GROUP(3, "sckw-report-seata-service-group"),
+    /**
+     * 对应运输服务全局事务
+     */
+    SCKW_TRANSPORT_SEATA_SERVICE_GROUP(4, "sckw-transport-seata-service-group"),
+    ;
+
+    private final Integer code;
+    private final String name;
+
+    GlobalTransactionalEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public Integer getCode() {
+        return code;
+    }
+    public String getName() {
+        return name;
+    }
+    public static String getValue(Integer code) {
+        for (GlobalTransactionalEnum ele : GlobalTransactionalEnum.values()) {
+            if (ele.getCode().equals(code)) {
+                return ele.getName();
+            }
+        }
+        return null;
+    }
+    String getGlobalTransactionalEnum(Integer code) {
+        if (ObjectUtils.isEmpty(code)) {
+            return null;
+        }
+        for (GlobalTransactionalEnum globalTransactionalEnum : GlobalTransactionalEnum.values()) {
+            if (globalTransactionalEnum.getCode().equals(code)) {
+                return globalTransactionalEnum.getName();
+            }
+        }
+        return null;
+    }
+}

+ 47 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java

@@ -1,20 +1,51 @@
 package com.sckw.core.model.enums;
 
+import com.sckw.core.common.enums.NumberConstant;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author lfdc
  * @description 物流订单-单据状态
  * @date 2023-07-07 14:07:23
  */
+@Getter
 public enum LogisticsOrderEnum {
+    /**
+     * 物流订单-待签约
+     */
     TO_BE_PLANNED(0, "waitingSigning", "0", "待签约"),
+    /**
+     * 物流订单-待接单
+     */
     PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
+    /**
+     * 物流订单-待派车
+     */
     WAIT_DELIVERY(2, "waitDelivery", "2", "待派车"),
+    /**
+     * 物流订单-运输中
+     */
     IN_TRANSIT(3, "inTransit", "3", "运输中"),
+    /**
+     * 物流订单-已完成
+     */
     //    WAIT_LOADING(4, "waitLoading", "4", "待装货"),
 //    WAIT_UNLOADING(5, "waitUnLoading", "5", "待卸货"),
     HAVE_FINISHED(4, "haveFinished", "4", "已完成"),
+    /**
+     * 物流订单-已对账
+     */
     HAVE_RECONCILED(5, "haveReconciled", "5", "已对账"),
+    /**
+     * 物流订单-已结算
+     */
     HAVE_ALREADY_SETTLED(6, "haveAlreadySettled", "6", "已结算"),
+    /**
+     * 物流订单-已退回
+     */
     SEND_BACK(7, "sendBack", "7", "已退回");
 
     private final Integer code;
@@ -62,4 +93,20 @@ public enum LogisticsOrderEnum {
         }
         return null;
     }
+
+    public static List<Integer> getCodeList() {
+        List<Integer> codeList = new ArrayList<>(NumberConstant.SIXTEEN);
+        for (LogisticsOrderEnum value : LogisticsOrderEnum.values()) {
+            codeList.add(value.getCode());
+        }
+        return codeList;
+    }
+
+    public static List<String> getCodeStringList() {
+        List<String> codeList = new ArrayList<>(NumberConstant.SIXTEEN);
+        for (LogisticsOrderEnum value : LogisticsOrderEnum.values()) {
+            codeList.add(value.getStatus());
+        }
+        return codeList;
+    }
 }

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/SigningWayEnum.java

@@ -11,9 +11,9 @@ import lombok.Getter;
 public enum SigningWayEnum {
 
     //线上签约
-    ONLINE(1, "1"),
+    ONLINE(1, "线上签约"),
     //线下签约
-    OFFLINE(2, "2");
+    OFFLINE(2, "线下签约");
 
     private final int code;
 

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

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

+ 52 - 5
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/RegularUtils.java

@@ -24,10 +24,15 @@ public class RegularUtils {
      */
     public static final String DECIMAL_REG1 = "^\\d+(\\.\\d+)?$";
     /**
-     *  数字和字母
+     * 数字和字母
      */
     public static final String NUMBER_AND_LATTER = "[0-9A-Za-z]{18}";
 
+    /**
+     * 数字和大写字母
+     */
+    public static final String NUMBER_AND_UPPERCASE_LATTER = "[0-9A-Z]";
+
     /**
      * 正整数和0
      */
@@ -61,26 +66,68 @@ public class RegularUtils {
      * 车牌校验  六位数车牌
      */
     public static final String TRUCK_NUMBER_SIX = "^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[a-zA-Z]{1}[0-9a-zA-Z]{6}$";
+
     /**
      * 中文汉字
      */
     public static final String CHINESE = "^[\\u4e00-\\u9fa5]{2,4}$";
 
     /**
+     * 姓名相关
+     * (企业法人、企业代表、员工姓名、司机姓名)
+     */
+    public static final String NAME = "^[\\u4e00-\\u9fa5]{1,25}$";
+
+
+    /**
+     * 道路运输许可证号
+     */
+    public static final String ROAD_LICENCE = "(^\\d{12})";
+
+    /**
+     * @param
+     * @return
      * @description 校验
      * @author zk
      * @date 2020/5/9 14:38
-     * @param
-     * @return
      **/
-    public static boolean matchs(String regular, String str){
+    public static boolean matchs(String regular, String str) {
         Pattern p = Pattern.compile(regular);
         Matcher m = p.matcher(str);
         boolean isMatch = m.matches();
         return isMatch;
     }
 
+    /**
+     * @param regular 正则 str匹配字符串 min 最小长度 max最大长度
+     * @desc: 校验(限制长度范围)
+     * @author: czh
+     * @date: 2023/7/25
+     */
+    public static boolean matchWithRange(String regular, String str, Integer min, Integer max) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(regular).append("{").append(min).append(",").append(max).append("}$");
+        Pattern p = Pattern.compile(stringBuilder.toString());
+        Matcher m = p.matcher(str);
+        return m.matches();
+    }
+
+    /**
+     * @param regular 正则 str匹配字符串 fixLength 固定长度
+     * @desc: 校验(限制固定长度)
+     * @author: czh
+     * @date: 2023/7/25
+     */
+    public static boolean matchWithFix(String regular, String str, Integer fixLength) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(regular).append("{").append(fixLength).append("}$");
+        Pattern p = Pattern.compile(stringBuilder.toString());
+        Matcher m = p.matcher(str);
+        return m.matches();
+    }
+
+
     public static void main(String[] args) {
-        System.out.println(matchs(DECIMAL_REG, "111.00"));
+        System.out.println(matchs("(^\\d{12})", "123456789112"));
     }
 }

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

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

+ 156 - 127
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java

@@ -1,11 +1,12 @@
 package com.sckw.core.utils;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import com.sckw.core.exception.BusinessException;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * @Description 自测公共处理类
@@ -14,26 +15,37 @@ import java.util.regex.Pattern;
  */
 public class StringUtils {
 
-    /** 空字符串 */
+    /**
+     * 空字符串
+     */
     private static final String NULLSTR = "";
-    /** 下划线 */
+    /**
+     * 下划线
+     */
     private static final char SEPARATOR_CHAR = '_';
-    /** 下划线 */
+    /**
+     * 下划线
+     */
     private static final String SEPARATOR_STRING = "_";
-    /** 加密字符 */
+    /**
+     * 加密字符
+     */
     public static final String HASH_ALGORITHM = "SHA-1";
-    /**${xxx}**/
+    /**
+     * ${xxx}
+     **/
     public static final Pattern pattern = Pattern.compile("(\\$\\{)([\\w]+)(\\})");
 
     /**
      * 判断字符串是否为空
+     *
      * @param str 源字符串
+     * @return
      * @author dengyinghui
      * @date 2018/11/12
-     * @return
      */
-    public static boolean validatorEmpty(String str){
-        if(str != null && !"".equals(str)){
+    public static boolean validatorEmpty(String str) {
+        if (str != null && !"".equals(str)) {
             return false;
         }
 
@@ -42,6 +54,7 @@ public class StringUtils {
 
     /**
      * 判空操作(空)
+     *
      * @param str
      * @return
      */
@@ -52,6 +65,7 @@ public class StringUtils {
 
     /**
      * 判空操作(空)
+     *
      * @param value
      * @return
      */
@@ -61,6 +75,7 @@ public class StringUtils {
 
     /**
      * 判空操作(非空)
+     *
      * @param str
      * @return
      */
@@ -71,6 +86,7 @@ public class StringUtils {
 
     /**
      * 判空操作(非空)
+     *
      * @param value
      * @return
      */
@@ -80,6 +96,7 @@ public class StringUtils {
 
     /**
      * 获取uuid
+     *
      * @return
      */
     public static String uuid() {
@@ -92,8 +109,7 @@ public class StringUtils {
      * @param value defaultValue 要判断的value
      * @return value 返回值
      */
-    public static <T> T nvl(T value, T defaultValue)
-    {
+    public static <T> T nvl(T value, T defaultValue) {
         return value != null ? value : defaultValue;
     }
 
@@ -103,8 +119,7 @@ public class StringUtils {
      * @param coll 要判断的Collection
      * @return true:为空 false:非空
      */
-    public static boolean isEmpty(Collection<?> coll)
-    {
+    public static boolean isEmpty(Collection<?> coll) {
         return isNull(coll) || coll.isEmpty();
     }
 
@@ -114,8 +129,7 @@ public class StringUtils {
      * @param coll 要判断的Collection
      * @return true:非空 false:空
      */
-    public static boolean isNotEmpty(Collection<?> coll)
-    {
+    public static boolean isNotEmpty(Collection<?> coll) {
         return !isEmpty(coll);
     }
 
@@ -123,10 +137,9 @@ public class StringUtils {
      * * 判断一个对象数组是否为空
      *
      * @param objects 要判断的对象数组
-     ** @return true:为空 false:非空
+     *                * @return true:为空 false:非空
      */
-    public static boolean isEmpty(Object[] objects)
-    {
+    public static boolean isEmpty(Object[] objects) {
         return isNull(objects) || (objects.length == 0);
     }
 
@@ -136,8 +149,7 @@ public class StringUtils {
      * @param objects 要判断的对象数组
      * @return true:非空 false:空
      */
-    public static boolean isNotEmpty(Object[] objects)
-    {
+    public static boolean isNotEmpty(Object[] objects) {
         return !isEmpty(objects);
     }
 
@@ -147,8 +159,7 @@ public class StringUtils {
      * @param map 要判断的Map
      * @return true:为空 false:非空
      */
-    public static boolean isEmpty(Map<?, ?> map)
-    {
+    public static boolean isEmpty(Map<?, ?> map) {
         return isNull(map) || map.isEmpty();
     }
 
@@ -158,8 +169,7 @@ public class StringUtils {
      * @param map 要判断的Map
      * @return true:非空 false:空
      */
-    public static boolean isNotEmpty(Map<?, ?> map)
-    {
+    public static boolean isNotEmpty(Map<?, ?> map) {
         return !isEmpty(map);
     }
 
@@ -169,8 +179,7 @@ public class StringUtils {
      * @param str String
      * @return true:为空 false:非空
      */
-    public static boolean isEmpty(String str)
-    {
+    public static boolean isEmpty(String str) {
         return isNull(str) || NULLSTR.equals(str.trim());
     }
 
@@ -180,8 +189,7 @@ public class StringUtils {
      * @param str String
      * @return true:非空串 false:空串
      */
-    public static boolean isNotEmpty(String str)
-    {
+    public static boolean isNotEmpty(String str) {
         return !isEmpty(str);
     }
 
@@ -191,8 +199,7 @@ public class StringUtils {
      * @param object Object
      * @return true:为空 false:非空
      */
-    public static boolean isNull(Object object)
-    {
+    public static boolean isNull(Object object) {
         return object == null;
     }
 
@@ -202,8 +209,7 @@ public class StringUtils {
      * @param object Object
      * @return true:非空 false:空
      */
-    public static boolean isNotNull(Object object)
-    {
+    public static boolean isNotNull(Object object) {
         return !isNull(object);
     }
 
@@ -213,44 +219,37 @@ public class StringUtils {
      * @param object 对象
      * @return true:是数组 false:不是数组
      */
-    public static boolean isArray(Object object)
-    {
+    public static boolean isArray(Object object) {
         return isNotNull(object) && object.getClass().isArray();
     }
 
     /**
      * 去空格
      */
-    public static String trim(String str)
-    {
+    public static String trim(String str) {
         return (str == null ? "" : str.trim());
     }
 
     /**
      * 截取字符串
      *
-     * @param str 字符串
+     * @param str   字符串
      * @param start 开始
      * @return 结果
      */
-    public static String substring(final String str, int start)
-    {
-        if (str == null)
-        {
+    public static String substring(final String str, int start) {
+        if (str == null) {
             return NULLSTR;
         }
 
-        if (start < 0)
-        {
+        if (start < 0) {
             start = str.length() + start;
         }
 
-        if (start < 0)
-        {
+        if (start < 0) {
             start = 0;
         }
-        if (start > str.length())
-        {
+        if (start > str.length()) {
             return NULLSTR;
         }
 
@@ -260,43 +259,35 @@ public class StringUtils {
     /**
      * 截取字符串
      *
-     * @param str 字符串
+     * @param str   字符串
      * @param start 开始
-     * @param end 结束
+     * @param end   结束
      * @return 结果
      */
-    public static String substring(final String str, int start, int end)
-    {
-        if (str == null)
-        {
+    public static String substring(final String str, int start, int end) {
+        if (str == null) {
             return NULLSTR;
         }
 
-        if (end < 0)
-        {
+        if (end < 0) {
             end = str.length() + end;
         }
-        if (start < 0)
-        {
+        if (start < 0) {
             start = str.length() + start;
         }
 
-        if (end > str.length())
-        {
+        if (end > str.length()) {
             end = str.length();
         }
 
-        if (start > end)
-        {
+        if (start > end) {
             return NULLSTR;
         }
 
-        if (start < 0)
-        {
+        if (start < 0) {
             start = 0;
         }
-        if (end < 0)
-        {
+        if (end < 0) {
             end = 0;
         }
 
@@ -318,45 +309,37 @@ public class StringUtils {
 
     public static String format(String template, Object... params)
     {
-        if (isEmpty(params) || isEmpty(template))
-        {
-            return template;
-        }
-        return StrFormatter.format(template, params);
+    if (isEmpty(params) || isEmpty(template))
+    {
+    return template;
+    }
+    return StrFormatter.format(template, params);
     }*/
 
     /**
      * 下划线转驼峰命名
      */
-    public static String toUnderScoreCase(String s)
-    {
-        if (s == null)
-        {
+    public static String toUnderScoreCase(String s) {
+        if (s == null) {
             return null;
         }
         StringBuilder sb = new StringBuilder();
         boolean upperCase = false;
-        for (int i = 0; i < s.length(); i++)
-        {
+        for (int i = 0; i < s.length(); i++) {
             char c = s.charAt(i);
 
             boolean nextUpperCase = true;
 
-            if (i < (s.length() - 1))
-            {
+            if (i < (s.length() - 1)) {
                 nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
             }
 
-            if ((i > 0) && Character.isUpperCase(c))
-            {
-                if (!upperCase || !nextUpperCase)
-                {
+            if ((i > 0) && Character.isUpperCase(c)) {
+                if (!upperCase || !nextUpperCase) {
                     sb.append(SEPARATOR_CHAR);
                 }
                 upperCase = true;
-            }
-            else
-            {
+            } else {
                 upperCase = false;
             }
 
@@ -369,18 +352,14 @@ public class StringUtils {
     /**
      * 是否包含字符串
      *
-     * @param str 验证字符串
+     * @param str  验证字符串
      * @param strs 字符串组
      * @return 包含返回true
      */
-    public static boolean inStringIgnoreCase(String str, String... strs)
-    {
-        if (str != null && strs != null)
-        {
-            for (String s : strs)
-            {
-                if (str.equalsIgnoreCase(trim(s)))
-                {
+    public static boolean inStringIgnoreCase(String str, String... strs) {
+        if (str != null && strs != null) {
+            for (String s : strs) {
+                if (str.equalsIgnoreCase(trim(s))) {
                     return true;
                 }
             }
@@ -390,21 +369,66 @@ public class StringUtils {
 
     /**
      * 字符串转数组
+     *
      * @param params 字符串
-     * @param regex 截取字符
+     * @param regex  截取字符
      * @return
      */
-    public static String [] splitStr(String params, String regex){
+    public static String[] splitStr(String params, String regex) {
         regex = StringUtils.isNotBlank(regex) ? regex : ",";
         return StringUtils.isNotBlank(params) ? params.split(regex) : new String[]{};
     }
 
+    /**
+     * 字符串分割转list
+     *
+     * @param str 字符串
+     * @param cls 转换类型class
+     * @return
+     */
+    public static <T> List<T> splitStrToList(String str, Class<T> cls) {
+        return splitStrToList(str, ",", cls);
+    }
+
+    /**
+     * 字符串分割转list
+     *
+     * @param str   字符串
+     * @param regex 截取字符
+     * @param cls   转换类型class
+     * @return
+     */
+    public static <T> List<T> splitStrToList(String str, String regex, Class<T> cls) {
+        regex = StringUtils.isNotBlank(regex) ? regex : ",";
+        if (StringUtils.isBlank(str)) {
+            return Collections.emptyList();
+        }
+        List<T> result;
+        if (cls == String.class) {
+            result = Arrays.stream(str.split(regex))
+                    .map(strValue -> (T) strValue)
+                    .collect(Collectors.toList());
+        } else {
+            result = Arrays.stream(str.split(regex))
+                    .map(strValue -> {
+                        try {
+                            return cls.getConstructor(String.class).newInstance(strValue);
+                        } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
+                                 NoSuchMethodException e) {
+                            throw new BusinessException("字符串转集合异常!");
+                        }
+                    }).collect(Collectors.toList());
+        }
+        return result;
+    }
+
     /**
      * Object对象转字符串
+     *
      * @param obj
      * @return
      */
-    public static String objectStr(Object obj){
+    public static String objectStr(Object obj) {
         if (obj != null) {
             return obj.toString();
         }
@@ -415,12 +439,13 @@ public class StringUtils {
         if (str == null) {
             return "";
         } else {
-            return str instanceof String ? ((String)str).trim() : str.toString();
+            return str instanceof String ? ((String) str).trim() : str.toString();
         }
     }
 
     /**
      * 解析出url请求的路径,包括页面
+     *
      * @param strURL url地址
      * @return url路径
      */
@@ -555,8 +580,8 @@ public class StringUtils {
     /**
      * 转换为Double类型
      */
-    public static Double toDouble(Object val){
-        if (val == null){
+    public static Double toDouble(Object val) {
+        if (val == null) {
             return 0D;
         }
         try {
@@ -573,31 +598,32 @@ public class StringUtils {
         return toDouble(val).floatValue();
     }
 
-        /**
-         * 转换为Long类型
-         */
-    public static Long toLong(Object val){
+    /**
+     * 转换为Long类型
+     */
+    public static Long toLong(Object val) {
         return toDouble(val).longValue();
     }
 
     /**
      * 转换为Integer类型
      */
-    public static Integer toInteger(Object val){
+    public static Integer toInteger(Object val) {
         return toLong(val).intValue();
     }
 
     /**
      * Object转String
+     *
      * @param val 源字符串
+     * @return
      * @author dengyinghui
      * @date 2018/2/27
-     * @return
      */
-    public static String valueOf(Object val){
-        if(val == null){
+    public static String valueOf(Object val) {
+        if (val == null) {
             return "";
-        } else{
+        } else {
             return String.valueOf(val);
         }
     }
@@ -605,7 +631,7 @@ public class StringUtils {
     private static String toHex(byte[] bytes) {
         final char[] hexDigits = "0123456789ABCDEF".toCharArray();
         StringBuilder ret = new StringBuilder(bytes.length * 2);
-        for (int i=0; i<bytes.length; i++) {
+        for (int i = 0; i < bytes.length; i++) {
             ret.append(hexDigits[(bytes[i] >> 4) & 0x0f]);
             ret.append(hexDigits[bytes[i] & 0x0f]);
         }
@@ -614,20 +640,21 @@ public class StringUtils {
 
     /**
      * 替换字符串${xxxx}
-     * @param content 账号创建成功,欢迎使用危品汇!登录账号:${account},默认密码:${pwd}!
-     * @param regex 需要替换的字符(account)
+     *
+     * @param content     账号创建成功,欢迎使用危品汇!登录账号:${account},默认密码:${pwd}!
+     * @param regex       需要替换的字符(account)
      * @param replacement 替换值(173xxxxxxxx)
      * @return
      */
-    public static String replace(String content, String regex, String replacement){
-        if (content == null || regex == null || replacement == null){
+    public static String replace(String content, String regex, String replacement) {
+        if (content == null || regex == null || replacement == null) {
             return null;
         }
         Matcher matcher = pattern.matcher(content);
         StringBuffer strBuf = new StringBuffer();
         while (matcher.find()) {
             String group = matcher.group().replace("${", "").replace("}", "");
-            if (group.equals(regex)){
+            if (group.equals(regex)) {
                 matcher.appendReplacement(strBuf, replacement);
                 return matcher.appendTail(strBuf).toString();
             }
@@ -637,20 +664,21 @@ public class StringUtils {
 
     /**
      * 替换字符串${xxxx}
-     * @param content  账号创建成功,欢迎使用危品汇!登录账号:${account},默认密码:${pwd}!
-     * @param params {"account":"xxxxx", "pwd":"xxxx"}
+     *
+     * @param content 账号创建成功,欢迎使用危品汇!登录账号:${account},默认密码:${pwd}!
+     * @param params  {"account":"xxxxx", "pwd":"xxxx"}
      * @return
      */
-    public static String replace1(String content, Map<String, Object> params){
-        if (content == null || params == null){
+    public static String replace1(String content, Map<String, Object> params) {
+        if (content == null || params == null) {
             return null;
         }
 
         Matcher matcher = pattern.matcher(content);
         StringBuffer strBuf = new StringBuffer();
-        while(matcher.find()){
+        while (matcher.find()) {
             String group = matcher.group().replace("${", "").replace("}", "");
-            if (params.get(group) != null){
+            if (params.get(group) != null) {
                 String replacement = StringUtils.objectStr(params.get(group));
                 matcher.appendReplacement(strBuf, replacement);
             }
@@ -685,6 +713,7 @@ public class StringUtils {
 
     /**
      * 值替换
+     *
      * @param prefix
      * @param args
      * @return
@@ -693,12 +722,12 @@ public class StringUtils {
         return String.format(prefix, args);
     }
 
-    public static void main(String[] args){
+    public static void main(String[] args) {
         Map<String, Object> param = new HashMap();
         param.put("account", "17358629955");
         param.put("pwd", "123456");
         String template = "账号创建成功,欢迎使用危品汇!登录账号:${account},默认密码:${pwd}!";
-        for(String key : param.keySet()){
+        for (String key : param.keySet()) {
             template = StringUtils.replace(template, key, StringUtils.objectStr(param.get(key)));
         }
         System.out.println(template);
@@ -706,6 +735,6 @@ public class StringUtils {
         Map<String, Object> m = new HashMap<>();
         m.put("account", "han");
         m.put("pwd", "zhong");
-        System.out.println( replace1(template, m));
+        System.out.println(replace1(template, m));
     }
 }

+ 7 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java

@@ -75,6 +75,12 @@ public class HttpStatus {
     public static final int PARAMETERS_PATTERN_ERROR_CODE = 60800;
     /**参数格式不正确提示信息*/
     public static final String PARAMETERS_PATTERN_ERROR_MESSAGE = "参数格式不正确";
+    public static final String CONTACTS_ERROR = "联系人格式不正确";
+    public static final String CONTACTS_PHONE_ERROR = "联系人手机号格式不正确";
+    public static final String LEGAL_NAME_ERROR = "法人格式不正确";
+    public static final String LEGAL_PHONE_ERROR = "法人手机号格式不正确";
+    public static final String LEGAL_ID_CARD_ERROR = "法人身份证号格式不正确";
+    public static final String ENT_CODE_ERROR = "企业编号格式不正确";
 
     /**账号在别处登录状态码*/
     public static final int ACCOUNT_OTHER_LOGIN_CODE = 60900;
@@ -162,5 +168,6 @@ public class HttpStatus {
     public static final String MSG_025 = "禁止删除本人信息!";
     public static final String MSG_026 = "资质认证审核中,请等待审核后再提交!";
     public static final String MSG_027 = "一级机构不能删除!";
+    public static final String MSG_028 = "合同未签约,不能手动完结!";
 
 }

+ 25 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginEntInfo.java

@@ -46,6 +46,26 @@ public class LoginEntInfo {
      */
     private int jtaqDelFlag;
 
+    /**
+     * 企业联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 法人姓名
+     */
+    private String legalName;
+
+    /**
+     * 法人联系电话
+     */
+    private String legalPhone;
+
     /**
      * 企业注册时间
      */
@@ -56,6 +76,11 @@ public class LoginEntInfo {
      */
     private Boolean valid;
 
+    /**
+     * 企业属性
+     */
+    private String entTypes;
+
     /**
      * 资质
      */

+ 4 - 2
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/ExcelContext.java

@@ -3,8 +3,10 @@ package com.sckw.excel.annotation;
 import java.lang.annotation.*;
 
 /**
- *
- * 导出的文件全局属性
+ * @author lfdc
+ * @version v1
+ * @create 2020-11-28 15:37:35
+ * @copyright
  */
 @Target({ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)

+ 5 - 0
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/ExcelSelected.java

@@ -4,6 +4,11 @@ import java.lang.annotation.*;
 
 /**
  * easy导出下拉框注解
+ *
+ * @author lfdc
+ * @version v1
+ * @create 2020-11-28 15:37:35
+ * @copyright
  */
 
 /**

+ 14 - 4
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java

@@ -9,6 +9,7 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
 
 /**
  * @description: 时间工具类
@@ -70,6 +71,7 @@ public class DateUtil {
 
     /**
      * yyyy-MM-dd 转换成 LocalDate
+     *
      * @param str
      * @return
      */
@@ -79,6 +81,7 @@ public class DateUtil {
 
     /**
      * yyyy-MM-dd 转换成 LocalDateTime
+     *
      * @param str
      * @return
      */
@@ -296,6 +299,13 @@ public class DateUtil {
         return calendar.getTime();
     }
 
+    public static Date offsetDay(Date date, int offset) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        calendar.add(Calendar.DATE, offset);
+        return calendar.getTime();
+    }
+
     public static String getWeekOfDate(Date date, Lanagues language) {
         String name = "";
         Calendar calendar = Calendar.getInstance();
@@ -305,7 +315,7 @@ public class DateUtil {
             weekIndex = 0;
         }
 
-        switch(language) {
+        switch (language) {
             case CHINESE:
                 name = Week.getName(weekIndex);
                 break;
@@ -317,7 +327,7 @@ public class DateUtil {
     }
 
     public static Date LocalDateTimeToDate(LocalDateTime localDateTime) {
-       return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
+        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
     }
 
     public static enum Week {
@@ -338,7 +348,7 @@ public class DateUtil {
             Week[] var2 = values();
             int var3 = var2.length;
 
-            for(int var4 = 0; var4 < var3; ++var4) {
+            for (int var4 = 0; var4 < var3; ++var4) {
                 Week week = var2[var4];
                 if (week.getIndex() == index) {
                     name = week.getName();
@@ -353,7 +363,7 @@ public class DateUtil {
             Week[] var2 = values();
             int var3 = var2.length;
 
-            for(int var4 = 0; var4 < var3; ++var4) {
+            for (int var4 = 0; var4 < var3; ++var4) {
                 Week week = var2[var4];
                 if (week.getIndex() == index) {
                     name = week.getEnName();

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

@@ -11,6 +11,6 @@ import java.util.List;
  */
 @Data
 public class BusSumStatusCount {
-    private List<TobleTop> tobleTops;
+    private List<TableTops> tableTops;
 
 }

+ 2 - 0
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java

@@ -1,11 +1,13 @@
 package com.sckw.mongo.model;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
 
 import java.math.BigDecimal;
 import java.util.Date;

+ 10 - 0
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TableBottom.java

@@ -0,0 +1,10 @@
+//package com.sckw.mongo.model;
+//
+///**
+// * @author lfdc
+// * @description 统计底部展示
+// * @date 2023-07-24 14:07:29
+// */
+//public class TableBottom {
+//
+//}

+ 11 - 2
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TobleTop.java → sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TableTops.java

@@ -8,8 +8,17 @@ import lombok.Data;
  * @date 2023-07-11 08:07:41
  */
 @Data
-public class TobleTop {
+public class TableTops {
+    /**
+     * top名称
+     */
     private String name;
+    /**
+     * top状态
+     */
     private String value;
-    private int total;
+    /**
+     * 数量
+     */
+    private Integer total;
 }

+ 20 - 0
sckw-gateway/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,20 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+

+ 0 - 199
sckw-gateway/src/main/resources/logback-spring.xml

@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
-<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
-<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
-                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
-<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
-<configuration  scan="true" scanPeriod="10 seconds">
-    <contextName>logback</contextName>
-    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
-
-    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
-    <property name="log.path" value="/logs/${applicationName}" />
-
-    <!--0. 日志格式和颜色渲染 -->
-    <!-- 彩色日志依赖的渲染类 -->
-    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
-    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
-    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
-    <!-- 彩色日志格式 -->
-    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-
-    <!--1. 输出到控制台-->
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>debug</level>
-        </filter>
-        <encoder>
-            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
-            <!-- 设置字符集 -->
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <!--2. 输出到文档-->
-    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
-    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_debug.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志归档 -->
-            <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录debug级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>debug</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
-    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_info.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 每天日志归档路径以及格式 -->
-            <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录info级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
-    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_warn.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录warn级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>warn</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
-    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_error.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录ERROR级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>ERROR</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!--
-        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
-        以及指定<appender>。<logger>仅有一个name属性,
-        一个可选的level和一个可选的addtivity属性。
-        name:用来指定受此logger约束的某一个包或者具体的某一个类。
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
-              如果未设置此属性,那么当前logger将会继承上级的级别。
-        addtivity:是否向上级logger传递打印信息。默认是true。
-        <logger name="org.springframework.web" level="info"/>
-        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-    -->
-    <!-- hibernate logger -->
-    <logger name="com.atguigu" level="debug" />
-    <!-- Spring framework logger -->
-    <logger name="org.springframework" level="debug" additivity="false"></logger>
-
-
-    <!--
-        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
-        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
-        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-        【logging.level.org.mybatis=debug logging.level.dao=debug】
-     -->
-
-    <!--
-        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-        不能设置为INHERITED或者同义词NULL。默认是DEBUG
-        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-    -->
-
-    <!-- 4. 最终的策略 -->
-    <!-- 4.1 开发环境:打印控制台-->
-    <springProfile name="dev">
-        <logger name="com.sdcm.pmp" level="debug"/>
-    </springProfile>
-
-    <root level="info">
-        <appender-ref ref="CONSOLE" />
-        <appender-ref ref="DEBUG_FILE" />
-        <appender-ref ref="INFO_FILE" />
-        <appender-ref ref="WARN_FILE" />
-        <appender-ref ref="ERROR_FILE" />
-    </root>
-
-    <!-- 4.2 生产环境:输出到文档 -->
-    <springProfile name="pro">
-        <root level="info">
-            <appender-ref ref="CONSOLE" />
-            <appender-ref ref="DEBUG_FILE" />
-            <appender-ref ref="INFO_FILE" />
-            <appender-ref ref="ERROR_FILE" />
-            <appender-ref ref="WARN_FILE" />
-        </root>
-    </springProfile>
-
-</configuration>

+ 11 - 1
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractCommonInfoResDto.java

@@ -33,7 +33,7 @@ public class ContractCommonInfoResDto implements Serializable {
     private String contractCode;
 
     /**
-     * 签约方式
+     * 签约方式  1线上  2线下
      */
     private Integer signingWay;
 
@@ -42,6 +42,16 @@ public class ContractCommonInfoResDto implements Serializable {
      */
     private String signingWayName;
 
+    /**
+     * 合同状态 0 已签约 1待签约 2已完结 3已保存
+     */
+    private Integer status;
+
+    /**
+     * 合同状态名称
+     */
+    private String statusName;
+
     /**
      * 企业id
      */

+ 4 - 2
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -2,6 +2,8 @@ package com.sckw.fleet.api;
 
 import com.sckw.fleet.api.model.vo.RDriverVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
+
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,7 +19,7 @@ public interface RemoteFleetService {
      * @author zk
      * @date 2023/7/18
      **/
-    Map<Long, RDriverVo> findDriver(String driverIds);
+    Map<Long, RDriverVo> findDriver(List<Long> driverIds);
 
     /**
      * @param truckNos 车牌号,多个已逗号隔开
@@ -25,5 +27,5 @@ public interface RemoteFleetService {
      * @author zk
      * @date 2023/7/18
      **/
-    Map<Long, RTruckVo> findTruck(String truckNos);
+    Map<String, RTruckVo> findTruck(List<String> truckNos);
 }

+ 16 - 2
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/dubbo/PayCenterDubboService.java

@@ -2,14 +2,28 @@ package com.sckw.payment.api.dubbo;
 
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.MemberDetail;
+import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.common.R;
+
+import java.util.List;
 
 public interface PayCenterDubboService {
     /**
      * 获取会员详情
      *
-     * @param uid     中台用户id
+     * @param entId   企业id
      * @param channel 渠道
      * @return
      */
-    MemberDetail memberDetail(String uid, ChannelEnum channel);
+    R<MemberDetail> memberDetail(Long entId, ChannelEnum channel);
+
+    /**
+     * 钱包清单
+     *
+     * @param payEntId     付款方企业id
+     * @param channel 支付渠道
+     * @param receiveEntId  收款方企业id
+     * @return
+     */
+    R<List<WalletDto>> wallet(Long payEntId, ChannelEnum channel, Long receiveEntId);
 }

+ 14 - 3
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java

@@ -6,9 +6,20 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum ChannelEnum {
-    HF("huifu", "汇付渠道"),
-    XS("newpay", "新生渠道"),
-    ZX("citic", "中信渠道");
+    HF("01","huifu", "汇付渠道"),
+    XS("02","newpay", "新生渠道"),
+    ZX("03","citic", "中信渠道");
+    private String code;
     private String channel;
     private String desc;
+
+    public static ChannelEnum getByCode(String code) {
+        for (ChannelEnum channelEnum : ChannelEnum.values()) {
+            if (channelEnum.getCode().equals(code)) {
+                return channelEnum;
+            }
+        }
+        return null;
+    }
+
 }

+ 11 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetail.java

@@ -0,0 +1,11 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CashDetail {
+    private List<CashDetailItem> timeline;
+    private List<List<CashDetailItem>> content;
+}

+ 15 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetailItem.java

@@ -0,0 +1,15 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class CashDetailItem implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7233982475006805580L;
+    private String color;
+    private String title;
+    private String value;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashItem.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:19:14
+ */
+@NoArgsConstructor
+@Data
+public class CashItem implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 856945436214113979L;
+    private String orderNo;
+    private Integer status;
+    private Integer money;
+    private Integer balance;
+    private String remarks;
+    private String createTime;
+}

+ 18 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Channel.java

@@ -0,0 +1,18 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Channel implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1366768042884725288L;
+    private String image;
+    private String code;
+    private String name;
+    private String logo;
+}

+ 26 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Detail.java

@@ -0,0 +1,26 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Detail implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -261200729891413350L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "status")
+    private String status;
+}

+ 14 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Filter.java

@@ -0,0 +1,14 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Filter implements Serializable {
+	@Serial
+	private static final long serialVersionUID = 4605531733184843818L;
+	private String uid;
+	private String text;
+}

+ 17 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Freeze.java

@@ -0,0 +1,17 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Freeze implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5111111815474400770L;
+    private String filter;
+    private int money;
+    private int balance;
+    private String businessNo;
+    private String channel;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/LogItem.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class LogItem implements Serializable {
+	@Serial
+
+	private static final long serialVersionUID = 1822937785140299845L;
+	@JSONField(name="create_time")
+	private String createTime;
+
+	@JSONField(name="title")
+	private String title;
+
+	@JSONField(name="content")
+	private String content;
+}

+ 37 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberCreate.java

@@ -0,0 +1,37 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:34:32
+ */
+@Data
+public class MemberCreate implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6655826243958219906L;
+    @JSONField(name = "company_name")
+    private String companyName;
+    @JSONField(name = "license")
+    private String license;
+    @JSONField(name = "legalName")
+    private String legalName;
+    @JSONField(name = "legalPhone")
+    private String legalPhone;
+    @JSONField(name = "legalIds")
+    private String legalIds;
+    @JSONField(name = "accountNo")
+    private String accountNo;
+    @JSONField(name = "parentBankName")
+    private String parentBankName;
+    @JSONField(name = "unionBank")
+    private String unionBank;
+    @JSONField(name = "bankName")
+    private String bankName;
+    @JSONField(name = "channel")
+    private String channel;
+}

+ 5 - 5
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberDetail.java

@@ -1,14 +1,14 @@
 package com.sckw.payment.api.model.dto;
 
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
+
+import java.io.Serializable;
 
 /**
  * 会员详情
  */
-@Getter
-@Setter
-public class MemberDetail {
+@Data
+public class MemberDetail implements Serializable {
     private Boolean register;
     private String uid;
     private String channel;

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberRes.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:42:36
+ */
+@Getter
+@Setter
+public class MemberRes implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5099179450696261534L;
+    private String uid;
+    private String url;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Money.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Money implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5979366827536068774L;
+    /**
+     * 可用余额
+     */
+    private int value;
+    /**
+     * 提示
+     */
+    private Tips tips;
+}

+ 59 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Operate.java

@@ -0,0 +1,59 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Operate {
+    @JSONField(name = "create_time")
+    private String createTime;
+    @JSONField(name = "wd_money")
+    private Money wdMoney;
+    /**
+     * 类型对应文案
+     */
+    @JSONField(name = "type_text")
+    private String typeText;
+    /**
+     * 类型
+     */
+    private String type;
+    /**
+     * 预付金额
+     */
+    @JSONField(name = "ap_money")
+    private Money apMoney;
+    /**
+     * 对方
+     */
+    private Filter filter;
+    /**
+     * 自身uid
+     */
+    private String uid;
+    /**
+     * 下载文件
+     */
+    private List<String> file;
+    private Money money;
+    /**
+     * 操作金额
+     */
+    @JSONField(name = "operate_money")
+    private int operateMoney;
+    /**
+     * 总冻结金额
+     */
+    @JSONField(name = "freeze_money")
+    private Money freezeMoney;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 当前状态:0:关闭,1:已完成,2:进行中
+     */
+    private int status;
+}

+ 22 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/OperateDown.java

@@ -0,0 +1,22 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:37:46
+ */
+@Getter
+@Setter
+public class OperateDown implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2389472385575103413L;
+    private String url;
+    @JSONField(name = "expire_time")
+    private String expireTime;
+}

+ 19 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Order.java

@@ -0,0 +1,19 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:30:59
+ */
+@Getter
+@Setter
+public class Order implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -3148504181066374194L;
+    private String order_no;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PatchPay.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 17:09:42
+ */
+@Data
+public class PatchPay implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -719246443006291337L;
+
+    @JSONField(name = "uid")
+    private String uid;
+    @JSONField(name = "money")
+    private Integer money;
+    @JSONField(name = "remark")
+    private String remark;
+}

+ 23 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayIndex.java

@@ -0,0 +1,23 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PayIndex implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -114261812502553262L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "uid")
+    private String uid;
+
+    @JSONField(name = "pay_url")
+    private String payUrl;
+}

+ 39 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecord.java

@@ -0,0 +1,39 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PayRecord implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2380188390683973411L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "filter")
+    private String filter;
+
+    @JSONField(name = "uid")
+    private String uid;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "pay_url")
+    private String payUrl;
+
+    @JSONField(name = "pay_time")
+    private Object payTime;
+
+    @JSONField(name = "status")
+    private int status;
+}

+ 18 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecordPage.java

@@ -0,0 +1,18 @@
+package com.sckw.payment.api.model.dto;
+
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:30:37
+ */
+@Getter
+@Setter
+public class PayRecordPage extends Page<PayRecord> {
+    @Serial
+    private static final long serialVersionUID = 3222385805745628754L;
+}

+ 31 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PrePayIndex.java

@@ -0,0 +1,31 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PrePayIndex implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7340075510663637767L;
+
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "status_text")
+    private String statusText;
+
+    @JSONField(name = "status")
+    private int status;
+
+}

+ 32 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Record.java

@@ -0,0 +1,32 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Record implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2168264969431548187L;
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "balance")
+    private int balance;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "channel")
+    private String channel;
+
+    @JSONField(name = "type")
+    private int type;
+
+    @JSONField(name = "content")
+    private String content;
+}

+ 21 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/RrePayDetail.java

@@ -0,0 +1,21 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@Getter
+@Setter
+public class RrePayDetail implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 159112379752575265L;
+    @JSONField(name = "log")
+    private List<LogItem> log;
+
+    @JSONField(name = "detail")
+    private Detail detail;
+}

+ 10 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Tips.java

@@ -0,0 +1,10 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+@Data
+public class Tips{
+	private String color;
+	private String title;
+	private int value;
+}

+ 54 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletDto.java

@@ -0,0 +1,54 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 钱包清单
+ */
+@Data
+public class WalletDto implements Serializable {
+    /**
+     * 钱包名称
+     */
+    private String name;
+    /**
+     * uid对应的企业名称
+     */
+    @JSONField(name = "member_name")
+    private String memberName;
+
+    private String uid;
+    /**
+     * 渠道
+     */
+    private String channel;
+
+    @JSONField(name = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    private String filter;
+    /**
+     * 冻结金额(分)
+     */
+    private Long freeze;
+    /**
+     * 预付金额(分)
+     */
+    @JSONField(name = "ap_money")
+    private Long apMoney;
+    /**
+     * 总金额(分)
+     */
+    @JSONField(name = "total_money")
+    private Long totalMoney;
+    /**
+     * 线上可用余额(分)
+     */
+    private Long money;
+}

+ 44 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletInfo.java

@@ -0,0 +1,44 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 钱包清单
+ */
+@Data
+public class WalletInfo implements Serializable {
+    /**
+     * 企业名称
+     */
+    private String name;
+    /**
+     * 钱包名称
+     */
+    @JSONField(name = "wallet_name")
+    private String walletName;
+
+    /**
+     * 渠道
+     */
+    private String channel;
+
+    private Integer status;
+
+    /**
+     * 预付金额(分)
+     */
+    @JSONField(name = "ap_money")
+    private Long apMoney;
+    /**
+     * 提现余额
+     */
+    @JSONField(name = "wd_money")
+    private Long wdMoney;
+    /**
+     * 可用余额
+     */
+    private Long money;
+}

+ 21 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/BusinessNo.java

@@ -0,0 +1,21 @@
+package com.sckw.payment.api.model.dto.common;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:59:59
+ */
+@Getter
+@Setter
+public class BusinessNo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8283758459410298302L;
+    @JSONField(name = "business_no")
+    private String businessNo;
+}

+ 23 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/Page.java

@@ -0,0 +1,23 @@
+package com.sckw.payment.api.model.dto.common;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:17:23
+ */
+@Getter
+@Setter
+public class Page<T> implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8540276865834437578L;
+    private long total;
+    private long page;
+    private long pageSize;
+    private List<T> rows;
+}

+ 78 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/R.java

@@ -0,0 +1,78 @@
+package com.sckw.payment.api.model.dto.common;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xcq
+ * @date 2022年06月14日 13:41
+ */
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class R<T> implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -2087972616778698265L;
+    /**
+     * 1-成功 0-失败
+     */
+    @Getter
+    @Setter
+    private int code;
+
+    @Getter
+    @Setter
+    private String msg;
+
+    @Getter
+    @Setter
+    private T data;
+    @Getter
+    @Setter
+    private Boolean status;
+
+    public static <T> R<T> ok() {
+        return restResult(null, 1, null, true);
+    }
+
+    public static <T> R<T> ok(T data) {
+        return restResult(data, 1, null, true);
+    }
+
+    public static <T> R<T> ok(T data, String msg) {
+        return restResult(data, 1, msg, true);
+    }
+
+    public static <T> R<T> failed() {
+        return restResult(null, 0, null, false);
+    }
+
+    public static <T> R<T> failed(String msg) {
+        return restResult(null, 0, msg, false);
+    }
+
+    public static <T> R<T> failed(T data) {
+        return restResult(data, 0, null, false);
+    }
+
+    public static <T> R<T> failed(T data, String msg) {
+        return restResult(data, 0, msg, false);
+    }
+
+    public static <T> R<T> failed(T data, String msg, int code) {
+        return restResult(data, code, msg, false);
+    }
+
+    private static <T> R<T> restResult(T data, int code, String msg, Boolean status) {
+        R<T> apiResult = new R<>();
+        apiResult.setCode(code);
+        apiResult.setData(data);
+        apiResult.setMsg(msg);
+        apiResult.setStatus(status);
+        return apiResult;
+    }
+}

+ 22 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/CashPage.java

@@ -0,0 +1,22 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.CashItem;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:21:05
+ */
+@Getter
+@Setter
+public class CashPage extends Page<CashItem> {
+    @Serial
+    private static final long serialVersionUID = 8737528173711734529L;
+
+    private long total_withdraw_money;
+    private long total_balance;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/PrePayIndexPage.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.PrePayIndex;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:23:34
+ */
+@Getter
+@Setter
+public class PrePayIndexPage extends Page<PrePayIndex> {
+
+    @Serial
+    private static final long serialVersionUID = 1163213440816151568L;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/RecordPage.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.Record;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:21:05
+ */
+@Getter
+@Setter
+public class RecordPage extends Page<Record> {
+    @Serial
+    private static final long serialVersionUID = 8737528173711734529L;
+
+}

+ 9 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java

@@ -57,6 +57,15 @@ public interface RemoteSystemService {
      */
     List<SysDictGroupResDto> queryDictGroupByType(String type);
 
+    /**
+     * @param type 字典类型
+     * @return SysDictResDto
+     * @desc: 根据字典类型和key查最底层的数据
+     * @author: czh
+     * @date: 2023/7/7
+     */
+    List<SysDictResDto> queryDictBottom(String type, String value);
+
     /**
      * @param type 字典类型,value key
      * @return SysDictGroupResDto

+ 8 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteUserService.java

@@ -167,4 +167,12 @@ public interface RemoteUserService {
      */
     void checkRegisterParam(String entName, String phone, Integer systemType);
 
+    /**
+     * @param entId 企业id
+     * @return EntTypeResDto
+     * @desc: 根据企业id 查属性
+     * @author: czh
+     * @date: 2023/7/27
+     */
+    List<EntTypeResDto> queryEntTypeById(Long entId);
 }

+ 5 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntCacheResDto.java

@@ -65,6 +65,11 @@ public class EntCacheResDto implements Serializable {
      */
     private String entDeptIds;
 
+    /**
+     * 企业属性 (1供应商,2采购商,34PL物流,43PL物流)
+     */
+    private String entTypes;
+
     /**
      * 机构信息
      */

+ 73 - 0
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/EntTypeResDto.java

@@ -0,0 +1,73 @@
+package com.sckw.system.api.model.dto.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author czh
+ * @desc 企业类型
+ * @date 2023/7/27
+ */
+@Data
+public class EntTypeResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1158513264803000013L;
+
+    /**
+     * 企业ID或企业子公司所属机构ID
+     */
+    private Long entId;
+
+    /**
+     * 用户类型(1供应商,2采购商,3 4PL物流,4 3PL物流)
+     */
+    private Integer type;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态:0正常/1锁定
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 删除标识(0正常/-1删除)
+     */
+    private Integer delFlag = 0;
+
+
+}

+ 2 - 1
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/vo/LogisticsOrderDTO.java

@@ -2,6 +2,7 @@ package com.sckw.transport.api.model.dto.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -10,7 +11,7 @@ import java.math.BigDecimal;
  * @date 2023-07-17 11:07:08
  */
 @Data
-public class LogisticsOrderDTO {
+public class LogisticsOrderDTO implements Serializable {
 
     /**
      * 物流订单id

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

@@ -2,6 +2,7 @@ package com.sckw.transport.api.model.dto.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -10,7 +11,7 @@ import java.math.BigDecimal;
  * @date 2023-07-21 17:07:15
  */
 @Data
-public class LogisticsOrderVO {
+public class LogisticsOrderVO implements Serializable {
 
     /**
      * 物流订单id

+ 14 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCarrierController.java

@@ -61,4 +61,18 @@ public class KwcCarrierController {
         reqVo.setEntType(EntTypeEnum.LOGISTICS4.getCode());
         kwcContractLogisticsService.export(reqVo);
     }
+
+
+    /**
+     * @return HttpResult
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    @PostMapping("findListGroup")
+    public HttpResult findListGroup(@RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.LOGISTICS4.getCode());
+        return HttpResult.ok(kwcContractLogisticsService.findListGroup(reqVo));
+    }
+
 }

+ 4 - 7
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCheckedController.java

@@ -1,9 +1,6 @@
 package com.sckw.contract.controller;
 
-import com.sckw.contract.model.vo.req.ContractLogisticsReqVo;
-import com.sckw.contract.model.vo.req.IdReqVo;
-import com.sckw.contract.model.vo.req.IdsReqVo;
-import com.sckw.contract.model.vo.req.QueryListReqVo;
+import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.service.*;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.enums.EntTypeEnum;
@@ -49,7 +46,7 @@ public class KwcCheckedController {
      * @date 2023/7/13
      */
     @RequestMapping("add")
-    public HttpResult addCheckedContract(@Valid @RequestBody ContractLogisticsReqVo reqVo) throws SystemException {
+    public HttpResult addCheckedContract(@RequestBody ContractLogisticsReqVo reqVo) throws SystemException {
         kwcContractLogisticsService.addCheckedContract(reqVo);
         return HttpResult.ok(HttpStatus.MSG_003);
     }
@@ -113,8 +110,8 @@ public class KwcCheckedController {
      * @return HttpResult
      */
     @PostMapping("complete")
-    public HttpResult complete(@Valid @RequestBody IdsReqVo reqVo) throws SystemException {
-        kwcContractLogisticsService.complete(reqVo.getIds());
+    public HttpResult complete(@Valid @RequestBody CompleteReqVo reqVo) throws SystemException {
+        kwcContractLogisticsService.complete(reqVo);
         return HttpResult.ok();
     }
 

+ 15 - 3
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -47,7 +47,7 @@ public class KwcContractSaleController {
      * @date: 2023/7/18
      */
     @RequestMapping("add")
-    public HttpResult addTradeContract(@Valid @RequestBody ContractTradeReqVo reqVo) throws SystemException {
+    public HttpResult addTradeContract(@RequestBody ContractTradeReqVo reqVo) throws SystemException {
         kwcContractTradeService.addTradeContract(reqVo);
         return HttpResult.ok(HttpStatus.MSG_003);
     }
@@ -112,8 +112,8 @@ public class KwcContractSaleController {
      * @return HttpResult
      */
     @PostMapping("complete")
-    public HttpResult complete(@Valid @RequestBody IdsReqVo reqVo) throws SystemException {
-        kwcContractTradeService.complete(reqVo.getIds());
+    public HttpResult complete(@Valid @RequestBody CompleteReqVo reqVo) throws SystemException {
+        kwcContractTradeService.complete(reqVo);
         return HttpResult.ok();
     }
 
@@ -154,4 +154,16 @@ public class KwcContractSaleController {
     public HttpResult queryCurrentEntSaleContractList() throws SystemException {
         return HttpResult.ok(kwcContractTradeService.queryCurrentEntSaleContractList());
     }
+
+    /**
+     * @return HttpResult
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    @PostMapping("findListGroup")
+    public HttpResult findListGroup(@RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.SUPPLIER.getCode());
+        return HttpResult.ok(kwcContractTradeService.findListGroup(reqVo));
+    }
 }

+ 12 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcPurchaseController.java

@@ -63,4 +63,16 @@ public class KwcPurchaseController {
         kwcContractTradeService.export(reqVo);
     }
 
+    /**
+     * @return HttpResult
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    @PostMapping("findListGroup")
+    public HttpResult findListGroup(@RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.PURCHASER.getCode());
+        return HttpResult.ok(kwcContractTradeService.findListGroup(reqVo));
+    }
+
 }

+ 16 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -11,6 +11,8 @@ import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
 import com.sckw.contract.model.entity.KwcContractTrade;
 import com.sckw.contract.service.KwcContractLogisticsUnitService;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.SigningWayEnum;
 import com.sckw.core.utils.CollectionUtils;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -38,12 +40,22 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         for (Long contractId : contractIds) {
             KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(contractId);
             if (Objects.nonNull(kwcContractLogistics)) {
+                Integer status = kwcContractLogistics.getStatus();
+                Integer delFlag = kwcContractLogistics.getDelFlag();
+                if (Objects.equals(status, ContractStatusEnum.SAVE.getCode()) || Objects.equals(status, ContractStatusEnum.COMPLETE.getCode()) || delFlag.equals(Global.YES)) {
+                    continue;
+                }
                 map.put(contractId, fillContractLogistics(kwcContractLogistics));
                 continue;
             }
 
             KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(contractId);
             if (Objects.nonNull(kwcContractTrade)) {
+                Integer status = kwcContractTrade.getStatus();
+                Integer delFlag = kwcContractTrade.getDelFlag();
+                if (Objects.equals(status, ContractStatusEnum.SAVE.getCode()) || Objects.equals(status, ContractStatusEnum.COMPLETE.getCode()) || delFlag.equals(Global.YES)) {
+                    continue;
+                }
                 map.put(contractId, fillContractTrade(kwcContractTrade));
             }
         }
@@ -59,6 +71,8 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         contractCommonInfoResDto.setSigningWay(kwcContractLogistics.getSigningWay());
         contractCommonInfoResDto.setSigningWayName(SigningWayEnum.getName(kwcContractLogistics.getSigningWay()).getName());
         contractCommonInfoResDto.setEntInfoList(entList);
+        contractCommonInfoResDto.setStatus(kwcContractLogistics.getStatus());
+        contractCommonInfoResDto.setStatusName(ContractStatusEnum.getName(kwcContractLogistics.getStatus()).getName());
         List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitService.queryByContractId(kwcContractLogistics.getId());
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)) {
             for (KwcContractLogisticsUnit kwcContractLogisticsUnit : kwcContractLogisticsUnits) {
@@ -81,6 +95,8 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         contractCommonInfoResDto.setSigningWay(kwcContractTrade.getSigningWay());
         contractCommonInfoResDto.setSigningWayName(SigningWayEnum.getName(kwcContractTrade.getSigningWay()).getName());
         contractCommonInfoResDto.setEntInfoList(entList);
+        contractCommonInfoResDto.setStatus(kwcContractTrade.getStatus());
+        contractCommonInfoResDto.setStatusName(ContractStatusEnum.getName(kwcContractTrade.getStatus()).getName());
         List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitService.queryByContractId(kwcContractTrade.getId());
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)) {
             for (KwcContractLogisticsUnit kwcContractLogisticsUnit : kwcContractLogisticsUnits) {

+ 6 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java

@@ -31,7 +31,7 @@ public class QueryListResDto {
     /**
      * 合同名
      */
-    private String contactName;
+    private String contractName;
 
     /**
      * 合同号
@@ -113,4 +113,9 @@ public class QueryListResDto {
      */
     private String targetEntName;
 
+    /**
+     * 履行量
+     */
+    private BigDecimal performedAmount;
+
 }

+ 3 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogistics.java

@@ -1,5 +1,7 @@
 package com.sckw.contract.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
@@ -58,6 +60,7 @@ public class KwcContractLogistics implements Serializable {
     /**
      * 结束日期
      */
+    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private Date endTime;
 
     /**

+ 38 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/CompleteReqVo.java

@@ -0,0 +1,38 @@
+package com.sckw.contract.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author czh
+ * @desc 完结
+ * @date 2023/7/27
+ */
+@Data
+public class CompleteReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4191696463874543248L;
+
+    /**
+     * 主键id
+     */
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 履约量
+     */
+    @NotNull(message = "履约量不能为空")
+    private BigDecimal performedAmount;
+
+}

+ 7 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsBaseInfoReqVo.java

@@ -1,7 +1,10 @@
 package com.sckw.contract.model.vo.req;
 
+import com.sckw.core.utils.RegularUtils;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 import java.io.Serial;
@@ -29,6 +32,7 @@ public class LogisticsBaseInfoReqVo implements Serializable {
      * 承运单位联系电话
      */
     @NotBlank(message = "承运单位联系电话不能为空")
+    @Pattern(regexp = RegularUtils.PHONE_REG, message = "password只能是数字")
     private String carrierPhone;
 
     /**
@@ -53,12 +57,14 @@ public class LogisticsBaseInfoReqVo implements Serializable {
      * 合同编号
      */
     @NotBlank(message = "合同编号不能为空")
+    @Size(max = 20, message = "合同编号超长")
     private String contractCode;
 
     /**
      * 合同名称
      */
     @NotBlank(message = "合同名称不能为空")
+    @Size(max = 20, message = "合同名称超长")
     private String contractName;
 
     /**
@@ -77,4 +83,5 @@ public class LogisticsBaseInfoReqVo implements Serializable {
      */
     @NotNull(message = "生效时间不能为空")
     private Date startTime;
+
 }

+ 5 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsGoodsInfoReqVo.java

@@ -1,6 +1,8 @@
 package com.sckw.contract.model.vo.req;
 
+import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 import java.io.Serial;
@@ -27,11 +29,13 @@ public class LogisticsGoodsInfoReqVo implements Serializable {
     /**
      * 商品名
      */
+    @Size(max = 50, message = "商品名称超长")
     private String goodsName;
 
     /**
      * 运量
      */
+    @DecimalMin(value = "0", message = "运量不能小于0")
     private BigDecimal amount;
 
     /**
@@ -62,7 +66,7 @@ public class LogisticsGoodsInfoReqVo implements Serializable {
     /**
      * 扣亏货值
      */
-    private BigDecimal deficit;
+    private BigDecimal deficitPrice;
 
     /**
      * 字典id  扣亏货值

+ 32 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -22,11 +23,21 @@ public class LogisticsBaseInfoResVo implements Serializable {
      */
     private String carrierEntName;
 
+    /**
+     * 承运单位
+     */
+    private Long carrierEntId;
+
     /**
      * 承运单位联系电话
      */
     private String carrierPhone;
 
+    /**
+     * 计费方式
+     */
+    private String charging;
+
     /**
      * 计费方式
      */
@@ -37,6 +48,11 @@ public class LogisticsBaseInfoResVo implements Serializable {
      */
     private String checkedEntName;
 
+    /**
+     * 托运单位
+     */
+    private Long checkedEntId;
+
     /**
      * 托运单位联系电话
      */
@@ -55,7 +71,12 @@ public class LogisticsBaseInfoResVo implements Serializable {
     /**
      * 终止时间
      */
-    private Date endTime;
+    private String endTime;
+
+    /**
+     * 签约方式
+     */
+    private String signingWay;
 
     /**
      * 签约方式
@@ -67,4 +88,14 @@ public class LogisticsBaseInfoResVo implements Serializable {
      */
     private Date startTime;
 
+    /**
+     * 总量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 已履约量
+     */
+    private BigDecimal performedAmount;
+
 }

+ 21 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java

@@ -30,13 +30,18 @@ public class TradeBaseInfoResVo implements Serializable {
     /**
      * 终止时间
      */
-    private Date endTime;
+    private String endTime;
 
     /**
      * 供应单位
      */
     private String provideEntName;
 
+    /**
+     * 供应单位
+     */
+    private Long provideEntId;
+
     /**
      * 供应单位联系电话
      */
@@ -47,6 +52,11 @@ public class TradeBaseInfoResVo implements Serializable {
      */
     private String purchaseEntName;
 
+    /**
+     * 采购单位
+     */
+    private Long purchaseEntId;
+
     /**
      * 采购单位联系电话
      */
@@ -57,6 +67,11 @@ public class TradeBaseInfoResVo implements Serializable {
      */
     private String signingWayName;
 
+    /**
+     * 签约方式
+     */
+    private String signingWay;
+
     /**
      * 生效时间
      */
@@ -67,4 +82,9 @@ public class TradeBaseInfoResVo implements Serializable {
      */
     private String tradingName;
 
+    /**
+     * 付款方式
+     */
+    private String trading;
+
 }

+ 8 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeGoodsInfoResVo.java

@@ -21,16 +21,24 @@ public class TradeGoodsInfoResVo implements Serializable {
      * 采购数量
      */
     private BigDecimal amount;
+
     /**
      * 商品
      */
     private String goodsName;
+
     /**
      * 单价
      */
     private BigDecimal price;
+
     /**
      * 单位
      */
     private String unit;
+
+    /**
+     * 单位名
+     */
+    private String unitName;
 }

+ 21 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsGoodsService.java

@@ -7,6 +7,7 @@ import com.sckw.contract.model.vo.req.LogisticsGoodsInfoReqVo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -17,10 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author PC
@@ -99,6 +98,24 @@ public class KwcContractLogisticsGoodsService {
         return count;
     }
 
+    /**
+     * @param idList 合同id
+     * @return   Map<Long, BigDecimal>
+     * @desc: 根据合同id查总量
+     * @author: czh
+     * @date: 2023/7/25
+     */
+    public Map<Long, BigDecimal> getAmountByIdList(List<Long> idList) {
+        LambdaQueryWrapper<KwcContractLogisticsGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwcContractLogisticsGoods::getContractId, idList);
+        wrapper.eq(KwcContractLogisticsGoods::getDelFlag, Global.NO);
+        List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(kwcContractLogisticsGoods)) {
+            return new HashMap<>(1);
+        }
+       return kwcContractLogisticsGoods.stream().collect(Collectors.groupingBy(KwcContractLogisticsGoods::getContractId, Collectors.reducing(BigDecimal.ZERO, KwcContractLogisticsGoods::getAmount, BigDecimal::add)));
+    }
+
 }
 
 

+ 79 - 51
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java

@@ -16,9 +16,7 @@ import com.sckw.contract.model.dto.res.QueryListResDto;
 import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
-import com.sckw.contract.model.vo.req.ContractLogisticsReqVo;
-import com.sckw.contract.model.vo.req.LogisticsBaseInfoReqVo;
-import com.sckw.contract.model.vo.req.QueryListReqVo;
+import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.*;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -29,10 +27,7 @@ import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
-import com.sckw.core.utils.BeanUtils;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.IdWorker;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
@@ -83,10 +78,17 @@ public class KwcContractLogisticsService {
      */
     @Transactional(rollbackFor = {})
     public Long addCheckedContract(ContractLogisticsReqVo reqVo) {
+        Long id = reqVo.getId();
+        //不为空时是修改
+        if (Objects.nonNull(id)) {
+            update(reqVo);
+            return id;
+        }
+
         LogisticsBaseInfoReqVo baseInfo = reqVo.getBaseInfo();
-        
+        List<LogisticsGoodsInfoReqVo> goodsInfo = reqVo.getGoodsInfo();
         //创建合同
-        KwcContractLogistics kwcContractLogistics = getKwcContractLogistics(baseInfo, reqVo.getRemark(), reqVo.getPId());
+        KwcContractLogistics kwcContractLogistics = getKwcContractLogistics(baseInfo, goodsInfo, reqVo.getRemark(), reqVo.getPId());
         long contactId = new IdWorker(1L).nextId();
         kwcContractLogistics.setId(contactId);
         kwcContractLogistics.setStatus(ContractStatusEnum.SAVE.getCode());
@@ -96,15 +98,14 @@ public class KwcContractLogisticsService {
         }
 
         //保存交易合同商品信息
-        kwcContractLogisticsGoodsService.saveContractLogisticsGoods(kwcContractLogistics.getId(), reqVo.getGoodsInfo());
+        kwcContractLogisticsGoodsService.saveContractLogisticsGoods(kwcContractLogistics.getId(), goodsInfo);
 
         //存单位信息
         kwcContractLogisticsUnitService.saveContractLogisticsUnit(kwcContractLogistics.getId(), baseInfo);
-
         return contactId;
     }
 
-    public KwcContractLogistics getKwcContractLogistics(LogisticsBaseInfoReqVo baseInfo, String remark, Long pid) {
+    public KwcContractLogistics getKwcContractLogistics(LogisticsBaseInfoReqVo baseInfo, List<LogisticsGoodsInfoReqVo> goodsInfo, String remark, Long pid) {
         Date date = new Date();
         KwcContractLogistics kwcContractLogistics = new KwcContractLogistics();
         kwcContractLogistics.setEntId(LoginUserHolder.getEntId());
@@ -114,7 +115,6 @@ public class KwcContractLogisticsService {
         kwcContractLogistics.setCharging(baseInfo.getCharging());
         kwcContractLogistics.setStartTime(baseInfo.getStartTime());
         kwcContractLogistics.setEndTime(baseInfo.getEndTime());
-        kwcContractLogistics.setAmount(new BigDecimal("0"));
         kwcContractLogistics.setPerformedAmount(new BigDecimal("0"));
         kwcContractLogistics.setContractPid(pid);
         kwcContractLogistics.setRemark(remark);
@@ -123,6 +123,16 @@ public class KwcContractLogisticsService {
         kwcContractLogistics.setUpdateBy(LoginUserHolder.getUserId());
         kwcContractLogistics.setUpdateTime(date);
         kwcContractLogistics.setDelFlag(Global.NO);
+
+        BigDecimal amountTotal = new BigDecimal(Global.NUMERICAL_ZERO);
+        if (CollectionUtils.isNotEmpty(goodsInfo)) {
+            for (LogisticsGoodsInfoReqVo logisticsGoodsInfoReqVo : goodsInfo) {
+                if (Objects.nonNull(logisticsGoodsInfoReqVo.getAmount())) {
+                    amountTotal = amountTotal.add(logisticsGoodsInfoReqVo.getAmount());
+                }
+            }
+        }
+        kwcContractLogistics.setAmount(amountTotal);
         return kwcContractLogistics;
     }
 
@@ -170,38 +180,41 @@ public class KwcContractLogisticsService {
                 if (kwcContractLogisticsUnit.getUnitType().equals(CooperateTypeEnum.CONSIGN.getCode())) {
                     logisticsBaseInfoResVo.setCheckedEntName(kwcContractLogisticsUnit.getFirmName());
                     logisticsBaseInfoResVo.setCheckedPhone(kwcContractLogisticsUnit.getSignPhone());
+                    logisticsBaseInfoResVo.setCheckedEntId(kwcContractLogisticsUnit.getEntId());
                 }
 
                 if (kwcContractLogisticsUnit.getUnitType().equals(CooperateTypeEnum.CARRIAGE.getCode())) {
                     logisticsBaseInfoResVo.setCarrierEntName(kwcContractLogisticsUnit.getFirmName());
                     logisticsBaseInfoResVo.setCarrierPhone(kwcContractLogisticsUnit.getSignPhone());
+                    logisticsBaseInfoResVo.setCarrierEntId(kwcContractLogisticsUnit.getEntId());
                 }
             }
 
             logisticsBaseInfoResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(kwcContractLogistics.getCharging())));
+            logisticsBaseInfoResVo.setCharging(String.valueOf(kwcContractLogistics.getCharging()));
             logisticsBaseInfoResVo.setContractCode(kwcContractLogistics.getContractNo());
             logisticsBaseInfoResVo.setContractName(kwcContractLogistics.getName());
-            logisticsBaseInfoResVo.setEndTime(kwcContractLogistics.getEndTime());
+            logisticsBaseInfoResVo.setEndTime(Objects.isNull(kwcContractLogistics.getEndTime()) ? Global.EMPTY_STRING : DateUtils.format(kwcContractLogistics.getEndTime()));
             logisticsBaseInfoResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractLogistics.getSigningWay())));
+            logisticsBaseInfoResVo.setSigningWay(String.valueOf(kwcContractLogistics.getSigningWay()));
             logisticsBaseInfoResVo.setStartTime(kwcContractLogistics.getStartTime());
+            logisticsBaseInfoResVo.setAmount(kwcContractLogistics.getAmount());
+            logisticsBaseInfoResVo.setPerformedAmount(kwcContractLogistics.getPerformedAmount());
             contractLogisticsDetailResVo.setBaseInfo(logisticsBaseInfoResVo);
         }
 
         //标的信息
         List<KwcContractLogisticsGoods> kwcContractLogisticsGoodsList = kwcContractLogisticsGoodsService.queryGoodsInfoByContractId(kwcContractLogistics.getId());
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsGoodsList)) {
-            List<Long> goodsIdList = kwcContractLogisticsGoodsList.stream().map(KwcContractLogisticsGoods::getGoodsId).toList();
-//            Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIdList);
-
-            String keys = "";
-           for (KwcContractLogisticsGoods item :kwcContractLogisticsGoodsList){
-                keys += DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + item.getUnit() + Global.COMMA;
-                keys += DictTypeEnum.PRICE_TYPE.getType() + Global.POUND + item.getPriceUnit() + Global.COMMA;
-                keys += DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + item.getLossUnit() + Global.COMMA;
-                keys += DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + item.getDeficitUnit() + Global.COMMA;
-            };
+            StringBuilder keys = new StringBuilder();
+            for (KwcContractLogisticsGoods item : kwcContractLogisticsGoodsList) {
+                keys.append(DictTypeEnum.UNIT_TYPE.getType()).append(Global.POUND).append(item.getUnit()).append(Global.COMMA);
+                keys.append(DictTypeEnum.PRICE_TYPE.getType()).append(Global.POUND).append(item.getPriceUnit()).append(Global.COMMA);
+                keys.append(DictTypeEnum.WEIGHT_CAR.getType()).append(Global.POUND).append(item.getLossUnit()).append(Global.COMMA);
+                keys.append(DictTypeEnum.WEIGHT_CAR.getType()).append(Global.POUND).append(item.getDeficitUnit()).append(Global.COMMA);
+            }
 
-            Map<String, SysDictResDto> stringSysDictResDtoMap = remoteSystemService.queryDictMapByTypeValues(keys);
+            Map<String, SysDictResDto> stringSysDictResDtoMap = remoteSystemService.queryDictMapByTypeValues(keys.toString());
 
             List<LogisticsGoodsInfoResVo> goodsInfo = new ArrayList<>();
             for (KwcContractLogisticsGoods kwcContractLogisticsGoods : kwcContractLogisticsGoodsList) {
@@ -215,31 +228,27 @@ public class KwcContractLogisticsService {
                 logisticsGoodsInfoResVo.setGoodsId(kwcContractLogisticsGoods.getGoodsId());
                 logisticsGoodsInfoResVo.setId(kwcContractLogisticsGoods.getId());
                 logisticsGoodsInfoResVo.setGoodsName(kwcContractLogisticsGoods.getGoodsName());
-//                KwpGoods kwpGoods = goodsMap.get(kwcContractLogisticsGoods.getGoodsId());
-//                if (Objects.nonNull(kwpGoods)) {
-//                    logisticsGoodsInfoResVo.setGoodsName(kwpGoods.getName());
-//                }
                 logisticsGoodsInfoResVo.setLoss(kwcContractLogisticsGoods.getLoss());
                 logisticsGoodsInfoResVo.setLossUnit(kwcContractLogisticsGoods.getLossUnit());
 
                 SysDictResDto unitType = stringSysDictResDtoMap.get(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + kwcContractLogisticsGoods.getUnit());
                 if (Objects.nonNull(unitType)) {
-                    logisticsGoodsInfoResVo.setUnitName(unitType.getValue());
+                    logisticsGoodsInfoResVo.setUnitName(unitType.getLabel());
                 }
 
                 SysDictResDto priceType = stringSysDictResDtoMap.get(DictTypeEnum.PRICE_TYPE.getType() + Global.POUND + kwcContractLogisticsGoods.getPriceUnit());
                 if (Objects.nonNull(priceType)) {
-                    logisticsGoodsInfoResVo.setPriceUnitName(priceType.getValue());
+                    logisticsGoodsInfoResVo.setPriceUnitName(priceType.getLabel());
                 }
 
                 SysDictResDto weightCar1 = stringSysDictResDtoMap.get(DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + kwcContractLogisticsGoods.getLossUnit());
                 if (Objects.nonNull(weightCar1)) {
-                    logisticsGoodsInfoResVo.setLossUnitName(weightCar1.getValue());
+                    logisticsGoodsInfoResVo.setLossUnitName(weightCar1.getLabel());
                 }
 
                 SysDictResDto weightCar2 = stringSysDictResDtoMap.get(DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + kwcContractLogisticsGoods.getDeficitUnit());
                 if (Objects.nonNull(weightCar2)) {
-                    logisticsGoodsInfoResVo.setDeficitUnitName(weightCar2.getValue());
+                    logisticsGoodsInfoResVo.setDeficitUnitName(weightCar2.getLabel());
                 }
 
                 goodsInfo.add(logisticsGoodsInfoResVo);
@@ -262,6 +271,7 @@ public class KwcContractLogisticsService {
             }
             contractLogisticsDetailResVo.setChild(child);
         }
+        contractLogisticsDetailResVo.setRemark(kwcContractLogistics.getRemark());
         return contractLogisticsDetailResVo;
     }
 
@@ -319,17 +329,18 @@ public class KwcContractLogisticsService {
     @Transactional(rollbackFor = {})
     public void update(ContractLogisticsReqVo reqVo) {
         Long contractId = reqVo.getId();
+        Date date = new Date();
         KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(contractId);
         if (Objects.isNull(kwcContractLogistics)) {
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
         }
 
-        KwcContractLogistics param = getKwcContractLogistics(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
+        KwcContractLogistics param = getKwcContractLogistics(reqVo.getBaseInfo(), reqVo.getGoodsInfo(), reqVo.getRemark(), reqVo.getPId());
         param.setId(contractId);
         param.setSigningUrl(reqVo.getContractFile());
         param.setStatus(ContractStatusEnum.SAVE.getCode());
         param.setUpdateBy(LoginUserHolder.getUserId());
-        param.setUpdateTime(new Date());
+        param.setUpdateTime(date);
         if (kwcContractLogisticsMapper.updateById(param) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
         }
@@ -338,7 +349,6 @@ public class KwcContractLogisticsService {
         //保存交易合同商品信息-先把以前的删除
         List<KwcContractLogisticsGoods> kwcContractLogisticsGoodsList = kwcContractLogisticsGoodsService.queryGoodsInfoByContractId(contractId);
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsGoodsList)) {
-            Date date = new Date();
             kwcContractLogisticsGoodsList.forEach(item -> {
                 item.setDelFlag(Global.YES);
                 item.setUpdateBy(LoginUserHolder.getUserId());
@@ -350,27 +360,43 @@ public class KwcContractLogisticsService {
             }
         }
         kwcContractLogisticsGoodsService.saveContractLogisticsGoods(kwcContractLogistics.getId(), reqVo.getGoodsInfo());
+
+        //保存单位信息-先把以前的删除
+        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitService.queryByContractId(contractId);
+        if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)) {
+            kwcContractLogisticsUnits.forEach(item -> {
+                item.setDelFlag(Global.YES);
+                item.setUpdateBy(LoginUserHolder.getUserId());
+                item.setUpdateTime(date);
+            });
+
+            if (kwcContractLogisticsUnitService.updateBatch(kwcContractLogisticsUnits) != kwcContractLogisticsUnits.size()) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+        }
+        kwcContractLogisticsUnitService.saveContractLogisticsUnit(contractId, reqVo.getBaseInfo());
     }
 
     /**
      * @desc: 手动完结
-     * @param: reqVo ids
+     * @param: reqVo
      * @author: czh
      * @date 2023/7/16
      */
     @Transactional(rollbackFor = {})
-    public void complete(String ids) {
-        List<Long> contractIdList = Arrays.stream(ids.split(Global.COMMA)).map(Long::parseLong).toList();
-        List<KwcContractLogistics> kwcContractLogistics = kwcContractLogisticsMapper.selectBatchIds(contractIdList);
-        Date date = new Date();
-        kwcContractLogistics.forEach(item -> {
-            item.setStatus(ContractStatusEnum.COMPLETE.getCode());
-            item.setUpdateBy(LoginUserHolder.getUserId());
-            item.setUpdateTime(date);
-            if (kwcContractLogisticsMapper.updateById(item) <= 0) {
-                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
-            }
-        });
+    public void complete(CompleteReqVo reqVo) {
+        KwcContractLogistics kwcContractLogistic = kwcContractLogisticsMapper.selectById(reqVo.getId());
+        if (!kwcContractLogistic.getStatus().equals(ContractStatusEnum.SIGNED.getCode())) {
+            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_028);
+        }
+        kwcContractLogistic.setStatus(ContractStatusEnum.COMPLETE.getCode());
+        kwcContractLogistic.setUpdateBy(LoginUserHolder.getUserId());
+        kwcContractLogistic.setUpdateTime(new Date());
+        kwcContractLogistic.setPerformedAmount(reqVo.getPerformedAmount());
+        kwcContractLogistic.setRemark(reqVo.getRemark());
+        if (kwcContractLogisticsMapper.updateById(kwcContractLogistic) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
     }
 
 
@@ -436,6 +462,7 @@ public class KwcContractLogisticsService {
         List<QueryListResVo> list = new ArrayList<>();
         for (QueryListResDto queryListResDto : queryListResDtos) {
             QueryListResVo queryListResVo = new QueryListResVo();
+            BeanUtils.copyProperties(queryListResDto, queryListResVo);
             queryListResVo.setCheckedEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.LOGISTICS3.getCode()) == 0 ? queryListResDto.getEntName() : queryListResDto.getTargetEntName());
             queryListResVo.setCarrierEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.LOGISTICS3.getCode()) == 0 ? queryListResDto.getTargetEntName() : queryListResDto.getEntName());
 
@@ -446,8 +473,9 @@ public class KwcContractLogisticsService {
             }
             queryListResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(queryListResDto.getCharging())));
             queryListResVo.setStatusName(ContractStatusEnum.getName(queryListResDto.getStatus()).getName());
-
-            queryListResVo.setPerformedAmount(new BigDecimal("0"));
+            queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), String.valueOf(queryListResDto.getSigningWay())));
+            queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
+            queryListResVo.setAmount(queryListResDto.getAmount());
             list.add(queryListResVo);
         }
         return list;

+ 59 - 27
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java

@@ -4,11 +4,13 @@ import java.util.*;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
+import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
 import com.sckw.contract.model.vo.req.LogisticsBaseInfoReqVo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CooperateTypeEnum;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -38,12 +40,20 @@ public class KwcContractLogisticsUnitService {
      */
     public void saveContractLogisticsUnit(Long contractId, LogisticsBaseInfoReqVo baseInfo) throws SystemException {
         List<Long> entIdList = new ArrayList<>();
-        entIdList.add(baseInfo.getCheckedEntId());
-        entIdList.add(baseInfo.getCarrierEntId());
-        Map<Long, EntCacheResDto> entCacheResDtoMap = commonBusinessService.queryEntCacheMapByIds(entIdList);
+        if (Objects.nonNull(baseInfo.getCheckedEntId())) {
+            entIdList.add(baseInfo.getCheckedEntId());
+        }
 
-        Date date = new Date();
-        saveCheckAndCarrier(contractId, entCacheResDtoMap, date, baseInfo);
+        if (Objects.nonNull(baseInfo.getCarrierEntId())) {
+            entIdList.add(baseInfo.getCarrierEntId());
+        }
+
+        if (CollectionUtils.isEmpty(entIdList)) {
+            return;
+        }
+
+        Map<Long, EntCacheResDto> entCacheResDtoMap = commonBusinessService.queryEntCacheMapByIds(entIdList);
+        saveCheckAndCarrier(contractId, entCacheResDtoMap, baseInfo);
     }
 
     /**
@@ -52,33 +62,40 @@ public class KwcContractLogisticsUnitService {
      * @author: czh
      * @date 2023/7/16
      */
-    private void saveCheckAndCarrier(Long contractId, Map<Long, EntCacheResDto> entCacheResDtoMap, Date date, LogisticsBaseInfoReqVo logisticsBaseInfoReqVo) {
+    private void saveCheckAndCarrier(Long contractId, Map<Long, EntCacheResDto> entCacheResDtoMap, LogisticsBaseInfoReqVo logisticsBaseInfoReqVo) throws SystemException {
+        Date date = new Date();
         //存托运企业
+        Long checkedEntId = logisticsBaseInfoReqVo.getCheckedEntId();
         KwcContractLogisticsUnit kwcContractLogisticsUnit = new KwcContractLogisticsUnit();
-        kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
-        kwcContractLogisticsUnit.setContractId(contractId);
-        kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CONSIGN.getCode());
-        kwcContractLogisticsUnit.setEntId(logisticsBaseInfoReqVo.getCheckedEntId());
-        saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
-        kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCheckedPhone());
-        kwcContractLogisticsUnit.setStatus(Global.NO);
-        kwcContractLogisticsUnit.setCreateBy(LoginUserHolder.getUserId());
-        kwcContractLogisticsUnit.setCreateTime(date);
-        kwcContractLogisticsUnit.setUpdateBy(LoginUserHolder.getUserId());
-        kwcContractLogisticsUnit.setUpdateTime(date);
-        kwcContractLogisticsUnit.setDelFlag(Global.NO);
-        if (kwcContractLogisticsUnitMapper.insert(kwcContractLogisticsUnit) <= 0) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        if (Objects.nonNull(checkedEntId)) {
+            kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
+            kwcContractLogisticsUnit.setContractId(contractId);
+            kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CONSIGN.getCode());
+            kwcContractLogisticsUnit.setEntId(checkedEntId);
+            saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
+            kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCheckedPhone());
+            kwcContractLogisticsUnit.setStatus(Global.NO);
+            kwcContractLogisticsUnit.setCreateBy(LoginUserHolder.getUserId());
+            kwcContractLogisticsUnit.setCreateTime(date);
+            kwcContractLogisticsUnit.setUpdateBy(LoginUserHolder.getUserId());
+            kwcContractLogisticsUnit.setUpdateTime(date);
+            kwcContractLogisticsUnit.setDelFlag(Global.NO);
+            if (kwcContractLogisticsUnitMapper.insert(kwcContractLogisticsUnit) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
         }
 
         //存承运运企业
-        kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
-        kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CARRIAGE.getCode());
-        kwcContractLogisticsUnit.setEntId(logisticsBaseInfoReqVo.getCarrierEntId());
-        saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
-        kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCarrierPhone());
-        if (kwcContractLogisticsUnitMapper.insert(kwcContractLogisticsUnit) <= 0) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        Long carrierEntId = logisticsBaseInfoReqVo.getCarrierEntId();
+        if (Objects.nonNull(carrierEntId)) {
+            kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
+            kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CARRIAGE.getCode());
+            kwcContractLogisticsUnit.setEntId(carrierEntId);
+            saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
+            kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCarrierPhone());
+            if (kwcContractLogisticsUnitMapper.insert(kwcContractLogisticsUnit) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
         }
     }
 
@@ -110,6 +127,21 @@ public class KwcContractLogisticsUnitService {
         wrapper.eq(KwcContractLogisticsUnit::getStatus, Global.NO);
         return kwcContractLogisticsUnitMapper.selectList(wrapper);
     }
+
+    /**
+     * @return 修改个数
+     * @desc: 修改
+     * @param: list 实体类
+     * @author: czh
+     * @date 2023/7/17
+     */
+    public int updateBatch(List<KwcContractLogisticsUnit> list) {
+        int count = 0;
+        for (KwcContractLogisticsUnit kwcContractLogisticsUnit : list) {
+            count += kwcContractLogisticsUnitMapper.updateById(kwcContractLogisticsUnit);
+        }
+        return count;
+    }
 }
 
 

+ 144 - 41
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java

@@ -1,4 +1,5 @@
 package com.sckw.contract.service;
+
 import java.io.IOException;
 import java.util.Date;
 
@@ -13,20 +14,20 @@ import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.*;
 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.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
-import com.sckw.core.utils.BeanUtils;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.IdWorker;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
 import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -34,16 +35,18 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import com.sckw.system.api.RemoteSystemService;
+
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import com.sckw.contract.dao.KwcContractTradeMapper;
 
 /**
-* @author PC
-* @description 针对表【kwc_contract_trade(交易合同(采购合同/销售合同))】的数据库操作Service实现
-* @createDate 2023-07-13 13:36:19
-*/
+ * @author PC
+ * @description 针对表【kwc_contract_trade(交易合同(采购合同/销售合同))】的数据库操作Service实现
+ * @createDate 2023-07-13 13:36:19
+ */
 @Service
 @Slf4j
 public class KwcContractTradeService {
@@ -68,11 +71,11 @@ public class KwcContractTradeService {
     private GoodsInfoService goodsInfoService;
 
     /**
+     * @return PageResult
      * @desc: 分页查询
-     * @param:  reqVo
+     * @param: reqVo
      * @author: sky
      * @date 2023/7/17
-     * @return PageResult
      */
     public PageResult queryListByPage(QueryListReqVo reqVo) {
         PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
@@ -105,6 +108,8 @@ public class KwcContractTradeService {
         List<QueryListResVo> list = new ArrayList<>();
         for (QueryListResDto queryListResDto : queryListResDtos) {
             QueryListResVo queryListResVo = new QueryListResVo();
+            BeanUtils.copyProperties(queryListResDto, queryListResVo);
+
             queryListResVo.setProvideEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getEntName() : queryListResDto.getTargetEntName());
             queryListResVo.setPurchaseEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getTargetEntName() : queryListResDto.getEntName());
 
@@ -115,8 +120,8 @@ public class KwcContractTradeService {
             }
             queryListResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(queryListResDto.getTrading())));
             queryListResVo.setStatusName(ContractStatusEnum.getName(queryListResDto.getStatus()).getName());
-
-            // todo
+            queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), String.valueOf(queryListResDto.getSigningWay())));
+            queryListResVo.setAmount(queryListResDto.getAmount());
             queryListResVo.setPerformedAmount(new BigDecimal("0"));
             list.add(queryListResVo);
         }
@@ -125,11 +130,17 @@ public class KwcContractTradeService {
 
     @Transactional(rollbackFor = {})
     public Long addTradeContract(ContractTradeReqVo reqVo) {
+        Long id = reqVo.getId();
+        //不为空时是修改
+        if (Objects.nonNull(id)) {
+            update(reqVo);
+            return id;
+        }
+
         TradeBaseInfoReqVo baseInfo = reqVo.getBaseInfo();
         List<TradeGoodsInfoReqVo> goodsInfoList = reqVo.getGoodsInfo();
-
         //创建合同
-        KwcContractTrade kwcContractTrade = getKwcContractTrade(baseInfo, reqVo.getRemark(), reqVo.getPId());
+        KwcContractTrade kwcContractTrade = getKwcContractTrade(baseInfo, reqVo.getGoodsInfo(), reqVo.getRemark(), reqVo.getPId());
         long contactId = new IdWorker(1L).nextId();
         kwcContractTrade.setId(contactId);
         kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
@@ -153,7 +164,7 @@ public class KwcContractTradeService {
      * @author: czh
      * @date: 2023/7/20
      */
-    public KwcContractTrade getKwcContractTrade(TradeBaseInfoReqVo baseInfo, String remark, Long pid) {
+    public KwcContractTrade getKwcContractTrade(TradeBaseInfoReqVo baseInfo, List<TradeGoodsInfoReqVo> goodsInfo, String remark, Long pid) {
         Date date = new Date();
         KwcContractTrade kwcContractTrade = new KwcContractTrade();
         kwcContractTrade.setEntId(LoginUserHolder.getEntId());
@@ -171,6 +182,16 @@ public class KwcContractTradeService {
         kwcContractTrade.setUpdateBy(LoginUserHolder.getUserId());
         kwcContractTrade.setUpdateTime(date);
         kwcContractTrade.setDelFlag(Global.NO);
+
+        BigDecimal amountTotal = new BigDecimal(Global.NUMERICAL_ZERO);
+        if (CollectionUtils.isNotEmpty(goodsInfo)) {
+            for (TradeGoodsInfoReqVo tradeGoodsInfoReqVo : goodsInfo) {
+                if (Objects.nonNull(tradeGoodsInfoReqVo.getAmount())) {
+                    amountTotal = amountTotal.add(tradeGoodsInfoReqVo.getAmount());
+                }
+            }
+        }
+        kwcContractTrade.setAmount(amountTotal);
         return kwcContractTrade;
     }
 
@@ -182,8 +203,8 @@ public class KwcContractTradeService {
      */
     public void supplement(ContractTradeReqVo reqVo) {
         Long id = reqVo.getPId();
-        KwcContractTrade KwcContractTrade = kwcContractTradeMapper.selectById(id);
-        if (Objects.isNull(KwcContractTrade)) {
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(id);
+        if (Objects.isNull(kwcContractTrade)) {
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
         }
 
@@ -192,11 +213,11 @@ public class KwcContractTradeService {
 
 
     /**
+     * @param id 合同id
+     * @return ContractTradeDetailResVo
      * @desc: 合同详情
-     * @param  id 合同id
      * @author: czh
      * @date 2023/7/16
-     * @return ContractTradeDetailResVo
      */
     public ContractTradeDetailResVo detail(Long id) {
         //基础信息
@@ -221,10 +242,12 @@ public class KwcContractTradeService {
         TradeBaseInfoResVo tradeBaseInfoResVo = new TradeBaseInfoResVo();
         tradeBaseInfoResVo.setContractCode(kwcContractTrade.getContractNo());
         tradeBaseInfoResVo.setContractName(kwcContractTrade.getName());
-        tradeBaseInfoResVo.setEndTime(kwcContractTrade.getEndTime());
+        tradeBaseInfoResVo.setEndTime(Objects.isNull(kwcContractTrade.getEndTime()) ? Global.EMPTY_STRING : DateUtils.format(kwcContractTrade.getEndTime()));
         tradeBaseInfoResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractTrade.getSigningWay())));
+        tradeBaseInfoResVo.setSigningWay(String.valueOf(kwcContractTrade.getSigningWay()));
         tradeBaseInfoResVo.setStartTime(kwcContractTrade.getStartTime());
         tradeBaseInfoResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(kwcContractTrade.getTrading())));
+        tradeBaseInfoResVo.setTrading(String.valueOf(kwcContractTrade.getTrading()));
 
         ContractTradeDetailResVo contractTradeDetailResVo = new ContractTradeDetailResVo();
         List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitService.queryByContractId(id);
@@ -233,11 +256,13 @@ public class KwcContractTradeService {
                 if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0) {
                     tradeBaseInfoResVo.setProvideEntName(kwcContractTradeUnit.getFirmName());
                     tradeBaseInfoResVo.setProvidePhone(kwcContractTradeUnit.getSignPhone());
+                    tradeBaseInfoResVo.setProvideEntId(kwcContractTradeUnit.getEntId());
                 }
 
                 if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.PURCHASER.getCode()) == 0) {
                     tradeBaseInfoResVo.setPurchaseEntName(kwcContractTradeUnit.getFirmName());
                     tradeBaseInfoResVo.setPurchasePhone(kwcContractTradeUnit.getPhone());
+                    tradeBaseInfoResVo.setPurchaseEntId(kwcContractTradeUnit.getEntId());
                 }
             }
         }
@@ -245,15 +270,34 @@ public class KwcContractTradeService {
 
         //标的信息
         List<KwcContractTradeGoods> kwcContractTradeGoodsList = kwcContractTradeGoodsService.queryGoodsInfoByContractId(id);
+        List<Long> goodsIdList = kwcContractTradeGoodsList.stream().map(KwcContractTradeGoods::getGoodsId).toList();
+        Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIdList);
         if (CollectionUtils.isNotEmpty(kwcContractTradeGoodsList)) {
-            //todo 通过商品id查商品信息,填充商品名
             List<TradeGoodsInfoResVo> tradeGoodsInfoResVoList = new ArrayList<>();
+
+            StringBuilder keys = new StringBuilder();
+            for (KwcContractTradeGoods item : kwcContractTradeGoodsList) {
+                keys.append(DictTypeEnum.UNIT_TYPE.getType()).append(Global.POUND).append(item.getUnit()).append(Global.COMMA);
+            }
+            Map<String, SysDictResDto> stringSysDictResDtoMap = remoteSystemService.queryDictMapByTypeValues(keys.toString());
+
+
             for (KwcContractTradeGoods kwcContractTradeGoods : kwcContractTradeGoodsList) {
                 TradeGoodsInfoResVo tradeGoodsInfoResVo = new TradeGoodsInfoResVo();
                 tradeGoodsInfoResVo.setAmount(kwcContractTradeGoods.getAmount());
-//                tradeGoodsInfoResVo.setGoodsName();
                 tradeGoodsInfoResVo.setPrice(kwcContractTradeGoods.getPrice());
-//                tradeGoodsInfoResVo.setUnit(0);
+                tradeGoodsInfoResVo.setUnit(kwcContractTradeGoods.getUnit());
+
+                KwpGoods kwpGoods = goodsMap.get(kwcContractTradeGoods.getGoodsId());
+                if (Objects.nonNull(kwpGoods)) {
+                    tradeGoodsInfoResVo.setGoodsName(kwpGoods.getName());
+                }
+
+                SysDictResDto sysDictResDto = stringSysDictResDtoMap.get(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + kwcContractTradeGoods.getUnit());
+                if (Objects.nonNull(sysDictResDto)) {
+                    tradeGoodsInfoResVo.setUnitName(sysDictResDto.getLabel());
+                }
+
                 tradeGoodsInfoResVoList.add(tradeGoodsInfoResVo);
             }
             contractTradeDetailResVo.setGoodsInfo(tradeGoodsInfoResVoList);
@@ -286,8 +330,8 @@ public class KwcContractTradeService {
 
 
     /**
-     * @desc: 发起签约
      * @param reqVo id
+     * @desc: 发起签约
      * @author: czh
      * @date 2023/7/16
      */
@@ -295,7 +339,7 @@ public class KwcContractTradeService {
         Long id = reqVo.getId();
         if (Objects.isNull(id)) {
             //创建合同
-            KwcContractTrade kwcContractLogistics = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
+            KwcContractTrade kwcContractLogistics = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getGoodsInfo(), reqVo.getRemark(), reqVo.getPId());
             id = new IdWorker(1L).nextId();
             kwcContractLogistics.setId(id);
             kwcContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
@@ -324,17 +368,17 @@ public class KwcContractTradeService {
     @Transactional(rollbackFor = {})
     public void update(ContractTradeReqVo reqVo) {
         Long contractId = reqVo.getId();
+        Date date = new Date();
         KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(contractId);
         if (Objects.isNull(kwcContractTrade)) {
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
         }
-
-        KwcContractTrade param = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
+        KwcContractTrade param = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getGoodsInfo(), reqVo.getRemark(), reqVo.getPId());
         param.setId(contractId);
         param.setSigningUrl(reqVo.getContractFile());
         param.setStatus(ContractStatusEnum.SAVE.getCode());
         param.setUpdateBy(LoginUserHolder.getUserId());
-        param.setUpdateTime(new Date());
+        param.setUpdateTime(date);
         if (kwcContractTradeMapper.updateById(param) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
         }
@@ -343,7 +387,6 @@ public class KwcContractTradeService {
         //保存交易合同商品信息-先把以前的删除
         List<KwcContractTradeGoods> kwcContractTradeGoodsList = kwcContractTradeGoodsService.queryGoodsInfoByContractId(contractId);
         if (CollectionUtils.isNotEmpty(kwcContractTradeGoodsList)) {
-            Date date = new Date();
             kwcContractTradeGoodsList.forEach(item -> {
                 item.setDelFlag(Global.YES);
                 item.setUpdateBy(LoginUserHolder.getUserId());
@@ -355,6 +398,21 @@ public class KwcContractTradeService {
             }
         }
         kwcContractTradeGoodsService.saveContractTradeGoods(kwcContractTrade.getId(), reqVo.getGoodsInfo());
+
+        //保存单位信息-先把以前的删除
+        List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitService.queryByContractId(contractId);
+        if (CollectionUtils.isNotEmpty(kwcContractTradeUnits)) {
+            kwcContractTradeUnits.forEach(item -> {
+                item.setDelFlag(Global.YES);
+                item.setUpdateBy(LoginUserHolder.getUserId());
+                item.setUpdateTime(date);
+            });
+
+            if (kwcContractTradeUnitService.updateBatch(kwcContractTradeUnits) != kwcContractTradeUnits.size()) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+        }
+        kwcContractTradeUnitService.saveContractTradeUnit(contractId, reqVo.getBaseInfo());
     }
 
 
@@ -365,18 +423,19 @@ public class KwcContractTradeService {
      * @date 2023/7/16
      */
     @Transactional(rollbackFor = {})
-    public void complete(String ids) {
-        List<Long> contractIdList = Arrays.stream(ids.split(Global.COMMA)).map(Long::parseLong).toList();
-        List<KwcContractTrade> kwcContractTradeList = kwcContractTradeMapper.selectBatchIds(contractIdList);
-        Date date = new Date();
-        kwcContractTradeList.forEach(item -> {
-            item.setStatus(ContractStatusEnum.COMPLETE.getCode());
-            item.setUpdateBy(LoginUserHolder.getUserId());
-            item.setUpdateTime(date);
-            if (kwcContractTradeMapper.updateById(item) <= 0) {
-                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
-            }
-        });
+    public void complete(CompleteReqVo reqVo) {
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(reqVo.getId());
+        if (!kwcContractTrade.getStatus().equals(ContractStatusEnum.SIGNED.getCode())) {
+            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_028);
+        }
+        kwcContractTrade.setStatus(ContractStatusEnum.COMPLETE.getCode());
+        kwcContractTrade.setUpdateBy(LoginUserHolder.getUserId());
+        kwcContractTrade.setUpdateTime(new Date());
+        kwcContractTrade.setPerformedAmount(reqVo.getPerformedAmount());
+        kwcContractTrade.setRemark(reqVo.getRemark());
+        if (kwcContractTradeMapper.updateById(kwcContractTrade) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
     }
 
 
@@ -404,6 +463,12 @@ public class KwcContractTradeService {
         });
     }
 
+    /**
+     * @param reqVo 查询入参
+     * @desc: 导出
+     * @author: czh
+     * @date 2023/7/17
+     */
     public void export(QueryListReqVo reqVo) {
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         BeanUtils.copyProperties(reqVo, queryListReqDto);
@@ -444,6 +509,44 @@ public class KwcContractTradeService {
         }
         return getQueryListResVos(queryListResDtos);
     }
+
+
+    /**
+     * @return FindListGroupResVo
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    public List<FindListGroupResVo> findListGroup(QueryListReqVo reqVo) {
+        ContractStatusEnum[] values = ContractStatusEnum.values();
+        List<FindListGroupResVo> list = new ArrayList<>();
+        FindListGroupResVo total = new FindListGroupResVo();
+        total.setCount(0);
+        list.add(total);
+        for (ContractStatusEnum contractStatusEnum : values) {
+            FindListGroupResVo findListGroupResVo = new FindListGroupResVo();
+            findListGroupResVo.setStatus(contractStatusEnum.getCode());
+            findListGroupResVo.setStatusName(contractStatusEnum.getName());
+            findListGroupResVo.setCount(0);
+            list.add(findListGroupResVo);
+        }
+
+        QueryListReqDto queryListReqDto = new QueryListReqDto();
+        BeanUtils.copyProperties(reqVo, queryListReqDto);
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        List<QueryListResDto> queryListResDtoList = kwcContractTradeMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isNotEmpty(queryListResDtoList)) {
+            Map<Integer, List<QueryListResDto>> collect = queryListResDtoList.stream().collect(Collectors.groupingBy(QueryListResDto::getStatus));
+            for (FindListGroupResVo findListGroupResVo : list) {
+                List<QueryListResDto> queryListResDtos = collect.get(findListGroupResVo.getStatus());
+                findListGroupResVo.setCount(CollectionUtils.isEmpty(queryListResDtos) ? Global.NUMERICAL_ZERO : queryListResDtos.size());
+            }
+            //给汇总项求和
+            list.get(0).setCount(queryListResDtoList.size());
+        }
+        return list;
+    }
+
 }
 
 

+ 16 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java

@@ -105,6 +105,22 @@ public class KwcContractTradeUnitService {
         wrapper.eq(KwcContractTradeUnit::getStatus, Global.NO);
         return kwcContractTradeUnitMapper.selectList(wrapper);
     }
+
+    /**
+     * @return 修改个数
+     * @desc: 修改
+     * @param: list 实体类
+     * @author: czh
+     * @date 2023/7/17
+     */
+    public int updateBatch(List<KwcContractTradeUnit> list) {
+        int count = 0;
+        for (KwcContractTradeUnit kwcContractTradeUnit : list) {
+            count += kwcContractTradeUnitMapper.updateById(kwcContractTradeUnit);
+        }
+        return count;
+    }
+
 }
 
 

+ 29 - 0
sckw-modules/sckw-contract/src/main/resources/bootstrap-test.yml

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

+ 10 - 7
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml

@@ -43,7 +43,7 @@
     <select id="queryList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
          select a.amount,
                 a.charging,
-                a.name contactName,
+                a.name contractName,
                 a.contract_no,
                 c.create_by initiateBy,
                 c.create_time initiateTime,
@@ -59,26 +59,29 @@
                 b.ent_id,
                 b.firm_name entName,
                 e.ent_id targetEntId,
-                e.firm_name targetEntName
+                e.firm_name targetEntName,
+                a.performed_amount performedAmount
           from kwc_contract_logistics a
-          left join kwc_contract_logistics_unit b on a.id = b.contract_id and b.unit_type = #{entType}
+          left join kwc_contract_logistics_unit b on a.id = b.contract_id and b.unit_type = #{entType} and b.del_flag = 0
           left join kwc_contract_logistics_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
           left join kwc_contract_logistics_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
-          left join kwc_contract_logistics_unit e on a.id = b.contract_id and b.unit_type != #{entType}
+          left join kwc_contract_logistics_unit e on a.id = e.contract_id and e.unit_type != #{entType} and e.del_flag = 0
         where a.del_flag = 0
-          and b.del_flag = 0
           and b.ent_id = #{entId}
           <if test="startTime != null">
               and a.create_time >= #{startTime}
           </if>
           <if test="endTime != null">
-              and a.create_time &lt;= #{endTime}
+              and a.create_time &lt; date_add(#{endTime}, INTERVAL 1 DAY)
           </if>
           <if test="status != null">
               and a.status = #{status}
           </if>
           <if test="keywords != null and keywords != ''">
-              and (b.firm_name like concat('%', #{keywords}, '%') or b.contacts like concat('%', #{keywords}, '%') or b.phone like concat('%', #{keywords}, '%'))
+              and (b.firm_name like concat('%', #{keywords}, '%') or
+                   b.contacts like concat('%', #{keywords}, '%') or
+                   b.phone like concat('%', #{keywords}, '%') or
+                   b.sign_phone like concat('%', #{keywords}, '%'))
           </if>
           <if test="idList != null and idList.size() > 0">
               and a.id in

+ 3 - 4
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml

@@ -42,7 +42,7 @@
     <select id="queryList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
         select a.amount,
                a.trading,
-               a.name contactName,
+               a.name contractName,
                a.contract_no,
                c.create_by initiateBy,
                c.create_time initiateTime,
@@ -60,12 +60,11 @@
                e.ent_id targetEntId,
                e.firm_name targetEntName
           from kwc_contract_trade a
-          left join kwc_contract_trade_unit b on a.id = b.contract_id and b.unit_type = #{entType}
+          left join kwc_contract_trade_unit b on a.id = b.contract_id and b.unit_type = #{entType} and b.del_flag = 0
           left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
           left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
-          left join kwc_contract_trade_unit e on a.id = b.contract_id and b.unit_type != #{entType}
+          left join kwc_contract_trade_unit e on a.id = b.contract_id and b.unit_type != #{entType} and e.del_flag = 0
          where a.del_flag = 0
-           and b.del_flag = 0
            and b.ent_id = #{entId}
         <if test="startTime != null">
             and a.create_time >= #{startTime}

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

@@ -3,7 +3,8 @@ package com.sckw.example.controller;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.MemberDetail;
-import lombok.AllArgsConstructor;
+import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.common.R;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -11,19 +12,23 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @Slf4j
-@AllArgsConstructor
 @RestController
 @RequestMapping("/test")
 public class TestController {
     @DubboReference(version = "2.0.0", group = "design", check = false)
-    PayCenterDubboService payCenterDubboService;
+    private PayCenterDubboService payCenterDubboService;
 
     @GetMapping("/detail")
-    public MemberDetail download(@RequestParam("type") String uid, String channel) {
-        MemberDetail memberDetail = payCenterDubboService.memberDetail(uid, ChannelEnum.HF);
-        return memberDetail;
+    public R<MemberDetail> download(@RequestParam("uid") Long uid, String channel) {
+        return payCenterDubboService.memberDetail(uid, ChannelEnum.HF);
     }
 
+    @GetMapping("/wall")
+    public R<List<WalletDto>> wall(@RequestParam("uid") Long uid, String channel, Long filter) {
+        return payCenterDubboService.wallet(uid, null, filter);
+    }
 
 }

+ 29 - 0
sckw-modules/sckw-example/src/main/resources/bootstrap-test.yml

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

+ 154 - 0
sckw-modules/sckw-example/src/main/resources/log4j2.xml

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration status="info" monitorInterval="30">
+    <properties>
+        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 -->
+        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
+        <property name="LOG_PATTERN"
+                  value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
+        <property name="LOG_WITHOUT_COLOR_PATTERN"
+                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID}--- [%t] %c{1.} : %m%n%xwEx"/>
+        <property name="LOG_PATH" value="logs/sckw-example"/>
+    </properties>
+    <!--DEBUG<INFO<WARNING<ERROR<CRITICAL-->
+    <!-- 先定义所有的appender(附加器)-->
+    <appenders>
+        <!-- 输出控制台的配置 -->
+        <Console name="Console" target="SYSTEM_OUT">
+            <!-- 输出日志的格式 -->
+            <PatternLayout pattern="${LOG_PATTERN}"/>
+        </Console>
+
+        <!--all级别日志-->
+        <RollingFile name="allFileAppender"
+                     fileName="${LOG_PATH}/all.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
+            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
+
+            <Policies>
+                <!-- 设置日志文件切分参数 -->
+                <!--<OnStartupTriggeringPolicy/>-->
+                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <!--debug级别日志-->
+        <RollingFile name="debugFileAppender"
+                     fileName="${LOG_PATH}/debug.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
+            <Filters>
+                <!--过滤掉info及更高级别日志-->
+                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
+            </Filters>
+            <!--设置日志格式-->
+            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
+
+            <Policies>
+                <!-- 设置日志文件切分参数 -->
+                <!--<OnStartupTriggeringPolicy/>-->
+                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <!--info级别日志-->
+        <RollingFile name="infoFileAppender"
+                     fileName="${LOG_PATH}/info.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
+            <Filters>
+                <!--过滤掉warn及更高级别日志-->
+                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
+            </Filters>
+            <!--设置日志格式-->
+            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
+
+            <Policies>
+                <!-- 设置日志文件切分参数 -->
+                <!--<OnStartupTriggeringPolicy/>-->
+                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
+            </Policies>
+            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
+            <!--<DefaultRolloverStrategy max="100"/>-->
+        </RollingFile>
+
+        <!--warn级别日志-->
+        <RollingFile name="warnFileAppender"
+                     fileName="${LOG_PATH}/warn.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
+            <Filters>
+                <!--过滤掉error及更高级别日志-->
+                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
+            </Filters>
+            <!--设置日志格式-->
+            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
+
+            <Policies>
+                <!-- 设置日志文件切分参数 -->
+                <!--<OnStartupTriggeringPolicy/>-->
+                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <!--error及更高级别日志-->
+        <RollingFile name="errorFileAppender"
+                     fileName="${LOG_PATH}/error.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
+            <!--设置日志格式-->
+            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
+            <Policies>
+                <!-- 设置日志文件切分参数 -->
+                <!--<OnStartupTriggeringPolicy/>-->
+                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
+                <TimeBasedTriggeringPolicy/>
+            </Policies>
+            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
+            <DefaultRolloverStrategy max="100"/>
+        </RollingFile>
+
+        <!--json格式error级别日志-->
+        <RollingFile name="errorJsonAppender"
+                     fileName="${LOG_PATH}/error-json.log"
+                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
+            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="100 MB"/>
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
+            </Policies>
+        </RollingFile>
+
+    </appenders>
+
+    <loggers>
+        <root level="debug">
+            <AppenderRef ref="allFileAppender" level="all"/>
+            <AppenderRef ref="debugFileAppender" level="debug"/>
+            <AppenderRef ref="infoFileAppender" level="info"/>
+            <AppenderRef ref="warnFileAppender" level="warn"/>
+            <AppenderRef ref="errorFileAppender" level="error"/>
+            <AppenderRef ref="errorJsonAppender" level="error"/>
+            <appender-ref ref="Console" level="info"/>
+        </root>
+        <Logger name="org.springframework" level="info"/>
+        <Logger name="com.alibaba" level="info"/>
+        <Logger name="com.baomidou" level="info"/>
+    </loggers>
+
+</configuration>

+ 0 - 199
sckw-modules/sckw-example/src/main/resources/logback-spring.xml

@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
-<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
-<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
-                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
-<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
-<configuration  scan="true" scanPeriod="10 seconds">
-    <contextName>logback</contextName>
-    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="service"/>
-
-    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
-    <property name="log.path" value="/logs/${applicationName}" />
-
-    <!--0. 日志格式和颜色渲染 -->
-    <!-- 彩色日志依赖的渲染类 -->
-    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
-    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
-    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
-    <!-- 彩色日志格式 -->
-    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-
-    <!--1. 输出到控制台-->
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>debug</level>
-        </filter>
-        <encoder>
-            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
-            <!-- 设置字符集 -->
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <!--2. 输出到文档-->
-    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
-    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_debug.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志归档 -->
-            <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录debug级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>debug</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
-    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_info.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 每天日志归档路径以及格式 -->
-            <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录info级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
-    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_warn.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录warn级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>warn</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
-    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 正在记录的日志文档的路径及文档名 -->
-        <file>${log.path}/web_error.log</file>
-        <!--日志文档输出格式-->
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
-        </encoder>
-        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-            <!--日志文档保留天数-->
-            <maxHistory>15</maxHistory>
-        </rollingPolicy>
-        <!-- 此日志文档只记录ERROR级别的 -->
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>ERROR</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-
-    <!--
-        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
-        以及指定<appender>。<logger>仅有一个name属性,
-        一个可选的level和一个可选的addtivity属性。
-        name:用来指定受此logger约束的某一个包或者具体的某一个类。
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
-              如果未设置此属性,那么当前logger将会继承上级的级别。
-        addtivity:是否向上级logger传递打印信息。默认是true。
-        <logger name="org.springframework.web" level="info"/>
-        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-    -->
-    <!-- hibernate logger -->
-    <logger name="com.atguigu" level="debug" />
-    <!-- Spring framework logger -->
-    <logger name="org.springframework" level="debug" additivity="false"></logger>
-
-
-    <!--
-        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
-        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
-        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-        【logging.level.org.mybatis=debug logging.level.dao=debug】
-     -->
-
-    <!--
-        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
-        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-        不能设置为INHERITED或者同义词NULL。默认是DEBUG
-        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-    -->
-
-    <!-- 4. 最终的策略 -->
-    <!-- 4.1 开发环境:打印控制台-->
-    <springProfile name="dev">
-        <logger name="com.sdcm.pmp" level="debug"/>
-    </springProfile>
-
-    <root level="info">
-        <appender-ref ref="CONSOLE" />
-        <appender-ref ref="DEBUG_FILE" />
-        <appender-ref ref="INFO_FILE" />
-        <appender-ref ref="WARN_FILE" />
-        <appender-ref ref="ERROR_FILE" />
-    </root>
-
-    <!-- 4.2 生产环境:输出到文档 -->
-    <springProfile name="pro">
-        <root level="info">
-            <appender-ref ref="CONSOLE" />
-            <appender-ref ref="DEBUG_FILE" />
-            <appender-ref ref="INFO_FILE" />
-            <appender-ref ref="ERROR_FILE" />
-            <appender-ref ref="WARN_FILE" />
-        </root>
-    </springProfile>
-
-</configuration>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů