Переглянути джерело

1、付款信息管理接口调整

dongpo 8 місяців тому
батько
коміт
c6681390a4
10 змінених файлів з 271 додано та 123 видалено
  1. 60 35
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/PaymentInfoController.java
  2. 13 30
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoPageReqVO.java
  3. 26 10
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoRespVO.java
  4. 20 10
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoSaveReqVO.java
  5. 9 10
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/dal/mysql/paymentinfo/PaymentInfoMapper.java
  6. 7 6
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/paymentinfo/PaymentInfoService.java
  7. 64 18
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/paymentinfo/PaymentInfoServiceImpl.java
  8. 68 0
      yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/paymentinfo/PaymentInfoMapper.xml
  9. 2 2
      yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java
  10. 2 2
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApiImpl.java

+ 60 - 35
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/PaymentInfoController.java

@@ -1,33 +1,34 @@
 package cn.iocoder.yudao.module.cash.controller.admin.paymentinfo;
 
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
-
-import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.*;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoRespVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoSaveReqVO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
 import cn.iocoder.yudao.module.cash.service.paymentinfo.PaymentInfoService;
+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.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "管理后台 - 付款信息")
 @RestController
@@ -38,16 +39,21 @@ public class PaymentInfoController {
     @Resource
     private PaymentInfoService paymentInfoService;
 
+    @Resource
+    private FileApi fileApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建付款信息")
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:create')")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:create')")
     public CommonResult<Long> createPaymentInfo(@Valid @RequestBody PaymentInfoSaveReqVO createReqVO) {
         return success(paymentInfoService.createPaymentInfo(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新付款信息")
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:update')")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:update')")
     public CommonResult<Boolean> updatePaymentInfo(@Valid @RequestBody PaymentInfoSaveReqVO updateReqVO) {
         paymentInfoService.updatePaymentInfo(updateReqVO);
         return success(true);
@@ -55,8 +61,9 @@ public class PaymentInfoController {
 
     @DeleteMapping("/delete")
     @Operation(summary = "删除付款信息")
+    @ApiOperationSupport(order = 3)
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:delete')")
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:delete')")
     public CommonResult<Boolean> deletePaymentInfo(@RequestParam("id") Long id) {
         paymentInfoService.deletePaymentInfo(id);
         return success(true);
@@ -64,32 +71,50 @@ public class PaymentInfoController {
 
     @GetMapping("/get")
     @Operation(summary = "获得付款信息")
+    @ApiOperationSupport(order = 4)
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:query')")
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:query')")
     public CommonResult<PaymentInfoRespVO> getPaymentInfo(@RequestParam("id") Long id) {
         PaymentInfoDO paymentInfo = paymentInfoService.getPaymentInfo(id);
-        return success(BeanUtils.toBean(paymentInfo, PaymentInfoRespVO.class));
+        PaymentInfoRespVO paymentInfoRespVO = BeanUtils.toBean(paymentInfo, PaymentInfoRespVO.class);
+
+        String status = paymentInfoRespVO.getStatus();
+        if ("0".equals(status)) {
+            paymentInfoRespVO.setStatusDesc("已完成");
+        } else if ("1".equals(status)) {
+            paymentInfoRespVO.setStatusDesc("作废");
+        } else {
+            paymentInfoRespVO.setStatusDesc("未知");
+        }
+
+        // 附件
+        List<FileDTO> fileDTOList = fileApi.getFileDTOListByBiz(paymentInfo.getPaymentInfoUuid());
+        paymentInfoRespVO.setFileList(fileDTOList);
+
+        return success(paymentInfoRespVO);
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得付款信息分页")
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:query')")
-    public CommonResult<PageResult<PaymentInfoRespVO>> getPaymentInfoPage(@Valid PaymentInfoPageReqVO pageReqVO) {
-        PageResult<PaymentInfoDO> pageResult = paymentInfoService.getPaymentInfoPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, PaymentInfoRespVO.class));
+    @ApiOperationSupport(order = 5)
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:query')")
+    public CommonResult<PageResult<PaymentInfoRespVO>> getPaymentInfoPage(@Valid @ParameterObject PaymentInfoPageReqVO pageReqVO) {
+        PageResult<PaymentInfoRespVO> pageResult = paymentInfoService.getPaymentInfoPage(pageReqVO);
+        return success(pageResult);
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出付款信息 Excel")
-    @PreAuthorize("@ss.hasPermission('cash:payment-info:export')")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('cash:payment-info:export')")
     @ApiAccessLog(operateType = EXPORT)
-    public void exportPaymentInfoExcel(@Valid PaymentInfoPageReqVO pageReqVO,
+    public void exportPaymentInfoExcel(@Valid @ParameterObject PaymentInfoPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<PaymentInfoDO> list = paymentInfoService.getPaymentInfoPage(pageReqVO).getList();
+        List<PaymentInfoRespVO> list = paymentInfoService.getPaymentInfoPage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "付款信息.xls", "数据", PaymentInfoRespVO.class,
-                        BeanUtils.toBean(list, PaymentInfoRespVO.class));
+                        list);
     }
 
 }

+ 13 - 30
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoPageReqVO.java

@@ -1,14 +1,13 @@
 package cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 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 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")
 @Data
@@ -16,33 +15,17 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class PaymentInfoPageReqVO extends PageParam {
 
-    @Schema(description = "付款编号:年月日+uuid", example = "25414")
-    private String paymentInfoUuid;
-
-    @Schema(description = "付款标题")
+    @Schema(description = "付款标题", example = "付款标题1")
     private String paymentTitle;
 
-    @Schema(description = "付款日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private String[] paymentDate;
-
-    @Schema(description = "付款金额")
-    private BigDecimal paymentMoney;
-
-    @Schema(description = "收款方信息")
-    private String payee;
-
-    @Schema(description = "付款事由", example = "不香")
-    private String reason;
-
-    @Schema(description = "单据状态:0:已完成,1:作废", example = "1")
-    private String status;
+    @Schema(description = "付款编号:年月日+uuid", example = "20240807")
+    private String paymentInfoUuid;
 
-    @Schema(description = "备注")
-    private String remarks;
+    @Schema(description = "付款日期", example = "2024-08-07,2024-08-07")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    private String[] paymentDate;
 
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
+    @Schema(description = "创建人名称")
+    private String creatorName;
 
 }

+ 26 - 10
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoRespVO.java

@@ -1,24 +1,25 @@
 package cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.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 lombok.*;
-import java.util.*;
-import java.util.*;
+import lombok.Data;
+
 import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 @Schema(description = "管理后台 - 付款信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
 public class PaymentInfoRespVO {
 
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22098")
+    @Schema(description = "主键")
     @ExcelProperty("主键")
     private Long id;
 
-    @Schema(description = "付款编号:年月日+uuid", example = "25414")
+    @Schema(description = "付款编号:年月日+uuid")
     @ExcelProperty("付款编号:年月日+uuid")
     private String paymentInfoUuid;
 
@@ -30,7 +31,7 @@ public class PaymentInfoRespVO {
     @ExcelProperty("付款日期")
     private String paymentDate;
 
-    @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "付款金额")
     @ExcelProperty("付款金额")
     private BigDecimal paymentMoney;
 
@@ -38,20 +39,35 @@ public class PaymentInfoRespVO {
     @ExcelProperty("收款方信息")
     private String payee;
 
-    @Schema(description = "付款事由", example = "不香")
+    @Schema(description = "付款事由")
     @ExcelProperty("付款事由")
     private String reason;
 
-    @Schema(description = "单据状态:0:已完成,1:作废", example = "1")
+    @Schema(description = "单据状态:0:已完成,1:作废")
     @ExcelProperty("单据状态:0:已完成,1:作废")
     private String status;
 
+    @Schema(description = "单据状态描述:0:已完成,1:作废")
+    @ExcelProperty("单据状态描述:0:已完成,1:作废")
+    private String statusDesc;
+
     @Schema(description = "备注")
     @ExcelProperty("备注")
     private String remarks;
 
+    @Schema(description = "创建人id")
+    @ExcelProperty("创建人id")
+    private String creator;
+
+    @Schema(description = "创建人名称")
+    @ExcelProperty("创建人名称")
+    private String creatorName;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
 }

+ 20 - 10
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/controller/admin/paymentinfo/vo/PaymentInfoSaveReqVO.java

@@ -1,35 +1,45 @@
 package cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo;
 
 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.util.List;
 
 @Schema(description = "管理后台 - 付款信息新增/修改 Request VO")
 @Data
 public class PaymentInfoSaveReqVO {
 
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22098")
+    @Schema(description = "主键")
     private Long id;
 
-    @Schema(description = "付款标题")
+    @Schema(description = "付款标题", example = "付款标题1")
+    @NotBlank(message = "付款标题不能为空")
     private String paymentTitle;
 
-    @Schema(description = "付款日期")
+    @Schema(description = "付款日期", example = "2024-08-07")
+    @NotBlank(message = "付款日期不能为空")
     private String paymentDate;
 
-    @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "付款金额", example = "10.01")
     @NotNull(message = "付款金额不能为空")
+    @Min(value = 0, message = "付款金额必须大于0")
     private BigDecimal paymentMoney;
 
-    @Schema(description = "收款方信息")
+    @Schema(description = "收款方信息", example = "收款方信息1")
+    @NotBlank(message = "收款方信息不能为空")
     private String payee;
 
-    @Schema(description = "付款事由", example = "不香")
+    @Schema(description = "付款事由", example = "付款事由1")
+    @NotBlank(message = "付款事由不能为空")
     private String reason;
 
-    @Schema(description = "备注")
+    @Schema(description = "备注", example = "备注可以不写")
     private String remarks;
 
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
 }

+ 9 - 10
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/dal/mysql/paymentinfo/PaymentInfoMapper.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.cash.dal.mysql.paymentinfo;
 
-import java.util.*;
-
 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.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoRespVO;
 import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 付款信息 Mapper
@@ -22,13 +24,10 @@ public interface PaymentInfoMapper extends BaseMapperX<PaymentInfoDO> {
                 .eqIfPresent(PaymentInfoDO::getPaymentInfoUuid, reqVO.getPaymentInfoUuid())
                 .eqIfPresent(PaymentInfoDO::getPaymentTitle, reqVO.getPaymentTitle())
                 .betweenIfPresent(PaymentInfoDO::getPaymentDate, reqVO.getPaymentDate())
-                .eqIfPresent(PaymentInfoDO::getPaymentMoney, reqVO.getPaymentMoney())
-                .eqIfPresent(PaymentInfoDO::getPayee, reqVO.getPayee())
-                .eqIfPresent(PaymentInfoDO::getReason, reqVO.getReason())
-                .eqIfPresent(PaymentInfoDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(PaymentInfoDO::getRemarks, reqVO.getRemarks())
-                .betweenIfPresent(PaymentInfoDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(PaymentInfoDO::getId));
     }
 
+    long selectPageCount(@Param("page") PaymentInfoPageReqVO pageReqVO);
+
+    List<PaymentInfoRespVO> selectPageList(@Param("page") PaymentInfoPageReqVO pageReqVO);
 }

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

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.cash.service.paymentinfo;
 
-import java.util.*;
-import javax.validation.*;
-import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.*;
-import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoRespVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoSaveReqVO;
+import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
+
+import javax.validation.Valid;
 
 /**
  * 付款信息 Service 接口
@@ -50,6 +51,6 @@ public interface PaymentInfoService {
      * @param pageReqVO 分页查询
      * @return 付款信息分页
      */
-    PageResult<PaymentInfoDO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO);
+    PageResult<PaymentInfoRespVO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO);
 
 }

+ 64 - 18
yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/paymentinfo/PaymentInfoServiceImpl.java

@@ -1,21 +1,28 @@
 package cn.iocoder.yudao.module.cash.service.paymentinfo;
 
-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.paymentinfo.vo.*;
-import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
-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.PageResult;
 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.paymentinfo.vo.PaymentInfoPageReqVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoRespVO;
+import cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoSaveReqVO;
+import cn.iocoder.yudao.module.cash.dal.dataobject.paymentinfo.PaymentInfoDO;
 import cn.iocoder.yudao.module.cash.dal.mysql.paymentinfo.PaymentInfoMapper;
+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.module.cash.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.cash.enums.ErrorCodeConstants.PAYMENT_INFO_NOT_EXISTS;
 
 /**
  * 付款信息 Service 实现类
@@ -29,21 +36,51 @@ public class PaymentInfoServiceImpl implements PaymentInfoService {
     @Resource
     private PaymentInfoMapper paymentInfoMapper;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private FileApi fileApi;
+
     @Override
     public Long createPaymentInfo(PaymentInfoSaveReqVO createReqVO) {
-        // 插入
+        // 获取当前登录用户的ID
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // 根据用户ID获取当前登录员工的信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+
+        // 将请求对象转换为付款信息实体对象
         PaymentInfoDO paymentInfo = BeanUtils.toBean(createReqVO, PaymentInfoDO.class);
+
+        // 生成付款编号:当前日期(年月日)+唯一标识符
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        String format = formatter.format(LocalDateTime.now());
+        paymentInfo.setPaymentInfoUuid(format + IdUtil.fastSimpleUUID());
+
+        // 设置付款信息状态为“已完成”
+        paymentInfo.setStatus("0");
+
+        // 设置付款信息的创建人为当前登录员工
+        paymentInfo.setCreator(String.valueOf(loginEmployee.getId()));
+
+        // 插入付款信息到数据库
         paymentInfoMapper.insert(paymentInfo);
-        // 返回
+
+        // 更新附件业务信息,将附件关联到对应的付款信息
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), paymentInfo.getPaymentInfoUuid());
+
+        // 返回创建的付款信息的ID
         return paymentInfo.getId();
     }
 
     @Override
     public void updatePaymentInfo(PaymentInfoSaveReqVO updateReqVO) {
         // 校验存在
-        validatePaymentInfoExists(updateReqVO.getId());
+        PaymentInfoDO paymentInfoDO = validatePaymentInfoExists(updateReqVO.getId());
         // 更新
         PaymentInfoDO updateObj = BeanUtils.toBean(updateReqVO, PaymentInfoDO.class);
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), paymentInfoDO.getPaymentInfoUuid());
         paymentInfoMapper.updateById(updateObj);
     }
 
@@ -55,10 +92,12 @@ public class PaymentInfoServiceImpl implements PaymentInfoService {
         paymentInfoMapper.deleteById(id);
     }
 
-    private void validatePaymentInfoExists(Long id) {
-        if (paymentInfoMapper.selectById(id) == null) {
+    private PaymentInfoDO validatePaymentInfoExists(Long id) {
+        PaymentInfoDO paymentInfoDO = paymentInfoMapper.selectById(id);
+        if (paymentInfoDO == null) {
             throw exception(PAYMENT_INFO_NOT_EXISTS);
         }
+        return paymentInfoDO;
     }
 
     @Override
@@ -67,8 +106,15 @@ public class PaymentInfoServiceImpl implements PaymentInfoService {
     }
 
     @Override
-    public PageResult<PaymentInfoDO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO) {
-        return paymentInfoMapper.selectPage(pageReqVO);
+    public PageResult<PaymentInfoRespVO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO) {
+        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+
+        long pageCount = -1;
+        if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
+            pageCount = paymentInfoMapper.selectPageCount(pageReqVO);
+        }
+        List<PaymentInfoRespVO> pageList =  paymentInfoMapper.selectPageList(pageReqVO);
+        return new PageResult<>(pageList, pageCount);
     }
 
 }

+ 68 - 0
yudao-module-finance/yudao-module-cash-biz/src/main/resources/mapper/paymentinfo/PaymentInfoMapper.xml

@@ -9,4 +9,72 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <select id="selectPageCount" resultType="java.lang.Long">
+        SELECT
+         count(fpi.id)
+        FROM
+        finance_payment_info fpi
+        LEFT JOIN employee_info ei ON fpi.creator = ei.id AND ei.deleted = 0
+        WHERE
+        fpi.deleted = 0
+        <if test="page.paymentTitle != null and page.paymentTitle != ''">
+            AND fpi.payment_title like concat('%',#{page.paymentTitle},'%')
+        </if>
+        <if test="page.paymentInfoUuid != null and page.paymentInfoUuid != ''">
+            AND fpi.payment_info_uuid like concat('%',#{page.paymentInfoUuid},'%')
+        </if>
+        <if test="page.paymentDate != null and page.paymentDate.length > 0">
+            AND fpi.payment_date BETWEEN #{page.paymentDate[0]} AND #{page.paymentDate[1]}
+        </if>
+        <if test="page.creatorName != null and page.creatorName != ''">
+            AND ei.name like concat('%',#{page.creatorName},'%')
+        </if>
+        ORDER BY
+        fpi.create_time DESC
+    </select>
+    <select id="selectPageList"
+            resultType="cn.iocoder.yudao.module.cash.controller.admin.paymentinfo.vo.PaymentInfoRespVO">
+        SELECT
+            fpi.id,
+            fpi.payment_info_uuid,
+            fpi.payment_title,
+            fpi.payment_date,
+            fpi.payment_money,
+            fpi.payee,
+            fpi.reason,
+            fpi.`status`,
+            CASE fpi.`status`
+                WHEN 0
+                    THEN '已完成'
+                WHEN 1
+                    THEN '作废'
+                ELSE '未知'
+            END AS statusDesc,
+            fpi.remarks,
+            fpi.creator,
+            ei.name creatorName,
+            fpi.create_time
+        FROM
+        finance_payment_info fpi
+        LEFT JOIN employee_info ei ON fpi.creator = ei.id AND ei.deleted = 0
+        WHERE
+        fpi.deleted = 0
+        <if test="page.paymentTitle != null and page.paymentTitle != ''">
+            AND fpi.payment_title like concat('%',#{page.paymentTitle},'%')
+        </if>
+        <if test="page.paymentInfoUuid != null and page.paymentInfoUuid != ''">
+            AND fpi.payment_info_uuid like concat('%',#{page.paymentInfoUuid},'%')
+        </if>
+        <if test="page.paymentDate != null and page.paymentDate.length > 0">
+            AND fpi.payment_date BETWEEN #{page.paymentDate[0]} AND #{page.paymentDate[1]}
+        </if>
+        <if test="page.creatorName != null and page.creatorName != ''">
+            AND ei.name like concat('%',#{page.creatorName},'%')
+        </if>
+        ORDER BY
+            fpi.create_time DESC
+        <if test="page.pageSize != -1">
+            LIMIT #{page.pageNo}, #{page.pageSize}
+        </if>
+    </select>
 </mapper>

+ 2 - 2
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/file/FileApi.java

@@ -63,8 +63,8 @@ public interface FileApi {
     /**
      * 根据业务id获取文件信息列表
      *
-     * @param universalId 业务id
+     * @param serviceId 业务id
      * @return
      */
-    List<FileDTO> getFileDTOListByBiz(String universalId);
+    List<FileDTO> getFileDTOListByBiz(String serviceId);
 }

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

@@ -50,8 +50,8 @@ public class FileApiImpl implements FileApi {
     }
 
     @Override
-    public List<FileDTO> getFileDTOListByBiz(String universalId) {
-        List<FileDO> fileDOList = fileService.getFileListByBiz(universalId);
+    public List<FileDTO> getFileDTOListByBiz(String serviceId) {
+        List<FileDO> fileDOList = fileService.getFileListByBiz(serviceId);
         return BeanUtils.toBean(fileDOList, FileDTO.class);
     }