donglang 2 månader sedan
förälder
incheckning
cabe74d2b2
20 ändrade filer med 1522 tillägg och 0 borttagningar
  1. 75 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/ExcelUtils.java
  2. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportRepository.java
  3. 122 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpBizWalletController.java
  4. 19 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpBizWalletMapper.java
  5. 19 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpBizWalletPrepayMapper.java
  6. 56 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/enums/PrepayTypEnum.java
  7. 96 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpBizWallet.java
  8. 88 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpBizWalletPrepay.java
  9. 49 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/KwpBizWalletPageResponse.java
  10. 125 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/KwpBizWalletPrepayPageResponse.java
  11. 95 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/vo/KwpBizWalletPrepayExcelVO.java
  12. 116 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/vo/KwpBizWalletVO.java
  13. 20 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repository/KwpBizWalletPrepayRepository.java
  14. 20 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repository/KwpBizWalletRepository.java
  15. 57 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletPrepayQueryRequest.java
  16. 50 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletPrepayRequest.java
  17. 27 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletQueryRequest.java
  18. 29 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletSaveRequest.java
  19. 406 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/wallet/KwpBizWalletService.java
  20. 51 0
      sql/2025/mvp2/2025_11_03_donglang.sql

+ 75 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/ExcelUtils.java

@@ -0,0 +1,75 @@
+package com.sckw.core;
+
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-05
+ * Des: 表格工具类
+ * Version: 1.0
+ */
+
+public class ExcelUtils {
+
+
+    /**
+     * 下载Excel模板
+     * @param fileName 文件名
+     * @param clazz 模板对应的实体类
+     * @param response HttpServletResponse对象
+     * @param <T> 实体类泛型
+     * @throws Exception 异常
+     */
+    public static <T> void exportTemplate(HttpServletResponse response, String fileName, Class<T> clazz, List<T> dataList) throws Exception {
+        // 设置响应内容类型
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+
+        // 设置文件名
+        String name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xlsx");
+        // 解决跨域问题
+        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+
+
+        // 创建表头样式
+        WriteCellStyle headStyle  = new WriteCellStyle();
+        // 设置表头居中对齐
+        headStyle .setHorizontalAlignment(HorizontalAlignment.CENTER);
+
+        // 设置表头字体
+        WriteFont headFont  = new WriteFont();
+        headFont .setFontHeightInPoints((short) 12);
+        headFont .setBold(true);
+        headStyle .setWriteFont(headFont);
+
+        // 创建内容样式
+        WriteCellStyle contentStyle = new WriteCellStyle();
+        // 设置内容居中对齐
+        contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+
+
+        // 初始化表格样式策略
+        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headStyle, contentStyle);
+
+        // 使用EasyExcel导出
+        EasyExcel.write(response.getOutputStream(), clazz)
+                .excelType(ExcelTypeEnum.XLSX)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .registerWriteHandler(horizontalCellStyleStrategy)
+                .sheet("模板")
+                .doWrite(new ArrayList<>()); // 写入空列表,只生成表头
+    }
+}

+ 2 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportRepository.java

@@ -12,4 +12,6 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public class KwfTruckReportRepository extends ServiceImpl<KwfTruckReportMapper, KwfTruckReport> {
+
+
 }

+ 122 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpBizWalletController.java

@@ -0,0 +1,122 @@
+package com.sckw.payment.controller;
+
+
+import com.sckw.core.ExcelUtils;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.core.web.response.result.PageDataResult;
+import com.sckw.payment.repose.KwpBizWalletPageResponse;
+import com.sckw.payment.repose.KwpBizWalletPrepayPageResponse;
+import com.sckw.payment.repose.vo.KwpBizWalletPrepayExcelVO;
+import com.sckw.payment.request.KwpBizWalletPrepayQueryRequest;
+import com.sckw.payment.request.KwpBizWalletPrepayRequest;
+import com.sckw.payment.request.KwpBizWalletQueryRequest;
+import com.sckw.payment.request.KwpBizWalletSaveRequest;
+import com.sckw.payment.service.wallet.KwpBizWalletService;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理Controller
+ * Version: 1.0
+ */
+
+@RestController
+@RequestMapping("/biz/wallet")
+@RequiredArgsConstructor
+public class KwpBizWalletController {
+
+    private final KwpBizWalletService kwpBizWalletService;
+
+
+    /**
+     * 分页查询钱包明细
+     *
+     * @param request
+     * @return
+     */
+    @GetMapping("/pageBizWalletList")
+    public BaseResult<PageDataResult<KwpBizWalletPageResponse>> pageBizWalletList(@RequestBody KwpBizWalletQueryRequest request) {
+        PageDataResult<KwpBizWalletPageResponse> WalletPageList = kwpBizWalletService.pageBizWalletList(request);
+        return BaseResult.success(WalletPageList);
+    }
+
+    /**
+     * 新增钱包
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/addWallet")
+    public BaseResult addWallet(@RequestBody @Validated KwpBizWalletSaveRequest request) {
+        kwpBizWalletService.addWallet(request);
+        return BaseResult.success();
+    }
+
+    /**
+     * 钱包状态更新
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("/updateWallet")
+    public BaseResult updateWallet(Long id) {
+        kwpBizWalletService.updateWallet(id);
+        return BaseResult.success();
+    }
+
+    /**
+     * 钱包金额更新
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/updateWalletAmount")
+    public BaseResult updateWalletAmount(@RequestBody @Validated KwpBizWalletPrepayRequest request) {
+        kwpBizWalletService.updateWalletAmount(request);
+        return BaseResult.success();
+    }
+
+    /**
+     * 钱包冻账明细
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/walletPrepayDetail")
+    public BaseResult<PageDataResult<KwpBizWalletPrepayPageResponse>> walletPrepayDetail(@RequestBody @Validated KwpBizWalletPrepayQueryRequest request) {
+        PageDataResult<KwpBizWalletPrepayPageResponse> walletPrepayPageDataResult = kwpBizWalletService.walletPrepayDetail(request);
+        return BaseResult.success(walletPrepayPageDataResult);
+    }
+
+    /**
+     * 钱包冻账明细导出
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/exportWalletPrepay")
+    public BaseResult exportWalletPrepay(@RequestBody @Validated HttpServletResponse response, KwpBizWalletPrepayQueryRequest request) {
+        //查询导出数据
+        List<KwpBizWalletPrepayExcelVO> excelVOList = kwpBizWalletService.queryExportWalletPrepay(request);
+        //导出
+        try {
+            ExcelUtils.exportTemplate(response, "冻账明细表", KwpBizWalletPrepayExcelVO.class, excelVOList);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return BaseResult.success();
+    }
+
+
+
+}

+ 19 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpBizWalletMapper.java

@@ -0,0 +1,19 @@
+package com.sckw.payment.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpBizWallet;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理
+ * Version: 1.0
+ */
+@Mapper
+public interface KwpBizWalletMapper extends BaseMapper<KwpBizWallet> {
+
+
+
+}

+ 19 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpBizWalletPrepayMapper.java

@@ -0,0 +1,19 @@
+package com.sckw.payment.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpBizWalletPrepay;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理
+ * Version: 1.0
+ */
+@Mapper
+public interface KwpBizWalletPrepayMapper extends BaseMapper<KwpBizWalletPrepay> {
+
+
+
+}

+ 56 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/enums/PrepayTypEnum.java

@@ -0,0 +1,56 @@
+package com.sckw.payment.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum PrepayTypEnum {
+
+
+    FREEZE(0, "冻结"),
+    PREPAY(1, "预付"),
+    UNFREEZE(2, "解冻"),
+    CONSUME(3, "消费");
+
+    /**
+     * 数据库存储的编码值
+     */
+    private final Integer code;
+
+    /**
+     * 类型描述(用于页面展示)
+     */
+    private final String desc;
+
+    PrepayTypEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 根据编码值获取枚举
+     * @param code 数据库存储的编码
+     * @return 对应的枚举对象,无匹配时返回 null
+     */
+    public static PrepayTypEnum getByCode(Integer code) {
+        if (code == null) {
+            return null;
+        }
+        for (PrepayTypEnum type : values()) {
+            if (type.code.equals(code)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 根据编码值获取描述
+     * @param code 数据库存储的编码
+     * @return 描述文本,无匹配时返回"未知类型"
+     */
+    public static String getDescByCode(Integer code) {
+        PrepayTypEnum type = getByCode(code);
+        return type != null ? type.desc : "未知类型";
+    }
+
+}

+ 96 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpBizWallet.java

@@ -0,0 +1,96 @@
+package com.sckw.payment.model;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理
+ * Version: 1.0
+ */
+
+@Data
+@TableName("kwp_biz_wallet")
+public class KwpBizWallet {
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 供应商企业id
+     */
+    @TableField("sup_ent_id")
+    private Long supEntId;
+
+    /**
+     * 采购商企业id
+     */
+    @TableField("pro_ent_id")
+    private Long proEntId;
+
+    /**
+     * 钱包名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 可用金额(单位:元,保留2位小数)
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+
+    /**
+     * 冻结金额(单位:元,保留2位小数)
+     */
+    @TableField("prepay_amount")
+    private BigDecimal prepayAmount;
+
+    /**
+     * 类型 0-线下钱包
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 状态 1-开启,0-关闭
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_user")
+    private String createUser;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_user")
+    private String updateUser;
+
+}

+ 88 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpBizWalletPrepay.java

@@ -0,0 +1,88 @@
+package com.sckw.payment.model;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理
+ * Version: 1.0
+ */
+
+@Data
+@TableName("kwp_biz_wallet_prepay")
+public class KwpBizWalletPrepay {
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 钱包id(关联kwp_biz_wallet表的id)
+     */
+    private Long walletId;
+
+    /**
+     * 订单id(关联订单表的id)
+     */
+    private Long orderId;
+
+    /**
+     * 金额(单位:元,保留2位小数)
+     */
+    private BigDecimal amount;
+
+    /**
+     * 动帐类型  0-冻结、1-预付、2-解冻、3-消费
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 凭证URL地址
+     */
+    private String voucherUrl;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_user")
+    private String createUser;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_user")
+    private String updateUser;
+
+
+
+
+
+}

+ 49 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/KwpBizWalletPageResponse.java

@@ -0,0 +1,49 @@
+package com.sckw.payment.repose;
+
+
+import com.sckw.core.model.page.PageResult;
+import com.sckw.payment.repose.vo.KwpBizWalletVO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细列表返回
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletPageResponse extends PageResult {
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String entName;
+
+    /**
+     * 钱包数量
+     */
+    private int walletNum;
+
+    /**
+     * 钱包数量
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 钱包信息
+     */
+    private List<KwpBizWalletVO> walletVOList;
+
+
+
+
+}

+ 125 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/KwpBizWalletPrepayPageResponse.java

@@ -0,0 +1,125 @@
+package com.sckw.payment.repose;
+
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.payment.model.KwpBizWalletPrepay;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细列表返回
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletPrepayPageResponse extends PageResult {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 钱包id
+     */
+    private Long walletId;
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+    /**
+     * 本次更新金额(单位:元,保留2位小数)
+     */
+    private BigDecimal changeAmount;
+
+    /**
+     * 可用金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 冻结金额
+     */
+    private BigDecimal prepayAmount;
+
+    /**
+     * 动帐类型  0-冻结、1-预付、2-解冻、3-消费',
+     */
+    private Integer type;
+
+    /**
+     * 凭证URL地址
+     */
+    private String voucherUrl;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_user")
+    private String createUser;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_user")
+    private String updateUser;
+
+
+    private static KwpBizWalletPrepayPageResponse getInstance() {
+        return new KwpBizWalletPrepayPageResponse();
+    }
+
+
+    public static KwpBizWalletPrepayPageResponse toPageResp(KwpBizWalletPrepay walletPrepay) {
+        if (walletPrepay == null) {
+            return new KwpBizWalletPrepayPageResponse();
+        }
+
+        KwpBizWalletPrepayPageResponse walletPrepayResponse = KwpBizWalletPrepayPageResponse.getInstance();
+        walletPrepayResponse.setId(walletPrepay.getId());
+        walletPrepayResponse.setWalletId(walletPrepay.getWalletId());
+        walletPrepayResponse.setOrderId(walletPrepay.getOrderId());
+        walletPrepayResponse.setChangeAmount(walletPrepay.getAmount());
+        walletPrepayResponse.setType(walletPrepay.getType());
+        walletPrepayResponse.setVoucherUrl(walletPrepay.getVoucherUrl());
+        walletPrepayResponse.setRemark(walletPrepay.getRemark());
+        walletPrepayResponse.setCreateTime(walletPrepay.getCreateTime());
+        walletPrepayResponse.setUpdateTime(walletPrepay.getUpdateTime());
+        walletPrepayResponse.setCreateUser(walletPrepayResponse.getCreateUser());
+        walletPrepayResponse.setUpdateUser(walletPrepayResponse.getUpdateUser());
+
+        return walletPrepayResponse;
+    }
+
+
+
+
+}

+ 95 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/vo/KwpBizWalletPrepayExcelVO.java

@@ -0,0 +1,95 @@
+package com.sckw.payment.repose.vo;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.payment.repose.KwpBizWalletPrepayPageResponse;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细列表返回
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletPrepayExcelVO extends PageResult {
+
+    /**
+     * 钱包名称
+     */
+    @ExcelProperty(value = "钱包名称")
+    private String walletName;
+
+    /**
+     * 供应企业
+     */
+    @ExcelProperty(value = "供应企业")
+    private String supEntName;
+
+
+    /**
+     * 动帐类型  0-冻结、1-预付、2-解冻、3-消费',
+     */
+    @ExcelProperty(value = "动帐类型")
+    private String type;
+
+
+    /**
+     * 变动金额(单位:元,保留2位小数)
+     */
+    @ExcelProperty(value = "变动金额")
+    private BigDecimal changeAmount;
+
+    /**
+     * 可用金额
+     */
+    @ExcelProperty(value = "可用金额")
+    private BigDecimal amount;
+
+    /**
+     * 冻结金额
+     */
+    @ExcelProperty(value = "冻结金额")
+    private BigDecimal prepayAmount;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value = "钱包ID")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    private static KwpBizWalletPrepayExcelVO getInstance() {
+        return new KwpBizWalletPrepayExcelVO();
+    }
+
+
+    public static KwpBizWalletPrepayExcelVO toPageResp(KwpBizWalletPrepayPageResponse response) {
+        if (response == null) {
+            return new KwpBizWalletPrepayExcelVO();
+        }
+        KwpBizWalletPrepayExcelVO excelVO = KwpBizWalletPrepayExcelVO.getInstance();
+        excelVO.setChangeAmount(response.getAmount());
+        excelVO.setRemark(response.getRemark());
+        excelVO.setCreateTime(response.getCreateTime());
+
+        return excelVO;
+    }
+
+
+
+
+
+}

+ 116 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repose/vo/KwpBizWalletVO.java

@@ -0,0 +1,116 @@
+package com.sckw.payment.repose.vo;
+
+
+import com.sckw.core.model.page.PageResult;
+import com.sckw.payment.model.KwpBizWallet;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细列表返回
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletVO extends PageResult {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 供应商企业id
+     */
+    private Long supEntId;
+
+    /**
+     * 供应商企业名称
+     */
+    private String supEntName;
+
+    /**
+     * 采购商企业id
+     */
+    private Long proEntId;
+
+    /**
+     * 采购商企业名称
+     */
+    private String proEntName;
+
+    /**
+     * 钱包名称
+     */
+    private String name;
+
+    /**
+     * 可用金额(单位:元,保留2位小数)
+     */
+    private BigDecimal amount;
+
+    /**
+     * 冻结金额(单位:元,保留2位小数)
+     */
+    private BigDecimal prepayAmount;
+
+    /**
+     * 类型 0-线下钱包
+     */
+    private Integer type;
+
+    /**
+     * 状态 1-开启,0-关闭
+     */
+    private Integer state;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 创建人
+     */
+    private String createUser;
+
+    /**
+     * 更新人
+     */
+    private String updateUser;
+
+    private static KwpBizWalletVO getInstance() {
+        return new KwpBizWalletVO();
+    }
+
+
+    public static KwpBizWalletVO toPageResp(KwpBizWallet wallet) {
+        if (wallet == null) {
+            return new KwpBizWalletVO();
+        }
+        KwpBizWalletVO walletVO = KwpBizWalletVO.getInstance();
+        walletVO.setId(wallet.getId());
+        walletVO.setSupEntId(wallet.getSupEntId());
+        walletVO.setProEntId(wallet.getProEntId());
+        walletVO.setName(wallet.getName());
+        walletVO.setAmount(wallet.getAmount());
+        walletVO.setPrepayAmount(wallet.getPrepayAmount());
+        walletVO.setType(wallet.getType());
+        walletVO.setState(wallet.getState());
+        walletVO.setCreateTime(wallet.getCreateTime());
+        walletVO.setUpdateTime(wallet.getUpdateTime());
+
+        return walletVO;
+    }
+
+
+}

+ 20 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repository/KwpBizWalletPrepayRepository.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.payment.dao.KwpBizWalletPrepayMapper;
+import com.sckw.payment.model.KwpBizWalletPrepay;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包金额更新管理
+ * Version: 1.0
+ */
+
+@Repository
+public class KwpBizWalletPrepayRepository extends ServiceImpl<KwpBizWalletPrepayMapper, KwpBizWalletPrepay> {
+
+
+}

+ 20 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/repository/KwpBizWalletRepository.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.payment.dao.KwpBizWalletMapper;
+import com.sckw.payment.model.KwpBizWallet;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理
+ * Version: 1.0
+ */
+
+@Repository
+public class KwpBizWalletRepository extends ServiceImpl<KwpBizWalletMapper, KwpBizWallet> {
+
+
+}

+ 57 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletPrepayQueryRequest.java

@@ -0,0 +1,57 @@
+package com.sckw.payment.request;
+
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细查询参数
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletPrepayQueryRequest extends PageRequest {
+
+    /**
+     * 钱包id
+     */
+    @NotNull(message = "钱包id不能为空!")
+    private Long walletId;
+
+    /**
+     * 最小金额
+     */
+    private BigDecimal minAmount;
+
+    /**
+     * 最大金额
+     */
+    private BigDecimal maxAmount;
+
+    /**
+     * 动帐类型  0-冻结、1-预付、2-解冻、3-消费
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+
+    /**
+     * 结束时间
+     */
+    private LocalDateTime endTime;
+
+}

+ 50 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletPrepayRequest.java

@@ -0,0 +1,50 @@
+package com.sckw.payment.request;
+
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细查询参数
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletPrepayRequest extends PageRequest {
+
+    /**
+     * 钱包id
+     */
+    private Long walletId;
+
+    /**
+     * 本次更新金额(单位:元,保留2位小数)
+     */
+    @NotNull(message = "金额不能为空!")
+    private BigDecimal amount;
+
+    /**
+     * 动帐类型  0-冻结、1-预付、2-解冻、3-消费',
+     */
+    @NotNull(message = "资金方向不能为空!")
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    @NotBlank(message = "备注不能为空!")
+    private String remark;
+
+    /**
+     * 凭证URL地址
+     */
+    private String voucherUrl;
+
+
+}

+ 27 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletQueryRequest.java

@@ -0,0 +1,27 @@
+package com.sckw.payment.request;
+
+
+import com.sckw.core.model.page.PageRequest;
+import lombok.Data;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细查询参数
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletQueryRequest extends PageRequest {
+
+    /**
+     * 供应商企业名称
+     */
+    private String supEntName;
+
+    /**
+     * 采购商企业名称
+     */
+    private String proEntName;
+
+}

+ 29 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/request/KwpBizWalletSaveRequest.java

@@ -0,0 +1,29 @@
+package com.sckw.payment.request;
+
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包明细查询参数
+ * Version: 1.0
+ */
+
+@Data
+public class KwpBizWalletSaveRequest {
+
+    /**
+     * 供应商企业id
+     */
+    @NotNull(message = "供应商不能为空!")
+    private Long supEntId;
+
+    /**
+     * 采购商企业id
+     */
+    @NotNull(message = "采购商不能为空!")
+    private Long proEntId;
+
+}

+ 406 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/wallet/KwpBizWalletService.java

@@ -0,0 +1,406 @@
+package com.sckw.payment.service.wallet;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.model.enums.SystemTypeEnum;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.result.PageDataResult;
+import com.sckw.payment.enums.PrepayTypEnum;
+import com.sckw.payment.model.KwpBizWallet;
+import com.sckw.payment.model.KwpBizWalletPrepay;
+import com.sckw.payment.repose.KwpBizWalletPageResponse;
+import com.sckw.payment.repose.KwpBizWalletPrepayPageResponse;
+import com.sckw.payment.repose.vo.KwpBizWalletPrepayExcelVO;
+import com.sckw.payment.repose.vo.KwpBizWalletVO;
+import com.sckw.payment.repository.KwpBizWalletPrepayRepository;
+import com.sckw.payment.repository.KwpBizWalletRepository;
+import com.sckw.payment.request.KwpBizWalletPrepayQueryRequest;
+import com.sckw.payment.request.KwpBizWalletPrepayRequest;
+import com.sckw.payment.request.KwpBizWalletQueryRequest;
+import com.sckw.payment.request.KwpBizWalletSaveRequest;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.KwsEntDeptDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-03
+ * Des: 钱包管理服务
+ * Version: 1.0
+ */
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class KwpBizWalletService {
+
+    private final KwpBizWalletRepository kwpBizWalletRepository;
+
+    private final KwpBizWalletPrepayRepository kwpBizWalletPrepayRepository;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
+
+    private static final String OFFLINE_WALLET = "线下钱包";
+
+    /**
+     * 分页查询钱包明细
+     */
+    public PageDataResult<KwpBizWalletPageResponse> pageBizWalletList(KwpBizWalletQueryRequest request) {
+        int systemType = LoginUserHolder.getSystemType();
+
+        //非管理端,返回空分页结果
+        if (systemType != SystemTypeEnum.COMPANY.getCode()) {
+            return PageDataResult.empty(request.getPage(), request.getPageSize());
+        }
+
+        //查询当前登录企业
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId());
+        if (entCacheResDto == null) {
+            throw new RuntimeException("entId:" + LoginUserHolder.getEntId() + ", 企业信息不存在!");
+        }
+        List<KwpBizWalletPageResponse> walletList = new ArrayList<>();
+        int entType = Integer.parseInt(entCacheResDto.getEntTypes());
+        if (entType == EntTypeEnum.SUPPLIER.getCode()) {
+            //供应商及子企业
+            walletList = querySupWallet(entCacheResDto);
+        } else if (entType == EntTypeEnum.PURCHASER.getCode()) {
+            //采购商企业
+            walletList = queryProWallet(entCacheResDto.getId());
+        }
+
+        //模糊查询过滤
+        List<KwpBizWalletPageResponse> walletResponses = filterByFuzzyName(walletList, request);
+
+        //排序、内存分页
+        walletResponses.sort(Comparator.comparing(KwpBizWalletPageResponse::getEntId));
+        List<List<KwpBizWalletPageResponse>> pageList = Lists.partition(walletResponses, request.getPageSize());
+        List<KwpBizWalletPageResponse> walletPageList = pageList.size() >= request.getPage() ?
+                pageList.get(request.getPage() - 1) : Collections.emptyList();
+
+        return PageDataResult.success(request.getPage(), request.getPageSize(), (long) walletPageList.size(), walletPageList);
+    }
+
+
+    /**
+     * 查询供应商企业钱包信息
+     *
+     * @param entCacheResDto
+     * @return
+     */
+    private List<KwpBizWalletPageResponse> querySupWallet(EntCacheResDto entCacheResDto) {
+        List<Long> entIds = new ArrayList<>();
+        entIds.add(entCacheResDto.getId());
+        //查询供应商的子级企业
+        List<KwsEntDeptDto> kwsEntDeptDtoList = remoteSystemService.queryEntDeptByPid(entCacheResDto.getParentId());
+        List<Long> parentId = kwsEntDeptDtoList.stream().map(KwsEntDeptDto::getEntId).collect(Collectors.toList());
+        entIds.addAll(parentId);
+
+        //查询供应企业所关联的钱包数据
+        LambdaQueryWrapper<KwpBizWallet> queryWrapper = Wrappers.<KwpBizWallet>lambdaQuery()
+                .in(KwpBizWallet::getSupEntId, entIds);
+
+        List<KwpBizWallet> bizWalletList = kwpBizWalletRepository.list(queryWrapper);
+        if (bizWalletList == null || CollectionUtils.isEmpty(bizWalletList)) {
+            return new ArrayList<>();
+        }
+
+        return getAndConvertWallet(entIds, bizWalletList);
+    }
+
+    /**
+     * 查询采购商企业钱包信息
+     *
+     * @param entId
+     * @return
+     */
+    private List<KwpBizWalletPageResponse> queryProWallet(Long entId) {
+        //查询采购企业所关联的钱包数据
+        LambdaQueryWrapper<KwpBizWallet> queryWrapper = Wrappers.<KwpBizWallet>lambdaQuery()
+                .in(KwpBizWallet::getProEntId, entId);
+        List<KwpBizWallet> bizWalletList = kwpBizWalletRepository.list(queryWrapper);
+        if (bizWalletList == null || bizWalletList.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        //查询钱包所关联的供应商企业id
+        List<Long> entIds = bizWalletList.stream().map(KwpBizWallet::getSupEntId).collect(Collectors.toList());
+
+        return getAndConvertWallet(entIds, bizWalletList);
+    }
+
+
+    /**
+     * 获取钱包数据
+     *
+     * @param entIds
+     * @param bizWalletList
+     * @return
+     */
+    private List<KwpBizWalletPageResponse> getAndConvertWallet(List<Long> entIds, List<KwpBizWallet> bizWalletList) {
+
+        //根据供应企业id分组
+        Map<Long, List<KwpBizWallet>> walletGroupBySup = bizWalletList.stream().collect(
+                Collectors.groupingBy(KwpBizWallet::getSupEntId));
+
+        List<KwpBizWalletPageResponse> walletList = new ArrayList<>();
+        for (Long id : entIds) {
+            List<KwpBizWallet> walletGroupList = walletGroupBySup.getOrDefault(id, new ArrayList<>());
+            if (walletGroupList.isEmpty()) {
+                continue;
+            }
+            KwpBizWalletPageResponse walletPageResp = new KwpBizWalletPageResponse();
+            walletPageResp.setEntId(id);
+            //企业名称
+            walletPageResp.setEntName(queryEntById(id));
+            //钱包总数
+            walletPageResp.setWalletNum(walletGroupList.size());
+            //总余额
+            BigDecimal totalAmount = calTotalAmount(walletGroupList);
+            walletPageResp.setTotalAmount(totalAmount);
+            //钱包信息
+            List<KwpBizWalletVO> bizWalletVOList = conversionWallet(walletGroupList);
+            walletPageResp.setWalletVOList(bizWalletVOList);
+
+            walletList.add(walletPageResp);
+        }
+        return walletList;
+    }
+
+
+    /**
+     * 计算总余额
+     */
+    private BigDecimal calTotalAmount(List<KwpBizWallet> wallets) {
+        return wallets.stream().map(w ->
+                w.getAmount().add(w.getPrepayAmount())).reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
+    /**
+     * 钱包信息转换
+     *
+     * @param walletGroupList
+     * @return
+     */
+    private List<KwpBizWalletVO> conversionWallet(List<KwpBizWallet> walletGroupList) {
+        List<KwpBizWalletVO> walletVOList = walletGroupList.stream().map(wallet -> {
+            KwpBizWalletVO walletVO = KwpBizWalletVO.toPageResp(wallet);
+            walletVO.setSupEntName(queryEntById(wallet.getSupEntId()));
+            walletVO.setProEntName(queryEntById(wallet.getProEntId()));
+            return walletVO;
+        }).collect(Collectors.toList());
+
+        walletVOList.sort(Comparator.comparing(KwpBizWalletVO::getCreateTime));
+        return walletVOList;
+    }
+
+
+    /**
+     * 模糊查询过滤(供应商企业名称、采购商企业名称)
+     */
+    private List<KwpBizWalletPageResponse> filterByFuzzyName(List<KwpBizWalletPageResponse> walletList, KwpBizWalletQueryRequest request) {
+        if (CollectionUtils.isEmpty(walletList)) {
+            return walletList;
+        }
+        return walletList.stream()
+                // 过滤供应商企业名称
+                .filter(wallet -> {
+                    if (org.springframework.util.StringUtils.hasText(request.getSupEntName())) {
+                        return wallet.getEntName() != null && wallet.getEntName().toLowerCase().contains(request.getSupEntName().toLowerCase());
+                    }
+                    return true;
+                })
+                // 过滤采购商企业名称
+                .map(wallet -> {
+                    List<KwpBizWalletVO> filteredVOs = wallet.getWalletVOList().stream()
+                            .filter(vo -> {
+                                if (org.springframework.util.StringUtils.hasText(request.getProEntName())) {
+                                    return vo.getProEntName() != null && vo.getProEntName().toLowerCase().contains(request.getProEntName().toLowerCase());
+                                }
+                                return true;
+                            }).collect(Collectors.toList());
+                    wallet.setWalletVOList(filteredVOs);
+                    return wallet;
+                })
+                // 过滤二级列表为空的一级供应商
+                .filter(wallet -> !wallet.getWalletVOList().isEmpty())
+                .collect(Collectors.toList());
+    }
+
+
+    /**
+     * 查询企业名称
+     */
+    private String queryEntById(Long entId) {
+        if (entId == null) {
+            return "";
+        }
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(entId);
+        if (entCacheResDto == null) {
+            return "";
+        }
+        return entCacheResDto.getFirmName();
+    }
+
+
+    /**
+     * 新增钱包
+     */
+    public void addWallet(KwpBizWalletSaveRequest request) {
+        int systemType = LoginUserHolder.getSystemType();
+        //非管理端,不可新建钱包
+        if (systemType != SystemTypeEnum.COMPANY.getCode()) {
+            return;
+        }
+
+        //查询当前登录企业
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId());
+        if (entCacheResDto == null) {
+            throw new RuntimeException("entId:" + LoginUserHolder.getEntId() + ", 企业信息不存在!");
+        }
+        //校验
+        int entType = Integer.parseInt(entCacheResDto.getEntTypes());
+        if (entType != EntTypeEnum.SUPPLIER.getCode()) {
+            throw new RuntimeException("entId:" + LoginUserHolder.getEntId() + ", 非供应商企业不能新建钱包!");
+        }
+
+        KwpBizWallet kwpBizWallet = new KwpBizWallet();
+        kwpBizWallet.setSupEntId(request.getSupEntId());
+        kwpBizWallet.setProEntId(request.getProEntId());
+        //采购商企业名称
+        String entName = queryEntById(request.getProEntId());
+        kwpBizWallet.setName(entName + StringConstant.HYPHEN + OFFLINE_WALLET);
+        kwpBizWalletRepository.save(kwpBizWallet);
+    }
+
+    /**
+     * 钱包状态更新
+     */
+    public void updateWallet(Long id) {
+        if (id == null) {
+            throw new RuntimeException("钱包id不能为空!");
+        }
+        KwpBizWallet wallet = kwpBizWalletRepository.getById(id);
+        if (wallet == null) {
+            throw new RuntimeException("钱包id:" + id + ", 钱包信息不存在!");
+        }
+        if (wallet.getState() == 0) {
+            wallet.setState(1);
+        } else {
+            wallet.setState(0);
+        }
+        kwpBizWalletRepository.updateById(wallet);
+    }
+
+    /**
+     * 钱包金额更新
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void updateWalletAmount(KwpBizWalletPrepayRequest request) {
+        KwpBizWallet wallet = kwpBizWalletRepository.getById(request.getWalletId());
+        if (wallet == null) {
+            throw new RuntimeException("钱包id:" + request.getWalletId() + ", 钱包信息不存在!");
+        }
+        if (request.getType() == 0) {
+            //预付
+            wallet.setAmount(wallet.getAmount().add(request.getAmount()));
+        } else {
+            //扣款  扣减金额不能大于可用余额
+            if (request.getAmount().compareTo(wallet.getAmount()) > 0) {
+                throw new RuntimeException("扣款金额不能大于可用金额!, 扣款金额:" + request.getAmount() + ", 可用金额:" + wallet.getAmount());
+            }
+            wallet.setAmount(wallet.getAmount().subtract(request.getAmount()));
+        }
+        //钱包金额跟新
+        kwpBizWalletRepository.updateById(wallet);
+
+        //创建钱包金额更新日志
+        KwpBizWalletPrepay walletOperation = new KwpBizWalletPrepay();
+        walletOperation.setWalletId(request.getWalletId());
+        walletOperation.setAmount(request.getAmount());
+        walletOperation.setType(request.getType());
+        walletOperation.setVoucherUrl(request.getVoucherUrl());
+        walletOperation.setRemark(request.getRemark());
+        kwpBizWalletPrepayRepository.save(walletOperation);
+    }
+
+
+    /**
+     * 钱包冻账明细
+     */
+    public PageDataResult<KwpBizWalletPrepayPageResponse> walletPrepayDetail(KwpBizWalletPrepayQueryRequest request) {
+        Page<KwpBizWalletPrepay> page = new Page<>(request.getPage(), request.getPageSize());
+        LambdaQueryWrapper<KwpBizWalletPrepay> queryWrapper = Wrappers.<KwpBizWalletPrepay>lambdaQuery()
+                .eq(request.getType() != null, KwpBizWalletPrepay::getType, request.getType())
+                .like(StringUtils.isNotBlank(request.getRemark()), KwpBizWalletPrepay::getRemark, request.getRemark())
+                .ge(request.getMinAmount() != null, KwpBizWalletPrepay::getAmount, request.getMinAmount())
+                .lt(request.getMaxAmount() != null, KwpBizWalletPrepay::getAmount, request.getMaxAmount())
+                .ge(request.getStartTime() != null, KwpBizWalletPrepay::getCreateTime, request.getStartTime())
+                .lt(request.getEndTime() != null, KwpBizWalletPrepay::getCreateTime, request.getEndTime());
+        Page<KwpBizWalletPrepay> walletPrepayPage = kwpBizWalletPrepayRepository.page(page, queryWrapper);
+
+        //若为null,返回空分页结果
+        if (walletPrepayPage == null || CollectionUtils.isEmpty(walletPrepayPage.getRecords())) {
+            return PageDataResult.empty(request.getPage(), request.getPageSize());
+        }
+
+        List<KwpBizWalletPrepayPageResponse> walletPrepayPageList = new ArrayList<>();
+        for (KwpBizWalletPrepay record : walletPrepayPage.getRecords()) {
+            KwpBizWalletPrepayPageResponse pageResp = KwpBizWalletPrepayPageResponse.toPageResp(record);
+            walletPrepayPageList.add(pageResp);
+        }
+
+        return PageDataResult.success(request.getPage(), request.getPageSize(), (long) walletPrepayPageList.size(), walletPrepayPageList);
+    }
+
+    /**
+     * 钱包冻账明细导出
+     */
+    public List<KwpBizWalletPrepayExcelVO> queryExportWalletPrepay(KwpBizWalletPrepayQueryRequest request) {
+        //查询导出数据
+        PageDataResult<KwpBizWalletPrepayPageResponse> walletPrepayPageResult = walletPrepayDetail(request);
+        return walletPrepayPageResult.getList().stream().map(vo -> {
+            KwpBizWalletPrepayExcelVO excelVO = KwpBizWalletPrepayExcelVO.toPageResp(vo);
+
+            //查询钱包信息
+            KwpBizWallet wallet = kwpBizWalletRepository.getById(vo.getId());
+            if (wallet == null) {
+                throw new RuntimeException("钱包id:" + request.getWalletId() + ", 钱包信息不存在!");
+            }
+            excelVO.setWalletName(wallet.getName());
+            excelVO.setAmount(wallet.getAmount());
+            excelVO.setPrepayAmount(wallet.getPrepayAmount());
+
+            //查询企业名称
+            String entName = queryEntById(wallet.getSupEntId());
+            excelVO.setSupEntName(entName);
+
+            //变动类型
+            Integer type = vo.getType();
+            String descByCode = PrepayTypEnum.getDescByCode(type);
+            excelVO.setType(descByCode);
+
+            return excelVO;
+        }).collect(Collectors.toList());
+
+    }
+
+
+}

+ 51 - 0
sql/2025/mvp2/2025_11_03_donglang.sql

@@ -0,0 +1,51 @@
+
+CREATE TABLE `kwp_biz_wallet`
+(
+    id                      bigint                                                          NOT NULL AUTO_INCREMENT COMMENT '主键',
+    sup_ent_id              bigint                                                          NOT NULL COMMENT '供应商企业id',
+    pro_ent_id              bigint                                                          NOT NULL COMMENT '采购商企业id',
+    name                    varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci    NOT NULL COMMENT '钱包名称',
+    amount                  decimal(10,2)                                                   NOT NULL DEFAULT '0.00' COMMENT '可用金额(单位:元,保留2位小数)',
+    prepay_amount           decimal(10,2)                                                   NOT NULL DEFAULT '0.00' COMMENT '冻结金额(单位:元,保留2位小数)',
+    type                    int                                                             NOT NULL DEFAULT '0' COMMENT  '类型 0-线下钱包',
+    state                   int                                                             NOT NULL DEFAULT '0' COMMENT  '状态 1-开启,0-关闭',
+    create_time             datetime                                                        not null default CURRENT_TIMESTAMP comment '创建时间',
+    update_time             datetime                                                        not null default current_timestamp on update CURRENT_TIMESTAMP comment '更新时间',
+    create_user             varchar(255)                                                    not null default '' comment '创建人',
+    update_user             varchar(255)                                                    not null default '' comment '更新人',
+    PRIMARY KEY (`id`) USING BTREE
+) COMMENT='钱包管理表';
+
+
+CREATE TABLE `kwp_biz_wallet_operation`
+(
+    id                      bigint                                                          NOT NULL AUTO_INCREMENT COMMENT '主键',
+    wallet_id               bigint                                                          NOT NULL COMMENT '钱包id',
+    amount                  decimal(10,2)                                                   NOT NULL DEFAULT '0.00' COMMENT '本次更新金额(单位:元,保留2位小数)',
+    action                  int                                                             NOT NULL DEFAULT '0' COMMENT  '资金方向 0-预付,1-扣款',
+    voucher_url             varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci   DEFAULT NULL COMMENT '凭证URL地址',
+    remark                  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci   DEFAULT NULL COMMENT '备注',
+    create_time             datetime                                                        not null default CURRENT_TIMESTAMP comment '创建时间',
+    update_time             datetime                                                        not null default current_timestamp on update CURRENT_TIMESTAMP comment '更新时间',
+    create_user             varchar(255)                                                    not null default '' comment '创建人',
+    update_user             varchar(255)                                                     not null default '' comment '更新人',
+    PRIMARY KEY (`id`) USING BTREE
+) COMMENT='钱包金额更新表';
+
+
+CREATE TABLE `kwp_biz_wallet_prepay`
+(
+    id                      bigint                                                          NOT NULL AUTO_INCREMENT COMMENT '主键',
+    wallet_id               bigint                                                          NOT NULL COMMENT '钱包id',
+    order_id                bigint                                                          NOT NULL COMMENT '订单id',
+    amount                  decimal(10,2)                                                   NOT NULL DEFAULT '0.00' COMMENT '金额(单位:元,保留2位小数)',
+    type                    int                                                             NOT NULL DEFAULT '0' COMMENT '动帐类型  0-冻结、1-预付、2-解冻、3-消费',
+    remark                  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci   DEFAULT NULL COMMENT '备注',
+    voucher_url             varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci   DEFAULT NULL COMMENT '凭证URL地址',
+    create_time             datetime                                                        not null default CURRENT_TIMESTAMP comment '创建时间',
+    update_time             datetime                                                        not null default current_timestamp on update CURRENT_TIMESTAMP comment '更新时间',
+    create_user             varchar(255)                                                    not null default '' comment '创建人',
+    update_user             varchar(255)                                                     not null default '' comment '更新人',
+    PRIMARY KEY (`id`) USING BTREE
+) COMMENT='钱包预付金额明细表';
+