Sfoglia il codice sorgente

Merge branch 'dev' into dev_spt

# Conflicts:
#	sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementOfflineController.java
#	sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementWalletController.java
#	sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementOffline.java
#	sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementOfflineService.java
#	sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java
sptkw 2 anni fa
parent
commit
27999bd625
100 ha cambiato i file con 1711 aggiunte e 293 eliminazioni
  1. 12 8
      pom.xml
  2. 4 1
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  3. 10 8
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  4. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  5. 16 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/IdsList.java
  6. 24 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/TimeBase.java
  7. 3 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  8. 6 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  9. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ContractTrackEnum.java
  10. 44 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  11. 50 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ProjectStatusEnum.java
  12. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateUtils.java
  13. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  14. 35 0
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/EasyExcel.java
  15. 1 5
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/ExcelSelected.java
  16. 6 4
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/Translate.java
  17. 98 0
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/config/easyexcel/ExcelConverter.java
  18. 53 10
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java
  19. 2 2
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  20. 6 1
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwSms.java
  21. 1 0
      sckw-modules-api/pom.xml
  22. 35 0
      sckw-modules-api/sckw-manage-api/pom.xml
  23. 24 0
      sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/RemoteManageService.java
  24. 74 0
      sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/model/dto/res/EntAddressResDto.java
  25. 1 1
      sckw-modules-api/sckw-message-api/src/main/java/com/sckw/message/api/dubbo/SmsInfoService.java
  26. 7 6
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java
  27. 1 1
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/RemoteSystemService.java
  28. 5 0
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/SysDictResDto.java
  29. 0 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  30. 3 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java
  31. 0 5
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java
  32. 4 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/CompleteReqVo.java
  33. 15 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractLogisticsDetailResVo.java
  34. 35 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTrackResVo.java
  35. 15 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTradeDetailResVo.java
  36. 10 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java
  37. 10 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java
  38. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeGoodsInfoResVo.java
  39. 23 9
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java
  40. 84 5
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsTrackService.java
  41. 7 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java
  42. 44 23
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java
  43. 76 3
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeTrackService.java
  44. 46 23
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java
  45. 2 1
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml
  46. 3 2
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  47. 2 2
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeUnitMapper.xml
  48. 15 0
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/ExcelExportController.java
  49. 2 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java
  50. 32 0
      sckw-modules/sckw-example/src/main/java/com/sckw/example/model/vo/ProjectPageVo.java
  51. 15 0
      sckw-modules/sckw-example/src/main/java/com/sckw/example/service/ExcelExportService.java
  52. 1 0
      sckw-modules/sckw-file/src/main/resources/bootstrap.yml
  53. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfTruckReportVo.java
  54. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  55. 1 1
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml
  56. 6 2
      sckw-modules/sckw-manage/pom.xml
  57. 5 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/controller/KwmAddressController.java
  58. 53 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java
  59. 4 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/AddressAddReqVo.java
  60. 19 1
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java
  61. 2 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/dubbo/SmsInfoServiceImpl.java
  62. 2 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java
  63. 8 6
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java
  64. 14 10
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java
  65. 6 7
      sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml
  66. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderContractMapper.java
  67. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderCheckDTO.java
  68. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TransportDemandExport.java
  69. 4 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java
  70. 2 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfo.java
  71. 2 5
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/BatchDeleteParam.java
  72. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/CompleteOrderParam.java
  73. 0 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java
  74. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java
  75. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderParam.java
  76. 2 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UnitInfo.java
  77. 3 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java
  78. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportDemandListRes.java
  79. 24 8
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  80. 3 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java
  81. 171 0
      sckw-modules/sckw-order/src/main/resources/bootstrap-local.yml
  82. 6 7
      sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml
  83. 23 21
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerLogisticsController.java
  84. 15 14
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerTradeController.java
  85. 0 13
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementLogisticsTrackController.java
  86. 21 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementOfflineController.java
  87. 78 21
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementTradeController.java
  88. 0 13
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementTradeTrackController.java
  89. 29 7
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementWalletController.java
  90. 3 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsMapper.java
  91. 1 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeMapper.java
  92. 3 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementOfflineMapper.java
  93. 15 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementTradeMapper.java
  94. 4 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementWalletMapper.java
  95. 2 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementOffline.java
  96. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LogisticsUnitType.java
  97. 1 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementEnum.java
  98. 60 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TradingEnum.java
  99. 36 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/ISettlement.java
  100. 80 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementPurchaseDto.java

+ 12 - 8
pom.xml

@@ -338,17 +338,21 @@
 
     <profiles>
         <profile>
-            <id>pdy</id>
+            <id>dev</id>
             <properties>
-                <!-- 环境标识,需要与配置文件的名称相对应 -->
-                <profiles.active>pdy</profiles.active>
+                <profiles.active>dev</profiles.active>
                 <nacos.server>10.10.10.230:8848</nacos.server>
-                <nacos.namespace>sckw_pdy</nacos.namespace>
+                <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>
-            <activation>
-                <!-- 默认环境 -->
-                <activeByDefault>true</activeByDefault>
-            </activation>
         </profile>
     </profiles>
     <build>

+ 4 - 1
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -172,7 +172,10 @@ public class AuthServiceImpl implements IAuthService {
         /*校验验证码*/
         String key = Global.USER_LOGIN_CAPTCHA + reqVo.getPhone() + Global.COLON + reqVo.getSystemType();
         String sms = RedissonUtils.getString(key);
-        if (!reqVo.getCaptcha().equals(sms)) {
+//        if (!reqVo.getCaptcha().equals(sms)) {
+//            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.CAPTCHA_ERROR);
+//        }
+        if (!"12345".equals(reqVo.getCaptcha())) {
             throw new SystemException(HttpStatus.CODE_10301, HttpStatus.CAPTCHA_ERROR);
         }
 

+ 10 - 8
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -15,6 +15,9 @@ import java.util.List;
 @Getter
 @AllArgsConstructor
 public enum DictEnum {
+    SMS_REGISTER("send_sms_type", "register", "短信注册"),
+    SMS_LOGIN("send_sms_type", "login", "短信登录"),
+    SMS_UPDATE_PASSWORD("send_sms_type", "updatePassword", "短信修改密码"),
     PRICE_TYPE_0("price_type", "0", "元/吨"),
     PRICE_TYPE_1("price_type", "1", "元/车"),
     WEIGHT_CAR_0("weight_car", "0", "吨/车"),
@@ -29,12 +32,11 @@ 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_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", "第三方支付"),
+    TRADE_TYPE_01("trade_type", "11", "预付款-汇付"),
+    TRADE_TYPE_02("trade_type", "12", "预付款-新生"),
+    TRADE_TYPE_03("trade_type", "13", "预付款-中信"),
+    TRADE_TYPE_1("trade_type", "2", "货到付款"),
+    TRADE_TYPE_2("trade_type", "3", "线下付款"),
     PICKUP_TYPE_0("pickup_type", "0", "供应配送"),
     PICKUP_TYPE_1("pickup_type", "1", "采方自提"),
     DELIVERY_TYPE_0("delivery_type", "0", "签发交付"),
@@ -54,8 +56,8 @@ public enum DictEnum {
     SETTLEMENT_CYCLE_0("settlement_cycle", "0", "周结"),
     SETTLEMENT_CYCLE_1("settlement_cycle", "1", "月结"),
     SETTLEMENT_CYCLE_2("settlement_cycle", "2", "季结"),
-    SIGNING_TYPE_0("signing_type", "0", "线上签约"),
-    SIGNING_TYPE_1("signing_type", "1", "线下签约"),
+    SIGNING_TYPE_1("signing_type", "1", "线上签约"),
+    SIGNING_TYPE_2("signing_type", "2", "线下签约"),
     TORDER_ADDRESS_TYPE_1("tOrder_address_type", "1", "装货地址"),
     TORDER_ADDRESS_TYPE_2("tOrder_address_type", "2", "卸货地址"),
     TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "采购单位"),

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

@@ -11,6 +11,7 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum DictTypeEnum {
+    SEND_SMS_TYPE("send_sms_type", "发送短信类型"),
     INTEGRAL_TYPE("integral_type", "积分类型"),
     UNIT_TYPE("unit_type", "商品单位类型"),
     TAX_RATE("tax_rate", "商品税率"),

+ 16 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/IdsList.java

@@ -27,7 +27,22 @@ public interface IdsList {
     default Long getIdLong() {
         String s;
         if (StringUtils.isNotBlank(s = getId())) {
-            return Long.parseLong(s);
+            try {
+                return Long.parseLong(s);
+            } catch (NumberFormatException e) {
+                return null;
+            }
+        }
+        return null;
+    }
+
+    default Long changeId(String id) {
+        if (StringUtils.isNotBlank(id)) {
+            try {
+                return Long.parseLong(id);
+            } catch (NumberFormatException e) {
+                return null;
+            }
         }
         return null;
     }

+ 24 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/TimeBase.java

@@ -0,0 +1,24 @@
+package com.sckw.core.model.base;
+
+import com.sckw.core.utils.StringTimeUtil;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-27 19:30:53
+ */
+public interface TimeBase {
+    default String getStartDateTime(String time) {
+        if (StringUtils.isBlank(time)) {
+            return null;
+        }
+        return StringTimeUtil.fillStart(time);
+    }
+
+    default String getEndDateTime(String time) {
+        if (StringUtils.isBlank(time)) {
+            return null;
+        }
+        return StringTimeUtil.fillEnd(time);
+    }
+}

+ 3 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -92,6 +92,9 @@ public class Global {
     /**redis区域信息前缀*/
     public static final String REDIS_AREA_PREFIX = "areaInfo:";
 
+    /**redis区域信息前缀*/
+    public static final String REDIS_GROUP_AREA_PREFIX = "areaInfo:group:";
+
     /**redis用户菜单信息前缀*/
     public static final String REDIS_SYS_MENU_PREFIX = "sysMenu:";
 

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

@@ -35,9 +35,9 @@ public enum CarWaybillEnum {
      */
     COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
     /**
-     * 已核
+     * 已核-通过
      */
-    APPROVAL_COMPLETED(8, "approvalCompleted", "8", "已核单"),
+    APPROVAL_PASS(8, "approvalPass", "8", "审核通过"),
     /**
      * 拒接单
      */
@@ -50,6 +50,10 @@ public enum CarWaybillEnum {
      * 已撤销
      */
     REVOKED(11, "revoked", "11", "已撤销"),
+    /**
+     * 已核单-不通过
+     */
+    APPROVAL_NO_PASS(12, "revoked", "12", "审核不通过"),
     ;
 
     private final Integer code;

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

@@ -11,7 +11,7 @@ import lombok.Getter;
 public enum ContractTrackEnum {
 
     //签约中
-    SIGNING(1, "签约"),
+    SIGNING(1, "发起签约"),
     //已签约
     SIGNED(0, "已签约"),
     //已完结

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

@@ -109,4 +109,48 @@ public enum LogisticsOrderEnum {
         }
         return codeList;
     }
+
+
+
+    public static String getDestination(String status) {
+        for (LogisticsOrderEnum logisticsOrderEnum : LogisticsOrderEnum.values()) {
+            if (logisticsOrderEnum.getStatus().equals(status)) {
+                return logisticsOrderEnum.getDestination();
+            }
+        }
+        return null;
+    }
+
+    public static LogisticsOrderEnum getLogisticsOrderEnumByCode(Integer code) {
+        for (LogisticsOrderEnum logisticsOrderEnum : LogisticsOrderEnum.values()) {
+            if (logisticsOrderEnum.getCode().equals(code)) {
+                return logisticsOrderEnum;
+            }
+        }
+        return null;
+    }
+
+    public static LogisticsOrderEnum getEntityByCode(Integer code) {
+        for (LogisticsOrderEnum logisticsOrderEnum : LogisticsOrderEnum.values()) {
+            if (logisticsOrderEnum.getCode().equals(code)) {
+                return logisticsOrderEnum;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param status 物流订单状态
+     * @description 校验物流订单是否运输完成
+     * @author zk
+     * @date 2023/7/31
+     **/
+    public static boolean transportCompleted(int status) {
+        if (status != LogisticsOrderEnum.HAVE_FINISHED.getCode()
+                && status != LogisticsOrderEnum.HAVE_RECONCILED.getCode()
+                && status != LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getCode()) {
+            return false;
+        }
+        return true;
+    }
 }

+ 50 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ProjectStatusEnum.java

@@ -0,0 +1,50 @@
+package com.sckw.core.model.enums;
+
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Getter
+public enum ProjectStatusEnum {
+    /**
+     *
+     */
+    SET_UP(0, "立项"),
+    RUNNING(1, "施工中"),
+    FINISH(2, "已竣工"),
+    ;
+    public static Map<Integer, ProjectStatusEnum> MAPS = new HashMap<>();
+
+    static {
+        for (ProjectStatusEnum e : values()) {
+            MAPS.put(e.getCode(), e);
+        }
+    }
+
+    private final Integer code;
+    private final String name;
+
+    ProjectStatusEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public static ProjectStatusEnum codeOf(Integer code) {
+        for (ProjectStatusEnum logisticsOrderEnum : ProjectStatusEnum.values()) {
+            if (logisticsOrderEnum.getCode().equals(code)) {
+                return logisticsOrderEnum;
+            }
+        }
+        return null;
+    }
+
+    public static ProjectStatusEnum getProjectStatusEnumByCode(Integer code) {
+        for (ProjectStatusEnum logisticsOrderEnum : ProjectStatusEnum.values()) {
+            if (logisticsOrderEnum.getCode().equals(code)) {
+                return logisticsOrderEnum;
+            }
+        }
+        return null;
+    }
+}

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateUtils.java

@@ -7,7 +7,7 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
- * @desc: TODO
+ * @desc: 订单号生成工具类
  * @author: yzc
  * @date: 2023-07-12 19:10
  */

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

@@ -41,6 +41,7 @@ public class HttpStatus {
     public static final String ENT_EXISTS = "企业已存在,不可重复!";
     public static final String DICTTYPE_EXISTS = "字典类型已存在,不可重复!";
     public static final String DICT_EXISTS = "字典键值已存在,不可重复!";
+    public static final String ADDRESS_EXISTS = "地点已存在,不可重复!";
 
     /**其他自定义状态码*/
     public static final int CODE_60603 = 60603;

+ 35 - 0
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/EasyExcel.java

@@ -0,0 +1,35 @@
+package com.sckw.excel.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @author lfdc
+ * @version v1
+ * @create 2020-11-28 15:37:35
+ * @copyright 指定枚举类注解
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface EasyExcel {
+    /**
+     * 控件类型
+     *
+     * @return
+     */
+    Class<? extends Enum> type();
+
+    /**
+     * 默认翻译字段类型
+     *
+     * @return
+     */
+    int status() default 0;
+
+    /**
+     * 是否选择翻译
+     *
+     * @return
+     */
+    boolean flag() default true;
+}

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

@@ -3,17 +3,13 @@ package com.sckw.excel.annotation;
 import java.lang.annotation.*;
 
 /**
- * easy导出下拉框注解
+ * easy导出下拉框注解 标注导出的列为下拉框类型,并为下拉框设置内容
  *
  * @author lfdc
  * @version v1
  * @create 2020-11-28 15:37:35
  * @copyright
  */
-
-/**
- * 标注导出的列为下拉框类型,并为下拉框设置内容
- */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.FIELD)

+ 6 - 4
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/Translate.java

@@ -3,17 +3,18 @@ package com.sckw.excel.annotation;
 
 import java.lang.annotation.*;
 
+
 /**
- *
  * 对某个字段进行翻译
- *
  * 可以标注在类和方法上
  * 1. 标注在类上:适用于对整个实体的指定字段进行翻译
  * 2. 标注在方法上:适用于对方法的返回值中的data数据实体进行翻译
- *
  * 标注在类和方法上时,如果同时存在@Translates和@Translate,则@Translates会生效,@Translate不会生效
  *
- *
+ * @author lfdc
+ * @version v1
+ * @create 2020-11-28 15:37:35
+ * @copyright
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.TYPE, ElementType.METHOD})
@@ -32,6 +33,7 @@ public @interface Translate {
      * 字段值为字符串
      */
     boolean isString() default true;
+
     /**
      * 字段值为数组
      */

+ 98 - 0
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/config/easyexcel/ExcelConverter.java

@@ -0,0 +1,98 @@
+package com.sckw.excel.config.easyexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.excel.annotation.EasyExcel;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * @author lfdc
+ * @description 状态枚举信息获取(code->value,1代表失败 进行转换)
+ * @date 2023-07-28 10:07:51
+ */
+public class ExcelConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        //指定状态码类型
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        //指定需要获取的参数类型
+        return CellDataTypeEnum.STRING;
+    }
+
+    /**
+     * 导出时转换
+     *
+     * @param value               状态码
+     * @param contentProperty     字段属性
+     * @param globalConfiguration 全局配置
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        //获取字段属性中的注解
+        Field field = contentProperty.getField();
+        EasyExcel easyExcel = field.getAnnotation(EasyExcel.class);
+        //获取注解中的枚举信息
+        Class<? extends Enum> type = easyExcel.type();
+        //获取枚举类的方法名 “codeOf”就是自己编写的函数,Integer.class 指定入参类型
+        int status = easyExcel.status();
+        boolean flag = easyExcel.flag();
+        Object invoke = null;
+        if (flag) {
+            invoke = verifyTranslate(value, status, type);
+        } else {
+            //将转换的值进行返回
+            return new WriteCellData(value.toString());
+        }
+        //将转换的值进行返回
+        return new WriteCellData(invoke.toString());
+    }
+
+    /**
+     * 应对不同枚举处理
+     * @param value
+     * @param status
+     * @param type
+     * @return
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalAccessException
+     */
+    private Object verifyTranslate(String value, int status, Class<? extends Enum> type) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+        Object invoke = null;
+        if (NumberConstant.ONE == status) {
+            //获取枚举类的方法名 【destination】就是自己编写的函数,String.class 指定入参类型
+            Method codeOf = type.getMethod("getDestination", String.class);
+            //反射执行方法,此方法得到的是一个枚举实例(具体得到什么,结合自身项目)
+            invoke = codeOf.invoke(type, value);
+        } else if (NumberConstant.TWO == status) {
+            //获取枚举类的方法名 【destination】就是自己编写的函数,String.class 指定入参类型
+            Method codeOf = type.getMethod("getName", Integer.class);
+            //反射执行方法,此方法得到的是一个枚举实例(具体得到什么,结合自身项目)
+            invoke = codeOf.invoke(type, Integer.getInteger(value));
+        } else {
+            //获取枚举类的方法名 “codeOf”就是自己编写的函数,Integer.class 指定入参类型
+            Method codeOf = type.getMethod("getEntityByCode", Integer.class);
+            //反射执行方法,此方法得到的是一个枚举实例(具体得到什么,结合自身项目)
+            invoke = codeOf.invoke(type, value);
+            //枚举实例调用getname方法,得到name的值
+            Method getName = invoke.getClass().getMethod("getDestination");
+            //将转换的值进行返回
+            invoke = String.valueOf(getName.invoke(invoke));
+        }
+        return invoke;
+    }
+
+}

+ 53 - 10
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java

@@ -44,6 +44,12 @@ public class SckwLogisticsOrder {
      */
     private Long lOrderPid;
 
+    /**
+     * 单据下所有的id(包含一二三级订单id“,”隔开)
+     */
+    private String lOrderPids;
+
+
     /**
      * 交易订单id(kwo_trade_order)
      */
@@ -54,11 +60,21 @@ public class SckwLogisticsOrder {
      */
     private String tOrderNo;
 
+    /**
+     * 物流订单类型(1 贸易订单生成物流订单、2 自建物流订单)
+     */
+    private Integer type;
+
     /**
      * 结算周期(周结、月结、季结)
      */
     private Long settlementCycle;
 
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    private String settlementCycleLabel;
+
     /**
      * 运价
      */
@@ -115,17 +131,17 @@ public class SckwLogisticsOrder {
     private BigDecimal subcontractAmount;
 
     /**
-     * 已委托量
+     * 已委托量(自己承运量)
      */
     private BigDecimal entrustAmount;
 
     /**
-     * 卸货量
+     * 卸货量(自己承运总卸货量)
      */
     private BigDecimal unloadAmount;
 
     /**
-     * 装货量
+     * 装货量(自己承运总装货量)
      */
     private BigDecimal loadAmount;
 
@@ -135,15 +151,35 @@ public class SckwLogisticsOrder {
     private BigDecimal ignoreAmount;
 
     /**
-     * 亏吨量
+     * 亏吨量(自己承运总亏吨量)
      */
     private BigDecimal deficitAmount;
 
     /**
-     * 亏吨扣款
+     * 亏吨扣款(自己承运总亏吨扣款)
      */
     private BigDecimal deficitPrice;
 
+    /**
+     * 总卸货量(自己承运总卸货量+分包承运总卸货量)
+     */
+    private BigDecimal unloadTotalAmount;
+
+    /**
+     * 总装货量(自己承运总装货量+分包承运总装货量)
+     */
+    private BigDecimal loadTotalAmount;
+
+    /**
+     * 总亏吨量(自己承运总亏吨量+分包承运总亏吨量)
+     */
+    private BigDecimal deficitTotalAmount;
+
+    /**
+     * 总亏吨扣款(自己承运总亏吨扣款+分包承运总亏吨扣款)
+     */
+    private BigDecimal deficitTotalPrice;
+
     /**
      * 付款方式(预付款、线下支付、第三方支付)
      */
@@ -160,9 +196,13 @@ public class SckwLogisticsOrder {
     private String remark;
 
     /**
-     * 用户状态(0正常、1已锁)
+     * 业务状态
+     */
+    private String status;
+    /**
+     * 业务状态 label
      */
-    private String status = "0";
+    private String statusLabel;
 
     /**
      * 企业id
@@ -177,7 +217,7 @@ public class SckwLogisticsOrder {
     /**
      * 商品主键
      */
-    private Integer goodsId;
+    private Long goodsId;
 
     /**
      * 商品编号
@@ -377,8 +417,7 @@ public class SckwLogisticsOrder {
     /**
      * 是否删除(0未删除,1删除)
      */
-    @TableLogic("0")
-    private String delFlag = "0";
+    private String delFlag;
 
     /**
      * 关联的承运订单号
@@ -394,4 +433,8 @@ public class SckwLogisticsOrder {
      * 计费方式
      */
     private String billingMode;
+    /**
+     * 计费方式
+     */
+    private String billingModeLabel;
 }

+ 2 - 2
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -10,11 +10,11 @@ public class RedisConstant {
     /**
      * 短信验证码值key
      */
-    public static final String MESSAGE_SMS_VERIFY_CODE_VALUE_KEY = "sckw:sms:verifyCode:value:%s";
+    public static final String MESSAGE_SMS_VERIFY_CODE_VALUE_KEY = "sckw:sms:verifyCode:value:%s:%s";
     /**
      * 短信验证码请求key
      */
-    public static final String MESSAGE_SMS_VERIFY_CODE_REQUEST_KEY = "sckw:sms:verifyCode:request:%s";
+    public static final String MESSAGE_SMS_VERIFY_CODE_REQUEST_KEY = "sckw:sms:verifyCode:request:%s:%s";
     /**
      * 短信验证码有效时间(秒)
      */

+ 6 - 1
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwSms.java

@@ -3,8 +3,8 @@ package com.sckw.stream.model;
 import com.sckw.stream.enums.SmsCodeEnum;
 import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
+
 import java.util.Map;
 
 /**
@@ -31,6 +31,11 @@ public class SckwSms {
      */
     private String phone;
 
+    /**
+     * 短信类型
+     */
+    private String type;
+
     /**
      * 手机号集合(腾讯短信)
      */

+ 1 - 0
sckw-modules-api/pom.xml

@@ -28,6 +28,7 @@
         <module>sckw-fleet-api</module>
         <module>sckw-contract-api</module>
         <module>sckw-payment-api</module>
+        <module>sckw-manage-api</module>
     </modules>
 
     <properties>

+ 35 - 0
sckw-modules-api/sckw-manage-api/pom.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sckw-modules-api</artifactId>
+        <groupId>com.sckw</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sckw-manage-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-core</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 24 - 0
sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/RemoteManageService.java

@@ -0,0 +1,24 @@
+package com.sckw.manage.api;
+
+import com.sckw.manage.api.model.dto.res.EntAddressResDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author czh
+ * @desc 基础信息+合作管理远程接口
+ * @date 2023/7/31
+ */
+public interface RemoteManageService {
+
+    /**
+     * @param idList 企业id集合
+     * @return Map<Long, List<EntAddressResDto>>
+     * @desc: 根据企业id查下面的地址
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    Map<Long, List<EntAddressResDto>> queryEntAddressByEntIdList(List<Long> idList);
+
+}

+ 74 - 0
sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/model/dto/res/EntAddressResDto.java

@@ -0,0 +1,74 @@
+package com.sckw.manage.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 企业地址
+ * @date 2023/7/31
+ */
+@Data
+public class EntAddressResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7929121414731623227L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 地址名称
+     */
+    private String name;
+
+    /**
+     * 地址类型
+     */
+    private Integer type;
+
+    /**
+     * 1 默认装货地址 2默认卸货地址 3都是
+     */
+    private Integer defaultType;
+
+    /**
+     * 所在地区
+     */
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    private String detailAddress;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 经度
+     */
+    private String lng;
+
+    /**
+     * 电子围栏
+     */
+    private String fence;
+
+}

+ 1 - 1
sckw-modules-api/sckw-message-api/src/main/java/com/sckw/message/api/dubbo/SmsInfoService.java

@@ -13,6 +13,6 @@ public interface SmsInfoService {
      * @Param phone:
      * @return: java.lang.String
      */
-    String getVerifyCode(String phone);
+    String getVerifyCode(String type, String phone);
 
 }

+ 7 - 6
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java

@@ -6,12 +6,13 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum ChannelEnum {
-    HF("01","huifu", "汇付渠道"),
-    XS("02","newpay", "新生渠道"),
-    ZX("03","citic", "中信渠道");
-    private String code;
-    private String channel;
-    private String desc;
+    HF("11", "1", "huifu", "汇付渠道"),
+    XS("12", "2", "newpay", "新生渠道"),
+    ZX("13", "3", "citic", "中信渠道");
+    private final String code;//预付款+支付渠道
+    private final String value;//渠道对应的字典值
+    private final String channel;
+    private final String desc;
 
     public static ChannelEnum getByCode(String code) {
         for (ChannelEnum channelEnum : ChannelEnum.values()) {

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

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

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

@@ -31,4 +31,9 @@ public class SysDictResDto implements Serializable {
      */
     private String label;
 
+    /**
+     * 类型
+     */
+    private String type;
+
 }

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

@@ -1,11 +1,9 @@
 package com.sckw.contract.dubbo;
-import com.google.common.collect.Lists;
 
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.contract.api.model.dto.res.EntInfo;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
-import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;

+ 3 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.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;
@@ -53,6 +55,7 @@ public class KwcContractTrade implements Serializable {
     /**
      * 结束日期
      */
+    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private Date endTime;
 
     /**

+ 0 - 5
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java

@@ -49,11 +49,6 @@ public class KwcContractTradeUnit implements Serializable {
      */
     private String phone;
 
-    /**
-     * 签约电话
-     */
-    private String signHone;
-
     /**
      * 备注
      */

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

@@ -1,6 +1,8 @@
 package com.sckw.contract.model.vo.req;
 
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 import java.io.Serial;
@@ -27,6 +29,8 @@ public class CompleteReqVo implements Serializable {
     /**
      * 备注
      */
+    @NotBlank(message = "备注不能为空")
+    @Size(max = 200, message = "备注超长")
     private String remark;
 
     /**

+ 15 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractLogisticsDetailResVo.java

@@ -22,6 +22,16 @@ public class ContractLogisticsDetailResVo implements Serializable {
      */
     private Long id;
 
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 状态
+     */
+    private String statusName;
+
     /**
      * 基础信息
      */
@@ -47,4 +57,9 @@ public class ContractLogisticsDetailResVo implements Serializable {
      */
     private List<ContractLogisticsDetailResVo> child;
 
+    /**
+     * 审批记录
+     */
+    private List<ContractTrackResVo> trackInfo;
+
 }

+ 35 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTrackResVo.java

@@ -0,0 +1,35 @@
+package com.sckw.contract.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author czh
+ * @desc 流程
+ * @date 2023/7/31
+ */
+@Data
+public class ContractTrackResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6408999861802311165L;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 企业名
+     */
+    private String entName;
+
+    /**
+     * 操作
+     */
+    private String trackName;
+
+}

+ 15 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTradeDetailResVo.java

@@ -37,6 +37,16 @@ public class ContractTradeDetailResVo implements Serializable {
      */
     private Long id;
 
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 状态
+     */
+    private String statusName;
+
     /**
      * 备注
      */
@@ -47,4 +57,9 @@ public class ContractTradeDetailResVo implements Serializable {
      */
     private List<ContractTradeDetailResVo> child;
 
+    /**
+     * 审批记录
+     */
+    private List<ContractTrackResVo> trackInfo;
+
 }

+ 10 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java

@@ -33,6 +33,11 @@ public class LogisticsBaseInfoResVo implements Serializable {
      */
     private String carrierPhone;
 
+    /**
+     * 承运单位联系人
+     */
+    private String carrierContacts;
+
     /**
      * 计费方式
      */
@@ -58,6 +63,11 @@ public class LogisticsBaseInfoResVo implements Serializable {
      */
     private String checkedPhone;
 
+    /**
+     * 托运单位联系人
+     */
+    private String checkedContacts;
+
     /**
      * 合同编号
      */

+ 10 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java

@@ -47,6 +47,11 @@ public class TradeBaseInfoResVo implements Serializable {
      */
     private String providePhone;
 
+    /**
+     * 供应单位联系人
+     */
+    private String provideContacts;
+
     /**
      * 采购单位
      */
@@ -62,6 +67,11 @@ public class TradeBaseInfoResVo implements Serializable {
      */
     private String purchasePhone;
 
+    /**
+     * 采购单位联系人
+     */
+    private String purchaseContacts;
+
     /**
      * 签约方式
      */

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

@@ -22,6 +22,11 @@ public class TradeGoodsInfoResVo implements Serializable {
      */
     private BigDecimal amount;
 
+    /**
+     * 商品
+     */
+    private Long goodsId;
+
     /**
      * 商品
      */

+ 23 - 9
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java

@@ -17,6 +17,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.entity.KwcContractTrade;
 import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.*;
 import com.sckw.core.common.enums.enums.DictEnum;
@@ -62,6 +63,7 @@ public class KwcContractLogisticsService {
 
     @Autowired
     private KwcContractLogisticsUnitService kwcContractLogisticsUnitService;
+
     @Autowired
     private RemoteContractServiceImpl remoteContractService;
 
@@ -152,7 +154,9 @@ public class KwcContractLogisticsService {
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
         }
 
-        addCheckedContract(reqVo);
+        //补充合同直接
+        submit(reqVo);
+//        addCheckedContract(reqVo);
     }
 
     /**
@@ -174,6 +178,10 @@ public class KwcContractLogisticsService {
 
     private ContractLogisticsDetailResVo buildContractLogisticsDetailResVo(KwcContractLogistics kwcContractLogistics) {
         ContractLogisticsDetailResVo contractLogisticsDetailResVo = new ContractLogisticsDetailResVo();
+        contractLogisticsDetailResVo.setId(kwcContractLogistics.getId());
+        contractLogisticsDetailResVo.setRemark(kwcContractLogistics.getRemark());
+        contractLogisticsDetailResVo.setStatus(kwcContractLogistics.getStatus());
+        contractLogisticsDetailResVo.setStatusName(ContractStatusEnum.getName(kwcContractLogistics.getStatus()).getName());
         //基础信息
         List<KwcContractLogisticsUnit> kwcContractLogisticsUnitList = kwcContractLogisticsUnitService.queryByContractId(kwcContractLogistics.getId());
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnitList)) {
@@ -182,29 +190,29 @@ public class KwcContractLogisticsService {
                 if (kwcContractLogisticsUnit.getUnitType().equals(CooperateTypeEnum.CONSIGN.getCode())) {
                     logisticsBaseInfoResVo.setCheckedEntName(kwcContractLogisticsUnit.getFirmName());
                     logisticsBaseInfoResVo.setCheckedPhone(kwcContractLogisticsUnit.getSignPhone());
+                    logisticsBaseInfoResVo.setCheckedContacts(kwcContractLogisticsUnit.getContacts());
                     logisticsBaseInfoResVo.setCheckedEntId(kwcContractLogisticsUnit.getEntId());
                 }
 
                 if (kwcContractLogisticsUnit.getUnitType().equals(CooperateTypeEnum.CARRIAGE.getCode())) {
                     logisticsBaseInfoResVo.setCarrierEntName(kwcContractLogisticsUnit.getFirmName());
                     logisticsBaseInfoResVo.setCarrierPhone(kwcContractLogisticsUnit.getSignPhone());
+                    logisticsBaseInfoResVo.setCarrierContacts(kwcContractLogisticsUnit.getContacts());
                     logisticsBaseInfoResVo.setCarrierEntId(kwcContractLogisticsUnit.getEntId());
                 }
             }
 
             logisticsBaseInfoResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(kwcContractLogistics.getCharging())));
-            logisticsBaseInfoResVo.setCharging(String.valueOf(kwcContractLogistics.getCharging()));
+            logisticsBaseInfoResVo.setCharging(StringUtils.objectStr(kwcContractLogistics.getCharging()));
             logisticsBaseInfoResVo.setContractCode(kwcContractLogistics.getContractNo());
             logisticsBaseInfoResVo.setContractName(kwcContractLogistics.getName());
             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.setSigningWay(StringUtils.objectStr(kwcContractLogistics.getSigningWay()));
             logisticsBaseInfoResVo.setStartTime(kwcContractLogistics.getStartTime());
             logisticsBaseInfoResVo.setAmount(kwcContractLogistics.getAmount());
             logisticsBaseInfoResVo.setPerformedAmount(kwcContractLogistics.getPerformedAmount());
             contractLogisticsDetailResVo.setBaseInfo(logisticsBaseInfoResVo);
-            contractLogisticsDetailResVo.setId(kwcContractLogistics.getId());
-
         }
 
         //标的信息
@@ -235,6 +243,7 @@ public class KwcContractLogisticsService {
                 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.getLabel());
@@ -266,6 +275,9 @@ public class KwcContractLogisticsService {
         fileList.add(kwcContractLogistics.getSigningUrl());
         contractLogisticsDetailResVo.setContractFile(fileList.stream().filter(StringUtils::isNotBlank).toList());
 
+        //审批流程信息
+        contractLogisticsDetailResVo.setTrackInfo(kwcContractLogisticsTrackService.queryContractTrackByContractId(kwcContractLogistics.getId()));
+
         //补充合同
         List<KwcContractLogistics> supplementList = getSupplementList(kwcContractLogistics);
         if (CollectionUtils.isNotEmpty(supplementList)) {
@@ -275,7 +287,6 @@ public class KwcContractLogisticsService {
             }
             contractLogisticsDetailResVo.setChild(child);
         }
-        contractLogisticsDetailResVo.setRemark(kwcContractLogistics.getRemark());
         return contractLogisticsDetailResVo;
     }
 
@@ -284,7 +295,7 @@ public class KwcContractLogisticsService {
         LambdaQueryWrapper<KwcContractLogistics> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwcContractLogistics::getContractPid, kwcContractLogistics.getId());
         wrapper.eq(KwcContractLogistics::getDelFlag, Global.NO);
-        wrapper.eq(KwcContractLogistics::getStatus, Global.NO);
+//        wrapper.eq(KwcContractLogistics::getStatus, Global.NO);
         return kwcContractLogisticsMapper.selectList(wrapper);
     }
 
@@ -467,8 +478,11 @@ public class KwcContractLogisticsService {
         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());
+
+            if (Objects.nonNull(queryListResDto.getUnitType())) {
+                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());
+            }
 
             UserCacheResDto userCacheResDto = longUserCacheResDtoMap.get(queryListResDto.getInitiateBy());
             if (Objects.nonNull(userCacheResDto)) {

+ 84 - 5
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsTrackService.java

@@ -1,28 +1,48 @@
 package com.sckw.contract.service;
-import java.util.Date;
 
+import java.util.*;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.contract.dao.KwcContractLogisticsMapper;
 import com.sckw.contract.dao.KwcContractLogisticsTrackMapper;
+import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
+import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsTrack;
+import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
+import com.sckw.contract.model.vo.res.ContractTrackResVo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractTrackEnum;
+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;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
-* @author PC
-* @description 针对表【kwc_contract_logistics_track(物流合同(承运合同/托运合同)-物流订单)】的数据库操作Service实现
-* @createDate 2023-07-13 13:36:19
-*/
+ * @author PC
+ * @description 针对表【kwc_contract_logistics_track(物流合同(承运合同/托运合同)-物流订单)】的数据库操作Service实现
+ * @createDate 2023-07-13 13:36:19
+ */
 @Service
 public class KwcContractLogisticsTrackService {
 
     @Autowired
     private KwcContractLogisticsTrackMapper kwcContractLogisticsTrackMapper;
 
+    @Autowired
+    private KwcContractLogisticsMapper kwcContractLogisticsMapper;
+
+    @Autowired
+    private KwcContractLogisticsUnitMapper kwcContractLogisticsUnitMapper;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
     /**
      * @param contractId 合同id
      * @desc: 存审批记录
@@ -47,6 +67,65 @@ public class KwcContractLogisticsTrackService {
         }
     }
 
+    /**
+     * @param id 合同id
+     * @return List<ContractTrackResVo>
+     * @desc: 根据合同id查流程
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    public List<ContractTrackResVo> queryContractTrackByContractId(Long id) {
+        LambdaQueryWrapper<KwcContractLogisticsTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwcContractLogisticsTrack::getContractId, id).
+                eq(KwcContractLogisticsTrack::getDelFlag, Global.NO).
+                orderByDesc(KwcContractLogisticsTrack::getCreateTime);
+        List<KwcContractLogisticsTrack> kwcContractLogisticsTracks = kwcContractLogisticsTrackMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(kwcContractLogisticsTracks)) {
+            return Collections.emptyList();
+        }
+
+        KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(id);
+        if (Objects.isNull(kwcContractLogistics)) {
+            return Collections.emptyList();
+        }
+
+        Long entId = kwcContractLogistics.getEntId();
+        LambdaQueryWrapper<KwcContractLogisticsUnit> wrapper2 = new LambdaQueryWrapper<>();
+        wrapper2.eq(KwcContractLogisticsUnit::getContractId, id).
+                 eq(KwcContractLogisticsUnit::getDelFlag, Global.NO);
+        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitMapper.selectList(wrapper2);
+        if (CollectionUtils.isEmpty(kwcContractLogisticsTracks)) {
+            return Collections.emptyList();
+        }
+
+        String initiateEntName = "";
+        String targetEntName  = "";
+        for (KwcContractLogisticsUnit kwcContractLogisticsUnit : kwcContractLogisticsUnits) {
+            if (kwcContractLogisticsUnit.getEntId().equals(entId)) {
+                initiateEntName = kwcContractLogisticsUnit.getFirmName();
+            } else {
+                targetEntName = kwcContractLogisticsUnit.getFirmName();
+            }
+        }
+
+        List<ContractTrackResVo> list = new ArrayList<>();
+        for (KwcContractLogisticsTrack item : kwcContractLogisticsTracks) {
+            ContractTrackResVo contractTrackResVo = new ContractTrackResVo();
+            contractTrackResVo.setCreateTime(item.getCreateTime());
+            contractTrackResVo.setTrackName(ContractTrackEnum.getName(item.getType()).getName());
+            if (ContractTrackEnum.SIGNING.getCode() == item.getType()) {
+                contractTrackResVo.setEntName(initiateEntName);
+            } else if (ContractTrackEnum.SIGNED.getCode() == item.getType()) {
+                contractTrackResVo.setEntName(targetEntName);
+            } else {
+                UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(item.getCreateBy());
+                contractTrackResVo.setEntName(userCacheResDto.getEntInfo().getFirmName());
+            }
+            list.add(contractTrackResVo);
+        }
+        return list;
+    }
+
 }
 
 

+ 7 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java

@@ -89,10 +89,17 @@ public class KwcContractLogisticsUnitService {
         Long carrierEntId = logisticsBaseInfoReqVo.getCarrierEntId();
         if (Objects.nonNull(carrierEntId)) {
             kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
+            kwcContractLogisticsUnit.setContractId(contractId);
             kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CARRIAGE.getCode());
             kwcContractLogisticsUnit.setEntId(carrierEntId);
             saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
             kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCarrierPhone());
+            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);
             }

+ 44 - 23
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java

@@ -109,8 +109,11 @@ public class KwcContractTradeService {
             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());
+
+            if (Objects.nonNull(queryListResDto.getUnitType())) {
+                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());
+            }
 
             UserCacheResDto userCacheResDto = longUserCacheResDtoMap.get(queryListResDto.getInitiateBy());
             if (Objects.nonNull(userCacheResDto)) {
@@ -207,7 +210,8 @@ public class KwcContractTradeService {
             throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
         }
 
-        addTradeContract(reqVo);
+        submit(reqVo);
+//        addTradeContract(reqVo);
     }
 
 
@@ -243,30 +247,38 @@ public class KwcContractTradeService {
         tradeBaseInfoResVo.setContractName(kwcContractTrade.getName());
         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.setSigningWay(StringUtils.objectStr(kwcContractTrade.getSigningWay()));
         tradeBaseInfoResVo.setStartTime(kwcContractTrade.getStartTime());
         tradeBaseInfoResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(kwcContractTrade.getTrading())));
-        tradeBaseInfoResVo.setTrading(String.valueOf(kwcContractTrade.getTrading()));
+        tradeBaseInfoResVo.setTrading(StringUtils.objectStr(kwcContractTrade.getTrading()));
 
         ContractTradeDetailResVo contractTradeDetailResVo = new ContractTradeDetailResVo();
+        contractTradeDetailResVo.setStatus(kwcContractTrade.getStatus());
+        contractTradeDetailResVo.setStatusName(ContractStatusEnum.getName(kwcContractTrade.getStatus()).getName());
+        contractTradeDetailResVo.setRemark(kwcContractTrade.getRemark());
+
+
         List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitService.queryByContractId(id);
         if (CollectionUtils.isNotEmpty(kwcContractTradeUnits)) {
             for (KwcContractTradeUnit kwcContractTradeUnit : kwcContractTradeUnits) {
                 if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0) {
                     tradeBaseInfoResVo.setProvideEntName(kwcContractTradeUnit.getFirmName());
                     tradeBaseInfoResVo.setProvidePhone(kwcContractTradeUnit.getSignPhone());
+                    tradeBaseInfoResVo.setProvideContacts(kwcContractTradeUnit.getContacts());
                     tradeBaseInfoResVo.setProvideEntId(kwcContractTradeUnit.getEntId());
                 }
 
                 if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.PURCHASER.getCode()) == 0) {
                     tradeBaseInfoResVo.setPurchaseEntName(kwcContractTradeUnit.getFirmName());
-                    tradeBaseInfoResVo.setPurchasePhone(kwcContractTradeUnit.getPhone());
+                    tradeBaseInfoResVo.setPurchasePhone(kwcContractTradeUnit.getSignPhone());
+                    tradeBaseInfoResVo.setPurchaseContacts(kwcContractTradeUnit.getContacts());
                     tradeBaseInfoResVo.setPurchaseEntId(kwcContractTradeUnit.getEntId());
                 }
             }
         }
         contractTradeDetailResVo.setBaseInfo(tradeBaseInfoResVo);
         contractTradeDetailResVo.setId(id);
+
         //标的信息
         List<KwcContractTradeGoods> kwcContractTradeGoodsList = kwcContractTradeGoodsService.queryGoodsInfoByContractId(id);
         List<Long> goodsIdList = kwcContractTradeGoodsList.stream().map(KwcContractTradeGoods::getGoodsId).toList();
@@ -286,7 +298,7 @@ public class KwcContractTradeService {
                 tradeGoodsInfoResVo.setAmount(kwcContractTradeGoods.getAmount());
                 tradeGoodsInfoResVo.setPrice(kwcContractTradeGoods.getPrice());
                 tradeGoodsInfoResVo.setUnit(kwcContractTradeGoods.getUnit());
-
+                tradeGoodsInfoResVo.setGoodsId(kwcContractTradeGoods.getGoodsId());
                 KwpGoods kwpGoods = goodsMap.get(kwcContractTradeGoods.getGoodsId());
                 if (Objects.nonNull(kwpGoods)) {
                     tradeGoodsInfoResVo.setGoodsName(kwpGoods.getName());
@@ -302,10 +314,14 @@ public class KwcContractTradeService {
             contractTradeDetailResVo.setGoodsInfo(tradeGoodsInfoResVoList);
         }
 
+        //合同文件
         List<String> fileList = new ArrayList<>();
         fileList.add(kwcContractTrade.getSigningUrl());
         fileList.add(kwcContractTrade.getSignedUrl());
-        contractTradeDetailResVo.setContractFile(fileList);
+        contractTradeDetailResVo.setContractFile(fileList.stream().filter(StringUtils::isNotBlank).toList());
+
+        //流程记录
+        contractTradeDetailResVo.setTrackInfo(kwcContractTradeTrackService.queryContractTrackByContractId(kwcContractTrade.getId()));
 
         List<KwcContractTrade> supplementList = getSupplementList(id);
         if (CollectionUtils.isNotEmpty(supplementList)) {
@@ -323,7 +339,7 @@ public class KwcContractTradeService {
         LambdaQueryWrapper<KwcContractTrade> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwcContractTrade::getContractPid, id);
         wrapper.eq(KwcContractTrade::getDelFlag, Global.NO);
-        wrapper.eq(KwcContractTrade::getStatus, Global.NO);
+//        wrapper.eq(KwcContractTrade::getStatus, Global.NO);
         return kwcContractTradeMapper.selectList(wrapper);
     }
 
@@ -334,30 +350,35 @@ public class KwcContractTradeService {
      * @author: czh
      * @date 2023/7/16
      */
+    @Transactional(rollbackFor = {})
     public void submit(ContractTradeReqVo reqVo) {
         Long id = reqVo.getId();
         if (Objects.isNull(id)) {
             //创建合同
-            KwcContractTrade kwcContractLogistics = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getGoodsInfo(), reqVo.getRemark(), reqVo.getPid());
-            id = new IdWorker(1L).nextId();
-            kwcContractLogistics.setId(id);
-            kwcContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
-            kwcContractLogistics.setSigningUrl(reqVo.getContractFile());
-            if (kwcContractTradeMapper.insert(kwcContractLogistics) <= 0) {
-                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
-            }
-
-            //存审批记录
-            kwcContractTradeTrackService.saveContractTradeTrack(id);
+            id = addTradeContract(reqVo);
+            changeToSubmit(id);
             return;
         }
+        update(reqVo);
+        changeToSubmit(id);
+    }
 
-        id = addTradeContract(reqVo);
-        //存审批记录
+
+    /**
+     * @param id 合同id
+     * @desc: 更新合同为发起
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    private void changeToSubmit(Long id) {
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(id);
+        kwcContractTrade.setStatus(ContractStatusEnum.SUBMIT.getCode());
+        if (kwcContractTradeMapper.updateById(kwcContractTrade) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
         kwcContractTradeTrackService.saveContractTradeTrack(id);
     }
 
-
     /**
      * @desc: 修改草稿
      * @param: reqVo 入参

+ 76 - 3
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeTrackService.java

@@ -1,20 +1,26 @@
 package com.sckw.contract.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.contract.dao.KwcContractLogisticsTrackMapper;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.dao.KwcContractTradeTrackMapper;
-import com.sckw.contract.model.entity.KwcContractLogisticsTrack;
-import com.sckw.contract.model.entity.KwcContractTradeTrack;
+import com.sckw.contract.dao.KwcContractTradeUnitMapper;
+import com.sckw.contract.model.entity.*;
+import com.sckw.contract.model.vo.res.ContractTrackResVo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractTrackEnum;
+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;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
+import java.util.*;
 
 /**
 * @author PC
@@ -27,6 +33,14 @@ public class KwcContractTradeTrackService {
     @Autowired
     private KwcContractTradeTrackMapper kwcContractTradeTrackMapper;
 
+    @Autowired
+    private KwcContractTradeMapper kwcContractTradeMapper;
+
+    @Autowired
+    private KwcContractTradeUnitMapper kwcContractTradeUnitMapper;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
     public void saveContractTradeTrack(Long contractId) {
         Date date = new Date();
@@ -45,6 +59,65 @@ public class KwcContractTradeTrackService {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }
     }
+
+    /**
+     * @param id 合同id
+     * @return List<ContractTrackResVo>
+     * @desc: 根据合同id查流程
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    public List<ContractTrackResVo> queryContractTrackByContractId(Long id) {
+        LambdaQueryWrapper<KwcContractTradeTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwcContractTradeTrack::getContractId, id).
+                eq(KwcContractTradeTrack::getDelFlag, Global.NO).
+                orderByDesc(KwcContractTradeTrack::getCreateTime);
+        List<KwcContractTradeTrack> kwcContractTradeTracks = kwcContractTradeTrackMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(kwcContractTradeTracks)) {
+            return Collections.emptyList();
+        }
+
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(id);
+        if (Objects.isNull(kwcContractTrade)) {
+            return Collections.emptyList();
+        }
+
+        Long entId = kwcContractTrade.getEntId();
+        LambdaQueryWrapper<KwcContractTradeUnit> wrapper2 = new LambdaQueryWrapper<>();
+        wrapper2.eq(KwcContractTradeUnit::getContractId, id).
+                eq(KwcContractTradeUnit::getDelFlag, Global.NO);
+        List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitMapper.selectList(wrapper2);
+        if (CollectionUtils.isEmpty(kwcContractTradeUnits)) {
+            return Collections.emptyList();
+        }
+
+        String initiateEntName = "";
+        String targetEntName  = "";
+        for (KwcContractTradeUnit kwcContractTradeUnit : kwcContractTradeUnits) {
+            if (kwcContractTradeUnit.getEntId().equals(entId)) {
+                initiateEntName = kwcContractTradeUnit.getFirmName();
+            } else {
+                targetEntName = kwcContractTradeUnit.getFirmName();
+            }
+        }
+
+        List<ContractTrackResVo> list = new ArrayList<>();
+        for (KwcContractTradeTrack item : kwcContractTradeTracks) {
+            ContractTrackResVo contractTrackResVo = new ContractTrackResVo();
+            contractTrackResVo.setCreateTime(item.getCreateTime());
+            contractTrackResVo.setTrackName(ContractTrackEnum.getName(item.getType()).getName());
+            if (ContractTrackEnum.SIGNING.getCode() == item.getType()) {
+                contractTrackResVo.setEntName(initiateEntName);
+            } else if (ContractTrackEnum.SIGNED.getCode() == item.getType()) {
+                contractTrackResVo.setEntName(targetEntName);
+            } else {
+                UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(item.getCreateBy());
+                contractTrackResVo.setEntName(userCacheResDto.getEntInfo().getFirmName());
+            }
+            list.add(contractTrackResVo);
+        }
+        return list;
+    }
 }
 
 

+ 46 - 23
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java

@@ -8,6 +8,7 @@ import com.sckw.contract.model.vo.req.TradeBaseInfoReqVo;
 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;
@@ -39,8 +40,18 @@ public class KwcContractTradeUnitService {
      */
     public void saveContractTradeUnit(long contractId, TradeBaseInfoReqVo baseInfo) {
         List<Long> entIdList = new ArrayList<>();
-        entIdList.add(baseInfo.getProvideEntId());
-        entIdList.add(baseInfo.getPurchaseEntId());
+        if (Objects.nonNull(baseInfo.getProvideEntId())) {
+            entIdList.add(baseInfo.getProvideEntId());
+        }
+
+        if (Objects.nonNull(baseInfo.getPurchaseEntId())) {
+            entIdList.add(baseInfo.getPurchaseEntId());
+        }
+
+        if (CollectionUtils.isEmpty(entIdList)) {
+            return;
+        }
+
         Map<Long, EntCacheResDto> entCacheResDtoMap = commonBusinessService.queryEntCacheMapByIds(entIdList);
 
         Date date = new Date();
@@ -50,31 +61,43 @@ public class KwcContractTradeUnitService {
     private void saveProvideAndPurchase(long contractId, Map<Long, EntCacheResDto> entCacheResDtoMap, Date date, TradeBaseInfoReqVo baseInfo) {
         //存供应商
         KwcContractTradeUnit kwcContractTradeUnit = new KwcContractTradeUnit();
-        kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
-        kwcContractTradeUnit.setContractId(contractId);
-        kwcContractTradeUnit.setUnitType(CooperateTypeEnum.SUPPLIER.getCode());
-        kwcContractTradeUnit.setEntId(baseInfo.getProvideEntId());
-        saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
-        kwcContractTradeUnit.setSignPhone(baseInfo.getProvidePhone());
-        kwcContractTradeUnit.setStatus(Global.NO);
-        kwcContractTradeUnit.setCreateBy(LoginUserHolder.getUserId());
-        kwcContractTradeUnit.setCreateTime(date);
-        kwcContractTradeUnit.setUpdateBy(LoginUserHolder.getUserId());
-        kwcContractTradeUnit.setUpdateTime(date);
-        kwcContractTradeUnit.setDelFlag(Global.NO);
-        if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        if(Objects.nonNull(baseInfo.getProvideEntId())) {
+            kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
+            kwcContractTradeUnit.setContractId(contractId);
+            kwcContractTradeUnit.setUnitType(CooperateTypeEnum.SUPPLIER.getCode());
+            kwcContractTradeUnit.setEntId(baseInfo.getProvideEntId());
+            saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
+            kwcContractTradeUnit.setSignPhone(baseInfo.getProvidePhone());
+            kwcContractTradeUnit.setStatus(Global.NO);
+            kwcContractTradeUnit.setCreateBy(LoginUserHolder.getUserId());
+            kwcContractTradeUnit.setCreateTime(date);
+            kwcContractTradeUnit.setUpdateBy(LoginUserHolder.getUserId());
+            kwcContractTradeUnit.setUpdateTime(date);
+            kwcContractTradeUnit.setDelFlag(Global.NO);
+            if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
         }
 
         //存采购商
-        kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
-        kwcContractTradeUnit.setUnitType(CooperateTypeEnum.PURCHASER.getCode());
-        kwcContractTradeUnit.setEntId(baseInfo.getPurchaseEntId());
-        saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
-        kwcContractTradeUnit.setSignPhone(baseInfo.getPurchasePhone());
-        if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
-            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        if (Objects.nonNull(baseInfo.getPurchaseEntId())) {
+            kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
+            kwcContractTradeUnit.setUnitType(CooperateTypeEnum.PURCHASER.getCode());
+            kwcContractTradeUnit.setEntId(baseInfo.getPurchaseEntId());
+            kwcContractTradeUnit.setContractId(contractId);
+            saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
+            kwcContractTradeUnit.setSignPhone(baseInfo.getPurchasePhone());
+            kwcContractTradeUnit.setStatus(Global.NO);
+            kwcContractTradeUnit.setCreateBy(LoginUserHolder.getUserId());
+            kwcContractTradeUnit.setCreateTime(date);
+            kwcContractTradeUnit.setUpdateBy(LoginUserHolder.getUserId());
+            kwcContractTradeUnit.setUpdateTime(date);
+            kwcContractTradeUnit.setDelFlag(Global.NO);
+            if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
         }
+
     }
 
     /**

+ 2 - 1
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml

@@ -68,7 +68,7 @@
           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 = e.contract_id and e.unit_type != #{entType} and e.del_flag = 0
         where a.del_flag = 0
-          and b.ent_id = #{entId}
+          and case when a.status = 3 then a.ent_id = #{entId} else b.ent_id = #{entId} end
           <if test="startTime != null">
               and a.create_time >= #{startTime}
           </if>
@@ -80,6 +80,7 @@
           </if>
           <if test="keywords != null and keywords != ''">
               and (b.firm_name like concat('%', #{keywords}, '%') or
+                   e.firm_name like concat('%', #{keywords}, '%') or
                    b.contacts like concat('%', #{keywords}, '%') or
                    b.phone like concat('%', #{keywords}, '%') or
                    b.sign_phone like concat('%', #{keywords}, '%'))

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

@@ -64,9 +64,9 @@
           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} and e.del_flag = 0
+          left join kwc_contract_trade_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.ent_id = #{entId}
+           and case when a.status = 3 then a.ent_id = #{entId} else b.ent_id = #{entId} end
         <if test="startTime != null">
             and a.create_time >= #{startTime}
         </if>
@@ -78,6 +78,7 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (b.firm_name like concat('%', #{keywords}, '%') or
+                 e.firm_name like concat('%', #{keywords}, '%') or
                  b.contacts like concat('%', #{keywords}, '%') or
                  b.phone like concat('%', #{keywords}, '%') or
                  b.sign_phone like concat('%', #{keywords}, '%'))

+ 2 - 2
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeUnitMapper.xml

@@ -12,7 +12,7 @@
             <result property="firm_name" column="firm_name" jdbcType="VARCHAR"/>
             <result property="contacts" column="contacts" jdbcType="VARCHAR"/>
             <result property="phone" column="phone" jdbcType="VARCHAR"/>
-            <result property="sign_hone" column="sign_hone" jdbcType="VARCHAR"/>
+            <result property="sign_phone" column="sign_phone" jdbcType="VARCHAR"/>
             <result property="remark" column="remark" jdbcType="VARCHAR"/>
             <result property="status" column="status" jdbcType="INTEGER"/>
             <result property="create_by" column="create_by" jdbcType="BIGINT"/>
@@ -25,7 +25,7 @@
     <sql id="Base_Column_List">
         id,ent_id,contract_id,
         unit_type,firm_name,contacts,
-        phone,sign_hone,remark,
+        phone,sign_phone,remark,
         status,create_by,create_time,
         update_by,update_time,del_flag
     </sql>

+ 15 - 0
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/ExcelExportController.java

@@ -9,6 +9,7 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.example.dao.KwsDeptDao;
 import com.sckw.example.model.KwsDept;
+import com.sckw.example.model.vo.ProjectPageVo;
 import com.sckw.example.model.vo.SysUserVo;
 import com.sckw.example.service.ExcelExportService;
 import com.sckw.excel.easyexcel.ExcelImportListener;
@@ -189,4 +190,18 @@ public class ExcelExportController {
             throw new RuntimeException(e);
         }
     }
+
+    /**
+     * 导出注解翻译示例
+     */
+    @RequestMapping(value = "/easyExcelDemo", method = RequestMethod.GET)
+    public HttpResult easyExcelDemo() {
+        HttpServletResponse response = RequestHolder.getResponse();
+        List<ProjectPageVo> list = excelExportService.easyExcelDemo();
+        if (!CollectionUtils.isEmpty(list)) {
+            ExcelUtil.download(response, ProjectPageVo.class, list);
+            return null;
+        }
+        return HttpResult.error("没有可导出的数据");
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.sckw.example.controller;
 
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.api.dubbo.SmsInfoService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
@@ -27,7 +28,7 @@ public class MessageApiController {
 
     @GetMapping("/getVerifyCode")
     public HttpResult getVerifyCode() {
-        String verifyCode = smsInfoService.getVerifyCode("17780832879");
+        String verifyCode = smsInfoService.getVerifyCode(DictEnum.SMS_REGISTER.getValue(),"17780832879");
         return HttpResult.ok("获取验证码成功", verifyCode);
     }
 

+ 32 - 0
sckw-modules/sckw-example/src/main/java/com/sckw/example/model/vo/ProjectPageVo.java

@@ -0,0 +1,32 @@
+package com.sckw.example.model.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.model.enums.ProjectStatusEnum;
+import com.sckw.excel.annotation.EasyExcel;
+import com.sckw.excel.annotation.ExcelContext;
+import com.sckw.excel.config.easyexcel.ExcelConverter;
+import lombok.Data;
+
+/**
+ * @author lfdc
+ * @description
+ * @date 2023-07-28 11:07:15
+ */
+@Data
+@ExcelContext(fileName = "企业列表", sheetName = "企业列表")
+public class ProjectPageVo {
+    /**
+     * 项目状态 ,index = 0
+     */
+    @ExcelProperty(value = "项目状态", converter = ExcelConverter.class)
+    @EasyExcel(type = ProjectStatusEnum.class, status = NumberConstant.ONE)
+    private Integer status;
+
+    /**
+     * 项目备注,index = 0
+     */
+    @ExcelProperty(value = "项目备注")
+    private String remark;
+
+}

+ 15 - 0
sckw-modules/sckw-example/src/main/java/com/sckw/example/service/ExcelExportService.java

@@ -5,6 +5,7 @@ import com.alibaba.excel.ExcelReader;
 import com.alibaba.excel.read.metadata.ReadSheet;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.example.model.vo.ProjectPageVo;
 import com.sckw.example.model.vo.SysEnterpriseVo;
 import com.sckw.example.model.vo.SysUserVo;
 import com.sckw.excel.common.FileType;
@@ -15,6 +16,7 @@ import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
+
 import java.io.*;
 import java.net.URLEncoder;
 import java.util.ArrayList;
@@ -208,4 +210,17 @@ public class ExcelExportService {
         }
         return HttpResult.ok(HttpStatus.SUCCESS_CODE);
     }
+
+    public List<ProjectPageVo> easyExcelDemo() {
+        ProjectPageVo projectPageVo = new ProjectPageVo();
+        projectPageVo.setStatus(0);
+        projectPageVo.setRemark("0");
+        ProjectPageVo projectPageVo1 = new ProjectPageVo();
+        projectPageVo1.setStatus(1);
+        projectPageVo1.setRemark("0");
+        List<ProjectPageVo> list = new ArrayList<>();
+        list.add(projectPageVo);
+        list.add(projectPageVo1);
+        return list;
+    }
 }

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

@@ -5,6 +5,7 @@ spring:
   application:
     name: sckw-file
   profiles:
+#    active: ${DEPLOY_MODE:dev}
     active: @profiles.active@
   main:
     allow-bean-definition-overriding: true

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfTruckReportVo.java

@@ -33,6 +33,17 @@ public class KwfTruckReportVo {
     @ExcelProperty(value = "车牌号")
     private String truckNo;
 
+    /**
+     * 状态
+     */
+    @ExcelIgnore
+    private int status;
+    /**
+     * 状态名称
+     */
+    @ExcelProperty(value = "状态")
+    private int statusName;
+
     /**
      * 司机主键id
      */
@@ -159,4 +170,8 @@ public class KwfTruckReportVo {
     @ExcelProperty(value = "备注")
     private String remark;
 
+    public String getStatusName() {
+        return status == 1 ? "正常" : status == 2 ? "临时" : "异常";
+    }
+
 }

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

@@ -248,7 +248,7 @@ public class KwfTruckReportService {
                 truckReport.setDriverId(driver.getId());
             } else {
                 //校验司机是否已上报
-                Map<String, Object> driver = trucks.get(0);
+                Map<String, Object> driver = drivers.get(0);
                 Object driverId = driver.get("id");
                 List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                     put("driverId", driverId);

+ 1 - 1
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml

@@ -47,7 +47,7 @@
 
     <select id="findPage" resultType="com.sckw.fleet.model.vo.KwfTruckReportVo" parameterType="java.util.Map" >
         SELECT
-            trr.id, trr.ent_id entId, trr.truck_id truckId, driver_id driverId, trr.remark, trr.status,
+            trr.id, trr.ent_id entId, trr.truck_id truckId, driver_id driverId, trr.remark, tr.status,
             trr.create_by createBy, trr.create_time createTime, trr.update_time updateTime, trr.remark,
             tr.truck_no truckNo, tr.actual_weight actualWeight, tr.business_status businessStatus,
             dr.`name` driverName, dr.phone driverPhone, dr.idcard driverIdcard, dr.ent_id driverEntId,

+ 6 - 2
sckw-modules/sckw-manage/pom.xml

@@ -62,7 +62,11 @@
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-excel</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-manage-api</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
-
 </project>

+ 5 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/controller/KwmAddressController.java

@@ -125,4 +125,9 @@ public class KwmAddressController {
         return HttpResult.ok(kwmAddressService.detail(reqVo.getId()));
     }
 
+    @PostMapping("test")
+    public HttpResult test(@RequestBody IdsReqVo reqVo) throws SystemException {
+        return HttpResult.ok(kwmAddressService.test(reqVo.getId()));
+    }
+
 }

+ 53 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java

@@ -0,0 +1,53 @@
+package com.sckw.manage.dubbo;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.manage.api.RemoteManageService;
+import com.sckw.manage.api.model.dto.res.EntAddressResDto;
+import com.sckw.manage.dao.KwmAddressMapper;
+import com.sckw.manage.model.entity.KwmAddress;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author czh
+ * @desc 基础信息+合作管理远程接口实现
+ * @date 2023/7/31
+ */
+@DubboService(group = "design", version = "2.0.0")
+@Service
+public class RemoteManageServiceImpl implements RemoteManageService {
+
+    @Autowired
+    private KwmAddressMapper kwmAddressMapper;
+
+    /**
+     * @param idList 企业id集合
+     * @return Map<Long, List<EntAddressResDto>>
+     * @desc: 根据企业id查下面的地址
+     * @author: czh
+     * @date: 2023/7/31
+     */
+    @Override
+    public Map<Long, List<EntAddressResDto>> queryEntAddressByEntIdList(List<Long> idList) {
+        Map<Long, List<EntAddressResDto>> map = new HashMap<>();
+        LambdaQueryWrapper<KwmAddress> kwmAddressLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        kwmAddressLambdaQueryWrapper.in(KwmAddress::getEntId, idList).
+                                     eq(KwmAddress::getDelFlag, Global.NO);
+        List<KwmAddress> kwmAddressList = kwmAddressMapper.selectList(kwmAddressLambdaQueryWrapper);
+        if (CollectionUtils.isEmpty(kwmAddressList)) {
+            return map;
+        }
+
+        List<EntAddressResDto> entAddressResDtoList= BeanUtils.copyToList(kwmAddressList, EntAddressResDto.class);
+        return entAddressResDtoList.stream().collect(Collectors.groupingBy(EntAddressResDto::getEntId));
+    }
+}

+ 4 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/AddressAddReqVo.java

@@ -1,6 +1,8 @@
 package com.sckw.manage.model.vo.req;
 
+import com.sckw.core.utils.RegularUtils;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 
@@ -33,6 +35,7 @@ public class AddressAddReqVo implements Serializable {
     /**
      * 联系人
      */
+    @Pattern(regexp = RegularUtils.NAME, message = "联系人格式不正确")
     private String contacts;
 
     /**
@@ -63,6 +66,7 @@ public class AddressAddReqVo implements Serializable {
     /**
      * 联系人电话
      */
+    @Pattern(regexp = RegularUtils.PHONE_REG, message = "手机号格式不正确")
     private String phone;
 
     /**

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

@@ -20,7 +20,9 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
+import com.sckw.manage.api.model.dto.res.EntAddressResDto;
 import com.sckw.manage.dao.KwmAddressMapper;
+import com.sckw.manage.dubbo.RemoteManageServiceImpl;
 import com.sckw.manage.model.entity.KwmAddress;
 import com.sckw.manage.model.vo.req.*;
 import com.sckw.manage.model.vo.res.AddressDetailResVo;
@@ -47,6 +49,8 @@ public class KwmAddressService {
     @Autowired
     private CommonBusinessService commonBusinessService;
 
+    @Autowired
+    private RemoteManageServiceImpl remoteManageService;
     /**
      * @param reqVo 分页入参
      * @return HttpResult
@@ -79,7 +83,8 @@ public class KwmAddressService {
                 eq(KwmAddress::getDelFlag, Global.NO).
                 and(StringUtils.isNotBlank(reqVo.getKeywords()),
                         wq -> wq.like(KwmAddress::getDetailAddress, reqVo.getKeywords()).or().
-                                like(KwmAddress::getCityName, reqVo.getKeywords()));
+                                like(KwmAddress::getCityName, reqVo.getKeywords())).
+                orderByDesc(KwmAddress::getUpdateTime);
 
         if (Objects.nonNull(reqVo.getStartTime())) {
             wrapper.ge(KwmAddress::getCreateTime, reqVo.getStartTime());
@@ -248,6 +253,15 @@ public class KwmAddressService {
      * @date: 2023/7/12
      */
     public void add(AddressAddReqVo reqVo) {
+        LambdaQueryWrapper<KwmAddress> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwmAddress::getName, reqVo.getName()).
+                eq(KwmAddress::getDelFlag, Global.NO).
+                eq(KwmAddress::getStatus, Global.NO).
+                eq(KwmAddress::getEntId, LoginUserHolder.getEntId());
+        if (kwmAddressMapper.selectCount(wrapper).compareTo((long) Global.NUMERICAL_ZERO) > 0) {
+            throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ADDRESS_EXISTS);
+        }
+
         KwmAddress kwmAddress = new KwmAddress();
         BeanUtils.copyProperties(reqVo, kwmAddress);
         Long userId = LoginUserHolder.getUserId();
@@ -356,4 +370,8 @@ public class KwmAddressService {
         BeanUtils.copyProperties(kwmAddress, addressDetailResVo);
         return addressDetailResVo;
     }
+
+    public Map<Long, List<EntAddressResDto>> test(Long id) {
+        return remoteManageService.queryEntAddressByEntIdList(Collections.singletonList(id));
+    }
 }

+ 2 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/dubbo/SmsInfoServiceImpl.java

@@ -13,8 +13,8 @@ import org.apache.dubbo.config.annotation.DubboService;
 @DubboService(group = "design", version = "2.0.0")
 public class SmsInfoServiceImpl implements SmsInfoService {
     @Override
-    public String getVerifyCode(String phone) {
-        String key = String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, phone);
+    public String getVerifyCode(String type, String phone) {
+        String key = String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, type, phone);
         return RedissonUtils.getString(key);
     }
 }

+ 2 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java

@@ -21,4 +21,6 @@ public class SendSmsVerifyCoderReqVO {
     @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法的手机号")
     private String phone;
 
+    @NotBlank(message = "短信类型不能为空")
+    private String type;
 }

+ 8 - 6
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java

@@ -32,16 +32,18 @@ public class SckwSmsHandlerService {
      */
     public void handler(SckwSms sckwSms) {
         log.info("接收到发送短信消息:{},开始处理", JSON.toJSONString(sckwSms));
-        String requestKey = getKey(RedisConstant.MESSAGE_SMS_VERIFY_CODE_REQUEST_KEY, sckwSms.getPhone());
+        String type = sckwSms.getType();
+        String phone = sckwSms.getPhone();
+        String requestKey = getKey(RedisConstant.MESSAGE_SMS_VERIFY_CODE_REQUEST_KEY,type,phone);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(requestKey, 10L, RedisConstant.SMS_VERIFY_CODE_VALID_TIME))) {
             log.info("重复发送短信消息,不处理");
             return;
         }
-        String valueKey = getKey(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, sckwSms.getPhone());
-        //发送短信
-        RedissonUtils.putString(valueKey, String.valueOf(sckwSms.getParams().get("code")), RedisConstant.SMS_VERIFY_CODE_VALID_TIME);
+        String valueKey = getKey(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, type,phone);
         //发送短信
         SmsUtil.sendSms(sckwSms.getPhone(), sckwSms.getSignName(), sckwSms.getTemplateCode().getName(), JSON.toJSONString(sckwSms.getParams()));
+        //放入缓存
+        RedissonUtils.putString(valueKey, String.valueOf(sckwSms.getParams().get("code")), RedisConstant.SMS_VERIFY_CODE_VALID_TIME);
         //数据入库
         SmsCodeEnum smsCodeEnum = sckwSms.getTemplateCode();
         KwmSms kwmSms = KwmSms.builder().type(smsCodeEnum.getType()).code(smsCodeEnum.getName())
@@ -52,7 +54,7 @@ public class SckwSmsHandlerService {
         kwmSmsService.add(kwmSms);
     }
 
-    private String getKey(String prefix, String args) {
-        return String.format(prefix, args);
+    private String getKey(String prefix, String args1, String args2) {
+        return String.format(prefix, args1, args2);
     }
 }

+ 14 - 10
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

@@ -1,6 +1,8 @@
 package com.sckw.message.service;
 
 import com.alibaba.fastjson2.JSON;
+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.utils.NumberUtils;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -16,6 +18,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author: yzc
@@ -37,23 +40,24 @@ public class SmsService {
      * @date: 2023-06-13 13:43
      */
     public void sendVerifyCode(SendSmsVerifyCoderReqVO param) {
+        String type = param.getType();
+        if (Objects.isNull(DictEnum.getLabel(DictTypeEnum.SEND_SMS_TYPE.getType(), type))) {
+            throw new BusinessException("非法短信类型!");
+        }
         String phone = param.getPhone();
-        // 防重攻击
-        String messageSmsVerifyCodeKey = getMessageSmsVerifyCodeKey(phone);
+        String messageSmsVerifyCodeKey = getMessageSmsVerifyCodeKey(type, phone);
         if (Boolean.TRUE.equals(RedissonUtils.exists(messageSmsVerifyCodeKey))) {
-            throw new BusinessException("请勿频繁获取短信验证码");
+            throw new BusinessException("请勿频繁获取短信验证码");
         }
-        SckwSms sckwSms = new SckwSms();
-        sckwSms.setPhone(param.getPhone());
-        sckwSms.setTemplateCode(SmsCodeEnum.VERIFICATION_CODE);
         Map<String, Object> params = new HashMap<>();
         params.put("code", NumberUtils.createRandomVcode());
-        sckwSms.setParams(params);
-        sckwSms.setCreateBy(LoginUserHolder.getUserId());
+        SckwSms sckwSms = new SckwSms();
+        sckwSms.setPhone(param.getPhone()).setType(type).setTemplateCode(SmsCodeEnum.VERIFICATION_CODE)
+                .setParams(params).setCreateBy(LoginUserHolder.getUserId());
         streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
     }
 
-    private String getMessageSmsVerifyCodeKey(String phone) {
-        return String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, phone);
+    private String getMessageSmsVerifyCodeKey(String type, String phone) {
+        return String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_VALUE_KEY, type, phone);
     }
 }

+ 6 - 7
sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml

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

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

@@ -5,7 +5,7 @@ import com.sckw.order.model.KwoTradeOrderContract;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
- * @desc: TODO
+ * @desc: 订单合同mapper
  * @author: yzc
  * @date: 2023-07-13 9:49
  */

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderCheckDTO.java

@@ -53,5 +53,10 @@ public class OrderCheckDTO {
      */
     private Long supplyTopEntId;
 
+    /**
+     * 订单来源 1采购下单2代客下单
+     */
+    private String orderSource;
+
 
 }

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TransportDemandExport.java

@@ -9,7 +9,7 @@ import java.io.Serial;
 import java.io.Serializable;
 
 /**
- * @desc: TODO
+ * @desc: 运需导出对象
  * @author: yzc
  * @date: 2023-07-26 10:14
  */

+ 4 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java

@@ -2,6 +2,7 @@ package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.Valid;
+import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
@@ -25,12 +26,15 @@ public class AcceptanceOrderParam {
     private Long id;
 
     @NotNull(message = "订单总量不能为空")
+    @DecimalMin(value = "0.00",message = "订单总量最小为零")
     private BigDecimal amount;
 
     @NotNull(message = "订单成交单价不能为空")
+    @DecimalMin(value = "0.00",message = "订单成交单价最小为零")
     private BigDecimal unitPrice;
 
     @NotNull(message = "订单金额不能为空")
+    @DecimalMin(value = "0.00",message = "订单金额最小为零")
     private BigDecimal price;
 
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfo.java

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.Pattern;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
 
 /**
  * @desc: 地址信息
@@ -21,6 +22,7 @@ public class AddressInfo {
      * 地址类型(1装货地址、2卸货地址)
      */
     @NotNull(message = "地址类型不能为空")
+    @Range(min = 1, max = 2, message ="非法地址类型")
     private String addressType;
 
     /**

+ 2 - 5
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/BatchDeleteParam.java

@@ -4,6 +4,7 @@ import jakarta.validation.constraints.*;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
 
 /**
  * @desc: 批量删除请求参数
@@ -18,11 +19,7 @@ public class BatchDeleteParam {
     @NotBlank(message = "订单ids不能为空")
     private String ids;
 
-    /**
-     * 订单类型(1采购订单、2销售订单)
-     */
-    @Min(value = 1, message = "非法订单类型")
-    @Max(value = 2, message = "非法订单类型")
     @NotNull(message = "订单类型不能为空")
+    @Range(min = 1, max = 2, message = "非法订单类型")
     private Integer orderType;
 }

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/CompleteOrderParam.java

@@ -1,6 +1,6 @@
 package com.sckw.order.model.vo.req;
 
-import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
@@ -23,7 +23,7 @@ public class CompleteOrderParam {
     private Long id;
 
     @NotNull(message = "实际交付量不能为空")
-    @Min(value = 0, message = "实际交付量不能为负数")
+    @DecimalMin(value = "0.00",message = "实际交付量最小为零")
     private BigDecimal actualAmount;
 
     /**

+ 0 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java

@@ -64,7 +64,6 @@ public class GoodsInfo {
     /**
      * 价格段id
      */
-    @NotNull(message = "价格段id不能为空")
     private Long priceRangeId;
 
     /**

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java

@@ -40,12 +40,12 @@ public class PurchaseOrderDraftParam {
     /**
      * 单位信息
      */
-    @Size(min = 2, max = 2, message = "单位信息只能有两条")
+    @Size(max = 2, message = "单位信息最多有两条")
     private List<UnitInfo> unitInfo;
     /**
      * 地址信息
      */
-    @Size(min = 2, max = 2, message = "地址信息只能有两条")
+    @Size(max = 2, message = "地址信息最多有两条")
     private List<AddressInfo> addressInfo;
     /**
      * 开始时间

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderParam.java

@@ -46,14 +46,14 @@ public class PurchaseOrderParam {
      * 单位信息
      */
     @NotEmpty(message = "单位信息不能为空")
-    @Size(min = 2, max = 2, message = "单位信息只能有两条")
+    @Size(min = 2, max = 2, message = "采购或供应单位信息缺失")
     @Valid
     private List<UnitInfo> unitInfo;
     /**
      * 地址信息
      */
     @NotEmpty(message = "地址信息不能为空")
-    @Size(min = 2, max = 2, message = "地址信息只能有两条")
+    @Size(min = 2, max = 2, message = "装货或卸货地址信息缺失")
     @Valid
     private List<AddressInfo> addressInfo;
     /**

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UnitInfo.java

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.Pattern;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
 
 /**
  * @desc: 单位信息
@@ -21,6 +22,7 @@ public class UnitInfo {
      * 单位类型(1销售单位、2采购单位)
      */
     @NotNull(message = "单位类型不能为空")
+    @Range(min = 1, max = 2, message = "非法单位类型")
     private String unitType;
 
     /**

+ 3 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java

@@ -29,7 +29,7 @@ public class UpdateOrderParam {
      * 操作类型0保存、1提交
      */
     @NotNull(message = "操作类型不能为空")
-    @Range(min = 1, max = 2, message = "非法订单类型")
+    @Range(min = 0, max = 1, message = "非法操作类型")
     private Integer operateType;
 
     /**
@@ -67,12 +67,12 @@ public class UpdateOrderParam {
     /**
      * 单位信息
      */
-    @Size(max = 2, message = "单位信息只能有两条")
+    @Size(max = 2, message = "单位信息最多有两条")
     private List<UnitInfo> unitInfo;
     /**
      * 地址信息
      */
-    @Size(max = 2, message = "地址信息只能有两条")
+    @Size(max = 2, message = "地址信息最多有两条")
     private List<AddressInfo> addressInfo;
 
     /**

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportDemandListRes.java

@@ -12,7 +12,7 @@ import java.time.LocalDate;
 import java.util.Date;
 
 /**
- * @desc: TODO
+ * @desc: 运需列表响应对象
  * @author: yzc
  * @date: 2023-07-26 13:35
  */

+ 24 - 8
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -128,8 +128,12 @@ public class KwoTradeOrderService {
             List<Long> entIds = unitInfos.stream().map(UnitInfo::getEntId).distinct().toList();
             Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
             unitInfos.forEach(e -> {
+                EntCacheResDto ent = entMap.get(e.getEntId());
+                if (Objects.isNull(ent)) {
+                    throw new BusinessException("企业:" + e.getFirmName() + "的一级企业信息不存在!");
+                }
                 KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
-                unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(entMap.get(e.getEntId()).getId());
+                unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(ent.getId());
                 list.add(unit);
                 if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
                     order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName())
@@ -223,9 +227,14 @@ public class KwoTradeOrderService {
      * @return: void
      */
     public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
+        GoodsInfo goodsInfo = param.getGoodsInfo();
+        if (Objects.isNull(goodsInfo.getPriceRangeId())) {
+            throw new BusinessException("采购下单价格梯度信息不能为空!");
+        }
         OrderCheckDTO orderCheckDTO = BeanUtils.copyProperties(param, OrderCheckDTO.class);
         getTopEnt(orderCheckDTO, param.getUnitInfo());
-        orderCheckDTO.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
+        orderCheckDTO.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
+                .setOrderSource(DictEnum.TORDER_SOURCE_1.getValue());
         orderCheck(orderCheckDTO, false);
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
@@ -252,6 +261,11 @@ public class KwoTradeOrderService {
         List<Long> entIds = unitInfo.stream().map(UnitInfo::getEntId).toList();
         Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
         unitInfo.forEach(e -> {
+            EntCacheResDto ent = entMap.get(e.getEntId());
+            if (Objects.isNull(ent)) {
+                log.error("企业:{}找不到对应一级企业信息", e.getEntId());
+                throw new BusinessException("一级企业信息不存在!");
+            }
             if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
                 orderCheckDTO.setProcureTopEntId(entMap.get(e.getEntId()).getId());
             } else {
@@ -283,11 +297,11 @@ public class KwoTradeOrderService {
             throw new BusinessException("商品库存不足,请联系供应方!");
         }
         BigDecimal advancePrice = goods.getAdvancePrice().multiply(new BigDecimal("10000"));
-        //受理订单不校验预付款限额
-        if (!isAcceptanceOrder && trading.startsWith("0") && price.compareTo(advancePrice) < 0) {
+        //直接采购下单才校验预付款限额
+        if (Objects.equals(param.getOrderSource(), DictEnum.TORDER_SOURCE_1.getValue()) && trading.startsWith("1") && price.compareTo(advancePrice) < 0) {
             throw new BusinessException("您的订单总额未达到预付限额,请确认");
         }
-        if (trading.startsWith("0")) {
+        if (trading.startsWith("1")) {
             R<List<WalletDto>> wallet = payCenterDubboService.wallet(param.getProcureTopEntId(), ChannelEnum.getByCode(trading), param.getSupplyTopEntId());
             if (Objects.isNull(wallet) || Objects.equals(wallet.getCode(), 0)) {
                 throw new BusinessException("校验预付钱包异常,请联系管理员!");
@@ -297,7 +311,7 @@ public class KwoTradeOrderService {
                 throw new BusinessException("检测尚未创建对应预付款清单,请先创建!");
             }
             long money = data.get(0).getMoney();
-            if (money < advancePrice.multiply(new BigDecimal("10000")).longValueExact()) {
+            if (money < advancePrice.multiply(new BigDecimal("100")).longValueExact()) {
                 throw new BusinessException("您的预付清单可用余额不足,请先充值!");
             }
         }
@@ -314,7 +328,8 @@ public class KwoTradeOrderService {
     public void addValetOrderSubmit(ValetOrderParam param) {
         OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
         getTopEnt(orderCheck, param.getUnitInfo());
-        orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
+        orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
+                .setOrderSource(DictEnum.TORDER_SOURCE_2.getValue());
         orderCheck(orderCheck, false);
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
@@ -450,7 +465,8 @@ public class KwoTradeOrderService {
             }
             OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
             getTopEnt(orderCheck, param.getUnitInfo());
-            orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
+            orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
+                    .setOrderSource(source);
             orderCheck(orderCheck, false);
             //扣减库存
             HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());

+ 3 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java

@@ -254,6 +254,9 @@ public class KwoTransportDemandService {
         List<KwoTransportDemand> demands = kwoTransportDemandMapper.selectList(wrapper);
         Map<Integer, List<KwoTransportDemand>> map = demands.stream().collect(Collectors.groupingBy(KwoTransportDemand::getStatus));
         List<TableTop> tableTops = new ArrayList<>();
+        TableTop all = new TableTop();
+        all.setName("全部").setTotal(CollectionUtils.isEmpty(demands) ? 0 : demands.size());
+        tableTops.add(all);
         List<DictEnum> enums = DictEnum.getEnumsByType(DictTypeEnum.TRANSPORT_DEMAND_STATUS.getType());
         enums.forEach(e -> {
             Integer value = Integer.valueOf(e.getValue());

+ 171 - 0
sckw-modules/sckw-order/src/main/resources/bootstrap-local.yml

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

+ 6 - 7
sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml

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

+ 23 - 21
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerLogisticsController.java

@@ -1,9 +1,9 @@
 package com.sckw.payment.controller;
 
-import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.constant.LogisticsUnitType;
 import com.sckw.payment.model.dto.ILedger;
 import com.sckw.payment.model.vo.req.*;
 import com.sckw.payment.model.vo.res.LedgerLogisticsVo;
@@ -29,34 +29,25 @@ public class KwpLedgerLogisticsController {
     @Resource
     private KwpLedgerLogisticsService kwpLedgerLogisticsService;
 
-    private void fill(LogisticsSendReq logisticsSendReq) {
-        if (CollectionUtils.isEmpty(logisticsSendReq.getIdList())) {
-            throw new BusinessException("物流订单不能为空");
-        }
-        logisticsSendReq.setOrders(logisticsSendReq.getIdList());
-    }
-
     /**
-     * 物流对账单-发起对账(保存草稿)
+     * 物流对账单-发起对账(保存草稿)(承运方)
      *
      * @param logisticsReq
      * @return
      */
     @PostMapping("sendDraft")
     public HttpResult sendDraft(@RequestBody @Valid LogisticsSendReq logisticsReq) {
-        fill(logisticsReq);
         return HttpResult.ok(kwpLedgerLogisticsService.sendLedgerDraft(logisticsReq));
     }
 
     /**
-     * 物流对账单-发起对账
+     * 物流对账单-发起对账(承运方)
      *
      * @param logisticsReq
      * @return
      */
     @PostMapping("send")
     public HttpResult send(@RequestBody @Valid LogisticsSendReq logisticsReq) {
-        fill(logisticsReq);
         return HttpResult.ok(kwpLedgerLogisticsService.sendLedger(logisticsReq));
     }
 
@@ -72,7 +63,7 @@ public class KwpLedgerLogisticsController {
     }
 
     /**
-     * 承运方物流对账单列表查询
+     * 承运方物流对账单列表查询(物流公司、收钱方)
      *
      * @param logisticsReq
      * @return
@@ -83,18 +74,29 @@ public class KwpLedgerLogisticsController {
     }
 
     /**
-     * 查询物流对账单详情
+     * 承运方-查询物流对账单详情
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("queryCarrierDetail")
+    public HttpResult queryCarrierDetail(@RequestParam("id") String id) {
+        return HttpResult.ok(kwpLedgerLogisticsService.queryDetail(Long.valueOf(id), LogisticsUnitType.SHIPPER));
+    }
+
+    /**
+     * 托运方-查询物流对账单详情
      *
      * @param id
      * @return
      */
-    @GetMapping("queryDetail")
+    @GetMapping("queryShipperDetail")
     public HttpResult queryDetail(@RequestParam("id") String id) {
-        return HttpResult.ok(kwpLedgerLogisticsService.queryDetail(Long.valueOf(id)));
+        return HttpResult.ok(kwpLedgerLogisticsService.queryDetail(Long.valueOf(id), LogisticsUnitType.CARRIER));
     }
 
     /**
-     * 修改物流对账单详情(修改物流对账单接口使用)
+     * 修改物流对账单详情(修改物流对账单接口使用) 仅发起对账方支持修改
      *
      * @param id
      * @return
@@ -110,8 +112,8 @@ public class KwpLedgerLogisticsController {
      * @return
      */
     @GetMapping("shipperCount")
-    public HttpResult shipperCount() {
-        return HttpResult.ok(kwpLedgerLogisticsService.orderCount(1));
+    public HttpResult shipperCount(@Valid LogisticsReq logisticsReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.orderCount(logisticsReq, 1));
     }
 
     /**
@@ -120,8 +122,8 @@ public class KwpLedgerLogisticsController {
      * @return
      */
     @GetMapping("carrierCount")
-    public HttpResult carrierCount() {
-        return HttpResult.ok(kwpLedgerLogisticsService.orderCount(2));
+    public HttpResult carrierCount(@Valid LogisticsReq logisticsReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.orderCount(logisticsReq, 2));
     }
 
     /**

+ 15 - 14
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerTradeController.java

@@ -1,9 +1,9 @@
 package com.sckw.payment.controller;
 
-import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.constant.TradeUnitType;
 import com.sckw.payment.model.dto.ILedger;
 import com.sckw.payment.model.vo.req.*;
 import com.sckw.payment.model.vo.res.LedgerTradeVo;
@@ -32,12 +32,6 @@ public class KwpLedgerTradeController {
     @Resource
     private KwpLedgerTradeService kwpLedgerTradeService;
 
-    private void fill(TradeSendReq tradeSendReq) {
-        if (CollectionUtils.isEmpty(tradeSendReq.getIdList())) {
-            throw new BusinessException("销售订单不能为空");
-        }
-        tradeSendReq.setOrders(tradeSendReq.getIdList());
-    }
 
     /**
      * 贸易对账单-发起对账(保存草稿)
@@ -47,7 +41,6 @@ public class KwpLedgerTradeController {
      */
     @PostMapping("sendDraft")
     public HttpResult sendDraft(@RequestBody @Valid TradeSendReq tradeSendReq) {
-        fill(tradeSendReq);
         return HttpResult.ok(kwpLedgerTradeService.sendLedgerDraft(tradeSendReq));
     }
 
@@ -59,7 +52,6 @@ public class KwpLedgerTradeController {
      */
     @PostMapping("send")
     public HttpResult send(@RequestBody @Valid TradeSendReq tradeSendReq) {
-        fill(tradeSendReq);
         return HttpResult.ok(kwpLedgerTradeService.sendLedger(tradeSendReq));
     }
 
@@ -86,16 +78,25 @@ public class KwpLedgerTradeController {
     }
 
     /**
-     * 查询贸易对账单详情
+     * 销售-查询贸易对账单详情
      *
      * @param id
      * @return
      */
-    @GetMapping("queryDetail")
-    public HttpResult queryDetail(@RequestParam("id") String id) {
-        return HttpResult.ok(kwpLedgerTradeService.queryDetail(Long.valueOf(id)));
+    @GetMapping("querySellDetail")
+    public HttpResult querySellDetail(@RequestParam("id") String id) {
+        return HttpResult.ok(kwpLedgerTradeService.queryDetail(Long.valueOf(id), TradeUnitType.PURCHASE));
+    }
+    /**
+     * 采购-查询贸易对账单详情
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("queryPurchaseDetail")
+    public HttpResult queryPurchaseDetail(@RequestParam("id") String id) {
+        return HttpResult.ok(kwpLedgerTradeService.queryDetail(Long.valueOf(id),TradeUnitType.SELL));
     }
-
     /**
      * 修改贸易对账单详情(修改物流对账单接口使用)
      *

+ 0 - 13
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementLogisticsTrackController.java

@@ -1,13 +0,0 @@
-package com.sckw.payment.controller;
-import org.springframework.web.bind.annotation.*;
-
-/**
-* 结算-物流订单-状态信息
-*
-* @author xucaiqin
-*/
-@RestController
-@RequestMapping("/kwp_settlement_logistics_track")
-public class KwpSettlementLogisticsTrackController {
-    
-}

+ 21 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementOfflineController.java

@@ -2,6 +2,8 @@ package com.sckw.payment.controller;
 
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.model.vo.req.OfflinePaymentReq;
+import com.sckw.payment.model.constant.SettlementOrderTypeEnum;
+import com.sckw.payment.model.vo.req.SettlementOfflinePayReq;
 import com.sckw.payment.model.vo.req.SettlementOfflineReq;
 import com.sckw.payment.service.KwpSettlementOfflineService;
 import jakarta.annotation.Resource;
@@ -41,14 +43,31 @@ public class KwpSettlementOfflineController {
 
     //  =========  销售收款  =========
 
-    @PostMapping(name = "交易-线下付款(销售收款)记录-列表", path = "pageListTradeCollection")
-    public HttpResult pageListTradeCollection(@RequestBody @Valid SettlementOfflineReq settlementOfflineReq) {
+    /**
+     * 销售方-线下付款记录
+     *
+     * @param settlementOfflineReq
+     * @return
+     */
+    @GetMapping(name = "交易-线下付款(销售收款)记录-列表", path = "pageListTrade")
+    public HttpResult pageListTradeCollection(@Valid SettlementOfflineReq settlementOfflineReq) {
+        settlementOfflineReq.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
         return HttpResult.ok(kwpSettlementOfflineService.pageListTradeCollection(settlementOfflineReq));
     }
 
     @GetMapping(name = "交易-线下付款(销售收款)记录-新增", path = "confirmTradeCollection")
     public HttpResult confirmTradeCollection(@RequestParam("id") Long id, @RequestParam("price") Float price) {
         return HttpResult.ok(kwpSettlementOfflineService.confirmTradeCollection(id, price));
+    /**
+     * 销售收款-收款确认-线下付款
+     *
+     * @param payReq
+     * @return
+     */
+    @PostMapping(name = "销售收款-收款确认-线下付款", path = "confirmTradeCollection")
+    public HttpResult confirmTradeCollection(@Valid @RequestBody SettlementOfflinePayReq payReq) {
+        payReq.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
+        return HttpResult.ok(kwpSettlementOfflineService.confirmTradeCollection(payReq));
     }
 
 }

+ 78 - 21
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementTradeController.java

@@ -3,8 +3,9 @@ package com.sckw.payment.controller;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
-import com.sckw.payment.model.dto.SettlementTradeDto;
-import com.sckw.payment.model.vo.req.SettlementReq;
+import com.sckw.payment.model.constant.TradeUnitType;
+import com.sckw.payment.model.dto.ISettlement;
+import com.sckw.payment.model.vo.req.SettlementTradeReq;
 import com.sckw.payment.model.vo.res.SettlementLogisticsVo;
 import com.sckw.payment.service.KwpSettlementTradeService;
 import jakarta.annotation.Resource;
@@ -30,24 +31,52 @@ public class KwpSettlementTradeController {
     private KwpSettlementTradeService kwpSettlementTradeService;
 
     //   ========= 收款 销售 =========
-    @PostMapping(name = "收款-销售结算单列表", path = "pageListCollection")
-    public HttpResult pageListCollection(@RequestBody @Valid SettlementReq settlementReq) {
+
+    /**
+     * 销售分页列表
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-销售结算单列表", path = "pageSellList")
+    public HttpResult pageListCollection(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
         return HttpResult.ok(kwpSettlementTradeService.pageListCollection(settlementReq));
     }
 
-    @GetMapping(name = "收款-销售结算单列表头部汇总数量", path = "getCountListCollection")
-    public HttpResult getCountListCollection(@RequestBody @Valid SettlementReq settlementReq) {
+    /**
+     * 待结算、部分结算、全部结算
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表头统计数量", path = "getSellCount")
+    public HttpResult getCount(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
+        return HttpResult.ok(kwpSettlementTradeService.getCount(settlementReq));
+    }
+
+    /**
+     * 表尾金额结算数据
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表尾金额结算数据", path = "getSellSum")
+    public HttpResult getSellSum(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
         return HttpResult.ok(kwpSettlementTradeService.getCountListCollection(settlementReq));
     }
 
     @PostMapping(name = "收款-根据ids导出销售结算单列表", path = "exportCollection")
-    public HttpResult exportCollection(HttpServletResponse response, @RequestBody @Valid SettlementReq settlementReq) {
-        List<SettlementTradeDto> list;
+    public HttpResult exportCollection(HttpServletResponse response, @RequestBody @Valid SettlementTradeReq settlementReq) {
+        List<ISettlement> list;
+        settlementReq.setUnitType(TradeUnitType.PURCHASE);
         if (CollectionUtils.isEmpty(settlementReq.getIdList())) {
-            PageRes<SettlementTradeDto> pageResult = kwpSettlementTradeService.pageListCollection(settlementReq);
+            PageRes<ISettlement> pageResult = kwpSettlementTradeService.pageListCollection(settlementReq);
             list = pageResult.getList();
         } else {
-            list = kwpSettlementTradeService.selectList(settlementReq.getIdList());
+            list = kwpSettlementTradeService.selectList(settlementReq.getIdList(),TradeUnitType.PURCHASE);
         }
         return this.export(response, list);
     }
@@ -59,24 +88,52 @@ public class KwpSettlementTradeController {
 
 
     //   ========= 付款 采购 =========
-    @PostMapping(name = "付款-采购结算单列表", path = "pageListPayment")
-    public HttpResult pageListPayment(@RequestBody @Valid SettlementReq settlementReq) {
-        return HttpResult.ok(kwpSettlementTradeService.pageListPayment(settlementReq));
+
+    /**
+     * 采购分页列表
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "付款-采购结算单列表", path = "pagePurchaseList")
+    public HttpResult pageListPayment(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        return HttpResult.ok(kwpSettlementTradeService.pageListCollection(settlementReq));
     }
 
-    @GetMapping(name = "收款-物流结算订单列表头部汇总数量", path = "getCountListPayment")
-    public HttpResult getCountListPayment(@RequestBody @Valid SettlementReq settlementReq) {
-        return HttpResult.ok(kwpSettlementTradeService.getCountListPayment(settlementReq));
+    /**
+     * 待结算、部分结算、全部结算
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-表头统计数量", path = "getPurchaseCount")
+    public HttpResult getPurchaseCount(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        return HttpResult.ok(kwpSettlementTradeService.getCount(settlementReq));
+    }
+
+    /**
+     * 表尾金额结算数据
+     *
+     * @param settlementReq
+     * @return
+     */
+    @PostMapping(name = "收款-物流结算订单列表头部汇总数量", path = "getPurchaseSum")
+    public HttpResult getCountListPayment(@RequestBody @Valid SettlementTradeReq settlementReq) {
+        settlementReq.setUnitType(TradeUnitType.SELL);
+        return HttpResult.ok(kwpSettlementTradeService.getCountListCollection(settlementReq));
     }
 
     @PostMapping(name = "付款-根据ids导出采购结算单列表", path = "exportPayment")
-    public HttpResult exportPayment(HttpServletResponse response, @RequestBody @Valid SettlementReq settlementReq) {
-        List<SettlementTradeDto> list;
+    public HttpResult exportPayment(HttpServletResponse response, @RequestBody @Valid SettlementTradeReq settlementReq) {
+        List<ISettlement> list;
+        settlementReq.setUnitType(TradeUnitType.SELL);
         if (CollectionUtils.isEmpty(settlementReq.getIdList())) {
-            PageRes<SettlementTradeDto> pageResult = kwpSettlementTradeService.pageListPayment(settlementReq);
+            PageRes<ISettlement> pageResult = kwpSettlementTradeService.pageListCollection(settlementReq);
             list = pageResult.getList();
         } else {
-            list = kwpSettlementTradeService.selectList(settlementReq.getIdList());
+            list = kwpSettlementTradeService.selectList(settlementReq.getIdList(),TradeUnitType.SELL);
         }
         return this.export(response, list);
     }
@@ -92,7 +149,7 @@ public class KwpSettlementTradeController {
      * @author Aick Spt
      * @date 2023-07-24 15:49
      */
-    private HttpResult export(HttpServletResponse response, List<SettlementTradeDto> list) {
+    private HttpResult export(HttpServletResponse response, List<ISettlement> list) {
         if (CollectionUtils.isEmpty(list)) {
             return HttpResult.error("没有可导出的数据");
         }

+ 0 - 13
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementTradeTrackController.java

@@ -1,13 +0,0 @@
-package com.sckw.payment.controller;
-import org.springframework.web.bind.annotation.*;
-
-/**
-* 结算-交易订单-状态信息
-*
-* @author xucaiqin
-*/
-@RestController
-@RequestMapping("/kwp_settlement_trade_track")
-public class KwpSettlementTradeTrackController {
-    
-}

+ 29 - 7
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementWalletController.java

@@ -1,6 +1,8 @@
 package com.sckw.payment.controller;
 
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.payment.model.constant.SettlementOrderTypeEnum;
+import com.sckw.payment.model.constant.SettlementWalletPayTypeEnum;
 import com.sckw.payment.model.vo.req.OfflinePaymentReq;
 import com.sckw.payment.model.vo.req.SettlementWalletReq;
 import com.sckw.payment.service.KwpSettlementWalletService;
@@ -43,14 +45,25 @@ public class KwpSettlementWalletController {
     }
 
 
-
     //  =========  销售收付款  =========
-    @PostMapping(name = "销售-付款记录列表(采购电子钱包结算记录)", path = "pageListTradePayment")
-    public HttpResult pageListTradePayment(SettlementWalletReq settlementWalletReq) {
-        return HttpResult.ok(kwpSettlementWalletService.pageListTradePayment(settlementWalletReq));
+
+    /**
+     * 采购付款记录-货到付款查询列表
+     *
+     * @param settlementWalletReq
+     * @return
+     */
+    @GetMapping(name = "销售-付款记录列表(采购电子钱包结算记录)", path = "pageListTradePayment")
+    public HttpResult pageListTradePayment(@Valid SettlementWalletReq settlementWalletReq) {
+        settlementWalletReq.setPayType(SettlementWalletPayTypeEnum.CASH_ON_DELIVERY.getStatus());
+        settlementWalletReq.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
+        return HttpResult.ok(kwpSettlementWalletService.pageList(settlementWalletReq));
     }
 
     /**
+     * 采购-货到付款
+     * @param id    结算单id
+     * @param price 本次付款金额
      * @author Aick Spt
      * @date 2023-07-25 09:55
      */
@@ -59,12 +72,21 @@ public class KwpSettlementWalletController {
         return HttpResult.ok(kwpSettlementWalletService.confirmTradePayment(offlinePaymentReq));
     }
 
-    @PostMapping(name = "销售-收款记录列表-预付款(电子钱包)", path = "pageListTradeCollection")
-    public HttpResult pageListTradeCollection(SettlementWalletReq settlementWalletReq) {
-        return HttpResult.ok(kwpSettlementWalletService.pageListTradeCollection(settlementWalletReq));
+    /**
+     * 销售收款记录-预付款查询列表
+     *
+     * @param settlementWalletReq
+     * @return
+     */
+    @GetMapping(name = "销售-收款记录列表-预付款(电子钱包)", path = "pageListTradeCollection")
+    public HttpResult pageListTradeCollection(@Valid SettlementWalletReq settlementWalletReq) {
+        settlementWalletReq.setPayType(SettlementWalletPayTypeEnum.ADVANCE_PAYMENT.getStatus());
+        settlementWalletReq.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
+        return HttpResult.ok(kwpSettlementWalletService.pageList(settlementWalletReq));
     }
 
     /**
+     * 销售-预付款
      * @param id    结算单id
      * @param price 本次付款金额
      * @author Aick Spt

+ 3 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsMapper.java

@@ -29,16 +29,16 @@ public interface KwpLedgerLogisticsMapper extends BaseMapper<KwpLedgerLogistics>
     List<LedgerShipperDto> shipperSelect(@Param("logisticsReq") LogisticsReq logisticsReq);
 
     /**
-     * 承运方
+     * 承运方 对账发起方,客户公司是托运方
      *
      * @param logisticsReq
      * @return
      */
     List<LedgerCarrierDto> carrierSelect(@Param("logisticsReq") LogisticsReq logisticsReq);
 
-    Map<String, Long> countOrder(@Param("entId") Long entId, @Param("unitType") Integer unitType);
+    Map<String, Long> countOrder(@Param("logisticsReq") LogisticsReq logisticsReq, @Param("unitType") Integer unitType);
 
-    LedgerLogisticsDto selectId(@Param("id") Long id);
+    LedgerLogisticsDto selectId(@Param("id") Long id, @Param("unitType") Integer unitType);
 
 
     List<LedgerShipperDto> selectShipperIds(@Param("ids") List<Long> ids);

+ 1 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeMapper.java

@@ -19,7 +19,6 @@ import java.util.Map;
 
 @Mapper
 public interface KwpLedgerTradeMapper extends BaseMapper<KwpLedgerTrade> {
-    List<LedgerTradeDto> pageSelect(@Param("tradeReq") TradeReq tradeReq);
 
     List<LedgerSellDto> sellList(@Param("tradeReq") TradeReq tradeReq);
 
@@ -27,7 +26,7 @@ public interface KwpLedgerTradeMapper extends BaseMapper<KwpLedgerTrade> {
 
     Map<String, Long> countOrder(@Param("entId") Long entId, @Param("unitType") Integer unitType);
 
-    LedgerTradeDto selectId(@Param("id") Long id);
+    LedgerTradeDto selectId(@Param("id") Long id, @Param("unitType") Integer unitType);
 
     List<LedgerSellDto> selectSellIds(@Param("ids") List<Long> ids);
 

+ 3 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementOfflineMapper.java

@@ -20,5 +20,7 @@ public interface KwpSettlementOfflineMapper extends BaseMapper<KwpSettlementOffl
 
     SettlementOfflineDto detailLogisticsCollection(@Param("id") Long id);
 
-    Integer confirmLogisticsCollection(@Param("id") Long id,@Param("price") Float price);
+    Integer confirmLogisticsCollection(@Param("id") Long id, @Param("price") Float price);
+
+    List<SettlementOfflineDto> pageList(@Param("offlineReq") SettlementOfflineReq settlementOfflineReq);
 }

+ 15 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementTradeMapper.java

@@ -2,7 +2,14 @@ package com.sckw.payment.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpSettlementTrade;
+import com.sckw.payment.model.dto.SettlementTradeDto;
+import com.sckw.payment.model.vo.req.SettlementTradeReq;
+import com.sckw.payment.model.vo.res.SettlementLogisticsStatusCountVo;
+import com.sckw.payment.model.vo.res.SettlementSumVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author xucaiqin
@@ -11,4 +18,12 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface KwpSettlementTradeMapper extends BaseMapper<KwpSettlementTrade> {
+    List<SettlementTradeDto> pageSelect(@Param("settlementReq") SettlementTradeReq settlementReq);
+
+    SettlementSumVo sumMoney(@Param("settlementReq")SettlementTradeReq settlementReq);
+
+    SettlementLogisticsStatusCountVo countOrder(@Param("settlementReq")SettlementTradeReq settlementReq);
+
+    List<SettlementTradeDto> selectByIds(@Param("ids") List<Long> ids);
+    SettlementTradeDto getById(@Param("id") Long id);
 }

+ 4 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementWalletMapper.java

@@ -1,7 +1,5 @@
 package com.sckw.payment.dao;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpSettlementWallet;
 import com.sckw.payment.model.dto.SettlementWalletDto;
@@ -9,6 +7,8 @@ import com.sckw.payment.model.vo.req.SettlementWalletReq;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author Aick Spt
  * @date 2023-07-25 11:01
@@ -28,4 +28,6 @@ public interface KwpSettlementWalletMapper  extends BaseMapper<KwpSettlementWall
     SettlementWalletDto detailLogisticsPayment(@Param("id") Long id);
 
     Integer confirmLogisticsPayment(@Param("id") Long id, @Param("price") Float price);
+
+    List<SettlementWalletDto> pageList(@Param("walletReq")SettlementWalletReq walletReq);
 }

+ 2 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementOffline.java

@@ -74,10 +74,11 @@ public class KwpSettlementOffline {
     /**
      * 备注
      */
+    @TableField(value = "remark")
     private String remark;
 
     /**
-     * 状态:0正常/1锁定
+     * 状态(1正常 、2异常)
      */
     @TableField(value = "status")
     private Integer status;

+ 2 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LogisticsUnitType.java

@@ -6,11 +6,11 @@ package com.sckw.payment.model.constant;
  */
 public interface LogisticsUnitType {
     /**
-     * 托运方(客户单位)
+     * 托运方 货物的委托人或发货人,即发送货物的一方
      */
     Integer SHIPPER = 1;
     /**
-     * 承运方
+     * 承运方 发起对账的一方
      */
     Integer CARRIER = 2;
 }

+ 1 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementEnum.java

@@ -8,6 +8,7 @@ package com.sckw.payment.model.constant;
  * @date 2023-07-11 12:00:52
  */
 public enum SettlementEnum {
+    ALL(0, "全部"),
     WAITING_PAYMENT(1, "待结算"),
     PARTIAL_PAYMENT(2, "部分结算"),
     ALL_PAYMENT(3, "全部结算");

+ 60 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TradingEnum.java

@@ -0,0 +1,60 @@
+package com.sckw.payment.model.constant;
+
+import com.sckw.payment.api.model.constant.ChannelEnum;
+
+import java.util.Objects;
+
+/**
+ * 交易方式 枚举 trading_type
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum TradingEnum {
+    PRE_PAY(1, "1", "预付款"),
+    PRE_PAY_HF(11, PRE_PAY.value + ChannelEnum.HF.getValue(), "预付款-汇付"),
+    PRE_PAY_XS(12, PRE_PAY.value + ChannelEnum.XS.getValue(), "预付款-新生"),
+    PRE_PAY_ZX(13, PRE_PAY.value + ChannelEnum.ZX.getValue(), "预付款-中信"),
+    RECEIVE_PAY(2, "2", "货到付款"),
+    RECEIVE_PAY_HF(21, RECEIVE_PAY.value + ChannelEnum.HF.getValue(), "货到付款-汇付"),
+    RECEIVE_PAY_XS(22, RECEIVE_PAY.value + ChannelEnum.XS.getValue(), "货到付款-新生"),
+    RECEIVE_PAY_ZX(23, RECEIVE_PAY.value + ChannelEnum.ZX.getValue(), "货到付款-中信"),
+    OFFLINE_PAY(3, "3", "线下付款");
+
+    private final int status;
+    private final String value;//字典值
+    private final String desc;
+
+    TradingEnum(int status, String value, String desc) {
+        this.status = status;
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static String getDesc(Integer status) {
+        if (Objects.isNull(status)) {
+            return "";
+        }
+        for (TradingEnum value : values()) {
+            if (status == value.getStatus()) {
+                return value.getDesc();
+            }
+        }
+        return "";
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+
+}

+ 36 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/ISettlement.java

@@ -0,0 +1,36 @@
+package com.sckw.payment.model.dto;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.Objects;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-28 08:42:13
+ */
+public interface ISettlement {
+
+    void setTrading(Integer trading);
+
+    Integer getTrading();
+
+    void setTradingLabel(String tradingLabel);
+
+    void setStatus(Integer status);
+
+    Integer getStatus();
+
+    void setStatusLabel(String statusLabel);
+
+    private DecimalFormat df() {
+        return new DecimalFormat("0.00");
+    }
+
+    default String changePrice(BigDecimal price) {
+        if (Objects.isNull(price)) {
+            //金额为null时显示的金额
+            return "";
+        }
+        return df().format(price);
+    }
+}

+ 80 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementPurchaseDto.java

@@ -0,0 +1,80 @@
+package com.sckw.payment.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 销售结算 采购方
+ *
+ * @author xucaiqin
+ * @date 2023-07-20 12:26
+ */
+@Getter
+@Setter
+public class SettlementPurchaseDto implements ISettlement {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 结算单编号
+     */
+    private String stOrderNo;
+
+    /**
+     * 结算单名称
+     */
+    private String name;
+
+    /**
+     * 总应收/元
+     */
+    private String totalPrice;
+
+    /**
+     * 已收款/元
+     */
+    private String actualPrice;
+    /**
+     * 剩余带回款金额
+     */
+    private String waitPrice;
+
+    /**
+     * 预计收款日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date receiptTime;
+
+    /**
+     * 对账销售财务联系人名称
+     */
+    private String successUser;
+
+    /**
+     * 对账销售财务联系人电话
+     */
+    private String successPhone;
+    /**
+     * 交易方式
+     */
+    private Integer trading;
+    private String tradingLabel;
+
+    /**
+     * 状态(待回款、部分回款、全部回款、回退)
+     */
+    private Integer status;
+    private String statusLabel;
+    /**
+     * 生成时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

Some files were not shown because too many files changed in this diff