Jelajahi Sumber

1、回款信息管理
2、业务文件保存及更新操作逻辑调整

dongpo 7 bulan lalu
induk
melakukan
f7b0720d23
11 mengubah file dengan 315 tambahan dan 106 penghapusan
  1. 32 14
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/RefundInfoController.java
  2. 16 33
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoPageReqVO.java
  3. 43 11
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoRespVO.java
  4. 21 9
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoSaveReqVO.java
  5. 22 13
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/dal/mysql/refundinfo/RefundInfoMapper.java
  6. 7 6
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/refundinfo/RefundInfoService.java
  7. 60 18
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/refundinfo/RefundInfoServiceImpl.java
  8. 86 0
      yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/refundinfo/RefundInfoMapper.xml
  9. 11 2
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java
  10. 9 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java
  11. 8 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java

+ 32 - 14
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/RefundInfoController.java

@@ -11,10 +11,13 @@ import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRes
 import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoSaveReqVO;
 import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoSaveReqVO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.module.cash.service.refundinfo.RefundInfoService;
 import cn.iocoder.yudao.module.cash.service.refundinfo.RefundInfoService;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.springdoc.api.annotations.ParameterObject;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
@@ -36,16 +39,21 @@ public class RefundInfoController {
     @Resource
     @Resource
     private RefundInfoService refundInfoService;
     private RefundInfoService refundInfoService;
 
 
+    @Resource
+    private FileApi fileApi;
+
     @PostMapping("/create")
     @PostMapping("/create")
     @Operation(summary = "创建回款信息")
     @Operation(summary = "创建回款信息")
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:create')")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:create')")
     public CommonResult<Long> createRefundInfo(@Valid @RequestBody RefundInfoSaveReqVO createReqVO) {
     public CommonResult<Long> createRefundInfo(@Valid @RequestBody RefundInfoSaveReqVO createReqVO) {
         return success(refundInfoService.createRefundInfo(createReqVO));
         return success(refundInfoService.createRefundInfo(createReqVO));
     }
     }
 
 
     @PutMapping("/update")
     @PutMapping("/update")
     @Operation(summary = "更新回款信息")
     @Operation(summary = "更新回款信息")
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:update')")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:update')")
     public CommonResult<Boolean> updateRefundInfo(@Valid @RequestBody RefundInfoSaveReqVO updateReqVO) {
     public CommonResult<Boolean> updateRefundInfo(@Valid @RequestBody RefundInfoSaveReqVO updateReqVO) {
         refundInfoService.updateRefundInfo(updateReqVO);
         refundInfoService.updateRefundInfo(updateReqVO);
         return success(true);
         return success(true);
@@ -53,8 +61,9 @@ public class RefundInfoController {
 
 
     @DeleteMapping("/delete")
     @DeleteMapping("/delete")
     @Operation(summary = "删除回款信息")
     @Operation(summary = "删除回款信息")
+    @ApiOperationSupport(order = 3)
     @Parameter(name = "id", description = "编号", required = true)
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:delete')")
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:delete')")
     public CommonResult<Boolean> deleteRefundInfo(@RequestParam("id") Long id) {
     public CommonResult<Boolean> deleteRefundInfo(@RequestParam("id") Long id) {
         refundInfoService.deleteRefundInfo(id);
         refundInfoService.deleteRefundInfo(id);
         return success(true);
         return success(true);
@@ -62,32 +71,41 @@ public class RefundInfoController {
 
 
     @GetMapping("/get")
     @GetMapping("/get")
     @Operation(summary = "获得回款信息")
     @Operation(summary = "获得回款信息")
+    @ApiOperationSupport(order = 4)
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:query')")
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:query')")
     public CommonResult<RefundInfoRespVO> getRefundInfo(@RequestParam("id") Long id) {
     public CommonResult<RefundInfoRespVO> getRefundInfo(@RequestParam("id") Long id) {
         RefundInfoDO refundInfo = refundInfoService.getRefundInfo(id);
         RefundInfoDO refundInfo = refundInfoService.getRefundInfo(id);
-        return success(BeanUtils.toBean(refundInfo, RefundInfoRespVO.class));
+        RefundInfoRespVO refundInfoRespVO = BeanUtils.toBean(refundInfo, RefundInfoRespVO.class);
+
+        // 附件列表
+        List<FileDTO> fileList = fileApi.getFileDTOListByBiz(refundInfoRespVO.getRefundInfoUuid());
+        refundInfoRespVO.setFileList(fileList);
+
+        return success(refundInfoRespVO);
     }
     }
 
 
     @GetMapping("/page")
     @GetMapping("/page")
     @Operation(summary = "获得回款信息分页")
     @Operation(summary = "获得回款信息分页")
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:query')")
-    public CommonResult<PageResult<RefundInfoRespVO>> getRefundInfoPage(@Valid RefundInfoPageReqVO pageReqVO) {
-        PageResult<RefundInfoDO> pageResult = refundInfoService.getRefundInfoPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, RefundInfoRespVO.class));
+    @ApiOperationSupport(order = 5)
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:query')")
+    public CommonResult<PageResult<RefundInfoRespVO>> getRefundInfoPage(@Valid @ParameterObject RefundInfoPageReqVO pageReqVO) {
+        PageResult<RefundInfoRespVO> pageResult = refundInfoService.getRefundInfoPage(pageReqVO);
+        return success(pageResult);
     }
     }
 
 
     @GetMapping("/export-excel")
     @GetMapping("/export-excel")
     @Operation(summary = "导出回款信息 Excel")
     @Operation(summary = "导出回款信息 Excel")
-    @PreAuthorize("@ss.hasPermission('cash:refund-info:export')")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('cash:refund-info:export')")
     @ApiAccessLog(operateType = EXPORT)
     @ApiAccessLog(operateType = EXPORT)
-    public void exportRefundInfoExcel(@Valid RefundInfoPageReqVO pageReqVO,
+    public void exportRefundInfoExcel(@Valid @ParameterObject RefundInfoPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<RefundInfoDO> list = refundInfoService.getRefundInfoPage(pageReqVO).getList();
+        List<RefundInfoRespVO> list = refundInfoService.getRefundInfoPage(pageReqVO).getList();
         // 导出 Excel
         // 导出 Excel
         ExcelUtils.write(response, "回款信息.xls", "数据", RefundInfoRespVO.class,
         ExcelUtils.write(response, "回款信息.xls", "数据", RefundInfoRespVO.class,
-                        BeanUtils.toBean(list, RefundInfoRespVO.class));
+                        list);
     }
     }
 
 
 }
 }

+ 16 - 33
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoPageReqVO.java

@@ -1,14 +1,13 @@
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import java.math.BigDecimal;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
 
 
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
 
 
 @Schema(description = "管理后台 - 回款信息分页 Request VO")
 @Schema(description = "管理后台 - 回款信息分页 Request VO")
 @Data
 @Data
@@ -16,39 +15,23 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 @ToString(callSuper = true)
 public class RefundInfoPageReqVO extends PageParam {
 public class RefundInfoPageReqVO extends PageParam {
 
 
-    @Schema(description = "回款编号:年月日+uuid", example = "8352")
-    private String refundInfoUuid;
-
     @Schema(description = "回款标题")
     @Schema(description = "回款标题")
     private String refundTitle;
     private String refundTitle;
 
 
-    @Schema(description = "客户id", example = "16708")
-    private Long customerId;
-
-    @Schema(description = "合同id", example = "32502")
-    private Long contractId;
-
-    @Schema(description = "回款日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private String[] refundDate;
-
-    @Schema(description = "回款金额")
-    private BigDecimal refundMoney;
-
-    @Schema(description = "回款周期,单位:天")
-    private Integer refundCycle;
+    @Schema(description = "回款编号:年月日+uuid")
+    private String refundInfoUuid;
 
 
-    @Schema(description = "逾期天数")
-    private Integer overdueDay;
+    @Schema(description = "客户名称")
+    private String customerName;
 
 
-    @Schema(description = "单据状态:0:已完成,1:作废", example = "1")
-    private String status;
+    @Schema(description = "合同名称")
+    private Long contractName;
 
 
-    @Schema(description = "备注")
-    private String remarks;
+    @Schema(description = "回款日期", example = "2024-08-07,2024-08-07")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    private String[] refundDate;
 
 
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
+    @Schema(description = "创建人名称")
+    private String creatorName;
 
 
 }
 }

+ 43 - 11
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoRespVO.java

@@ -1,24 +1,25 @@
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 
 
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
+import lombok.Data;
+
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 
 @Schema(description = "管理后台 - 回款信息 Response VO")
 @Schema(description = "管理后台 - 回款信息 Response VO")
 @Data
 @Data
 @ExcelIgnoreUnannotated
 @ExcelIgnoreUnannotated
 public class RefundInfoRespVO {
 public class RefundInfoRespVO {
 
 
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "13682")
+    @Schema(description = "主键")
     @ExcelProperty("主键")
     @ExcelProperty("主键")
     private Long id;
     private Long id;
 
 
-    @Schema(description = "回款编号:年月日+uuid", example = "8352")
+    @Schema(description = "回款编号:年月日+uuid")
     @ExcelProperty("回款编号:年月日+uuid")
     @ExcelProperty("回款编号:年月日+uuid")
     private String refundInfoUuid;
     private String refundInfoUuid;
 
 
@@ -26,19 +27,35 @@ public class RefundInfoRespVO {
     @ExcelProperty("回款标题")
     @ExcelProperty("回款标题")
     private String refundTitle;
     private String refundTitle;
 
 
-    @Schema(description = "客户id", example = "16708")
+    @Schema(description = "客户id")
     @ExcelProperty("客户id")
     @ExcelProperty("客户id")
     private Long customerId;
     private Long customerId;
 
 
-    @Schema(description = "合同id", example = "32502")
+    @Schema(description = "客户名称")
+    @ExcelProperty("客户名称")
+    private String customerName;
+
+    @Schema(description = "客户编码")
+    @ExcelProperty("客户编码")
+    private String customerCode;
+
+    @Schema(description = "合同id")
     @ExcelProperty("合同id")
     @ExcelProperty("合同id")
     private Long contractId;
     private Long contractId;
 
 
+    @Schema(description = "合同名称")
+    @ExcelProperty("合同名称")
+    private String contractName;
+
+    @Schema(description = "合同编码")
+    @ExcelProperty("合同编码")
+    private String contractCode;
+
     @Schema(description = "回款日期")
     @Schema(description = "回款日期")
     @ExcelProperty("回款日期")
     @ExcelProperty("回款日期")
     private String refundDate;
     private String refundDate;
 
 
-    @Schema(description = "回款金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "回款金额")
     @ExcelProperty("回款金额")
     @ExcelProperty("回款金额")
     private BigDecimal refundMoney;
     private BigDecimal refundMoney;
 
 
@@ -50,16 +67,31 @@ public class RefundInfoRespVO {
     @ExcelProperty("逾期天数")
     @ExcelProperty("逾期天数")
     private Integer overdueDay;
     private Integer overdueDay;
 
 
-    @Schema(description = "单据状态:0:已完成,1:作废", example = "1")
+    @Schema(description = "单据状态:0:已完成,1:作废")
     @ExcelProperty("单据状态:0:已完成,1:作废")
     @ExcelProperty("单据状态:0:已完成,1:作废")
     private String status;
     private String status;
 
 
+    @Schema(description = "单据状态描述:0:已完成,1:作废")
+    @ExcelProperty("单据状态描述:0:已完成,1:作废")
+    private String statusDesc;
+
     @Schema(description = "备注")
     @Schema(description = "备注")
     @ExcelProperty("备注")
     @ExcelProperty("备注")
     private String remarks;
     private String remarks;
 
 
+    @Schema(description = "创建人id")
+    @ExcelProperty("创建人id")
+    private String creator;
+
+    @Schema(description = "创建人名称")
+    @ExcelProperty("创建人名称")
+    private String creatorName;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
     private LocalDateTime createTime;
 
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
 }
 }

+ 21 - 9
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/refundinfo/vo/RefundInfoSaveReqVO.java

@@ -1,41 +1,53 @@
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 package cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import javax.validation.constraints.*;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.List;
 
 
 @Schema(description = "管理后台 - 回款信息新增/修改 Request VO")
 @Schema(description = "管理后台 - 回款信息新增/修改 Request VO")
 @Data
 @Data
 public class RefundInfoSaveReqVO {
 public class RefundInfoSaveReqVO {
 
 
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "13682")
+    @Schema(description = "主键")
     private Long id;
     private Long id;
 
 
-    @Schema(description = "回款标题")
+    @Schema(description = "回款标题", example = "回款标题1")
+    @NotBlank(message = "回款标题不能为空")
     private String refundTitle;
     private String refundTitle;
 
 
-    @Schema(description = "客户id", example = "16708")
+    @Schema(description = "客户id", example = "1")
+    @NotNull(message = "客户id不能为空")
     private Long customerId;
     private Long customerId;
 
 
-    @Schema(description = "合同id", example = "32502")
+    @Schema(description = "合同id", example = "1")
+    @NotNull(message = "合同id不能为空")
     private Long contractId;
     private Long contractId;
 
 
-    @Schema(description = "回款日期")
+    @Schema(description = "回款日期", example = "2024-08-07")
+    @NotBlank(message = "回款日期不能为空")
     private String refundDate;
     private String refundDate;
 
 
     @Schema(description = "回款金额", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "回款金额", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "回款金额不能为空")
     @NotNull(message = "回款金额不能为空")
+    @Min(value = 0, message = "回款金额必须大于0")
     private BigDecimal refundMoney;
     private BigDecimal refundMoney;
 
 
     @Schema(description = "回款周期,单位:天")
     @Schema(description = "回款周期,单位:天")
+    @NotNull(message = "回款周期不能为空")
     private Integer refundCycle;
     private Integer refundCycle;
 
 
     @Schema(description = "逾期天数")
     @Schema(description = "逾期天数")
     private Integer overdueDay;
     private Integer overdueDay;
 
 
-    @Schema(description = "备注")
+    @Schema(description = "备注", example = "备注可以不用填")
     private String remarks;
     private String remarks;
 
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
+
 }
 }

+ 22 - 13
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/dal/mysql/refundinfo/RefundInfoMapper.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.cash.dal.mysql.refundinfo;
 package cn.iocoder.yudao.module.cash.dal.mysql.refundinfo;
 
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRespVO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
 /**
  * 回款信息 Mapper
  * 回款信息 Mapper
@@ -21,16 +23,23 @@ public interface RefundInfoMapper extends BaseMapperX<RefundInfoDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<RefundInfoDO>()
         return selectPage(reqVO, new LambdaQueryWrapperX<RefundInfoDO>()
                 .eqIfPresent(RefundInfoDO::getRefundInfoUuid, reqVO.getRefundInfoUuid())
                 .eqIfPresent(RefundInfoDO::getRefundInfoUuid, reqVO.getRefundInfoUuid())
                 .eqIfPresent(RefundInfoDO::getRefundTitle, reqVO.getRefundTitle())
                 .eqIfPresent(RefundInfoDO::getRefundTitle, reqVO.getRefundTitle())
-                .eqIfPresent(RefundInfoDO::getCustomerId, reqVO.getCustomerId())
-                .eqIfPresent(RefundInfoDO::getContractId, reqVO.getContractId())
                 .betweenIfPresent(RefundInfoDO::getRefundDate, reqVO.getRefundDate())
                 .betweenIfPresent(RefundInfoDO::getRefundDate, reqVO.getRefundDate())
-                .eqIfPresent(RefundInfoDO::getRefundMoney, reqVO.getRefundMoney())
-                .eqIfPresent(RefundInfoDO::getRefundCycle, reqVO.getRefundCycle())
-                .eqIfPresent(RefundInfoDO::getOverdueDay, reqVO.getOverdueDay())
-                .eqIfPresent(RefundInfoDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(RefundInfoDO::getRemarks, reqVO.getRemarks())
-                .betweenIfPresent(RefundInfoDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(RefundInfoDO::getId));
                 .orderByDesc(RefundInfoDO::getId));
     }
     }
 
 
-}
+    /**
+     * 总数量
+     *
+     * @param pageReqVO 分页请求对象,包含页码信息和筛选条件
+     * @return 返回总数量,用于分页导航和信息
+     */
+    long selectPageCount(@Param("page") RefundInfoPageReqVO pageReqVO);
+
+    /**
+     * 退款分页信息列表
+     *
+     * @param pageReqVO 分页请求对象,包含页码信息和筛选条件
+     * @return 返回退款分页信息列表,用于展示
+     */
+    List<RefundInfoRespVO> selectPageList(@Param("page") RefundInfoPageReqVO pageReqVO);
+}

+ 7 - 6
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/refundinfo/RefundInfoService.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.cash.service.refundinfo;
 package cn.iocoder.yudao.module.cash.service.refundinfo;
 
 
-import java.util.*;
-import javax.validation.*;
-import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.*;
-import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRespVO;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoSaveReqVO;
+import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
+
+import javax.validation.Valid;
 
 
 /**
 /**
  * 回款信息 Service 接口
  * 回款信息 Service 接口
@@ -50,6 +51,6 @@ public interface RefundInfoService {
      * @param pageReqVO 分页查询
      * @param pageReqVO 分页查询
      * @return 回款信息分页
      * @return 回款信息分页
      */
      */
-    PageResult<RefundInfoDO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO);
+    PageResult<RefundInfoRespVO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO);
 
 
 }
 }

+ 60 - 18
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/refundinfo/RefundInfoServiceImpl.java

@@ -1,21 +1,28 @@
 package cn.iocoder.yudao.module.cash.service.refundinfo;
 package cn.iocoder.yudao.module.cash.service.refundinfo;
 
 
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.*;
-import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.hutool.core.util.IdUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRespVO;
+import cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoSaveReqVO;
+import cn.iocoder.yudao.module.cash.dal.dataobject.refundinfo.RefundInfoDO;
 import cn.iocoder.yudao.module.cash.dal.mysql.refundinfo.RefundInfoMapper;
 import cn.iocoder.yudao.module.cash.dal.mysql.refundinfo.RefundInfoMapper;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.cash.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.cash.enums.ErrorCodeConstants.REFUND_INFO_NOT_EXISTS;
 
 
 /**
 /**
  * 回款信息 Service 实现类
  * 回款信息 Service 实现类
@@ -29,21 +36,46 @@ public class RefundInfoServiceImpl implements RefundInfoService {
     @Resource
     @Resource
     private RefundInfoMapper refundInfoMapper;
     private RefundInfoMapper refundInfoMapper;
 
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private FileApi fileApi;
+
     @Override
     @Override
     public Long createRefundInfo(RefundInfoSaveReqVO createReqVO) {
     public Long createRefundInfo(RefundInfoSaveReqVO createReqVO) {
-        // 插入
+        // 获取当前登录用户ID
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // 根据用户ID获取当前登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+
+        // 将创建请求对象转换为回款信息对象
         RefundInfoDO refundInfo = BeanUtils.toBean(createReqVO, RefundInfoDO.class);
         RefundInfoDO refundInfo = BeanUtils.toBean(createReqVO, RefundInfoDO.class);
+        // 创建一个日期时间格式化器,用于格式化日期时间
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        // 获取当前时间并格式化,然后拼接上随机UUID作为回款信息的唯一标识
+        String format = formatter.format(LocalDateTime.now());
+        refundInfo.setRefundInfoUuid(format + IdUtil.fastSimpleUUID());
+        // 设置回款信息的状态为"0",表示已完成
+        refundInfo.setStatus("0");
+        // 设置回款信息的创建者为当前登录员工的ID
+        refundInfo.setCreator(String.valueOf(loginEmployee.getId()));
+        // 插入回款信息到数据库
         refundInfoMapper.insert(refundInfo);
         refundInfoMapper.insert(refundInfo);
-        // 返回
+        // 附件
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), refundInfo.getRefundInfoUuid());
+        // 返回创建的回款信息的ID
         return refundInfo.getId();
         return refundInfo.getId();
     }
     }
 
 
     @Override
     @Override
     public void updateRefundInfo(RefundInfoSaveReqVO updateReqVO) {
     public void updateRefundInfo(RefundInfoSaveReqVO updateReqVO) {
         // 校验存在
         // 校验存在
-        validateRefundInfoExists(updateReqVO.getId());
+        RefundInfoDO refundInfoDO = validateRefundInfoExists(updateReqVO.getId());
         // 更新
         // 更新
         RefundInfoDO updateObj = BeanUtils.toBean(updateReqVO, RefundInfoDO.class);
         RefundInfoDO updateObj = BeanUtils.toBean(updateReqVO, RefundInfoDO.class);
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), refundInfoDO.getRefundInfoUuid());
         refundInfoMapper.updateById(updateObj);
         refundInfoMapper.updateById(updateObj);
     }
     }
 
 
@@ -55,10 +87,12 @@ public class RefundInfoServiceImpl implements RefundInfoService {
         refundInfoMapper.deleteById(id);
         refundInfoMapper.deleteById(id);
     }
     }
 
 
-    private void validateRefundInfoExists(Long id) {
-        if (refundInfoMapper.selectById(id) == null) {
+    private RefundInfoDO validateRefundInfoExists(Long id) {
+        RefundInfoDO refundInfoDO = refundInfoMapper.selectById(id);
+        if (refundInfoDO == null) {
             throw exception(REFUND_INFO_NOT_EXISTS);
             throw exception(REFUND_INFO_NOT_EXISTS);
         }
         }
+        return refundInfoDO;
     }
     }
 
 
     @Override
     @Override
@@ -67,8 +101,16 @@ public class RefundInfoServiceImpl implements RefundInfoService {
     }
     }
 
 
     @Override
     @Override
-    public PageResult<RefundInfoDO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO) {
-        return refundInfoMapper.selectPage(pageReqVO);
+    public PageResult<RefundInfoRespVO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO) {
+        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+
+        long pageCount = -1;
+        if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
+            pageCount = refundInfoMapper.selectPageCount(pageReqVO);
+        }
+        List<RefundInfoRespVO> pageList = refundInfoMapper.selectPageList(pageReqVO);
+
+        return new PageResult<>(pageList, pageCount);
     }
     }
 
 
 }
 }

+ 86 - 0
yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/refundinfo/RefundInfoMapper.xml

@@ -9,4 +9,90 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
      -->
 
 
+    <select id="selectPageCount" resultType="java.lang.Long">
+        SELECT
+            count(fri.id)
+        FROM
+            finance_refund_info fri
+        LEFT JOIN employee_info ei ON fri.creator = ei.id AND ei.deleted = 0
+        WHERE
+            fri.deleted = 0
+        <if test="page.refundTitle != null and page.refundTitle != ''">
+            AND fri.refund_title like concat('%',#{page.refundTitle},'%')
+        </if>
+        <if test="page.refundInfoUuid != null and page.refundInfoUuid != ''">
+            AND fri.refund_info_uuid like concat('%',#{page.refundInfoUuid},'%')
+        </if>
+        <if test="page.customerName != null and page.customerName != ''">
+            AND fri.customer_id like concat('%',#{page.customerName},'%')
+        </if>
+        <if test="page.contractName != null and page.contractName != ''">
+            AND fri.contract_id like concat('%',#{page.contractName},'%')
+        </if>
+        <if test="page.refundDate != null and page.refundDate.length > 0">
+            AND fri.refund_date BETWEEN #{page.refundDate[0]} AND #{page.refundDate[1]}
+        </if>
+        <if test="page.creatorName != null and page.creatorName != ''">
+            AND ei.name like concat('%',#{page.creatorName},'%')
+        </if>
+        ORDER BY
+            fri.create_time DESC
+    </select>
+    <select id="selectPageList"
+            resultType="cn.iocoder.yudao.module.cash.controller.admin.refundinfo.vo.RefundInfoRespVO">
+        SELECT
+            fri.id,
+            fri.refund_info_uuid,
+            fri.refund_title,
+            fri.customer_id,
+           '客户名称' customerName,
+           '客户编码' customerCode,
+            fri.contract_id,
+           '合同名称' contractName,
+           '合同编码' contractCode,
+            fri.refund_date,
+            fri.refund_money,
+            fri.refund_cycle,
+            fri.overdue_day,
+            fri.`status`,
+            CASE fri.`status`
+                WHEN 0
+                    THEN '已完成'
+                WHEN 1
+                    THEN '作废'
+                ELSE '未知'
+            END AS statusDesc,
+            fri.remarks,
+            fri.creator,
+            ei.name creatorName,
+            fri.create_time
+        FROM
+            finance_refund_info fri
+                LEFT JOIN employee_info ei ON fri.creator = ei.id AND ei.deleted = 0
+        WHERE
+            fri.deleted = 0
+        <if test="page.refundTitle != null and page.refundTitle != ''">
+            AND fri.refund_title like concat('%',#{page.refundTitle},'%')
+        </if>
+        <if test="page.refundInfoUuid != null and page.refundInfoUuid != ''">
+            AND fri.refund_info_uuid like concat('%',#{page.refundInfoUuid},'%')
+        </if>
+        <if test="page.customerName != null and page.customerName != ''">
+            AND fri.customer_id like concat('%',#{page.customerName},'%')
+        </if>
+        <if test="page.contractName != null and page.contractName != ''">
+            AND fri.contract_id like concat('%',#{page.contractName},'%')
+        </if>
+        <if test="page.refundDate != null and page.refundDate.length > 0">
+            AND fri.refund_date BETWEEN #{page.refundDate[0]} AND #{page.refundDate[1]}
+        </if>
+        <if test="page.creatorName != null and page.creatorName != ''">
+            AND ei.name like concat('%',#{page.creatorName},'%')
+        </if>
+        ORDER BY
+            fri.create_time DESC
+        <if test="page.pageSize != -1">
+            LIMIT #{page.pageNo}, #{page.pageSize}
+        </if>
+    </select>
 </mapper>
 </mapper>

+ 11 - 2
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.infra.api.file;
 package cn.iocoder.yudao.module.infra.api.file;
 
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileRespVO;
 import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileRespVO;
 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
 import cn.iocoder.yudao.module.infra.service.file.FileService;
 import cn.iocoder.yudao.module.infra.service.file.FileService;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 
 
@@ -37,7 +38,15 @@ public class FileApiImpl implements FileApi {
 
 
     @Override
     @Override
     public Integer updateFileBiz(List<Long> fileIdList, String serviceId) {
     public Integer updateFileBiz(List<Long> fileIdList, String serviceId) {
-        return fileService.updateFileBiz(fileIdList, serviceId);
+        if (StrUtil.isNotBlank(serviceId)) {
+            // 先取消关联
+            fileService.cancelFileBiz(serviceId);
+        }
+        if (CollectionUtil.isNotEmpty(fileIdList) && StrUtil.isNotEmpty(serviceId)) {
+            // 再关联最新的
+            fileService.updateFileBiz(fileIdList, serviceId);
+        }
+        return 1;
     }
     }
 
 
     @Override
     @Override

+ 9 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java

@@ -79,6 +79,15 @@ public interface FileService {
      */
      */
     FilePresignedUrlRespVO getFilePresignedUrl(String path) throws Exception;
     FilePresignedUrlRespVO getFilePresignedUrl(String path) throws Exception;
 
 
+
+    /**
+     * 取消文件业务id
+     *
+     * @param serviceId 服务ID,唯一标识需要取消的文件操作
+     * @return 返回影响行数
+     */
+    Integer cancelFileBiz(String serviceId);
+
     /**
     /**
      * 更新文件业务id
      * 更新文件业务id
      *
      *

+ 8 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java

@@ -177,6 +177,14 @@ public class FileServiceImpl implements FileService {
                 object -> object.setConfigId(fileClient.getId()));
                 object -> object.setConfigId(fileClient.getId()));
     }
     }
 
 
+    @Override
+    public Integer cancelFileBiz(String serviceId) {
+        LambdaUpdateWrapper<FileDO> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(FileDO::getServiceId, null)
+                .eq(FileDO::getServiceId, serviceId);
+        return fileMapper.update(updateWrapper);
+    }
+
     @Override
     @Override
     public Integer updateFileBiz(List<Long> fileIdList, String serviceId) {
     public Integer updateFileBiz(List<Long> fileIdList, String serviceId) {
         LambdaUpdateWrapper<FileDO> updateWrapper = new LambdaUpdateWrapper<>();
         LambdaUpdateWrapper<FileDO> updateWrapper = new LambdaUpdateWrapper<>();