xucaiqin 2 лет назад
Родитель
Сommit
05c8c6b0ae
39 измененных файлов с 584 добавлено и 196 удалено
  1. 23 11
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementWalletController.java
  2. 8 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementTradeMapper.java
  3. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerLogistics.java
  4. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerTrade.java
  5. 18 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementTradeTrack.java
  6. 4 5
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementWallet.java
  7. 3 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementTrackEnum.java
  8. 0 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementWalletPayTypeEnum.java
  9. 30 12
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/WalletChannelEnum.java
  10. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/ILedger.java
  11. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/ISettlement.java
  12. 5 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerCarrierDto.java
  13. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerLogisticsDto.java
  14. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerPurchaseDto.java
  15. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerSellDto.java
  16. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerShipperDto.java
  17. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerTradeDto.java
  18. 18 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerUnitDto.java
  19. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementPurchaseDto.java
  20. 6 5
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementSellDto.java
  21. 181 32
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementTradeDto.java
  22. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java
  23. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java
  24. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/SettlementWalletReq.java
  25. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java
  26. 1 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeSendReq.java
  27. 29 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/WalletPayReq.java
  28. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsDetailVo.java
  29. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerTradeDetailVo.java
  30. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  31. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java
  32. 16 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementOfflineService.java
  33. 9 9
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java
  34. 173 79
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java
  35. 17 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java
  36. 1 1
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml
  37. 1 1
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml
  38. 15 0
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementTradeMapper.xml
  39. 3 3
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementWalletMapper.xml

+ 23 - 11
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpSettlementWalletController.java

@@ -4,9 +4,12 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.model.constant.SettlementOrderTypeEnum;
 import com.sckw.payment.model.constant.SettlementWalletPayTypeEnum;
 import com.sckw.payment.model.vo.req.SettlementWalletReq;
+import com.sckw.payment.model.vo.req.WalletPayReq;
 import com.sckw.payment.service.KwpSettlementWalletService;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
@@ -17,6 +20,7 @@ import java.math.BigDecimal;
  * @author Aick Spt
  * @date 2023-07-20 14:42
  */
+@Validated
 @RestController
 @RequestMapping(name = "结算-电子钱包结算记录", path = "/kwpSettlementWallet")
 public class KwpSettlementWalletController {
@@ -64,15 +68,23 @@ public class KwpSettlementWalletController {
     }
 
     /**
-     * 采购-货到付款
-     * @param id    结算单id
-     * @param price 本次付款金额
+     * 采购-货到付款-查询钱包余额
+     *
+     * @param id 结算单id
      * @author Aick Spt
      * @date 2023-07-25 09:55
      */
-    @GetMapping(name = "销售-付款确认-(新增电子钱包记录-采购货到付款)", path = "confirmTradePayment")
-    public HttpResult confirmTradePayment(@RequestParam("id") Long id, @RequestParam("price") BigDecimal price) {
-        return HttpResult.ok(kwpSettlementWalletService.confirmTradePayment(id, price));
+    @GetMapping(name = "采购-货到付款-查询钱包余额", path = "getConfirmPay")
+    public HttpResult getConfirmPay(@RequestParam("id") @NotBlank(message = "id不能为空") String id) {
+        return HttpResult.ok(kwpSettlementWalletService.getConfirmTradePayment(Long.parseLong(id)));
+    }
+
+    /**
+     * 采购-货到付款
+     */
+    @PostMapping(name = "销售-付款确认-(新增电子钱包记录-采购货到付款)", path = "confirmReceive")
+    public HttpResult confirmTradePayment(@RequestBody WalletPayReq payReq) {
+        return HttpResult.ok(kwpSettlementWalletService.confirmTradePayment(payReq));
     }
 
     /**
@@ -90,14 +102,14 @@ public class KwpSettlementWalletController {
 
     /**
      * 销售-预付款
-     * @param id    结算单id
-     * @param price 本次付款金额
+     *
+     * @param id 结算单id
      * @author Aick Spt
      * @date 2023-07-25 09:55
      */
-    @GetMapping(name = "销售-收款确认-预付款(电子钱包)", path = "confirmTradeCollection")
-    public HttpResult confirmTradeCollection(@RequestParam("id") Long id, @RequestParam("price") Float price) {
-        return HttpResult.ok(kwpSettlementWalletService.confirmTradeCollection(id, price));
+    @PostMapping(name = "销售-收款确认-预付款(电子钱包)", path = "confirmPrePay")
+    public HttpResult confirmTradeCollection(@RequestParam("id") @NotBlank(message = "id不能为空") String id) {
+        return HttpResult.ok(kwpSettlementWalletService.confirmTradeCollection(Long.parseLong(id)));
     }
 
 

+ 8 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementTradeMapper.java

@@ -2,6 +2,7 @@ package com.sckw.payment.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpSettlementTrade;
+import com.sckw.payment.model.dto.LedgerUnitDto;
 import com.sckw.payment.model.dto.SettlementTradeDto;
 import com.sckw.payment.model.vo.req.SettlementTradeReq;
 import com.sckw.payment.model.vo.res.SettlementLogisticsStatusCountVo;
@@ -20,10 +21,13 @@ import java.util.List;
 public interface KwpSettlementTradeMapper extends BaseMapper<KwpSettlementTrade> {
     List<SettlementTradeDto> pageSelect(@Param("settlementReq") SettlementTradeReq settlementReq);
 
-    SettlementSumVo sumMoney(@Param("settlementReq")SettlementTradeReq settlementReq);
+    SettlementSumVo sumMoney(@Param("settlementReq") SettlementTradeReq settlementReq);
 
-    SettlementLogisticsStatusCountVo countOrder(@Param("settlementReq")SettlementTradeReq settlementReq);
+    SettlementLogisticsStatusCountVo countOrder(@Param("settlementReq") SettlementTradeReq settlementReq);
 
-    List<SettlementTradeDto> selectByIds(@Param("ids") List<Long> ids);
-    SettlementTradeDto getById(@Param("id") Long id);
+    List<SettlementTradeDto> selectByIds(@Param("ids") List<Long> ids, @Param("unitType") Integer unitType);
+
+    SettlementTradeDto getById(@Param("id") Long id, @Param("unitType") Integer unitType);
+
+    List<LedgerUnitDto> getListById(@Param("id") Long id);
 }

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

@@ -70,7 +70,7 @@ public class KwpLedgerLogistics {
      * 交易方式(预付款、货到付款)
      */
     @TableField(value = "trading")
-    private Integer trading;
+    private String trading;
 
     /**
      * 总应收/元

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

@@ -70,7 +70,7 @@ public class KwpLedgerTrade {
      * 交易方式(预付款、货到付款)
      */
     @TableField(value = "trading")
-    private Integer trading;
+    private String trading;
 
     /**
      * 总应收/元

+ 18 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementTradeTrack.java

@@ -4,11 +4,14 @@ 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 java.time.LocalDateTime;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.context.LoginUserHolder;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.time.LocalDateTime;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:42:19
@@ -66,4 +69,18 @@ public class KwpSettlementTradeTrack {
      */
     @TableField(value = "del_flag")
     private Integer delFlag;
+
+    public static KwpSettlementTradeTrack build(Long tSettlementId, Integer status) {
+        KwpSettlementTradeTrack kwpSettlementTradeTrack = new KwpSettlementTradeTrack();
+        kwpSettlementTradeTrack.setId(new IdWorker(1).nextId());
+        kwpSettlementTradeTrack.setTSettlementId(tSettlementId);
+        kwpSettlementTradeTrack.setRemark("");
+        kwpSettlementTradeTrack.setStatus(status);
+        kwpSettlementTradeTrack.setCreateBy(LoginUserHolder.getUserId());
+        kwpSettlementTradeTrack.setCreateTime(LocalDateTime.now());
+        kwpSettlementTradeTrack.setUpdateBy(LoginUserHolder.getUserId());
+        kwpSettlementTradeTrack.setUpdateTime(LocalDateTime.now());
+        kwpSettlementTradeTrack.setDelFlag(0);
+        return kwpSettlementTradeTrack;
+    }
 }

+ 4 - 5
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementWallet.java

@@ -4,15 +4,14 @@ 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 java.math.BigDecimal;
-import java.math.BigInteger;
-import java.time.LocalDateTime;
-
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
 /**
  * 电子钱包结算记录(交易订单结算/物流订单结算)
  *
@@ -54,7 +53,7 @@ public class KwpSettlementWallet {
      * 线上渠道 1-huifu
      */
     @TableField(value = "channel")
-    private Integer channel;
+    private String channel;
 
     /**
      * 回款时间

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

@@ -8,7 +8,9 @@ package com.sckw.payment.model.constant;
  */
 public enum SettlementTrackEnum {
 
-    SUCCESS(7,"对账完成");
+    PRE_PAY(1, "收款确认-预付款"),
+    RECEIVE_PAY(2, "付款确认-货到付款"),
+    OFFLINE_PAY(3, "收款确认-线下付款");
 
     private int status;
     private String desc;

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

@@ -8,7 +8,6 @@ package com.sckw.payment.model.constant;
 public enum SettlementWalletPayTypeEnum {
     ADVANCE_PAYMENT(1, "预付款"),
     CASH_ON_DELIVERY(2, "货到付款");
-//    OFFLINE_PAYMENT(3, "线下付款");
 
     private int status;
     private String desc;

+ 30 - 12
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/WalletChannelEnum.java

@@ -1,19 +1,23 @@
 package com.sckw.payment.model.constant;
 
+import org.apache.commons.lang3.StringUtils;
+
 /**
  * @author Aick Spt
  * @date 2023-07-27 12:54
  */
 public enum WalletChannelEnum {
-    HF(1, "huifu"),//汇付
-    XS(2, "xinsheng"),//新生
-    ZX(3, "zhongxin");//中信
+    HF(1, "1", "huifu"),//汇付
+    XS(2, "2", "xinsheng"),//新生
+    ZX(3, "3", "zhongxin");//中信
 
-    private int status;
-    private String desc;
+    private final int status;
+    private final String value;
+    private final String desc;
 
-    WalletChannelEnum(int status, String desc) {
+    WalletChannelEnum(int status, String value, String desc) {
         this.status = status;
+        this.value = value;
         this.desc = desc;
     }
 
@@ -21,16 +25,12 @@ public enum WalletChannelEnum {
         return status;
     }
 
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
     public String getDesc() {
         return desc;
     }
 
-    public void setDesc(String desc) {
-        this.desc = desc;
+    public String getValue() {
+        return value;
     }
 
     // 添加静态方法,根据 status 获取对应的 desc
@@ -43,5 +43,23 @@ public enum WalletChannelEnum {
         return null; // 可根据实际需求返回默认值或其他处理
     }
 
+    /**
+     * 通过交易方式字典获取渠道
+     *
+     * @param trading
+     * @return
+     */
+    public static String getValue(String trading) {
+        if (StringUtils.isBlank(trading)) {
+            return null;
+        }
+        String substring = trading.substring(1);
+        for (WalletChannelEnum walletChannelEnum : values()) {
+            if (StringUtils.equals(walletChannelEnum.getValue(), substring)) {
+                return walletChannelEnum.getValue();
+            }
+        }
+        return null; // 可根据实际需求返回默认值或其他处理
+    }
 
 }

+ 2 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/ILedger.java

@@ -15,9 +15,9 @@ public interface ILedger {
     Integer getTaxRate();
 
 
-    void setTrading(Integer trading);
+    void setTrading(String trading);
 
-    Integer getTrading();
+    String getTrading();
 
     void setTradingLabel(String tradingLabel);
 

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

@@ -10,9 +10,9 @@ import java.util.Objects;
  */
 public interface ISettlement {
 
-    void setTrading(Integer trading);
+    void setTrading(String trading);
 
-    Integer getTrading();
+    String getTrading();
 
     void setTradingLabel(String tradingLabel);
 

+ 5 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerCarrierDto.java

@@ -65,7 +65,7 @@ public class LedgerCarrierDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 
@@ -210,11 +210,13 @@ public class LedgerCarrierDto implements ILedger {
         this.taxRate = taxRate;
     }
 
-    public Integer getTrading() {
+    @Override
+    public String getTrading() {
         return trading;
     }
 
-    public void setTrading(Integer trading) {
+    @Override
+    public void setTrading(String trading) {
         this.trading = trading;
     }
 

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerLogisticsDto.java

@@ -68,7 +68,7 @@ public class LedgerLogisticsDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerPurchaseDto.java

@@ -52,7 +52,7 @@ public class LedgerPurchaseDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerSellDto.java

@@ -52,7 +52,7 @@ public class LedgerSellDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerShipperDto.java

@@ -51,7 +51,7 @@ public class LedgerShipperDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerTradeDto.java

@@ -52,7 +52,7 @@ public class LedgerTradeDto implements ILedger {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
 

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

@@ -0,0 +1,18 @@
+package com.sckw.payment.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 对账单关联的企业信息
+ *
+ * @author Aick Spt
+ * @date 2023-07-20 12:26
+ */
+@Getter
+@Setter
+public class LedgerUnitDto  {
+    private Long topEntId;
+    private Long entId;
+    private Integer unitType;
+}

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

@@ -63,7 +63,7 @@ public class SettlementPurchaseDto implements ISettlement {
     /**
      * 交易方式
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
     /**

+ 6 - 5
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementSellDto.java

@@ -63,7 +63,7 @@ public class SettlementSellDto implements ISettlement {
     /**
      * 交易方式(预付款、货到付款)
      */
-    private Integer trading;
+    private String trading;
     private String tradingLabel;
 
     /**
@@ -113,15 +113,16 @@ public class SettlementSellDto implements ISettlement {
         return auditPhone;
     }
 
-    @Override
-    public Integer getTrading() {
-        return trading;
-    }
 
     public String getTradingLabel() {
         return tradingLabel;
     }
 
+    @Override
+    public String getTrading() {
+        return trading;
+    }
+
     @Override
     public Integer getStatus() {
         return status;

+ 181 - 32
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementTradeDto.java

@@ -1,11 +1,10 @@
 package com.sckw.payment.model.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Getter;
-import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * 结算-交易订单
@@ -13,8 +12,6 @@ import java.util.Date;
  * @author Aick Spt
  * @date 2023-07-20 12:26
  */
-@Getter
-@Setter
 public class SettlementTradeDto implements ISettlement {
 
     /**
@@ -55,6 +52,8 @@ public class SettlementTradeDto implements ISettlement {
      * 带回款金额(扩展的计算字段)
      */
     private BigDecimal waitPrice;
+    private String trading;
+    private String tradingLabel;
 
     /**
      * 预计收款日期
@@ -91,6 +90,7 @@ public class SettlementTradeDto implements ISettlement {
      * 状态(待回款、部分回款、全部回款、回退)
      */
     private Integer status;
+    private String statusLabel;
 
     /**
      * 创建人
@@ -119,50 +119,199 @@ public class SettlementTradeDto implements ISettlement {
      */
     private Integer delFlag;
 
-    // 添加构造函数,getter和setter方法,以及其他业务逻辑方法(根据需要)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEntId() {
+        return entId;
+    }
+
+    public void setEntId(Long entId) {
+        this.entId = entId;
+    }
+
+    public Long gettLedgerId() {
+        return tLedgerId;
+    }
+
+    public void settLedgerId(Long tLedgerId) {
+        this.tLedgerId = tLedgerId;
+    }
+
+    public String getStOrderNo() {
+        return stOrderNo;
+    }
+
+    public void setStOrderNo(String stOrderNo) {
+        this.stOrderNo = stOrderNo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public BigDecimal getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(BigDecimal totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public BigDecimal getActualPrice() {
+        if (Objects.isNull(actualPrice)) {
+            return new BigDecimal("0.0");
+        }
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public BigDecimal getWaitPrice() {
+        if (Objects.isNull(waitPrice)) {
+            return new BigDecimal("0.0");
+        }
+        return waitPrice;
+    }
+
+    public void setWaitPrice(BigDecimal waitPrice) {
+        this.waitPrice = waitPrice;
+    }
+
+    public String getTradingLabel() {
+        return tradingLabel;
+    }
+
+    public Date getReceiptTime() {
+        return receiptTime;
+    }
+
+    public void setReceiptTime(Date receiptTime) {
+        this.receiptTime = receiptTime;
+    }
+
+    public String getAuditUser() {
+        return auditUser;
+    }
+
+    public void setAuditUser(String auditUser) {
+        this.auditUser = auditUser;
+    }
+
+    public String getAuditPhone() {
+        return auditPhone;
+    }
+
+    public void setAuditPhone(String auditPhone) {
+        this.auditPhone = auditPhone;
+    }
+
+    public String getSuccessUser() {
+        return successUser;
+    }
+
+    public void setSuccessUser(String successUser) {
+        this.successUser = successUser;
+    }
+
+    public String getSuccessPhone() {
+        return successPhone;
+    }
+
+    public void setSuccessPhone(String successPhone) {
+        this.successPhone = successPhone;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
 
     @Override
-    public String toString() {
-        return "SettlementTradeDto{" +
-                "id=" + id +
-                ", entId=" + entId +
-                ", tLedgerId=" + tLedgerId +
-                ", stOrderNo='" + stOrderNo + '\'' +
-                ", name='" + name + '\'' +
-                ", totalPrice=" + totalPrice +
-                ", actualPrice=" + actualPrice +
-                ", receiptTime=" + receiptTime +
-                ", auditUser='" + auditUser + '\'' +
-                ", auditPhone='" + auditPhone + '\'' +
-                ", successUser='" + successUser + '\'' +
-                ", successPhone='" + successPhone + '\'' +
-                ", remark='" + remark + '\'' +
-                ", status=" + status +
-                ", createBy=" + createBy +
-                ", createTime=" + createTime +
-                ", updateBy=" + updateBy +
-                ", updateTime=" + updateTime +
-                ", delFlag=" + delFlag +
-                '}';
+    public Integer getStatus() {
+        return status;
     }
 
     @Override
-    public void setTrading(Integer trading) {
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
 
+    public String getStatusLabel() {
+        return statusLabel;
+    }
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(Long updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Integer delFlag) {
+        this.delFlag = delFlag;
     }
 
     @Override
-    public Integer getTrading() {
-        return null;
+    public void setTrading(String trading) {
+        this.trading = trading;
     }
 
     @Override
-    public void setTradingLabel(String tradingLabel) {
+    public String getTrading() {
+        return trading;
+    }
 
+    @Override
+    public void setTradingLabel(String tradingLabel) {
+        this.tradingLabel = tradingLabel;
     }
 
     @Override
     public void setStatusLabel(String statusLabel) {
-
+        this.statusLabel = statusLabel;
     }
 }

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java

@@ -21,7 +21,7 @@ public class LogisticsReq extends BasePara {
     private String startCreateTime;
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private String endCreateTime;
-    private Integer trading;
+    private String trading;
     /**
      * @see LedgerEnum
      */

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java

@@ -60,7 +60,7 @@ public class LogisticsSendReq implements IdsList {
      * 交易方式
      */
     @NotNull(message = "付款方式不能为空")
-    private Integer trading;
+    private String trading;
     /**
      * 总应收/元
      */

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

@@ -16,7 +16,7 @@ public class SettlementWalletReq extends BasePara {
     /**
      * 交易方式
      */
-    private Integer trading;
+    private String trading;
 
     /**
      * 支付方式 预付款、货到付款
@@ -30,7 +30,7 @@ public class SettlementWalletReq extends BasePara {
      * 结算单id
      */
     @NotBlank(message = "结算单id不能为空")
-    private String settlementId;
+    private String id;
 
 
 }

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java

@@ -18,7 +18,7 @@ public class TradeReq extends BasePara {
     private static final long serialVersionUID = 5328731681168692784L;
     private String startCreateTime;
     private String endCreateTime;
-    private Integer trading;
+    private String trading;
     /**
      * @see LedgerEnum
      */

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

@@ -12,7 +12,6 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.List;
 
 /**
  * 贸易对账单
@@ -65,7 +64,7 @@ public class TradeSendReq implements IdsList {
      * 交易方式
      */
     @NotNull(message = "付款方式不能为空")
-    private Integer trading;
+    private String trading;
     /**
      * 总应收/元
      */

+ 29 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/WalletPayReq.java

@@ -0,0 +1,29 @@
+package com.sckw.payment.model.vo.req;
+
+import com.sckw.core.model.base.IdsList;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @author: xucaiqin
+ * @date: 2023-07-31 18:13:26
+ */
+@Getter
+@Setter
+public class WalletPayReq implements IdsList {
+
+    /**
+     * 结算单id
+     */
+    @NotBlank(message = "结算单id不能为空")
+    private String id;
+    /**
+     * 金额
+     */
+    @NotNull(message = "付款金额不能为空")
+    private BigDecimal price;
+}

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsDetailVo.java

@@ -22,7 +22,7 @@ public class LedgerLogisticsDetailVo {
     private String lLedgerNo;
     private String name;
     private String firmName;
-    private Integer trading;
+    private String trading;
     private Integer taxRate;
     private BigDecimal totalPrice;
     private BigDecimal actualPrice;

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerTradeDetailVo.java

@@ -22,7 +22,7 @@ public class LedgerTradeDetailVo {
     private String tLedgerNo;
     private String name;
     private String firmName;
-    private Integer trading;
+    private String trading;
     private Integer taxRate;
     private BigDecimal totalPrice;
     private BigDecimal actualPrice;

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

@@ -77,8 +77,8 @@ public class KwpLedgerLogisticsService extends AbsLedger {
             tradingMap = tradingDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
         }
         for (ILedger logisticsDto : list) {
-            Integer trading = logisticsDto.getTrading();
-            logisticsDto.setTradingLabel(tradingMap.get(String.valueOf(trading)));
+            String trading = logisticsDto.getTrading();
+            logisticsDto.setTradingLabel(tradingMap.get(trading));
             Integer taxRate = logisticsDto.getTaxRate();
             logisticsDto.setTaxRateLabel(taxRateMap.get(String.valueOf(taxRate)));
 

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

@@ -73,8 +73,8 @@ public class KwpLedgerTradeService extends AbsLedger {
             tradingMap = tradingDict.stream().collect(Collectors.toMap(SysDictResDto::getValue, SysDictResDto::getLabel, (a, b) -> a));
         }
         for (ILedger tradeDto : list) {
-            Integer trading = tradeDto.getTrading();
-            tradeDto.setTradingLabel(tradingMap.get(String.valueOf(trading)));
+            String trading = tradeDto.getTrading();
+            tradeDto.setTradingLabel(tradingMap.get(trading));
             Integer taxRate = tradeDto.getTaxRate();
             tradeDto.setTaxRateLabel(taxRateMap.get(String.valueOf(taxRate)));
 

+ 16 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementOfflineService.java

@@ -9,6 +9,8 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.payment.dao.KwpSettlementOfflineMapper;
 import com.sckw.payment.model.KwpSettlementOffline;
 import com.sckw.payment.model.KwpSettlementTrade;
+import com.sckw.payment.model.constant.SettlementEnum;
+import com.sckw.payment.model.constant.TradeUnitType;
 import com.sckw.payment.model.constant.TradingEnum;
 import com.sckw.payment.model.dto.SettlementOfflineDto;
 import com.sckw.payment.model.dto.SettlementTradeDto;
@@ -19,6 +21,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -160,11 +163,11 @@ public class KwpSettlementOfflineService {
 
     @Transactional(rollbackFor = Exception.class)
     public String confirmTradeCollection(SettlementOfflinePayReq payReq) {
-        SettlementTradeDto byId = settlementTradeService.getById(payReq.getSettlementIdLong());
+        SettlementTradeDto byId = settlementTradeService.getById(payReq.getSettlementIdLong(), TradeUnitType.PURCHASE);
         if (Objects.isNull(byId)) {
             throw new BusinessException("结算单不存在");
         }
-        if (TradingEnum.OFFLINE_PAY.getStatus() != byId.getTrading()) {
+        if (StringUtils.equals(TradingEnum.OFFLINE_PAY.getValue(), byId.getTrading())) {
             throw new BusinessException("只支持线下付款交易方法进行线下结算");
         }
         BigDecimal totalPrice = byId.getTotalPrice();
@@ -187,7 +190,13 @@ public class KwpSettlementOfflineService {
         KwpSettlementTrade kwpSettlementTrade = new KwpSettlementTrade();
         kwpSettlementTrade.setId(byId.getId());
         kwpSettlementTrade.setActualPrice(actualPrice.add(payPrice));//已收款加本次收款
-        kwpSettlementTrade.setStatus(1);
+        int status = 0;
+        if (subtract1.compareTo(new BigDecimal("0.0")) == 0) {
+            status = SettlementEnum.ALL_PAYMENT.getStatus();
+        } else if (subtract1.compareTo(new BigDecimal("0.0")) > 0) {
+            status = SettlementEnum.PARTIAL_PAYMENT.getStatus();
+        }
+        kwpSettlementTrade.setStatus(status);
         kwpSettlementTrade.setUpdateBy(LoginUserHolder.getUserId());
         kwpSettlementTrade.setUpdateTime(LocalDateTime.now());
         settlementTradeService.updateById(kwpSettlementTrade);
@@ -210,6 +219,10 @@ public class KwpSettlementOfflineService {
         kwpSettlementOffline.setDelFlag(0);
 
         settlementOfflineMapper.insert(kwpSettlementOffline);
+
+        //记录表记录数据 todo-xcq
+
+        //中台接口 todo-xcq
         return "";
     }
 }

+ 9 - 9
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java

@@ -11,10 +11,7 @@ import com.sckw.payment.dao.KwpSettlementTradeMapper;
 import com.sckw.payment.model.KwpSettlementTrade;
 import com.sckw.payment.model.constant.SettlementEnum;
 import com.sckw.payment.model.constant.TradeUnitType;
-import com.sckw.payment.model.dto.ISettlement;
-import com.sckw.payment.model.dto.SettlementPurchaseDto;
-import com.sckw.payment.model.dto.SettlementSellDto;
-import com.sckw.payment.model.dto.SettlementTradeDto;
+import com.sckw.payment.model.dto.*;
 import com.sckw.payment.model.vo.req.SettlementReq;
 import com.sckw.payment.model.vo.req.SettlementTradeReq;
 import com.sckw.payment.model.vo.res.SettlementLogisticsStatusCountVo;
@@ -41,8 +38,11 @@ public class KwpSettlementTradeService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
 
-    public SettlementTradeDto getById(Long id) {
-        return settlementTradeMapper.getById(id);
+    public SettlementTradeDto getById(Long id,Integer unitType) {
+        return settlementTradeMapper.getById(id,unitType);
+    }
+    public List<LedgerUnitDto> getListById(Long id) {
+        return settlementTradeMapper.getListById(id);
     }
 
     public void save(KwpSettlementTrade kwpSettlementTrade) {
@@ -53,8 +53,8 @@ public class KwpSettlementTradeService {
         //字典等数据转换
         Map<String, SysDictResDto> dictResDtoMap = remoteSystemService.queryDictMapByType(DictTypeEnum.TRADE_TYPE.getType());
         for (ISettlement iSettlement : list) {
-            Integer trading = iSettlement.getTrading();
-            SysDictResDto sysDictResDto = dictResDtoMap.get(String.valueOf(trading));
+            String trading = iSettlement.getTrading();
+            SysDictResDto sysDictResDto = dictResDtoMap.get(trading);
             if (Objects.nonNull(sysDictResDto)) {
                 iSettlement.setTradingLabel(sysDictResDto.getLabel());
             }
@@ -114,7 +114,7 @@ public class KwpSettlementTradeService {
 
 
     public List<ISettlement> selectList(List<Long> ids, int unitType) {
-        List<SettlementTradeDto> kwpSettlementTrades = settlementTradeMapper.selectByIds(ids);
+        List<SettlementTradeDto> kwpSettlementTrades = settlementTradeMapper.selectByIds(ids,unitType);
         if (!CollectionUtils.isEmpty(kwpSettlementTrades)) {
             //根据企业类型进行对应的数据
             if (unitType == TradeUnitType.PURCHASE) {

+ 173 - 79
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java

@@ -5,25 +5,29 @@ import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.payment.api.model.constant.ChannelEnum;
+import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.payment.dao.KwpSettlementLogisticsMapper;
-import com.sckw.payment.dao.KwpSettlementTradeMapper;
 import com.sckw.payment.dao.KwpSettlementWalletMapper;
 import com.sckw.payment.model.KwpSettlementLogistics;
 import com.sckw.payment.model.KwpSettlementTrade;
+import com.sckw.payment.model.KwpSettlementTradeTrack;
 import com.sckw.payment.model.KwpSettlementWallet;
-import com.sckw.payment.model.constant.SettlementEnum;
-import com.sckw.payment.model.constant.SettlementOrderTypeEnum;
-import com.sckw.payment.model.constant.SettlementWalletPayTypeEnum;
-import com.sckw.payment.model.constant.WalletChannelEnum;
+import com.sckw.payment.model.constant.*;
+import com.sckw.payment.model.dto.LedgerUnitDto;
 import com.sckw.payment.model.dto.SettlementLogisticsDto;
 import com.sckw.payment.model.dto.SettlementTradeDto;
 import com.sckw.payment.model.dto.SettlementWalletDto;
 import com.sckw.payment.model.vo.req.SettlementWalletReq;
+import com.sckw.payment.model.vo.req.WalletPayReq;
 import com.sckw.payment.model.vo.res.SettlementWalletVo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -54,9 +58,11 @@ public class KwpSettlementWalletService {
     @Resource
     private KwpSettlementTradeService kwpSettlementTradeService;
     @Resource
-    private KwpSettlementTradeMapper kwpSettlementTradeMapper;
+    private PayCenterService payCenterService;
     @Resource
-    private KwpLedgerTradeService ledgerTradeService;
+    private KwpWalletRelationService walletRelationService;
+    @Resource
+    private KwpSettlementTradeTrackService settlementTradeTrackService;
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
 
@@ -162,7 +168,7 @@ public class KwpSettlementWalletService {
             kwpSettlementWallet.setEntId(settlementLogisticsDto.getEntId());
             kwpSettlementWallet.setSettlementId(settlementLogisticsDto.getId());
             kwpSettlementWallet.setOrderType(SettlementOrderTypeEnum.LOGISTICS.getStatus());
-            kwpSettlementWallet.setChannel(WalletChannelEnum.HF.getStatus());//先用数字默认定义为1
+            kwpSettlementWallet.setChannel(WalletChannelEnum.HF.getValue());//先用数字默认定义为1
             kwpSettlementWallet.setPayTime(LocalDateTime.now());
             kwpSettlementWallet.setPayPrice(price);
             kwpSettlementWallet.setTopayPrice(remainingReceivables);
@@ -214,74 +220,94 @@ public class KwpSettlementWalletService {
 
 
     /**
-     * 销售-付款确认-(新增电子钱包记录-采购货到付款)
+     * 销售-付款确认-货到付款
      *
      * @author Aick Spt
      * @date 2023-07-27 16:13
      */
-    public Integer confirmTradePayment(Long id, BigDecimal price) {
-        //先查询出结算单情况
-        SettlementTradeDto settlementTradeDto = kwpSettlementTradeService.detailPayment(id);
-        log.info(String.valueOf(settlementTradeDto));
-        //检查结算单状态和所差金额
-        if (settlementTradeDto == null) {
-            log.error("非法请求,查无数据:" + id);
-            throw new BusinessException("非法请求运费结算参数ID");
+    @Transactional(rollbackFor = Exception.class)
+    public String confirmTradePayment(WalletPayReq walletPayReq) {
+        SettlementTradeDto byId = kwpSettlementTradeService.getById(walletPayReq.getIdLong(), TradeUnitType.SELL);
+        if (Objects.isNull(byId)) {
+            throw new BusinessException("结算单不存在");
         }
-        if (settlementTradeDto.getStatus() == SettlementEnum.ALL_PAYMENT.getStatus()) {
-            log.error("非法请求,该订单已结算完成:" + id);
-            throw new BusinessException("该订单已结算完成,无法操作");
+        if (StringUtils.isNotBlank(byId.getTrading()) && !byId.getTrading().startsWith(TradingEnum.RECEIVE_PAY.getValue())) {
+            throw new BusinessException("只支持货货到付款方式订单进行当前操作");
+        }
+        List<LedgerUnitDto> listById = kwpSettlementTradeService.getListById(walletPayReq.getIdLong());
+        if (CollectionUtils.isEmpty(listById) || listById.size() != 2) {
+            throw new BusinessException("对账单交易企业双方不存在或缺少");
+        }
+        Long uid = null;
+        Long filter = null;
+        for (LedgerUnitDto ledgerUnitDto : listById) {
+            Integer unitType = ledgerUnitDto.getUnitType();
+            if (TradeUnitType.PURCHASE.equals(unitType)) {
+                uid = ledgerUnitDto.getTopEntId();
+                continue;
+            }
+            if (TradeUnitType.SELL.equals(unitType)) {
+                filter = ledgerUnitDto.getTopEntId();
+            }
         }
-        BigDecimal remainingReceivables = settlementTradeDto.getTotalPrice();
-        if (settlementTradeDto.getActualPrice() != null) {//剩余金额
-            remainingReceivables = settlementTradeDto.getTotalPrice().subtract(settlementTradeDto.getActualPrice());
+        String relation = walletRelationService.getRelation(uid);
+        String filterUser = walletRelationService.getRelation(filter);
+        if (StringUtils.isBlank(relation) || StringUtils.isBlank(filterUser)) {
+            throw new BusinessException("顶级企业未开通电子钱包");
         }
+        //付款金额
+        BigDecimal price = walletPayReq.getPrice();
+        //todo-xcq-完善
 
-        if (remainingReceivables.compareTo(price) < 0) {//-1表示小于,0是等于,1是大于
-            log.error("本次结算输入金额比剩余付款金额大:ID:" + id + " 剩余金额:" + remainingReceivables + " 本次输入金额:" + price);
-            throw new BusinessException("参数错误:输入金额过大 " + price + " 剩余金额最大值:" + remainingReceivables);
+//        R<List<WalletDto>> wallet = payCenterService.wallet(relation, ChannelEnum.getByCode(byId.getTrading()), filterUser);
+//        if (CollectionUtils.isEmpty(wallet.getData())) {
+//            throw new BusinessException("暂未开通电子钱包");
+//        }
+//        List<WalletDto> data = wallet.getData();
+//        BigDecimal bigDecimal = BigDecimal.valueOf(data.get(0).getMoney()).divide(new BigDecimal("100.0"), RoundingMode.UNNECESSARY);
+//
+//        if (bigDecimal.compareTo(price) < 0) {
+//            throw new BusinessException("钱包可用余额不足");
+//        }
+        //待付款金额-本次付款金额= 剩余待付款金额
+        BigDecimal subtract = byId.getWaitPrice().subtract(walletPayReq.getPrice());
+        if (subtract.compareTo(new BigDecimal("0.0")) < 0) {
+            throw new BusinessException("付款金额不能大于待付款金额");
         }
-        //累加入库结算单
+        //新增电子钱包结算记录
+        KwpSettlementWallet kwpSettlementWallet = new KwpSettlementWallet();
+        kwpSettlementWallet.setId(new IdWorker(1).nextId());
+        kwpSettlementWallet.setEntId(LoginUserHolder.getEntId());
+        kwpSettlementWallet.setSettlementId(walletPayReq.getIdLong());
+        kwpSettlementWallet.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
+        kwpSettlementWallet.setChannel(WalletChannelEnum.getValue(byId.getTrading()));
+        kwpSettlementWallet.setPayTime(LocalDateTime.now());
+        kwpSettlementWallet.setPayPrice(walletPayReq.getPrice());
+        kwpSettlementWallet.setTopayPrice(subtract);
+        kwpSettlementWallet.setType(SettlementWalletPayTypeEnum.CASH_ON_DELIVERY.getStatus());
+        kwpSettlementWallet.setRemark("");
+        kwpSettlementWallet.setStatus(0);
+        kwpSettlementWallet.setCreateBy(LoginUserHolder.getUserId());
+        kwpSettlementWallet.setCreateTime(LocalDateTime.now());
+        kwpSettlementWallet.setUpdateBy(LoginUserHolder.getUserId());
+        kwpSettlementWallet.setUpdateTime(LocalDateTime.now());
+        kwpSettlementWallet.setDelFlag(0);
+        settlementWalletMapper.insert(kwpSettlementWallet);
+
+        //更新交易结算单状态和金额
         KwpSettlementTrade kwpSettlementTrade = new KwpSettlementTrade();
-        kwpSettlementTrade.setId(settlementTradeDto.getId());
+        kwpSettlementTrade.setId(byId.getId());
+        kwpSettlementTrade.setActualPrice(byId.getActualPrice().add(price));
+        kwpSettlementTrade.setStatus(subtract.compareTo(new BigDecimal("0.0")) == 0 ? SettlementEnum.ALL_PAYMENT.getStatus()
+                : SettlementEnum.PARTIAL_PAYMENT.getStatus());
+        kwpSettlementTrade.setUpdateBy(LoginUserHolder.getUserId());
         kwpSettlementTrade.setUpdateTime(LocalDateTime.now());
-        if (remainingReceivables.compareTo(price) == 0) {//全部结算
-            kwpSettlementTrade.setStatus(SettlementEnum.ALL_PAYMENT.getStatus());
-        }
-        if (remainingReceivables.compareTo(price) > 0) {//部分结算
-            kwpSettlementTrade.setStatus(SettlementEnum.PARTIAL_PAYMENT.getStatus());
-        }
-        BigDecimal actualPrice = settlementTradeDto.getActualPrice();
-        kwpSettlementTrade.setActualPrice((actualPrice == null) ? price : actualPrice.add(price));
-        int upInt = kwpSettlementTradeMapper.updateById(kwpSettlementTrade);
-        if (upInt > 0) {
-            //新增一条电子钱包结算记录
-            remainingReceivables = remainingReceivables.subtract(price);
-            KwpSettlementWallet kwpSettlementWallet = new KwpSettlementWallet();
-            kwpSettlementWallet.setId(new IdWorker(1).nextId());
-            kwpSettlementWallet.setEntId(settlementTradeDto.getEntId());
-            kwpSettlementWallet.setSettlementId(settlementTradeDto.getId());
-            kwpSettlementWallet.setOrderType(SettlementOrderTypeEnum.LOGISTICS.getStatus());
-            kwpSettlementWallet.setChannel(WalletChannelEnum.HF.getStatus());//先用数字默认定义为1
-            kwpSettlementWallet.setPayTime(LocalDateTime.now());
-            kwpSettlementWallet.setPayPrice(price);
-            kwpSettlementWallet.setTopayPrice(remainingReceivables);
-            kwpSettlementWallet.setType(SettlementWalletPayTypeEnum.CASH_ON_DELIVERY.getStatus());
-            kwpSettlementWallet.setRemark("");
-            kwpSettlementWallet.setStatus(1);
-            kwpSettlementWallet.setCreateBy(1L);//todo 待处理明确创建人
-            kwpSettlementWallet.setCreateTime(LocalDateTime.now());
-            kwpSettlementWallet.setUpdateBy(1L);//todo 待处理明确更新人
-            kwpSettlementWallet.setUpdateTime(LocalDateTime.now());
-            kwpSettlementWallet.setDelFlag(0);
-            Integer insertKwpSettlementWallet = settlementWalletMapper.insert(kwpSettlementWallet);
+        kwpSettlementTradeService.updateById(kwpSettlementTrade);
 
-            //物流货到付款电子钱包逻辑
-            //todo 待处理费电子钱包逻辑
+        settlementTradeTrackService.save(KwpSettlementTradeTrack.build(byId.getId(), SettlementTrackEnum.RECEIVE_PAY.getStatus()));
+        //todo-xcq 调用中台接口
 
-            return insertKwpSettlementWallet;
-        }
-        return null;
+        return "付款确认成功";
     }
 
     /**
@@ -355,26 +381,94 @@ public class KwpSettlementWalletService {
         return new PageRes<>(new PageInfo<>(collect));
     }
 
-
-    public Integer confirmTradeCollection(Long id, Float price) {
-        log.info("接收到数据,开始物流-销售-收款确认-预付款(电子钱包)-新增,待完善");
-        //todo 待完善
-        //先查询出结算单情况
-
-        //检查结算单状态和所差金额
-
-        //对比金额
-
-        //累加入库结算单
-
-        //扣费电子钱包
-
+    /**
+     * 销售-预付款
+     *
+     * @param id
+     * @return
+     */
+    public String confirmTradeCollection(Long id) {
+        SettlementTradeDto byId = kwpSettlementTradeService.getById(id, TradeUnitType.PURCHASE);
+        if (Objects.isNull(byId)) {
+            throw new BusinessException("结算单不存在");
+        }
+        if (StringUtils.isNotBlank(byId.getTrading()) && !byId.getTrading().startsWith(TradingEnum.PRE_PAY.getValue())) {
+            throw new BusinessException("只支持预付款交易方法进行预付款确认操作");
+        }
+        //更新交易结算单状态和金额
+        KwpSettlementTrade kwpSettlementTrade = new KwpSettlementTrade();
+        kwpSettlementTrade.setId(byId.getId());
+        kwpSettlementTrade.setActualPrice(byId.getTotalPrice());
+        kwpSettlementTrade.setStatus(SettlementEnum.ALL_PAYMENT.getStatus());
+        kwpSettlementTrade.setUpdateBy(LoginUserHolder.getUserId());
+        kwpSettlementTrade.setUpdateTime(LocalDateTime.now());
+        kwpSettlementTradeService.updateById(kwpSettlementTrade);
         //新增电子钱包结算记录
         KwpSettlementWallet kwpSettlementWallet = new KwpSettlementWallet();
         kwpSettlementWallet.setId(new IdWorker(1).nextId());
-        //todo 待完善
+        kwpSettlementWallet.setEntId(LoginUserHolder.getEntId());
+        kwpSettlementWallet.setSettlementId(byId.getId());
+        kwpSettlementWallet.setOrderType(SettlementOrderTypeEnum.TRADE.getStatus());
+        kwpSettlementWallet.setChannel(WalletChannelEnum.getValue(byId.getTrading()));
+        kwpSettlementWallet.setPayTime(LocalDateTime.now());
+        kwpSettlementWallet.setPayPrice(byId.getTotalPrice());
+        kwpSettlementWallet.setTopayPrice(new BigDecimal("0.0"));
+        kwpSettlementWallet.setType(SettlementWalletPayTypeEnum.ADVANCE_PAYMENT.getStatus());
+        kwpSettlementWallet.setRemark("");
+        kwpSettlementWallet.setStatus(0);
+        kwpSettlementWallet.setCreateBy(LoginUserHolder.getUserId());
+        kwpSettlementWallet.setCreateTime(LocalDateTime.now());
+        kwpSettlementWallet.setUpdateBy(LoginUserHolder.getUserId());
+        kwpSettlementWallet.setUpdateTime(LocalDateTime.now());
+        kwpSettlementWallet.setDelFlag(0);
         settlementWalletMapper.insert(kwpSettlementWallet);
-        return settlementWalletMapper.confirmLogisticsPayment(id, price);
+        settlementTradeTrackService.save(KwpSettlementTradeTrack.build(byId.getId(), SettlementTrackEnum.PRE_PAY.getStatus()));
+        //todo-xcq 调用中台接口
+        //todo-xcq 调用订单接口,更新订单状态
+        return "确认回款成功";
+    }
+
+    /**
+     * 电子钱包余额
+     *
+     * @param id
+     * @return
+     */
+    public BigDecimal getConfirmTradePayment(Long id) {
+        SettlementTradeDto byId = kwpSettlementTradeService.getById(id, TradeUnitType.SELL);
+        if (Objects.isNull(byId)) {
+            throw new BusinessException("结算单不存在");
+        }
+        if (StringUtils.isNotBlank(byId.getTrading()) && !byId.getTrading().startsWith(TradingEnum.RECEIVE_PAY.getValue())) {
+            throw new BusinessException("只支持货货到付款方式订单进行当前操作");
+        }
+        List<LedgerUnitDto> listById = kwpSettlementTradeService.getListById(id);
+        if (CollectionUtils.isEmpty(listById) || listById.size() != 2) {
+            throw new BusinessException("对账单交易企业双方不存在或缺少");
+        }
+        Long uid = null;
+        Long filter = null;
+        for (LedgerUnitDto ledgerUnitDto : listById) {
+            Integer unitType = ledgerUnitDto.getUnitType();
+            if (TradeUnitType.PURCHASE.equals(unitType)) {
+                uid = ledgerUnitDto.getTopEntId();
+                continue;
+            }
+            if (TradeUnitType.SELL.equals(unitType)) {
+                filter = ledgerUnitDto.getTopEntId();
+            }
+        }
+        String relation = walletRelationService.getRelation(uid);
+        String filterUser = walletRelationService.getRelation(filter);
+        if (StringUtils.isBlank(relation) || StringUtils.isBlank(filterUser)) {
+            throw new BusinessException("顶级企业未开通电子钱包");
+        }
+        R<List<WalletDto>> wallet = payCenterService.wallet(relation, ChannelEnum.getByCode(byId.getTrading()), filterUser);
+        if (CollectionUtils.isEmpty(wallet.getData())) {
+            throw new BusinessException("暂未开通电子钱包");
+        }
+        List<WalletDto> data = wallet.getData();
+        return BigDecimal.valueOf(data.get(0).getMoney() / 100.0);
     }
 }
 

+ 17 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java

@@ -0,0 +1,17 @@
+package com.sckw.payment.utils;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-31 15:25:57
+ */
+public class DecimalUtils {
+    public static BigDecimal add(BigDecimal one,BigDecimal two){
+        if(Objects.isNull(one)&&Objects.isNull(two)){
+            return null;
+        }
+        return null;
+    }
+}

+ 1 - 1
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml

@@ -11,7 +11,7 @@
         <result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
         <result column="end_time" jdbcType="TIMESTAMP" property="endTime"/>
         <result column="tax_rate" jdbcType="INTEGER" property="taxRate"/>
-        <result column="trading" jdbcType="INTEGER" property="trading"/>
+        <result column="trading" jdbcType="VARCHAR" property="trading"/>
         <result column="total_price" jdbcType="DECIMAL" property="totalPrice"/>
         <result column="ex_tax_price" jdbcType="DECIMAL" property="exTaxPrice"/>
         <result column="settle_price" jdbcType="DECIMAL" property="settlePrice"/>

+ 1 - 1
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml

@@ -11,7 +11,7 @@
         <result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
         <result column="end_time" jdbcType="TIMESTAMP" property="endTime"/>
         <result column="tax_rate" jdbcType="INTEGER" property="taxRate"/>
-        <result column="trading" jdbcType="INTEGER" property="trading"/>
+        <result column="trading" jdbcType="VARCHAR" property="trading"/>
         <result column="total_price" jdbcType="DECIMAL" property="totalPrice"/>
         <result column="ex_tax_price" jdbcType="DECIMAL" property="exTaxPrice"/>
         <result column="settle_price" jdbcType="DECIMAL" property="settlePrice"/>

+ 15 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementTradeMapper.xml

@@ -137,6 +137,7 @@
             <foreach collection="ids" open="(" close=")" item="item">
                 #{item,jdbcType=BIGINT}
             </foreach>
+            and kltu.unit_type = #{unitType,jdbcType=INTEGER}
         </where>
     </select>
     <select id="getById" resultType="com.sckw.payment.model.dto.SettlementTradeDto">
@@ -159,6 +160,20 @@
         from kwp_settlement_trade kst
                  inner join kwp_ledger_trade klt on kst.t_ledger_id = klt.id and klt.del_flag = 0
                  inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0
+        <where>
+            kst.del_flag = 0
+              and kst.id = #{id,jdbcType=BIGINT}
+            and kltu.unit_type = #{unitType,jdbcType=INTEGER}
+        </where>
+    </select>
+
+    <select id="getListById" resultType="com.sckw.payment.model.dto.LedgerUnitDto">
+        select kltu.top_ent_id,
+               kltu.ent_id,
+               kltu.unit_type
+        from kwp_settlement_trade kst
+                 inner join kwp_ledger_trade klt on kst.t_ledger_id = klt.id and klt.del_flag = 0
+                 inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0
         <where>
             kst.del_flag = 0
               and kst.id = #{id,jdbcType=BIGINT}

+ 3 - 3
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementWalletMapper.xml

@@ -8,7 +8,7 @@
         <result column="ent_id" jdbcType="BIGINT" property="entId"/>
         <result column="settlement_id" jdbcType="BIGINT" property="settlementId"/>
         <result column="order_type" jdbcType="INTEGER" property="orderType"/>
-        <result column="channel" jdbcType="BOOLEAN" property="channel"/>
+        <result column="channel" jdbcType="VARCHAR" property="channel"/>
         <result column="pay_time" jdbcType="TIMESTAMP" property="payTime"/>
         <result column="pay_price" jdbcType="DECIMAL" property="payPrice"/>
         <result column="topay_price" jdbcType="DECIMAL" property="topayPrice"/>
@@ -101,8 +101,8 @@
         from kwp_settlement_wallet ksw
         <where>
             ksw.del_flag = 0
-            <if test="walletReq.settlementId != null and walletReq.settlementId != ''">
-                and ksw.settlement_id = #{walletReq.settlementId,jdbcType=INTEGER}
+            <if test="walletReq.id != null and walletReq.id != ''">
+                and ksw.settlement_id = #{walletReq.id,jdbcType=INTEGER}
             </if>
             <if test="walletReq.orderType != null">
                 and ksw.order_type = #{walletReq.orderType,jdbcType=INTEGER}