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

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

czh 2 лет назад
Родитель
Сommit
9305a61327
34 измененных файлов с 1388 добавлено и 150 удалено
  1. 4 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OkHttpUtils.java
  2. 9 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisLockKey.java
  3. 91 1
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java
  4. 5 0
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwMessage.java
  5. 5 0
      sckw-modules/sckw-payment/pom.xml
  6. 11 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WalletController.java
  7. 13 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpWalletTransferMapper.java
  8. 29 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/JumpUrlConfig.java
  9. 110 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpWalletTransfer.java
  10. 78 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/JumpEnum.java
  11. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/PayCenterEnum.java
  12. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/RefundEnum.java
  13. 52 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TransferEnum.java
  14. 8 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/IdNo.java
  15. 7 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/page/PrePayWalletPage.java
  16. 68 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/wallet/SplitDto.java
  17. 67 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/PrePayWalletVo.java
  18. 3 6
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePay.java
  19. 41 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePayAppend.java
  20. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePayCheck.java
  21. 26 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/ApPageRes.java
  22. 121 25
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  23. 10 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsTrackService.java
  24. 13 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsUnitService.java
  25. 116 21
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java
  26. 16 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeTrackService.java
  27. 18 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeUnitService.java
  28. 30 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementOfflineService.java
  29. 47 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java
  30. 138 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/MessageSender.java
  31. 61 29
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java
  32. 142 31
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java
  33. 16 21
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/task/RefundTask.java
  34. 28 0
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpWalletTransferMapper.xml

+ 4 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OkHttpUtils.java

@@ -23,15 +23,15 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.security.SecureRandom;
 import java.security.cert.X509Certificate;
-import java.util.*;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
@@ -207,6 +207,7 @@ public class OkHttpUtils {
             } else {
                 json = "{}";
             }
+            log.info("请求参数:{}", json);
             requestBody = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
         } else {
             FormBody.Builder formBody = new FormBody.Builder();

+ 9 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisLockKey.java

@@ -0,0 +1,9 @@
+package com.sckw.redis.constant;
+
+/**
+ * @author xucaiqin
+ * @date 2023-09-06 16:52:57
+ */
+public interface RedisLockKey {
+    String TRANSFER = "transfer:";
+}

+ 91 - 1
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java

@@ -203,7 +203,97 @@ public enum MessageEnum {
      */
     CARRIAGE_NEW_LOGISTICS("BUSINESS", "BUSINESS_CARRIAGE_NEW_LOGISTICS", "承运方自建物流订单",
             "【${companyName}】自建了一条与贵司合作的物流订单,请及时确认;订单号:${orderNo}", "terminal,ios,android", "托运订单-承运方自建物流订单"),
-
+    /*对账结算*/
+    /**
+     * 销售、采购对账
+     */
+    LEDGER_SELL("BUSINESS", "BUSINESS_LEDGER_SELL", "发起销售对账",
+            "贵司发起了对【${company}】的贸易对账,请留意后续消息;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_PURCHASE("BUSINESS", "BUSINESS_LEDGER_PURCHASE", "发起销售对账",
+            "【${company}】对贵司发起了贸易对账确认操作,请及时查看;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_REVOCATION_SELL("BUSINESS", "BUSINESS_LEDGER_REVOCATION_SELL", "撤回对账",
+            "贵司撤回了与【${company}】的贸易对账,请及时确认并联系往来单位;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_REVOCATION_PURCHASE("BUSINESS", "BUSINESS_LEDGER_REVOCATION_PURCHASE", "撤回对账",
+            "贵司撤回了与【${company}】的贸易对账,请及时确认并联系往来单位;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_CONFIRM_SELL("BUSINESS", "BUSINESS_LEDGER_CONFIRM_SELL", "对账申请审核通过",
+            "贵司对【${company}】发起的贸易对账申请已审核通过,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_CONFIRM_PURCHASE("BUSINESS", "BUSINESS_LEDGER_CONFIRM_PURCHASE", "对账申请审核通过",
+            "【${company}】发起的对账申请,贵司已审核通过,请确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_SUCCESS_SELL("BUSINESS", "BUSINESS_LEDGER_SUCCESS_SELL", "销售对账完成",
+            "贵司完成了与【${company}】的对账,系统生成了结算单,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_SUCCESS_PURCHASE("BUSINESS", "BUSINESS_LEDGER_SUCCESS_PURCHASE", "销售对账完成",
+            "【${company}】已完成对账流程,系统生成了结算单,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_BACK_SELL("BUSINESS", "BUSINESS_LEDGER_BACK_SELL", "付款方驳回对账申请",
+            "贵司的贸易对账申请被【${company}】驳回,请及时查看;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_BACK_PURCHASE("BUSINESS", "BUSINESS_LEDGER_BACK_PURCHASE", "付款方驳回对账申请",
+            "贵司驳回了与【${company}】的贸易对账,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    /**
+     * 承运、托运对账
+     */
+    LEDGER_CARRIER("BUSINESS", "BUSINESS_LEDGER_CARRIER", "发起销售对账",
+            "贵司发起了对【${company}】的物流对账,请留意后续消息;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_SHIPPER("BUSINESS", "BUSINESS_LEDGER_SHIPPER", "发起销售对账",
+            "【${company}】对贵司发起了物流对账确认操作,请及时查看;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_REVOCATION_CARRIER("BUSINESS", "BUSINESS_LEDGER_REVOCATION_CARRIER", "撤回对账",
+            "贵司撤回了与【${company}】的物流对账,请及时确认并联系往来单位;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_REVOCATION_SHIPPER("BUSINESS", "BUSINESS_LEDGER_REVOCATION_SHIPPER", "撤回对账",
+            "【${company}】撤回了对贵司发起的物流对账申请,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_CONFIRM_CARRIER("BUSINESS", "BUSINESS_LEDGER_CONFIRM_CARRIER", "对账申请审核通过",
+            "贵司对【${company}】发起的物流对账申请已审核通过,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_CONFIRM_SHIPPER("BUSINESS", "BUSINESS_LEDGER_CONFIRM_SHIPPER", "对账申请审核通过",
+            "【${company}】发起的对账申请,贵司已审核通过,请确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_SUCCESS_CARRIER("BUSINESS", "BUSINESS_LEDGER_SUCCESS_CARRIER", "销售对账完成",
+            "贵司完成了与【${company}】的对账,系统生成了结算单,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_SUCCESS_SHIPPER("BUSINESS", "BUSINESS_LEDGER_SUCCESS_SHIPPER", "销售对账完成",
+            "【${company}】已完成对账流程,系统生成了结算单,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    LEDGER_BACK_CARRIER("BUSINESS", "BUSINESS_LEDGER_BACK_CARRIER", "付款方驳回对账申请",
+            "贵司的物流对账申请被【${company}】驳回,请及时查看;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+    LEDGER_BACK_SHIPPER("BUSINESS", "BUSINESS_LEDGER_BACK_SHIPPER", "付款方驳回对账申请",
+            "贵司驳回了与【${company}】的物流对账,请及时确认;对账单号:${number},对账单名称:${name}", "terminal,ios,android",""),
+
+    /**
+     * 销售、采购结算
+     */
+    //确认对账
+    SETTLEMENT_SELL("BUSINESS", "SETTLEMENT_SELL", "新增销售结算任务",
+            "贵司有一条新增的结算业务,请及时查看;【${company}】;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_PURCHASE("BUSINESS", "SETTLEMENT_PURCHASE", "新增采购结算任务",
+            "贵司有一条新增的结算业务,请及时查看;【${company}】;结算单号:${number}", "terminal,ios,android",""),
+    //确认收款
+    SETTLEMENT_CONFIRM_SELL("BUSINESS", "SETTLEMENT_CONFIRM_SELL", "销售结算确认收款",
+            "贵司对一条结算单进行了确认收款操作,请及时确认;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_CONFIRM_PURCHASE("BUSINESS", "SETTLEMENT_CONFIRM_PURCHASE", "采购结算确认收款",
+            "【${company}】与贵司的一条结算业务已确认收款,请及时确认;结算单号:${number}", "terminal,ios,android",""),
+    //发起付款
+    SETTLEMENT_START_SELL("BUSINESS", "SETTLEMENT_START_SELL", "销售付款被发起",
+            "【${company}】发起了对贵司的付款操作,请及时联系付款方进行确认;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_START_PURCHASE("BUSINESS", "SETTLEMENT_START_PURCHASE", "发起采购付款",
+            "贵司已发起了对【${company}】的付款操作,请及时确认并联系收款单位;结算单号:${number}", "terminal,ios,android",""),
+
+    /**
+     * 承运、托运结算
+     */
+    //确认对账
+    SETTLEMENT_CARRIER("BUSINESS", "SETTLEMENT_CARRIER", "新增承运结算任务",
+            "贵司有一条新增的结算业务,请及时查看;【${company}】;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_SHIPPER("BUSINESS", "SETTLEMENT_SHIPPER", "新增托运结算任务",
+            "贵司有一条新增的结算业务,请及时查看;【${company}】;结算单号:${number}", "terminal,ios,android",""),
+    //确认收款
+    SETTLEMENT_CONFIRM_CARRIER("BUSINESS", "SETTLEMENT_CONFIRM_CARRIER", "承运结算确认收款",
+            "贵司对一条结算单进行了确认收款操作,请及时确认;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_CONFIRM_SHIPPER("BUSINESS", "SETTLEMENT_CONFIRM_SHIPPER", "托运结算确认收款",
+            "【${company}】与贵司的一条结算业务已确认收款,请及时确认;结算单号:${number}", "terminal,ios,android",""),
+    //发起付款
+    SETTLEMENT_START_CARRIER("BUSINESS", "SETTLEMENT_START_CARRIER", "承运付款被发起",
+            "【${company}】发起了对贵司的付款操作,请及时联系付款方进行确认;结算单号:${number}", "terminal,ios,android",""),
+    SETTLEMENT_START_SHIPPER("BUSINESS", "SETTLEMENT_START_SHIPPER", "发起托运付款",
+            "贵司已发起了对【${company}】的付款操作,请及时确认并联系收款单位;结算单号:${number}", "terminal,ios,android",""),
     ;
 
     /**

+ 5 - 0
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwMessage.java

@@ -1,5 +1,6 @@
 package com.sckw.stream.model;
 
+import com.sckw.core.utils.UUIDUtils;
 import com.sckw.stream.enums.MessageEnum;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -20,6 +21,10 @@ import java.util.Map;
 @AllArgsConstructor
 @Accessors(chain = true)
 public class SckwMessage {
+    public SckwMessage(MessageEnum messageEnum) {
+        this.messageEnum = messageEnum;
+        this.requestId = UUIDUtils.get32UUID();
+    }
 
     /**
      * 请求id

+ 5 - 0
sckw-modules/sckw-payment/pom.xml

@@ -39,6 +39,11 @@
             <artifactId>sckw-common-datasource</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-stream</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-redis</artifactId>

+ 11 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WalletController.java

@@ -1,13 +1,20 @@
 package com.sckw.payment.controller;
 
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.model.vo.req.*;
+import com.sckw.payment.service.MessageSender;
 import com.sckw.payment.service.WalletService;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.UserInfo;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+
 /**
  * 钱包
  *
@@ -17,10 +24,10 @@ import org.springframework.web.bind.annotation.*;
 @Validated
 @RestController
 @RequestMapping("/wallet")
+@Slf4j
 public class WalletController {
     @Resource
     private WalletService walletService;
-
     /**
      * 钱包总览信息
      *
@@ -92,7 +99,7 @@ public class WalletController {
      * @return
      */
     @PostMapping("transfer")
-    public HttpResult transfer(TransferReq transferReq) {
+    public HttpResult transfer(@RequestBody @Valid TransferReq transferReq) {
         return HttpResult.ok(walletService.transfer(transferReq));
     }
 
@@ -169,7 +176,7 @@ public class WalletController {
      * @return
      */
     @PostMapping("prePayAppend")
-    public HttpResult prePayAppend(@RequestBody @Valid PrePay prePay) {
+    public HttpResult prePayAppend(@RequestBody @Valid PrePayAppend prePay) {
         return HttpResult.ok(walletService.prePayAppend(prePay));
     }
 
@@ -183,6 +190,7 @@ public class WalletController {
     public HttpResult applyRefund(@RequestBody @Valid RefundReq refundReq) {
         return HttpResult.ok(walletService.applyRefund(refundReq));
     }
+
     /**
      * 退款
      *

+ 13 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpWalletTransferMapper.java

@@ -0,0 +1,13 @@
+package com.sckw.payment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpWalletTransfer;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @date 2023-09-06 16:42:08
+* @author xucaiqin
+*/
+@Mapper
+public interface KwpWalletTransferMapper extends BaseMapper<KwpWalletTransfer> {
+}

+ 29 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/JumpUrlConfig.java

@@ -0,0 +1,29 @@
+package com.sckw.payment.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @author xucaiqin
+ * @date 2023-09-06 18:58:51
+ */
+@Getter
+@Setter
+@Component
+@ConfigurationProperties(prefix = "msg")
+@RefreshScope
+public class JumpUrlConfig {
+    /**
+     * 销售收款对账
+     */
+    private Map<String, String> url = new HashMap<>();
+
+
+}

+ 110 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpWalletTransfer.java

@@ -0,0 +1,110 @@
+package com.sckw.payment.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 转账记录表
+* @date 2023-09-06 16:42:08
+* @author xucaiqin
+*/
+
+@Data
+@TableName(value = "kwp_wallet_transfer")
+public class KwpWalletTransfer {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 流水号
+     */
+    @TableField(value = "order_no")
+    private String orderNo;
+
+    /**
+     * uid
+     */
+    @TableField(value = "`uid`")
+    private String uid;
+
+    /**
+     * 企业id
+     */
+    @TableField(value = "from_ent")
+    private Long fromEnt;
+
+    /**
+     * filter
+     */
+    @TableField(value = "`filter`")
+    private String filter;
+
+    /**
+     * 企业id
+     */
+    @TableField(value = "to_ent")
+    private Long toEnt;
+
+    /**
+     * 电子钱包渠道
+     */
+    @TableField(value = "channel")
+    private String channel;
+
+    /**
+     * 转账金额
+     */
+    @TableField(value = "money")
+    private BigDecimal money;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_by")
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_by")
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    /**
+     * 0-正常 1-删除
+     */
+    @TableField(value = "del_flag")
+    private Integer delFlag;
+
+    /**
+     * 1-转帐中
+     */
+    @TableField(value = "`status`")
+    private Integer status;
+}

+ 78 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/JumpEnum.java

@@ -0,0 +1,78 @@
+package com.sckw.payment.model.constant;
+
+import com.sckw.stream.enums.MessageEnum;
+import lombok.Getter;
+
+/**
+ * 跳转地址
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+@Getter
+public enum JumpEnum {
+    LEDGER_SELL("ledgerSell", MessageEnum.LEDGER_SELL),
+    LEDGER_REVOCATION_SELL("ledgerSell", MessageEnum.LEDGER_REVOCATION_SELL),
+    LEDGER_CONFIRM_SELL("ledgerSell", MessageEnum.LEDGER_CONFIRM_SELL),
+    LEDGER_SUCCESS_SELL("ledgerSell", MessageEnum.LEDGER_SUCCESS_SELL),
+    LEDGER_BACK_SELL("ledgerSell", MessageEnum.LEDGER_BACK_SELL),
+    LEDGER_PURCHASE("ledgerPurchase", MessageEnum.LEDGER_PURCHASE),
+    LEDGER_REVOCATION_PURCHASE("ledgerPurchase", MessageEnum.LEDGER_REVOCATION_PURCHASE),
+    LEDGER_CONFIRM_PURCHASE("ledgerPurchase", MessageEnum.LEDGER_CONFIRM_PURCHASE),
+    LEDGER_SUCCESS_PURCHASE("ledgerPurchase", MessageEnum.LEDGER_SUCCESS_PURCHASE),
+    LEDGER_BACK_PURCHASE("ledgerPurchase", MessageEnum.LEDGER_BACK_PURCHASE),
+
+    LEDGER_CARRIER("ledgerCarrier", MessageEnum.LEDGER_CARRIER),
+    LEDGER_SHIPPER("ledgerShipper", MessageEnum.LEDGER_SHIPPER),
+    LEDGER_REVOCATION_CARRIER("ledgerCarrier", MessageEnum.LEDGER_REVOCATION_CARRIER),
+    LEDGER_REVOCATION_SHIPPER("ledgerShipper", MessageEnum.LEDGER_REVOCATION_SHIPPER),
+    LEDGER_CONFIRM_CARRIER("ledgerCarrier", MessageEnum.LEDGER_CONFIRM_CARRIER),
+    LEDGER_CONFIRM_SHIPPER("ledgerShipper", MessageEnum.LEDGER_CONFIRM_SHIPPER),
+    LEDGER_SUCCESS_CARRIER("ledgerCarrier", MessageEnum.LEDGER_SUCCESS_CARRIER),
+    LEDGER_SUCCESS_SHIPPER("ledgerShipper", MessageEnum.LEDGER_SUCCESS_SHIPPER),
+    LEDGER_BACK_CARRIER("ledgerCarrier", MessageEnum.LEDGER_BACK_CARRIER),
+    LEDGER_BACK_SHIPPER("ledgerShipper", MessageEnum.LEDGER_BACK_SHIPPER),
+
+    SETTLEMENT_SELL("settlementSell", MessageEnum.SETTLEMENT_SELL),
+    SETTLEMENT_PURCHASE("settlementPurchase", MessageEnum.SETTLEMENT_PURCHASE),
+    SETTLEMENT_CONFIRM_SELL("ledgerPurchase", MessageEnum.SETTLEMENT_CONFIRM_SELL),
+    SETTLEMENT_CONFIRM_PURCHASE("settlementPurchase", MessageEnum.SETTLEMENT_CONFIRM_PURCHASE),
+    SETTLEMENT_START_SELL("settlementSell", MessageEnum.SETTLEMENT_START_SELL),
+    SETTLEMENT_START_PURCHASE("settlementPurchase", MessageEnum.SETTLEMENT_START_PURCHASE),
+
+    SETTLEMENT_CARRIER("settlementCarrier", MessageEnum.SETTLEMENT_CARRIER),
+    SETTLEMENT_SHIPPER("settlementShipper", MessageEnum.SETTLEMENT_SHIPPER),
+    SETTLEMENT_CONFIRM_CARRIER("settlementCarrier", MessageEnum.SETTLEMENT_CONFIRM_CARRIER),
+    SETTLEMENT_CONFIRM_SHIPPER("settlementShipper", MessageEnum.SETTLEMENT_CONFIRM_SHIPPER),
+    SETTLEMENT_START_CARRIER("settlementCarrier", MessageEnum.SETTLEMENT_START_CARRIER),
+    SETTLEMENT_START_SHIPPER("settlementShipper", MessageEnum.SETTLEMENT_START_SHIPPER),
+    ;
+    /**
+     * nacos种配置的前端跳转url
+     */
+    private final String key;
+
+    private final MessageEnum messageEnum;
+
+
+    JumpEnum(String key, MessageEnum messageEnum) {
+        this.key = key;
+        this.messageEnum = messageEnum;
+    }
+
+    /**
+     * 通过消息枚举值,获取跳转地址key
+     *
+     * @param messageEnum
+     * @return
+     */
+    public static String getByEnum(MessageEnum messageEnum) {
+        for (JumpEnum value : JumpEnum.values()) {
+            if (value.getMessageEnum() == messageEnum) {
+                return value.getKey();
+            }
+        }
+        return "";
+    }
+
+}

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

@@ -14,7 +14,6 @@ public enum PayCenterEnum {
     MEMBER_WALLET("/v1/member/wallet", "钱包清单"),
     MEMBER_WALLET_V2("/v2/member/wallet", "钱包清单"),
     MEMBER_GENERAL("/v2/wallet/general", "总览信息"),
-
     WITHDRAW_DETAIL("/v1/wallet/withdraw/detail", "提现详情"),
     //    WITHDRAW_INDEX("/v1/wallet/withdraw/index", "提现清单"), 原接口
     WITHDRAW_INDEX("/v2/wallet/withdraw/index", "提现清单"),
@@ -43,6 +42,7 @@ public enum PayCenterEnum {
     WALLET_UNFREEZE("/v1/wallet/unfreeze", "解冻金额"),
     PAY_AGENT_PAY("/v1/pay/agent_pay", "清分"),
     PAY_AGENT_PAY_V2("/v2/pay/agent_pay", "清分"),
+    AGENT_PAY_QUERY("/v2/pay/status/query", "清分结果查询"),
     WALLET_INDEX("/v1/wallet/index", "创建钱包");
     private final String addr;
     private final String desc;

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

@@ -9,11 +9,11 @@ import java.util.Objects;
  * @date 2023-07-11 12:00:52
  */
 public enum RefundEnum {
-    ALL(0, "全部", "0"),
     APPLY(1, "申请退款", "1"),
     REFUNDING(2, "退款中", "2"),
     FAILED(3, "退款失败", "3"),
-    BACK(4, "退款驳回", "4");
+    BACK(4, "退款驳回", "4"),
+    SUCCESS(5,"退款成功","5");
 
     private final int status;
     private final String desc;

+ 52 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TransferEnum.java

@@ -0,0 +1,52 @@
+package com.sckw.payment.model.constant;
+
+import java.util.Objects;
+
+/**
+ * 转账枚举
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum TransferEnum {
+    APPLY(1, "已提交", "1"),
+    TRANSFERRING(2, "转帐中", "2"),
+    FAILED(3, "转账失败", "3"),
+    SUCCESS(4, "转账成功", "4");
+
+    private final int status;
+    private final String desc;
+    private final String label;
+
+    TransferEnum(int status, String desc, String label) {
+        this.status = status;
+        this.label = label;
+        this.desc = desc;
+    }
+
+    public static String getDesc(Integer status) {
+        if (Objects.isNull(status)) {
+            return "";
+        }
+        for (TransferEnum value : values()) {
+            if (status == value.getStatus()) {
+                return value.getDesc();
+            }
+        }
+        return "";
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+
+    public String getDesc() {
+        return desc;
+    }
+
+}

+ 8 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/IdNo.java

@@ -0,0 +1,8 @@
+package com.sckw.payment.model.dto;
+
+/**
+ * @param id 对账单id
+ * @param no 对账单编号
+ */
+public record IdNo(Long id, String no) {
+}

+ 7 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/page/PrePayWalletPage.java

@@ -1,5 +1,6 @@
 package com.sckw.payment.model.dto.page;
 
+import com.alibaba.fastjson2.annotation.JSONField;
 import com.sckw.payment.model.dto.common.Page;
 import com.sckw.payment.model.dto.wallet.PrePayWallet;
 import lombok.Getter;
@@ -16,4 +17,10 @@ import java.io.Serial;
 public class PrePayWalletPage extends Page<PrePayWallet> {
     @Serial
     private static final long serialVersionUID = 8374847700935135347L;
+    @JSONField(name = "ap_money")
+    private long apMoney;
+    @JSONField(name = "using_ap_money")
+    private long usingApMoney;
+    @JSONField(name = "total_ap_money")
+    private long totalApMoney;
 }

+ 68 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/wallet/SplitDto.java

@@ -0,0 +1,68 @@
+package com.sckw.payment.model.dto.wallet;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class SplitDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -2392867380336186963L;
+    /**
+     * 支付方UID
+     */
+    @JSONField(name = "uid")
+    private String uid;
+    /**
+     * 清分收款方UID
+     */
+    @JSONField(name = "recv_uid")
+    private String recvUid;
+
+    /**
+     * 清分金额
+     */
+    @JSONField(name = "money")
+    private int money;
+    /**
+     * 记录时间
+     */
+    @JSONField(name = "create_time")
+    private String createTime;
+    /**
+     * 业务号
+     */
+    @JSONField(name = "business_no")
+    private String businessNo;
+    /**
+     * 支付通道
+     */
+    @JSONField(name = "channel")
+    private String channel;
+
+    @JSONField(name = "ap_no")
+    private Object apNo;
+    /**
+     * 清分单号
+     */
+    @JSONField(name = "sub_no")
+    private String subNo;
+    /**
+     * 完成时间
+     */
+    @JSONField(name = "finish_time")
+    private String finishTime;
+    /**
+     * 1-成功 2-等待分账 3-分帐中
+     */
+    @JSONField(name = "status")
+    private int status;
+
+    @JSONField(name = "status_label")
+    private String statusLabel;
+
+}

+ 67 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/PrePayWalletVo.java

@@ -0,0 +1,67 @@
+package com.sckw.payment.model.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 预付预收数据
+ */
+@Getter
+@Setter
+public class PrePayWalletVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7340075510663637767L;
+    /**
+     * 预付时,代表付款人
+     * 预收时,代表收款人
+     */
+    @JSONField(name = "uid")
+    private String uid;
+    /**
+     * 预付时,代表收款人
+     * 预收时,代表付款人
+     */
+    @JSONField(name = "filter")
+    private String filter;
+
+    @JSONField(name = "channel")
+    private String channel;
+
+    @JSONField(name = "channel_label")
+    private String channelLabel;
+    /**
+     * 预付金额
+     */
+    @JSONField(name = "ap_money")
+    private String apMoney;
+    /**
+     * 退款中
+     */
+    @JSONField(name = "refund_ap_money")
+    private String refundApMoney;
+    /**
+     * 使用中
+     */
+    @JSONField(name = "using_ap_money")
+    private String usingApMoney;
+    /**
+     * 结算中
+     */
+    @JSONField(name = "settling_ap_money")
+    private String settlingApMoney;
+    /**
+     * 总预付金额
+     */
+    @JSONField(name = "total_ap_money")
+    private String totalApMoney;
+    /**
+     * 相关操作
+     */
+    private String action;
+
+
+}

+ 3 - 6
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePay.java

@@ -20,16 +20,13 @@ import java.math.BigDecimal;
 @Setter
 public class PrePay implements MoneyChange {
     /**
-     * 支付通道 huifu
+     * 支付通道 字典值
      */
     @NotBlank(message = "支付通道不能为空")
     private String channel;
 
-    @NotBlank(message = "uid不能为空")
-    private String uid;
-
-    @NotBlank(message = "filter不能为空")
-    private String filter;
+    @NotBlank(message = "合作企业不能为空")
+    private String entId;
 
     @Positive(message = "提现金额必须大于0")
     @Digits(message = "小数位数过长或金额过大", integer = 10, fraction = 2)

+ 41 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePayAppend.java

@@ -0,0 +1,41 @@
+package com.sckw.payment.model.vo.req;
+
+import com.sckw.payment.model.vo.res.MoneyChange;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Positive;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 预付追加
+ *
+ * @author xucaiqin
+ * @date 2023-08-29 09:14:04
+ */
+@Getter
+@Setter
+public class PrePayAppend implements MoneyChange {
+    /**
+     * 支付通道 huifu
+     */
+    @NotBlank(message = "支付通道不能为空")
+    private String channel;
+
+    @NotBlank(message = "uid不能为空")
+    private String uid;
+
+    @NotBlank(message = "filter不能为空")
+    private String filter;
+
+    @Positive(message = "提现金额必须大于0")
+    @Digits(message = "小数位数过长或金额过大", integer = 10, fraction = 2)
+    private BigDecimal money;
+
+    @Size(message = "备注不能超过200字")
+    private String remark;
+
+}

+ 2 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/PrePayCheck.java

@@ -18,6 +18,6 @@ public class PrePayCheck {
      */
     @NotBlank(message = "支付通道不能为空")
     private String channel;
-    @NotBlank(message = "filter不能为空")
-    private String filter;
+    @NotBlank(message = "合作企业不能为空")
+    private String entId;
 }

+ 26 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/ApPageRes.java

@@ -0,0 +1,26 @@
+package com.sckw.payment.model.vo.res;
+
+import com.sckw.core.model.page.PageRes;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 返回的分页数据中,有额外需要返回的参数
+ */
+@Getter
+@Setter
+public class ApPageRes<T> extends PageRes<T> {
+    private String apMoney;
+    private String usingApMoney;
+    private String totalApMoney;
+
+    public ApPageRes(int page, int pageSize, long size, int pages, List<T> list) {
+        super(page, pageSize, size, pages, list);
+        this.apMoney = "0.00";
+        this.usingApMoney = "0.00";
+        this.totalApMoney = "0.00";
+    }
+
+}

+ 121 - 25
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -11,22 +11,23 @@ import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.model.vo.TableTop;
-import com.sckw.core.utils.*;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.OrderGenerateSeqNoUtils;
+import com.sckw.core.utils.StringTimeUtil;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
 import com.sckw.payment.model.*;
 import com.sckw.payment.model.constant.LedgerEnum;
-import com.sckw.payment.model.constant.LedgerTrackEnum;
 import com.sckw.payment.model.constant.LogisticsUnitType;
 import com.sckw.payment.model.constant.SettlementEnum;
-import com.sckw.payment.model.dto.ILedger;
-import com.sckw.payment.model.dto.LedgerCarrierDto;
-import com.sckw.payment.model.dto.LedgerLogisticsDto;
-import com.sckw.payment.model.dto.LedgerShipperDto;
+import com.sckw.payment.model.dto.*;
 import com.sckw.payment.model.vo.req.*;
 import com.sckw.payment.model.vo.res.LedgerCountSumVo;
 import com.sckw.payment.model.vo.res.LedgerLogisticsDetailVo;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
@@ -63,6 +64,9 @@ public class KwpLedgerLogisticsService extends AbsLedger {
     private KwpLedgerLogisticsUnitService logisticsUnitService;
     @Resource
     private KwpLedgerLogisticsOrderService logisticsOrderService;
+    @Resource
+    private MessageSender messageSender;
+
     @Resource
     private KwpLedgerLogisticsMapper logisticsMapper;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -172,21 +176,31 @@ public class KwpLedgerLogisticsService extends AbsLedger {
     @GlobalTransactional(name = "default_tx_group", rollbackFor = Exception.class)
     public String sendLedger(LogisticsSendReq logisticsReq) {
         log.info("保存物流对账单:{}", JSONObject.toJSONString(logisticsReq));
-        String id = logisticsReq.getId();
-        if (StringUtils.isBlank(id)) {
-            //新增
-            logisticsReq.setGenerateTime(LocalDateTime.now());
-            logisticsReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
-            Long aLong = saveDraft(logisticsReq);
-            logisticsTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
-        } else {
-            removeDraft(Long.parseLong(id));
-            logisticsReq.setGenerateTime(LocalDateTime.now());
-            logisticsReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
-            Long aLong = saveDraft(logisticsReq);
-            logisticsTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
-
+        if (Objects.nonNull(logisticsReq.getIdLong())) {
+            removeDraft(logisticsReq.getIdLong());
         }
+        logisticsReq.setGenerateTime(LocalDateTime.now());
+        logisticsReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
+        IdNo idNo = saveDraft(logisticsReq);
+        logisticsTrackService.saveTrack(idNo.id(), Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(idNo.id(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(idNo.id(), LogisticsUnitType.CARRIER);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", idNo.no());
+            put("name", logisticsReq.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_CARRIER);
+        //推送系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", idNo.no());
+            put("name", logisticsReq.getName());
+        }}, logisticsUnit.getEntId(), MessageEnum.LEDGER_SHIPPER);
+
         return "保存对账单成功";
     }
 
@@ -210,7 +224,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
      * @param logisticsSendReq 物流对账单新增参数
      * @return
      */
-    public Long saveDraft(LogisticsSendReq logisticsSendReq) {
+    public IdNo saveDraft(LogisticsSendReq logisticsSendReq) {
         KwpLedgerLogistics kwpLedgerLogistics = new KwpLedgerLogistics();
         kwpLedgerLogistics.setId(Objects.isNull(logisticsSendReq.getIdLong()) ? new IdWorker(1).nextId() : logisticsSendReq.getIdLong());
         kwpLedgerLogistics.setEntId(LoginUserHolder.getEntId());
@@ -348,7 +362,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
 
         logisticsUnits.add(carrierUnit);
         logisticsUnitService.saveList(logisticsUnits);
-        return kwpLedgerLogistics.getId();
+        return new IdNo(kwpLedgerLogistics.getId(), kwpLedgerLogistics.getLLedgerNo());
     }
 
     /**
@@ -362,8 +376,8 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         log.info("物流对账单草稿:{}", JSONObject.toJSONString(logisticsReq));
         logisticsReq.setGenerateTime(null);
         logisticsReq.setStatus(LedgerEnum.SAVE.getStatus());
-        Long aLong = saveDraft(logisticsReq);
-        logisticsTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.SAVE);
+        IdNo aLong = saveDraft(logisticsReq);
+        logisticsTrackService.saveTrack(aLong.id(), Global.EMPTY_STRING, LedgerEnum.SAVE);
         return "草稿保存成功";
     }
 
@@ -416,6 +430,23 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
         logisticsMapper.updateById(kwpLedgerLogistics);
         logisticsTrackService.saveTrack(id, Global.EMPTY_STRING, LedgerEnum.REVOCATION);
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(id, LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(id, LogisticsUnitType.CARRIER);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_REVOCATION_CARRIER);
+        //推送系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, logisticsUnit.getEntId(), MessageEnum.LEDGER_REVOCATION_SHIPPER);
         return "撤回成功";
     }
 
@@ -429,7 +460,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(id);
         orderCheck(kwpLedgerLogistics);
         backQueryCheck(kwpLedgerLogistics.getStatus());
-        return logisticsTrackService.selectOne(id, LedgerTrackEnum.REJECT);
+        return logisticsTrackService.selectOne(id, LedgerEnum.BACK);
     }
 
     /**
@@ -450,6 +481,24 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
         logisticsMapper.updateById(kwpLedgerLogistics);
         logisticsTrackService.saveTrack(ledgerReq.getIdLong(), ledgerReq.getRemark(), LedgerEnum.BACK);
+
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(ledgerReq.getIdLong(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(ledgerReq.getIdLong(), LogisticsUnitType.CARRIER);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_BACK_CARRIER);
+        //推送系统管理员和变更人
+        messageSender.sendPurchaseBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, ledgerReq.getIdLong(), logisticsUnit.getEntId(), MessageEnum.LEDGER_BACK_SHIPPER);
         return "驳回成功";
     }
 
@@ -473,6 +522,24 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         kwpLedgerLogistics.setUpdateBy(LoginUserHolder.getUserId());
         logisticsMapper.updateById(kwpLedgerLogistics);
         logisticsTrackService.saveTrack(confirmReq.getIdLong(), Global.EMPTY_STRING, LedgerEnum.LEDGERED);
+
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(confirmReq.getIdLong(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(confirmReq.getIdLong(), LogisticsUnitType.CARRIER);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_CONFIRM_SHIPPER);
+        //推送系统管理员和变更人
+        messageSender.sendPurchaseBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, confirmReq.getIdLong(), logisticsUnit.getEntId(), MessageEnum.LEDGER_CONFIRM_SHIPPER);
         return "对账确认成功";
     }
 
@@ -529,6 +596,35 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         settlementLogisticsService.save(kwpSettlementLogistics);
 
         logisticsTrackService.saveTrack(ledgerReq.getIdLong(), Global.EMPTY_STRING, LedgerEnum.SUCCESS);
+
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(ledgerReq.getIdLong(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(ledgerReq.getIdLong(), LogisticsUnitType.CARRIER);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_SUCCESS_CARRIER);
+        //推送系统管理员和变更人
+        messageSender.sendPurchaseBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", kwpLedgerLogistics.getLLedgerNo());
+            put("name", kwpLedgerLogistics.getName());
+        }}, ledgerReq.getIdLong(), logisticsUnit.getEntId(), MessageEnum.LEDGER_SUCCESS_SHIPPER);
+
+
+        //推送双方系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", kwpSettlementLogistics.getSlOrderNo());
+        }}, logisticsUnit2.getEntId(), MessageEnum.SETTLEMENT_CARRIER);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", kwpSettlementLogistics.getSlOrderNo());
+        }}, logisticsUnit.getEntId(), MessageEnum.SETTLEMENT_SHIPPER);
         return "对账完成";
     }
 

+ 10 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsTrackService.java

@@ -7,7 +7,6 @@ import com.sckw.core.utils.IdWorker;
 import com.sckw.payment.dao.KwpLedgerLogisticsTrackMapper;
 import com.sckw.payment.model.KwpLedgerLogisticsTrack;
 import com.sckw.payment.model.constant.LedgerEnum;
-import com.sckw.payment.model.constant.LedgerTrackEnum;
 import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -47,7 +46,7 @@ public class KwpLedgerLogisticsTrackService {
      * @param status 流程状态
      * @return
      */
-    public KwpLedgerLogisticsTrack selectOne(@NotNull Long id, LedgerTrackEnum status) {
+    public KwpLedgerLogisticsTrack selectOne(@NotNull Long id, LedgerEnum status) {
         LambdaQueryWrapper<KwpLedgerLogisticsTrack> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwpLedgerLogisticsTrack::getLLedgerId, id);
         wrapper.eq(Objects.nonNull(status), KwpLedgerLogisticsTrack::getStatus, status.getStatus());
@@ -70,4 +69,13 @@ public class KwpLedgerLogisticsTrackService {
         logisticsTrack.setDelFlag(Global.DELETED);
         logisticsTrackMapper.update(logisticsTrack, wrapper);
     }
+
+    public KwpLedgerLogisticsTrack queryLedgered(Long ledgerId) {
+        LambdaQueryWrapper<KwpLedgerLogisticsTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerLogisticsTrack::getLLedgerId, ledgerId);
+        wrapper.eq(KwpLedgerLogisticsTrack::getStatus, LedgerEnum.LEDGERED);
+        wrapper.eq(KwpLedgerLogisticsTrack::getDelFlag, NumberConstant.ZERO);
+        wrapper.last("limit 1");
+        return logisticsTrackMapper.selectOne(wrapper);
+    }
 }

+ 13 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsUnitService.java

@@ -1,5 +1,6 @@
 package com.sckw.payment.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
 import com.sckw.payment.dao.KwpLedgerLogisticsUnitMapper;
@@ -10,6 +11,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author xucaiqin
@@ -48,4 +50,15 @@ public class KwpLedgerLogisticsUnitService {
         logisticsUnitMapper.update(logisticsUnit, wrapper);
     }
 
+    public KwpLedgerLogisticsUnit queryCustomerEnt(Long id, Integer unitType) {
+        LambdaQueryWrapper<KwpLedgerLogisticsUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerLogisticsUnit::getLLedgerId, id)
+                .eq(KwpLedgerLogisticsUnit::getDelFlag, Global.UN_DELETED)
+                .eq(KwpLedgerLogisticsUnit::getUnitType, unitType).last("limit 1");
+        KwpLedgerLogisticsUnit kwpLedgerTradeUnit = logisticsUnitMapper.selectOne(wrapper);
+        if (Objects.isNull(kwpLedgerTradeUnit)) {
+            return new KwpLedgerLogisticsUnit();
+        }
+        return kwpLedgerTradeUnit;
+    }
 }

+ 116 - 21
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java

@@ -19,13 +19,14 @@ import com.sckw.order.api.model.*;
 import com.sckw.payment.dao.KwpLedgerTradeMapper;
 import com.sckw.payment.model.*;
 import com.sckw.payment.model.constant.LedgerEnum;
-import com.sckw.payment.model.constant.LedgerTrackEnum;
 import com.sckw.payment.model.constant.SettlementEnum;
 import com.sckw.payment.model.constant.TradeUnitType;
 import com.sckw.payment.model.dto.*;
 import com.sckw.payment.model.vo.req.*;
 import com.sckw.payment.model.vo.res.LedgerCountSumVo;
 import com.sckw.payment.model.vo.res.LedgerTradeDetailVo;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
@@ -58,6 +59,7 @@ public class KwpLedgerTradeService extends AbsLedger {
     private final KwpLedgerTradeTrackService tradeTrackService;
     private final KwpLedgerTradeOrderService tradeOrderService;
     private final KwpLedgerTradeUnitService tradeUnitService;
+    private final MessageSender messageSender;
     @Resource
     private KwpSettlementTradeService settlementTradeService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -184,7 +186,13 @@ public class KwpLedgerTradeService extends AbsLedger {
         tradeUnitService.remove(id);
     }
 
-    private Long saveDraft(TradeSendReq tradeSendReq) {
+    /**
+     * 保存草稿
+     *
+     * @param tradeSendReq
+     * @return 对账单id
+     */
+    private IdNo saveDraft(TradeSendReq tradeSendReq) {
         KwpLedgerTrade kwpLedgerTrade = new KwpLedgerTrade();
         kwpLedgerTrade.setId(Objects.isNull(tradeSendReq.getId()) ? new IdWorker(1).nextId() : tradeSendReq.getIdLong());
         kwpLedgerTrade.setEntId(LoginUserHolder.getEntId());
@@ -322,7 +330,7 @@ public class KwpLedgerTradeService extends AbsLedger {
         list.add(sellLedgerTradeUnit);
 
         tradeUnitService.saveList(list);
-        return kwpLedgerTrade.getId();
+        return new IdNo(kwpLedgerTrade.getId(), kwpLedgerTrade.getTLedgerNo());
     }
 
     /**
@@ -334,22 +342,31 @@ public class KwpLedgerTradeService extends AbsLedger {
     @Transactional(rollbackFor = Exception.class)
     public String sendLedger(TradeSendReq tradeSendReq) {
         log.info("保存对账单入参:{}", JSONObject.toJSONString(tradeSendReq));
-        if (Objects.isNull(tradeSendReq.getIdLong())) {
-            //新增
-            tradeSendReq.setGenerateTime(LocalDateTime.now());
-            tradeSendReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
-            Long aLong = saveDraft(tradeSendReq);
-            tradeTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
-        } else {
+        if (Objects.nonNull(tradeSendReq.getIdLong())) {
             //先删除
             removeDraft(tradeSendReq.getIdLong());
-            //在新增
-            tradeSendReq.setGenerateTime(LocalDateTime.now());
-            tradeSendReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
-            Long aLong = saveDraft(tradeSendReq);
-            tradeTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
-
         }
+        tradeSendReq.setGenerateTime(LocalDateTime.now());
+        tradeSendReq.setStatus(LedgerEnum.TO_LEDGER.getStatus());
+        IdNo idNo = saveDraft(tradeSendReq);
+        tradeTrackService.saveTrack(idNo.id(), Global.EMPTY_STRING, LedgerEnum.TO_LEDGER);
+
+        //推送消息
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(idNo.id(), TradeUnitType.PURCHASE);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", idNo.no());
+            put("name", tradeSendReq.getName());
+        }}, new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId()), MessageEnum.LEDGER_SELL);
+
+        //推送系统管理员
+        KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(idNo.id(), TradeUnitType.SELL);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", idNo.no());
+            put("name", tradeSendReq.getName());
+        }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.LEDGER_PURCHASE);
         return "保存对账单成功";
     }
 
@@ -364,8 +381,8 @@ public class KwpLedgerTradeService extends AbsLedger {
         log.info("贸易对账单保存草稿:{}", JSONObject.toJSONString(tradeSendReq));
         tradeSendReq.setGenerateTime(null);
         tradeSendReq.setStatus(LedgerEnum.SAVE.getStatus());
-        Long aLong = saveDraft(tradeSendReq);
-        tradeTrackService.saveTrack(aLong, Global.EMPTY_STRING, LedgerEnum.SAVE);
+        IdNo idNo = saveDraft(tradeSendReq);
+        tradeTrackService.saveTrack(idNo.id(), Global.EMPTY_STRING, LedgerEnum.SAVE);
         return "草稿保存成功";
     }
 
@@ -421,6 +438,22 @@ public class KwpLedgerTradeService extends AbsLedger {
         tradeMapper.updateById(kwpLedgerTrade);
 
         tradeTrackService.saveTrack(id, Global.EMPTY_STRING, LedgerEnum.REVOCATION);
+        //推送消息
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(id, TradeUnitType.PURCHASE);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, new UserInfo().setUserId(kwpLedgerTrade.getCreateBy()).setEntId(kwpLedgerTrade.getEntId()), MessageEnum.LEDGER_REVOCATION_SELL);
+
+        //推送系统管理员
+        KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(id, TradeUnitType.SELL);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.LEDGER_REVOCATION_PURCHASE);
         return "撤回成功";
     }
 
@@ -434,7 +467,7 @@ public class KwpLedgerTradeService extends AbsLedger {
         KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
         orderCheck(kwpLedgerTrade);
         backQueryCheck(kwpLedgerTrade.getStatus());
-        return tradeTrackService.selectOne(id, LedgerTrackEnum.REJECT);
+        return tradeTrackService.selectOne(id, LedgerEnum.BACK);
     }
 
     /**
@@ -454,6 +487,23 @@ public class KwpLedgerTradeService extends AbsLedger {
         kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
         tradeMapper.updateById(kwpLedgerTrade);
         tradeTrackService.saveTrack(ledgerReq.getIdLong(), ledgerReq.getRemark(), LedgerEnum.BACK);
+
+        //推送消息
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(ledgerReq.getIdLong(), TradeUnitType.PURCHASE);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, new UserInfo().setUserId(kwpLedgerTrade.getCreateBy()).setEntId(kwpLedgerTrade.getEntId()), MessageEnum.LEDGER_BACK_SELL);
+
+        //推送系统管理员和变更人
+        KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(ledgerReq.getIdLong(), TradeUnitType.SELL);
+        messageSender.sendSellBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, ledgerReq.getIdLong(), kwpLedgerTradeUnit.getEntId(), MessageEnum.LEDGER_BACK_PURCHASE);
         return "驳回成功";
     }
 
@@ -477,6 +527,23 @@ public class KwpLedgerTradeService extends AbsLedger {
         kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
         tradeMapper.updateById(kwpLedgerTrade);
         tradeTrackService.saveTrack(confirmReq.getIdLong(), Global.EMPTY_STRING, LedgerEnum.LEDGERED);
+
+        //推送消息
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(confirmReq.getIdLong(), TradeUnitType.PURCHASE);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, new UserInfo().setUserId(kwpLedgerTrade.getCreateBy()).setEntId(kwpLedgerTrade.getEntId()), MessageEnum.LEDGER_CONFIRM_SELL);
+
+        //推送系统管理员和变更人
+        KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(confirmReq.getIdLong(), TradeUnitType.SELL);
+        messageSender.sendSellBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, confirmReq.getIdLong(), kwpLedgerTradeUnit.getEntId(), MessageEnum.LEDGER_CONFIRM_PURCHASE);
         return "对账确认成功";
     }
 
@@ -546,6 +613,35 @@ public class KwpLedgerTradeService extends AbsLedger {
         }
         //保存操作记录
         tradeTrackService.saveTrack(id, Global.EMPTY_STRING, LedgerEnum.SUCCESS);
+
+
+        //推送消息
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(ledgerReq.getIdLong(), TradeUnitType.PURCHASE);
+        //推送创建人
+        messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, new UserInfo().setUserId(kwpLedgerTrade.getCreateBy()).setEntId(kwpLedgerTrade.getEntId()), MessageEnum.LEDGER_SUCCESS_SELL);
+
+        //推送系统管理员和变更人
+        KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(ledgerReq.getIdLong(), TradeUnitType.SELL);
+        messageSender.sendSellBoth(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", kwpLedgerTrade.getTLedgerNo());
+            put("name", kwpLedgerTrade.getName());
+        }}, ledgerReq.getIdLong(), kwpLedgerTradeUnit.getEntId(), MessageEnum.LEDGER_SUCCESS_PURCHASE);
+
+        //推送双方系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit.getFirmName());
+            put("number", kwpSettlementTrade.getStOrderNo());
+        }}, kwpLedgerTradeUnit2.getEntId(), MessageEnum.SETTLEMENT_SELL);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", kwpLedgerTradeUnit2.getFirmName());
+            put("number", kwpSettlementTrade.getStOrderNo());
+        }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.SETTLEMENT_PURCHASE);
+
         return "对账完成";
     }
 
@@ -760,8 +856,7 @@ public class KwpLedgerTradeService extends AbsLedger {
         }
         //过滤筛选条件
         if (StringUtils.isNotBlank(ledgerListReq.getKeywords())) {
-            return detailRes.stream().filter(o -> StringUtils.contains(o.getTOrderNo(), ledgerListReq.getKeywords()) ||
-                    StringUtils.contains(o.getGoodsName(), ledgerListReq.getKeywords())).toList();
+            return detailRes.stream().filter(o -> StringUtils.contains(o.getTOrderNo(), ledgerListReq.getKeywords()) || StringUtils.contains(o.getGoodsName(), ledgerListReq.getKeywords())).toList();
         }
         return detailRes;
     }

+ 16 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeTrackService.java

@@ -7,7 +7,6 @@ import com.sckw.core.utils.IdWorker;
 import com.sckw.payment.dao.KwpLedgerTradeTrackMapper;
 import com.sckw.payment.model.KwpLedgerTradeTrack;
 import com.sckw.payment.model.constant.LedgerEnum;
-import com.sckw.payment.model.constant.LedgerTrackEnum;
 import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -48,7 +47,7 @@ public class KwpLedgerTradeTrackService {
      * @param status 流程状态
      * @return
      */
-    public KwpLedgerTradeTrack selectOne(@NotNull Long id, LedgerTrackEnum status) {
+    public KwpLedgerTradeTrack selectOne(@NotNull Long id, LedgerEnum status) {
         LambdaQueryWrapper<KwpLedgerTradeTrack> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwpLedgerTradeTrack::getTLedgerId, id);
         wrapper.eq(Objects.nonNull(status), KwpLedgerTradeTrack::getStatus, status.getStatus());
@@ -72,4 +71,19 @@ public class KwpLedgerTradeTrackService {
         tradeTrack.setDelFlag(Global.DELETED);
         tradeTrackMapper.update(tradeTrack, wrapper);
     }
+
+    /**
+     * 查询已对账的操作记录
+     *
+     * @param id
+     * @return
+     */
+    public KwpLedgerTradeTrack queryLedgered(Long id) {
+        LambdaQueryWrapper<KwpLedgerTradeTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerTradeTrack::getTLedgerId, id);
+        wrapper.eq(KwpLedgerTradeTrack::getStatus, LedgerEnum.LEDGERED);
+        wrapper.eq(KwpLedgerTradeTrack::getDelFlag, NumberConstant.ZERO);
+        wrapper.last("limit 1");
+        return tradeTrackMapper.selectOne(wrapper);
+    }
 }

+ 18 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeUnitService.java

@@ -1,5 +1,6 @@
 package com.sckw.payment.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
 import com.sckw.payment.dao.KwpLedgerTradeUnitMapper;
@@ -10,6 +11,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author xucaiqin
@@ -48,4 +50,20 @@ public class KwpLedgerTradeUnitService {
         tradeUnitMapper.update(kwpLedgerTradeUnit, wrapper);
     }
 
+    /**
+     * 根据对账单id查询对方企业信息
+     *
+     * @param id       对账单id
+     * @param unitType 对方企业类型
+     * @return 不为空
+     */
+    public KwpLedgerTradeUnit queryCustomerEnt(Long id, Integer unitType) {
+        LambdaQueryWrapper<KwpLedgerTradeUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerTradeUnit::getTLedgerId, id).eq(KwpLedgerTradeUnit::getDelFlag, Global.UN_DELETED).eq(KwpLedgerTradeUnit::getUnitType, unitType).last("limit 1");
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitMapper.selectOne(wrapper);
+        if (Objects.isNull(kwpLedgerTradeUnit)) {
+            return new KwpLedgerTradeUnit();
+        }
+        return kwpLedgerTradeUnit;
+    }
 }

+ 30 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementOfflineService.java

@@ -27,6 +27,7 @@ import com.sckw.payment.model.vo.req.SettlementOfflineReq;
 import com.sckw.payment.model.vo.res.SettlementOfflineVo;
 import com.sckw.redis.config.RedisLockUtil;
 import com.sckw.redis.constant.RedisConstant;
+import com.sckw.stream.enums.MessageEnum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import io.seata.spring.annotation.GlobalTransactional;
@@ -61,7 +62,8 @@ public class KwpSettlementOfflineService {
     private final KwpLedgerTradeOrderService tradeOrderService;
     private final KwpSettlementTradeTrackService settlementTradeTrackService;
     private final KwpLedgerTradeService ledgerTradeService;
-
+    private final MessageSender messageSender;
+    private final KwpLedgerTradeUnitService tradeUnitService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -70,6 +72,7 @@ public class KwpSettlementOfflineService {
     private final KwpSettlementLogisticsService kwpSettlementLogisticsService;
     private final KwpSettlementLogisticsMapper kwpSettlementLogisticsMapper;
     private final KwpSettlementLogisticsTrackMapper kwpSettlementLogisticsTrackMapper;
+    private final KwpLedgerLogisticsUnitService logisticsUnitService;
 
     /**
      * 物流-线下付款(运费收款)记录-列表
@@ -237,6 +240,20 @@ public class KwpSettlementOfflineService {
             kwpSettlementOffline.setDelFlag(0);
             return settlementOfflineMapper.insert(kwpSettlementOffline);
         }
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(settlementLogisticsDto.getLLedgerId(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(settlementLogisticsDto.getLLedgerId(), LogisticsUnitType.CARRIER);
+
+        //推送双方系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", settlementLogisticsDto.getSlOrderNo());
+        }}, logisticsUnit2.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_CARRIER);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", settlementLogisticsDto.getSlOrderNo());
+        }}, logisticsUnit.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_SHIPPER);
         return null;
     }
 
@@ -376,6 +393,18 @@ public class KwpSettlementOfflineService {
                 //记录表记录数据
                 settlementTradeTrackService.save(KwpSettlementTradeTrack.build(byId.getId(), SettlementTrackEnum.OFFLINE_PAY.getStatus()));
 
+                KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.PURCHASE);
+                KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.SELL);
+                //推送双方系统管理员
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit2.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_SELL);
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit2.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_PURCHASE);
+
                 //中台接口 todo-xcq
                 return "确认回款成功";
             } finally {

+ 47 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java

@@ -32,6 +32,7 @@ import com.sckw.payment.model.vo.req.WalletPayReq;
 import com.sckw.payment.model.vo.res.SettlementWalletVo;
 import com.sckw.redis.config.RedisLockUtil;
 import com.sckw.redis.constant.RedisConstant;
+import com.sckw.stream.enums.MessageEnum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.api.dubbo.TransportDubboService;
@@ -72,6 +73,10 @@ public class KwpSettlementWalletService {
     private final KwpWalletRelationService walletRelationService;
     private final RedisLockUtil redisLockUtil;
     private final KwpSettlementTradeTrackService settlementTradeTrackService;
+    private final MessageSender messageSender;
+    private final KwpLedgerTradeUnitService tradeUnitService;
+    private final KwpLedgerLogisticsUnitService logisticsUnitService;
+
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -254,6 +259,21 @@ public class KwpSettlementWalletService {
 
             return insertKwpSettlementWallet;
         }
+
+        //托运方
+        KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(settlementLogisticsDto.getLLedgerId(), LogisticsUnitType.SHIPPER);
+        //承运方
+        KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(settlementLogisticsDto.getLLedgerId(), LogisticsUnitType.CARRIER);
+
+        //推送双方系统管理员
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit.getFirmName());
+            put("number", settlementLogisticsDto.getSlOrderNo());
+        }}, logisticsUnit2.getEntId(), MessageEnum.SETTLEMENT_START_CARRIER);
+        messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+            put("company", logisticsUnit2.getFirmName());
+            put("number", settlementLogisticsDto.getSlOrderNo());
+        }}, logisticsUnit.getEntId(), MessageEnum.SETTLEMENT_START_SHIPPER);
         return null;
     }
 
@@ -396,6 +416,19 @@ public class KwpSettlementWalletService {
                         tradeOrderInfoService.updateOrderStatus(updateOrderStatusParam);
                     }
                 }
+
+                KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.PURCHASE);
+                KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.SELL);
+                //推送双方系统管理员
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit2.getEntId(), MessageEnum.SETTLEMENT_START_SELL);
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit2.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.SETTLEMENT_START_PURCHASE);
+
                 //todo-xcq 调用中台接口
 
                 return "付款确认成功";
@@ -558,7 +591,21 @@ public class KwpSettlementWalletService {
                     updateOrderStatusParam.setUpdateByName(LoginUserHolder.getUserName());
                     tradeOrderInfoService.updateOrderStatus(updateOrderStatusParam);
                 }
+
+                KwpLedgerTradeUnit kwpLedgerTradeUnit = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.PURCHASE);
+                KwpLedgerTradeUnit kwpLedgerTradeUnit2 = tradeUnitService.queryCustomerEnt(byId.getLedgerId(), TradeUnitType.SELL);
+                //推送双方系统管理员
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit2.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_SELL);
+                messageSender.sendManager(LoginUserHolder.getUserId(), new HashMap<>() {{
+                    put("company", kwpLedgerTradeUnit2.getFirmName());
+                    put("number", kwpSettlementTrade.getStOrderNo());
+                }}, kwpLedgerTradeUnit.getEntId(), MessageEnum.SETTLEMENT_CONFIRM_PURCHASE);
+
                 //todo-xcq 调用中台接口
+
                 return "确认回款成功";
             } finally {
                 redisLockUtil.unlock(key);

+ 138 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/MessageSender.java

@@ -0,0 +1,138 @@
+package com.sckw.payment.service;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.sckw.payment.model.JumpUrlConfig;
+import com.sckw.payment.model.KwpLedgerLogisticsTrack;
+import com.sckw.payment.model.KwpLedgerTradeTrack;
+import com.sckw.payment.model.constant.JumpEnum;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.SckwMessage;
+import com.sckw.stream.model.UserInfo;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.cloud.stream.function.StreamBridge;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author xucaiqin
+ * @date 2023-09-06 20:20:45
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class MessageSender {
+    private final StreamBridge streamBridge;
+    private final JumpUrlConfig jumpUrlConfig;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+    private final KwpLedgerTradeTrackService tradeTrackService;
+    private final KwpLedgerLogisticsTrackService logisticsTrackService;
+
+    /**
+     * 变更人 当前操作用户,LoginUserHolder.getUserId()
+     * 系统管理员,queryEntCacheById contactsId
+     * 推送创建人
+     *
+     * @param map
+     * @param user        用户id为创建人id,企业id为创建人所在企业
+     * @param messageEnum
+     */
+    public void sendCreate(Long createBy, Map<String, Object> map, UserInfo user, MessageEnum messageEnum) {
+        SckwMessage sckwMessage = new SckwMessage(messageEnum).setMsgUrl(jumpUrlConfig.getUrl().get(JumpEnum.getByEnum(messageEnum))).setParams(map).setUserInfos(Collections.singletonList(user)).setCreateBy(createBy);
+        log.info("推送创建人:{}", JSONObject.toJSONString(sckwMessage));
+        streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+    }
+
+    /**
+     * 推送系统管理员
+     *
+     * @param map
+     * @param entId       对账单关联的企业id
+     * @param messageEnum 消息枚举
+     */
+    public void sendManager(Long createBy, Map<String, Object> map, Long entId, MessageEnum messageEnum) {
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(entId);
+        if (Objects.nonNull(entCacheResDto)) {
+            SckwMessage sckwMessage = new SckwMessage(messageEnum).setMsgUrl(jumpUrlConfig.getUrl().get(JumpEnum.getByEnum(messageEnum))).setParams(map).setUserInfos(Collections.singletonList(new UserInfo(entCacheResDto.getContactsId(), entCacheResDto.getId()))).setCreateBy(createBy);
+            log.info("推送系统管理员:{}", JSONObject.toJSONString(sckwMessage));
+            streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+        }
+    }
+
+    /**
+     * 推送销售变更人
+     *
+     * @param createBy
+     * @param map
+     * @param ledgerId    对账单id
+     * @param messageEnum
+     */
+    private void sendSellChanger(Long createBy, Map<String, Object> map, Long ledgerId, MessageEnum messageEnum) {
+        KwpLedgerTradeTrack kwpLedgerTradeTrack = tradeTrackService.queryLedgered(ledgerId);
+        if (Objects.nonNull(kwpLedgerTradeTrack)) {
+            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(kwpLedgerTradeTrack.getCreateBy());
+            EntCacheResDto entCacheResDto = Objects.nonNull(userCacheResDto) ? (Objects.nonNull(userCacheResDto.getEntInfo()) ? userCacheResDto.getEntInfo() : new EntCacheResDto()) : new EntCacheResDto();
+            SckwMessage sckwMessage = new SckwMessage(messageEnum).setMsgUrl(jumpUrlConfig.getUrl().get(JumpEnum.getByEnum(messageEnum))).setParams(map).setUserInfos(Collections.singletonList(new UserInfo(kwpLedgerTradeTrack.getCreateBy(), entCacheResDto.getId()))).setCreateBy(createBy);
+            log.info("推送变更人:{}", JSONObject.toJSONString(sckwMessage));
+            streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+        }
+    }
+
+    /**
+     * 推送采购变更人
+     *
+     * @param createBy
+     * @param map
+     * @param ledgerId
+     * @param messageEnum
+     */
+    private void sendPurchaseChanger(Long createBy, Map<String, Object> map, Long ledgerId, MessageEnum messageEnum) {
+        KwpLedgerLogisticsTrack kwpLedgerLogisticsTrack = logisticsTrackService.queryLedgered(ledgerId);
+        if (Objects.nonNull(kwpLedgerLogisticsTrack)) {
+            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(kwpLedgerLogisticsTrack.getCreateBy());
+            EntCacheResDto entCacheResDto = Objects.nonNull(userCacheResDto) ? (Objects.nonNull(userCacheResDto.getEntInfo()) ? userCacheResDto.getEntInfo() : new EntCacheResDto()) : new EntCacheResDto();
+            SckwMessage sckwMessage = new SckwMessage(messageEnum)
+                    .setMsgUrl(jumpUrlConfig.getUrl().get(JumpEnum.getByEnum(messageEnum)))
+                    .setParams(map).setUserInfos(Collections.singletonList(new UserInfo(kwpLedgerLogisticsTrack.getCreateBy(), entCacheResDto.getId()))).setCreateBy(createBy);
+            log.info("推送变更人:{}", JSONObject.toJSONString(sckwMessage));
+            streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+        }
+    }
+
+    /**
+     * 推送系统管理员和推送销售变更人
+     *
+     * @param createBy
+     * @param map
+     * @param ledgerId    对账单id
+     * @param entId       需要推送的对账单关联的企业
+     * @param messageEnum
+     */
+    public void sendSellBoth(Long createBy, Map<String, Object> map, Long ledgerId, Long entId, MessageEnum messageEnum) {
+        sendManager(createBy, map, entId, messageEnum);
+        sendSellChanger(createBy, map, ledgerId, messageEnum);
+    }
+
+    /**
+     * 推送系统管理员和推送采购变更人
+     *
+     * @param createBy
+     * @param map
+     * @param ledgerId 对账单id
+     * @param entId 需要推送的对账单关联的企业
+     * @param messageEnum
+     */
+    public void sendPurchaseBoth(Long createBy, Map<String, Object> map, Long ledgerId, Long entId, MessageEnum messageEnum) {
+        sendManager(createBy, map, entId, messageEnum);
+        sendPurchaseChanger(createBy, map, ledgerId, messageEnum);
+    }
+}

+ 61 - 29
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/PayCenterService.java

@@ -118,7 +118,7 @@ public class PayCenterService {
                         okHttpUtils.addPara(k + "[" + i + "]", l[i]);
                     }
                 } else {
-                    okHttpUtils.addBodyPara(k, v.toString());
+                    okHttpUtils.addBodyPara(k, JSONObject.toJSONString(v));
                 }
             }
         }
@@ -133,6 +133,22 @@ public class PayCenterService {
         return changeRes(sync);
     }
 
+    private String jsonHttp(PayCenterEnum payCenterEnum, Object object) {
+        String para = object instanceof JSONObject jsonObject ? jsonObject.toJSONString() : JSONObject.toJSONString(object);
+        log.debug("{}入参->{}", payCenterEnum.getDesc(), para);
+        OkHttpUtils okHttpUtils = OkHttpUtils.builder().url(payCenterAddr + payCenterEnum.getAddr());
+        okHttpUtils.addBodyJsonStr(para);
+        String sync;
+        try {
+            sync = okHttpUtils.post(true).sync();
+        } catch (Exception e) {
+            log.error("中台服务异常", e.getCause());
+            throw new RuntimeException("支付服务异常!");
+        }
+        log.debug("{}返回值->{}", payCenterEnum.getDesc(), sync);
+        return changeRes(sync);
+    }
+
     private String changeRes(String sync) {
         JSONObject jsonObject = JSONObject.parseObject(sync);
         //我的泛型是对象 返回值有可能 是对象或数组 {} []
@@ -658,6 +674,23 @@ public class PayCenterService {
         });
     }
 
+    /**
+     * 清分结果查询
+     *
+     * @param uid
+     * @param channel
+     * @param businessNo
+     * @return
+     */
+    public R<List<SplitDto>> agentPayQuery(String uid, ChannelEnum channel, String businessNo) {
+        String sync = getHttp(PayCenterEnum.AGENT_PAY_QUERY, new HashMap<>() {{
+            put("uid", uid);
+            put("channel", channel);
+            put("business_no", businessNo);
+        }});
+        return parseArray(sync, SplitDto.class);
+    }
+
     /**
      * 创建/更新账户
      *
@@ -665,9 +698,8 @@ public class PayCenterService {
      * @return
      */
     public R<MemberRes> memberIndex(MemberCreate memberCreate) {
-        Map<String, Object> map = JSONObject.parseObject(JSONObject.toJSONString(memberCreate), new TypeReference<>() {
-        });
-        String sync = postHttp(PayCenterEnum.MEMBER_INDEX, map);
+
+        String sync = jsonHttp(PayCenterEnum.MEMBER_INDEX, memberCreate);
         return JSONObject.parseObject(sync, new TypeReference<>() {
         });
     }
@@ -683,8 +715,8 @@ public class PayCenterService {
      */
     public R<PayIndex> payIndex(String buyUid, String sellUid, ChannelEnum channel, Long money) {
         String sync = postHttp(PayCenterEnum.PAY_INDEX, new HashMap<>() {{
-            put("buyUid", buyUid);
-            put("sellUid", sellUid);
+            put("buy_uid", buyUid);
+            put("sell_uid", sellUid);
             put("channel", channel);
             put("money", money);
         }});
@@ -747,14 +779,14 @@ public class PayCenterService {
      * @return
      */
     public R<BusinessNo> payAgentPay(String buyUid, String sellUid, ChannelEnum channel, Long money, List<PatchPay> batchPayList, String businessNo) {
-        String sync = postHttp(PayCenterEnum.PAY_AGENT_PAY, new HashMap<>() {{
-            put("buy_uid", buyUid);
-            put("sell_uid", sellUid);
-            put("channel", channel);
-            put("money", money);
-            put("batch_pay_list", JSONObject.toJSONString(batchPayList));
-            put("business_no", businessNo);
-        }});
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("buy_uid", buyUid);
+        jsonObject.put("sell_uid", sellUid);
+        jsonObject.put("channel", channel.getChannel());
+        jsonObject.put("money", money);
+        jsonObject.put("batch_pay_list", batchPayList);
+        jsonObject.put("business_no", businessNo);
+        String sync = jsonHttp(PayCenterEnum.PAY_AGENT_PAY, jsonObject);
         return JSONObject.parseObject(sync, new TypeReference<>() {
         });
     }
@@ -762,25 +794,25 @@ public class PayCenterService {
     /**
      * 清分
      *
-     * @param buyUid 付款方uid
-     * @param sellUid 收款方
-     * @param channel
-     * @param money 总清分金额
+     * @param buyUid       付款方uid
+     * @param sellUid      收款方
+     * @param channel      渠道
+     * @param money        总清分金额
      * @param batchPayList 收款方集合
-     * @param businessNo 流水号
-     * @param payType 支付类型 0-默认 1-仅预付支付 2-仅余额支付
+     * @param businessNo   流水号
+     * @param payType      支付类型 0-默认 1-仅预付支付 2-仅余额支付
      * @return
      */
     public R<BusinessNo> payAgentPayV2(String buyUid, String sellUid, ChannelEnum channel, Long money, List<PatchPay> batchPayList, String businessNo, String payType) {
-        String sync = postHttp(PayCenterEnum.PAY_AGENT_PAY_V2, new HashMap<>() {{
-            put("buy_uid", buyUid);
-            put("sell_uid", sellUid);
-            put("channel", channel);
-            put("money", money);
-            put("batch_pay_list", JSONObject.toJSONString(batchPayList));
-            put("business_no", businessNo);
-            put("pay_type", payType);
-        }});
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("buy_uid", buyUid);
+        jsonObject.put("sell_uid", sellUid);
+        jsonObject.put("channel", Objects.nonNull(channel) ? channel.getChannel() : "");
+        jsonObject.put("money", money);
+        jsonObject.put("batch_pay_list", batchPayList);
+        jsonObject.put("business_no", businessNo);
+        jsonObject.put("pay_type", payType);
+        String sync = jsonHttp(PayCenterEnum.PAY_AGENT_PAY_V2, jsonObject);
         return JSONObject.parseObject(sync, new TypeReference<>() {
         });
     }

+ 142 - 31
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
@@ -12,20 +13,27 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
 import com.sckw.payment.api.model.constant.ChannelEnum;
-import com.sckw.payment.api.model.dto.*;
-import com.sckw.payment.model.dto.common.BusinessNo;
+import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;
-import com.sckw.payment.model.dto.page.CashPage;
-import com.sckw.payment.model.dto.page.PrePayWalletPage;
 import com.sckw.payment.dao.KwpWalletRefundMapper;
+import com.sckw.payment.dao.KwpWalletTransferMapper;
 import com.sckw.payment.job.AsyncPool;
 import com.sckw.payment.model.KwpWalletRefund;
+import com.sckw.payment.model.KwpWalletTransfer;
 import com.sckw.payment.model.constant.RefundEnum;
+import com.sckw.payment.model.constant.TransferEnum;
+import com.sckw.payment.model.dto.common.BusinessNo;
+import com.sckw.payment.model.dto.page.CashPage;
+import com.sckw.payment.model.dto.page.PrePayWalletPage;
 import com.sckw.payment.model.dto.wallet.*;
+import com.sckw.payment.model.vo.PrePayWalletVo;
 import com.sckw.payment.model.vo.req.*;
+import com.sckw.payment.model.vo.res.ApPageRes;
 import com.sckw.payment.model.vo.res.FundVo;
 import com.sckw.payment.model.vo.res.MorePageRes;
 import com.sckw.payment.model.vo.res.WalletDetail;
+import com.sckw.redis.config.RedisLockUtil;
+import com.sckw.redis.constant.RedisLockKey;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import lombok.RequiredArgsConstructor;
@@ -57,6 +65,8 @@ public class WalletService {
     private final PayCenterService payCenterService;
     private final KwpWalletRelationService walletRelationService;
     private final KwpWalletRefundMapper kwpWalletRefundMapper;
+    private final KwpWalletTransferMapper transferMapper;
+    private final RedisLockUtil redisLockUtil;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -132,6 +142,32 @@ public class WalletService {
         return df.format(money / 100.0D);
     }
 
+    /**
+     * 退款中金额和相关操作
+     *
+     * @param change 是否需要转换预付人与预收人
+     * @return
+     */
+    private void refundMoney(PrePayWallet prePayWallet, PrePayWalletVo prePayWalletVo, boolean change) {
+        DecimalFormat df = new DecimalFormat("0.00");
+        LambdaQueryWrapper<KwpWalletRefund> wrapper = new LambdaQueryWrapper<>();
+        //预收时,切换预收预付的双方人员
+        if (change) {
+            wrapper.eq(KwpWalletRefund::getUid, prePayWallet.getFilter()).eq(KwpWalletRefund::getFilter, prePayWallet.getUid());
+        } else {
+            wrapper.eq(KwpWalletRefund::getUid, prePayWallet.getUid()).eq(KwpWalletRefund::getFilter, prePayWallet.getFilter());
+        }
+        wrapper.eq(KwpWalletRefund::getChannel, prePayWallet.getChannel()).eq(KwpWalletRefund::getStatus, RefundEnum.REFUNDING.getStatus()).last("limit 1");
+        KwpWalletRefund kwpWalletRefund = kwpWalletRefundMapper.selectOne(wrapper);
+        if (Objects.nonNull(kwpWalletRefund)) {
+            prePayWalletVo.setRefundApMoney(df.format(kwpWalletRefund.getActualMoney()));
+            prePayWalletVo.setAction(RefundEnum.getDesc(kwpWalletRefund.getStatus()));
+        } else {
+            prePayWalletVo.setRefundApMoney("0.00");
+            prePayWalletVo.setAction("");
+        }
+    }
+
     /**
      * 钱包总览信息
      *
@@ -280,7 +316,7 @@ public class WalletService {
         if (StringUtils.isBlank(filter)) {
             throw new BusinessException("合作单位暂未开通电子钱包");
         }
-        ChannelEnum channelEnum = ChannelEnum.getByValue(addWalletReq.getChannel());
+        ChannelEnum channelEnum = ChannelEnum.getByChannel(addWalletReq.getChannel());
         if (Objects.isNull(channelEnum)) {
             throw new BusinessException("支付通道不存在");
         }
@@ -352,22 +388,54 @@ public class WalletService {
      */
     public Object transfer(TransferReq transferReq) {
         log.info("转账:{}", JSONObject.toJSONString(transferReq));
-        ChannelEnum channelEnum = ChannelEnum.getByChannel(transferReq.getChannel());
-        if (Objects.isNull(channelEnum)) {
-            throw new BusinessException("支付通道不存在");
-        }
-        List<PatchPay> list = new ArrayList<>();
-        PatchPay patchPay = new PatchPay();
-        patchPay.setUid(transferReq.getFilter());
-        patchPay.setMoney(transferReq.bigMoney(transferReq.getMoney()));
-        patchPay.setRemark(transferReq.getRemark());
-        list.add(patchPay);
-        R<BusinessNo> businessNoR1 = payCenterService.payAgentPayV2(transferReq.getUid(), transferReq.getFilter(),
-                channelEnum, transferReq.bigMoney(transferReq.getMoney()), list, OrderUtils.generateOrderNo("TF"), "2");
-        if (!businessNoR1.getStatus()) {
-            throw new BusinessException(StringUtils.isNotBlank(businessNoR1.getMsg()) ? businessNoR1.getMsg() : "转账失败");
+        String key = RedisLockKey.TRANSFER + transferReq.getUid() + ":" + transferReq.getFilter();
+        if (redisLockUtil.tryLock(key)) {
+            try {
+                ChannelEnum channelEnum = ChannelEnum.getByChannel(transferReq.getChannel());
+                if (Objects.isNull(channelEnum)) {
+                    throw new BusinessException("支付通道不存在");
+                }
+                String orderNo = OrderUtils.generateOrderNo("TF");
+                KwpWalletTransfer walletTransfer = new KwpWalletTransfer();
+                walletTransfer.setId(new IdWorker(NumberConstant.ONE).nextId());
+                walletTransfer.setOrderNo(orderNo);
+                walletTransfer.setUid(transferReq.getUid());
+                walletTransfer.setFromEnt(walletRelationService.getEnt(transferReq.getUid()));
+                walletTransfer.setFilter(transferReq.getFilter());
+                walletTransfer.setToEnt(walletRelationService.getEnt(transferReq.getFilter()));
+                walletTransfer.setChannel(transferReq.getChannel());
+                walletTransfer.setMoney(transferReq.getMoney());
+                walletTransfer.setRemark(transferReq.getRemark());
+                walletTransfer.setCreateBy(LoginUserHolder.getUserId());
+                walletTransfer.setCreateTime(LocalDateTime.now());
+                walletTransfer.setUpdateBy(LoginUserHolder.getUserId());
+                walletTransfer.setUpdateTime(LocalDateTime.now());
+                walletTransfer.setDelFlag(Global.UN_DELETED);
+                //默认已提交
+                walletTransfer.setStatus(TransferEnum.APPLY.getStatus());
+
+                List<PatchPay> list = new ArrayList<>();
+                PatchPay patchPay = new PatchPay();
+                patchPay.setUid(transferReq.getFilter());
+                patchPay.setMoney(transferReq.bigMoney(transferReq.getMoney()));
+                patchPay.setRemark(transferReq.getRemark());
+                list.add(patchPay);
+                R<BusinessNo> businessNoR1 = payCenterService.payAgentPayV2(transferReq.getUid(), transferReq.getFilter(), channelEnum, transferReq.bigMoney(transferReq.getMoney()), list, orderNo, "2");
+                if (!businessNoR1.getStatus()) {
+                    //转账失败
+                    walletTransfer.setStatus(TransferEnum.FAILED.getStatus());
+                    transferMapper.insert(walletTransfer);
+                    throw new BusinessException(StringUtils.isNotBlank(businessNoR1.getMsg()) ? businessNoR1.getMsg() : "转账失败");
+                }
+                //转帐中
+                walletTransfer.setStatus(TransferEnum.TRANSFERRING.getStatus());
+                transferMapper.insert(walletTransfer);
+                return businessNoR1.getData();
+            } finally {
+                redisLockUtil.unlock(key);
+            }
         }
-        return businessNoR1.getData();
+        return "请勿重复提交!";
     }
 
 
@@ -455,9 +523,28 @@ public class WalletService {
         R<PrePayWalletPage> prePayIndexPageR = payCenterService.advancePayWALLET(uid, channelEnum, filter, prePayPage.getPage(), prePayPage.getPageSize());
         if (prePayIndexPageR.getStatus()) {
             PrePayWalletPage data = prePayIndexPageR.getData();
-            return new PageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), data.getTotal(), (int) (data.getTotal() / prePayPage.getPageSize() + 1), data.getRows());
+            //数据转换
+            List<PrePayWalletVo> list = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(data.getRows())) {
+                PrePayWalletVo prePayWalletVo;
+                for (PrePayWallet row : data.getRows()) {
+                    prePayWalletVo = new PrePayWalletVo();
+                    BeanUtils.copyProperties(row, prePayWalletVo);
+                    prePayWalletVo.setApMoney(dfMoney(row.getApMoney()));
+                    prePayWalletVo.setUsingApMoney(dfMoney(row.getUsingApMoney()));
+                    prePayWalletVo.setSettlingApMoney(dfMoney(row.getSettlingApMoney()));
+                    prePayWalletVo.setTotalApMoney(dfMoney(row.getTotalApMoney()));
+                    refundMoney(row, prePayWalletVo, false);
+                    list.add(prePayWalletVo);
+                }
+            }
+            ApPageRes<PrePayWalletVo> page = new ApPageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), data.getTotal(), (int) (data.getTotal() / prePayPage.getPageSize() + 1), list);
+            page.setApMoney(dfMoney(data.getApMoney()));
+            page.setUsingApMoney(dfMoney(data.getUsingApMoney()));
+            page.setTotalApMoney(dfMoney(data.getTotalApMoney()));
+            return page;
         }
-        return new PageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), 0, 0, new ArrayList<>());
+        return new ApPageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), 0, 0, new ArrayList<>());
 
     }
 
@@ -490,7 +577,26 @@ public class WalletService {
         R<PrePayWalletPage> prePayIndexPageR = payCenterService.advancePayReceive(uid, channelEnum, filter, prePayPage.getPage(), prePayPage.getPageSize());
         if (prePayIndexPageR.getStatus()) {
             PrePayWalletPage data = prePayIndexPageR.getData();
-            return new PageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), data.getTotal(), (int) (data.getTotal() / prePayPage.getPageSize() + 1), data.getRows());
+            //数据转换
+            List<PrePayWalletVo> list = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(data.getRows())) {
+                PrePayWalletVo prePayWalletVo;
+                for (PrePayWallet row : data.getRows()) {
+                    prePayWalletVo = new PrePayWalletVo();
+                    BeanUtils.copyProperties(row, prePayWalletVo);
+                    prePayWalletVo.setApMoney(dfMoney(row.getApMoney()));
+                    prePayWalletVo.setUsingApMoney(dfMoney(row.getUsingApMoney()));
+                    prePayWalletVo.setSettlingApMoney(dfMoney(row.getSettlingApMoney()));
+                    prePayWalletVo.setTotalApMoney(dfMoney(row.getTotalApMoney()));
+                    refundMoney(row, prePayWalletVo, true);
+                    list.add(prePayWalletVo);
+                }
+            }
+            ApPageRes<PrePayWalletVo> page = new ApPageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), data.getTotal(), (int) (data.getTotal() / prePayPage.getPageSize() + 1), list);
+            page.setApMoney(dfMoney(data.getApMoney()));
+            page.setUsingApMoney(dfMoney(data.getUsingApMoney()));
+            page.setTotalApMoney(dfMoney(data.getTotalApMoney()));
+            return page;
         }
         return new PageRes<>(prePayPage.getPage(), prePayPage.getPageSize(), 0, 0, new ArrayList<>());
     }
@@ -506,11 +612,16 @@ public class WalletService {
         if (StringUtils.isBlank(uid)) {
             throw new BusinessException("您暂未开通电子钱包");
         }
+        //字典
         ChannelEnum channelEnum = ChannelEnum.getByValue(prePayCheck.getChannel());
         if (Objects.isNull(channelEnum)) {
             throw new BusinessException("支付通道不存在");
         }
-        R<WalletInfo> walletInfoR = payCenterService.totalInfo(uid, channelEnum, prePayCheck.getFilter());
+        String filter = walletRelationService.getRelation(Long.parseLong(prePayCheck.getEntId()));
+        if (StringUtils.isBlank(filter)) {
+            throw new BusinessException("合作企业暂未开通电子钱包");
+        }
+        R<WalletInfo> walletInfoR = payCenterService.totalInfo(uid, channelEnum, filter);
         if (!walletInfoR.getStatus()) {
             throw new BusinessException(StringUtils.isNotBlank(walletInfoR.getMsg()) ? walletInfoR.getMsg() : "未找到交易方");
         }
@@ -531,12 +642,13 @@ public class WalletService {
         if (StringUtils.isBlank(uid)) {
             throw new BusinessException("您暂未开通电子钱包");
         }
+        //字典
         ChannelEnum channelEnum = ChannelEnum.getByValue(prePay.getChannel());
         if (Objects.isNull(channelEnum)) {
             throw new BusinessException("支付通道不存在");
         }
 
-        R<Order> orderR = payCenterService.advancePayApply(prePay.getUid(), channelEnum, prePay.getFilter(), prePay.bigMoney(prePay.getMoney()));
+        R<Order> orderR = payCenterService.advancePayApply(uid, channelEnum, prePay.getEntId(), prePay.bigMoney(prePay.getMoney()));
         if (!orderR.getStatus()) {
             throw new BusinessException(StringUtils.isNotBlank(orderR.getMsg()) ? orderR.getMsg() : "预付失败");
         }
@@ -548,12 +660,12 @@ public class WalletService {
      *
      * @return
      */
-    public Object prePayAppend(PrePay prePay) {
+    public Object prePayAppend(PrePayAppend prePay) {
         String uid = walletRelationService.getRelation(LoginUserHolder.getEntId());
         if (StringUtils.isBlank(uid)) {
             throw new BusinessException("您暂未开通电子钱包");
         }
-        ChannelEnum channelEnum = ChannelEnum.getByValue(prePay.getChannel());
+        ChannelEnum channelEnum = ChannelEnum.getByChannel(prePay.getChannel());
         if (Objects.isNull(channelEnum)) {
             throw new BusinessException("支付通道不存在");
         }
@@ -572,8 +684,7 @@ public class WalletService {
      */
     public Object applyRefund(RefundReq refundReq) {
         LambdaQueryWrapper<KwpWalletRefund> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwpWalletRefund::getChannel, refundReq.getChannel());
-        wrapper.eq(KwpWalletRefund::getUid, refundReq.getUid()).eq(KwpWalletRefund::getFilter, refundReq.getFilter()).eq(KwpWalletRefund::getStatus, RefundEnum.APPLY.getStatus()).last("limit 1");
+        wrapper.eq(KwpWalletRefund::getChannel, refundReq.getChannel()).eq(KwpWalletRefund::getUid, refundReq.getUid()).eq(KwpWalletRefund::getFilter, refundReq.getFilter()).eq(KwpWalletRefund::getStatus, RefundEnum.APPLY.getStatus()).last("limit 1");
         KwpWalletRefund kwpWalletRefund = kwpWalletRefundMapper.selectOne(wrapper);
         if (Objects.nonNull(kwpWalletRefund)) {
             throw new BusinessException("存在未完成的退款订单");
@@ -631,7 +742,7 @@ public class WalletService {
         patchPay.setMoney(refundReq.bigMoney(refundReq.getMoney()));
         patchPay.setRemark(refundReq.getRemark());
         list.add(patchPay);
-        R<BusinessNo> businessNoR = payCenterService.payAgentPayV2(refundReq.getUid(), refundReq.getFilter(), channelEnum, refundReq.bigMoney(refundReq.getMoney()), list, kwpWalletRefund.getOrderNo(), "1");
+        R<BusinessNo> businessNoR = payCenterService.payAgentPayV2(refundReq.getUid(), refundReq.getFilter(), channelEnum, refundReq.bigMoney(refundReq.getMoney()), list, OrderUtils.generateOrderNo("SEQ"), "1");
         if (!businessNoR.getStatus()) {
             throw new BusinessException(StringUtils.isNotBlank(businessNoR.getMsg()) ? businessNoR.getMsg() : "退款失败");
         }
@@ -664,7 +775,7 @@ public class WalletService {
             patchPay.setRemark(refundReq.getRemark());
             list.add(patchPay);
             log.info("异步提交清分退款任务");
-            R<BusinessNo> businessNoR1 = payCenterService.payAgentPayV2(refundReq.getFilter(), refundReq.getUid(), channelEnum, refundReq.bigMoney(refundReq.getMoney()), list, kwpWalletRefund.getOrderNo(), "2");
+            R<BusinessNo> businessNoR1 = payCenterService.payAgentPayV2(refundReq.getFilter(), refundReq.getUid(), channelEnum, refundReq.bigMoney(refundReq.getMoney()), list, OrderUtils.generateOrderNo("SEQ"), "2");
             if (businessNoR1.getStatus()) {
                 kwpWalletRefund.setActualMoney(refundReq.getMoney());
                 kwpWalletRefund.setUpdateBy(userId);

+ 16 - 21
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/task/RefundTask.java

@@ -1,10 +1,12 @@
 package com.sckw.payment.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.sckw.payment.model.dto.wallet.PatchPay;
+import com.sckw.payment.api.model.constant.ChannelEnum;
+import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.payment.dao.KwpWalletRefundMapper;
 import com.sckw.payment.model.KwpWalletRefund;
 import com.sckw.payment.model.constant.RefundEnum;
+import com.sckw.payment.model.dto.wallet.SplitDto;
 import com.sckw.payment.service.PayCenterService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -13,10 +15,8 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
+import java.time.LocalDateTime;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * @author xucaiqin
@@ -31,7 +31,6 @@ public class RefundTask {
     @Resource
     private KwpWalletRefundMapper kwpWalletRefundMapper;
 
-
     @Scheduled(cron = "0 0/1 * * * ? ")
     public void task() {
         LambdaQueryWrapper<KwpWalletRefund> wrapper = new LambdaQueryWrapper<>();
@@ -41,27 +40,23 @@ public class RefundTask {
             log.warn("无数据");
             return;
         }
-        List<PatchPay> list;
         try {
             for (KwpWalletRefund kwpWalletRefund : kwpWalletRefunds) {
-                list = new ArrayList<>();
-                PatchPay patchPay = new PatchPay();
-                patchPay.setUid(kwpWalletRefund.getFilter());
-                patchPay.setMoney(bigMoney(kwpWalletRefund.getActualMoney()));
-                patchPay.setRemark(kwpWalletRefund.getRemark());
-                list.add(patchPay);
-                //查询清分状态,修改退款单状态 todo-xcq
+                //查询清分状态,修改退款单状态
+                R<List<SplitDto>> listR = payCenterService.agentPayQuery(kwpWalletRefund.getUid(), ChannelEnum.getByChannel(kwpWalletRefund.getChannel()), kwpWalletRefund.getOrderNo());
+                if (listR.getStatus()) {
+                    List<SplitDto> data = listR.getData();
+                    if (!CollectionUtils.isEmpty(data)) {
+                        if (data.stream().allMatch(a -> a.getStatus() == 1)) {
+                            kwpWalletRefund.setUpdateTime(LocalDateTime.now());
+                            kwpWalletRefund.setStatus(RefundEnum.SUCCESS.getStatus());
+                            kwpWalletRefundMapper.updateById(kwpWalletRefund);
+                        }
+                    }
+                }
             }
         } catch (Exception ex) {
             log.error("定时任务异常:{}", ex, ex);
         }
     }
-
-    private Long bigMoney(BigDecimal big) {
-        if (Objects.isNull(big)) {
-            return 0L;
-        }
-        BigDecimal divide = big.multiply(new BigDecimal("100"));
-        return divide.longValueExact();
-    }
 }

+ 28 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpWalletTransferMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.payment.dao.KwpWalletTransferMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.payment.model.KwpWalletTransfer">
+    <!--@mbg.generated-->
+    <!--@Table kwp_wallet_transfer-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
+    <result column="uid" jdbcType="VARCHAR" property="uid" />
+    <result column="from_ent" jdbcType="BIGINT" property="fromEnt" />
+    <result column="filter" jdbcType="VARCHAR" property="filter" />
+    <result column="to_ent" jdbcType="BIGINT" property="toEnt" />
+    <result column="channel" jdbcType="VARCHAR" property="channel" />
+    <result column="money" jdbcType="DECIMAL" property="money" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="create_by" jdbcType="BIGINT" property="createBy" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_by" jdbcType="BIGINT" property="updateBy" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, order_no, `uid`, from_ent, `filter`, to_ent, channel, money, remark, create_by, 
+    create_time, update_by, update_time, del_flag, `status`
+  </sql>
+</mapper>