Jelajahi Sumber

1、资产信息管理接口调整

dongpo 7 bulan lalu
induk
melakukan
86e0521619
16 mengubah file dengan 513 tambahan dan 90 penghapusan
  1. 51 0
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/InfoSourceEnum.java
  2. 1 3
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoServiceImpl.java
  3. 54 0
      yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/AssetStateEnum.java
  4. 49 0
      yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/AssetStatusEnum.java
  5. 1 0
      yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/ErrorCodeConstants.java
  6. 52 7
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/AssetInfoController.java
  7. 12 12
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoPageReqVO.java
  8. 38 19
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoRespVO.java
  9. 27 14
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoSaveReqVO.java
  10. 22 6
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/assetinfo/AssetInfoMapper.java
  11. 7 6
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoService.java
  12. 84 20
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoServiceImpl.java
  13. 112 0
      yudao-module-finance/yudao-module-asset-biz/src/main/resources/mapper/assetinfo/AssetInfoMapper.xml
  14. 1 1
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/paymentinfo/PaymentInfoServiceImpl.java
  15. 1 1
      yudao-module-finance/yudao-module-cash-biz/src/main/java/cn/iocoder/yudao/module/cash/service/refundinfo/RefundInfoServiceImpl.java
  16. 1 1
      yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/service/expenseinfo/ExpenseInfoServiceImpl.java

+ 51 - 0
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/InfoSourceEnum.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.framework.common.enums;
+
+/**
+ * 信息来源枚举类
+ * 用于标识信息的来源方式,如流程生成或手动添加
+ */
+public enum InfoSourceEnum {
+    /**
+     * 流程生成的信息来源
+     */
+    FLOW("flow", "流程生成"),
+    /**
+     * 手动添加的信息来源
+     */
+    MANUAL("manual", "手动添加"),
+    ;
+
+    // 来源标识符
+    private final String source;
+    // 来源描述
+    private final String desc;
+
+    /**
+     * 枚举构造函数
+     *
+     * @param source 来源标识符
+     * @param desc 来源描述
+     */
+    InfoSourceEnum(String source, String desc) {
+        this.source = source;
+        this.desc = desc;
+    }
+
+    /**
+     * 获取来源标识符
+     *
+     * @return 来源标识符
+     */
+    public String getSource() {
+        return source;
+    }
+
+    /**
+     * 获取来源描述
+     *
+     * @return 来源描述
+     */
+    public String getDesc() {
+        return desc;
+    }
+}

+ 1 - 3
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoServiceImpl.java

@@ -6,7 +6,6 @@ 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.LoginUser;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
-import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoSaveReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoSaveReqVO;
@@ -15,7 +14,6 @@ import cn.iocoder.yudao.module.bpm.dal.mysql.stamp.stampinfo.OaStampInfoMapper;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 
 
@@ -133,7 +131,7 @@ public class OaStampInfoServiceImpl implements OaStampInfoService {
 
 
     @Override
     @Override
     public PageResult<OaStampInfoRespVO> getOaStampInfoPage(OaStampInfoPageReqVO pageReqVO) {
     public PageResult<OaStampInfoRespVO> getOaStampInfoPage(OaStampInfoPageReqVO pageReqVO) {
-        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
 
 
         long pageCount = oaStampInfoMapper.selectPageCount(pageReqVO);
         long pageCount = oaStampInfoMapper.selectPageCount(pageReqVO);
         List<OaStampInfoRespVO> pageList = oaStampInfoMapper.selectPageList(pageReqVO);
         List<OaStampInfoRespVO> pageList = oaStampInfoMapper.selectPageList(pageReqVO);

+ 54 - 0
yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/AssetStateEnum.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.asset.enums;
+
+/**
+ * 资产状态枚举
+ * 用于标识资产的不同状态,每种状态都有一个相应的代码和描述
+ */
+public enum AssetStateEnum {
+    /**
+     * 可用状态的资产
+     */
+    AVAILABLE("0", "可用"),
+    /**
+     * 已被占用的资产
+     */
+    OCCUPIED("1", "占用"),
+    /**
+     * 已报废的资产
+     */
+    RETIRED("2", "已报废");
+
+    // 状态代码,用于系统内部标识不同的资产状态
+    private final String state;
+    // 状态描述,用于用户界面或其他需要人类可读信息的场景
+    private final String desc;
+
+    /**
+     * 枚举构造函数,初始化状态代码和描述
+     *
+     * @param state 状态代码
+     * @param desc  状态描述
+     */
+    AssetStateEnum(String state, String desc) {
+        this.state = state;
+        this.desc = desc;
+    }
+
+    /**
+     * 获取状态代码
+     *
+     * @return 状态代码
+     */
+    public String getState() {
+        return state;
+    }
+
+    /**
+     * 获取状态描述
+     *
+     * @return 状态描述
+     */
+    public String getDesc() {
+        return desc;
+    }
+}

+ 49 - 0
yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/AssetStatusEnum.java

@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.asset.enums;
+
+/**
+ * 资产信息单据状态枚举类
+ */
+public enum AssetStatusEnum {
+    /**
+     * 资产状态已完成
+     */
+    COMPLETED("0", "已完成"),
+    /**
+     * 资产状态已作废
+     */
+    ABANDONED("1", "已作废");
+
+    // 状态码,用于系统中存储和传输资产状态的标识
+    private final String status;
+    // 状态描述,用于展示给用户看的状态文字
+    private final String desc;
+
+    /**
+     * 枚举构造器,初始化状态码和状态描述
+     *
+     * @param status 状态码
+     * @param desc   状态描述
+     */
+    AssetStatusEnum(String status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    /**
+     * 获取状态码
+     *
+     * @return 状态码
+     */
+    public String getStatus() {
+        return status;
+    }
+
+    /**
+     * 获取状态描述
+     *
+     * @return 状态描述
+     */
+    public String getDesc() {
+        return desc;
+    }
+}

+ 1 - 0
yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/ErrorCodeConstants.java

@@ -6,6 +6,7 @@ public interface ErrorCodeConstants {
 
 
     // ========== 固定资产信息 1_051_001_001 ==========
     // ========== 固定资产信息 1_051_001_001 ==========
     ErrorCode INFO_NOT_EXISTS = new ErrorCode(1_051_001_001, "固定资产信息不存在");
     ErrorCode INFO_NOT_EXISTS = new ErrorCode(1_051_001_001, "固定资产信息不存在");
+    ErrorCode OCCUPIED_ASSET_NOT_ALLOWED_DELETE = new ErrorCode(1_051_001_002, "该资产已被占用,不允许删除");
 
 
     // ========== 固定资产领用信息 1_051_002_001 ==========
     // ========== 固定资产领用信息 1_051_002_001 ==========
     ErrorCode RECEIVE_INFO_NOT_EXISTS = new ErrorCode(1_051_002_001, "固定资产领用信息不存在");
     ErrorCode RECEIVE_INFO_NOT_EXISTS = new ErrorCode(1_051_002_001, "固定资产领用信息不存在");

+ 52 - 7
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/AssetInfoController.java

@@ -10,11 +10,20 @@ import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoPage
 import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO;
 import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO;
 import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoSaveReqVO;
 import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoSaveReqVO;
 import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
 import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
+import cn.iocoder.yudao.module.asset.enums.AssetStateEnum;
+import cn.iocoder.yudao.module.asset.enums.AssetStatusEnum;
 import cn.iocoder.yudao.module.asset.service.assetinfo.AssetInfoService;
 import cn.iocoder.yudao.module.asset.service.assetinfo.AssetInfoService;
+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 cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 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.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.*;
 
 
@@ -22,7 +31,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -36,6 +49,15 @@ public class AssetInfoController {
     @Resource
     @Resource
     private AssetInfoService infoService;
     private AssetInfoService infoService;
 
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private FileApi fileApi;
+
+    @Resource
+    private DeptApi deptApi;
+
     @PostMapping("/create")
     @PostMapping("/create")
     @Operation(summary = "创建固定资产信息")
     @Operation(summary = "创建固定资产信息")
     @ApiOperationSupport(order = 1)
     @ApiOperationSupport(order = 1)
@@ -70,15 +92,38 @@ public class AssetInfoController {
     // @PreAuthorize("@ss.hasPermission('asset:info:query')")
     // @PreAuthorize("@ss.hasPermission('asset:info:query')")
     public CommonResult<AssetInfoRespVO> getInfo(@RequestParam("id") Long id) {
     public CommonResult<AssetInfoRespVO> getInfo(@RequestParam("id") Long id) {
         AssetInfoDO info = infoService.getInfo(id);
         AssetInfoDO info = infoService.getInfo(id);
-        return success(BeanUtils.toBean(info, AssetInfoRespVO.class));
+        AssetInfoRespVO assetInfoRespVO = BeanUtils.toBean(info, AssetInfoRespVO.class);
+        // 归属部门名称
+        DeptRespDTO dept = deptApi.getDept(info.getAssetDeptId());
+        if (Objects.nonNull(dept)) {
+            assetInfoRespVO.setAssetDeptName(dept.getName());
+        }
+        // 资产负责人名称
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(info.getAssetManagerEmployeeId());
+        if (Objects.nonNull(employee)) {
+            assetInfoRespVO.setAssetManagerEmployeeName(employee.getName());
+        }
+        // 资产状态
+        Map<String, String> assetStateMap = Arrays.stream(AssetStateEnum.values())
+                .collect(Collectors.toMap(AssetStateEnum::getState, AssetStateEnum::getDesc));
+        assetInfoRespVO.setAssetStateDesc(assetStateMap.getOrDefault(assetInfoRespVO.getAssetState(), "未知"));
+        // 单据状态
+        Map<String, String> assetStatusMap = Arrays.stream(AssetStatusEnum.values())
+                .collect(Collectors.toMap(AssetStatusEnum::getStatus, AssetStatusEnum::getDesc));
+        assetInfoRespVO.setStatusDesc(assetStatusMap.getOrDefault(assetInfoRespVO.getStatus(), "未知"));
+        // 附件
+        List<FileDTO> fileDTOListByBiz = fileApi.getFileDTOListByBiz(info.getAssetInfoUuid());
+        assetInfoRespVO.setFileList(fileDTOListByBiz);
+
+        return success(assetInfoRespVO);
     }
     }
 
 
     @GetMapping("/page")
     @GetMapping("/page")
     @Operation(summary = "获得固定资产信息分页")
     @Operation(summary = "获得固定资产信息分页")
     @ApiOperationSupport(order = 5)
     @ApiOperationSupport(order = 5)
     // @PreAuthorize("@ss.hasPermission('asset:info:query')")
     // @PreAuthorize("@ss.hasPermission('asset:info:query')")
-    public CommonResult<PageResult<AssetInfoRespVO>> getInfoPage(@Valid AssetInfoPageReqVO pageReqVO) {
-        PageResult<AssetInfoDO> pageResult = infoService.getInfoPage(pageReqVO);
+    public CommonResult<PageResult<AssetInfoRespVO>> getInfoPage(@Valid @ParameterObject AssetInfoPageReqVO pageReqVO) {
+        PageResult<AssetInfoRespVO> pageResult = infoService.getInfoPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, AssetInfoRespVO.class));
         return success(BeanUtils.toBean(pageResult, AssetInfoRespVO.class));
     }
     }
 
 
@@ -87,13 +132,13 @@ public class AssetInfoController {
     @ApiOperationSupport(order = 6)
     @ApiOperationSupport(order = 6)
     // @PreAuthorize("@ss.hasPermission('asset:info:export')")
     // @PreAuthorize("@ss.hasPermission('asset:info:export')")
     @ApiAccessLog(operateType = EXPORT)
     @ApiAccessLog(operateType = EXPORT)
-    public void exportInfoExcel(@Valid AssetInfoPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+    public void exportInfoExcel(@Valid @ParameterObject AssetInfoPageReqVO pageReqVO,
+                                HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<AssetInfoDO> list = infoService.getInfoPage(pageReqVO).getList();
+        List<AssetInfoRespVO> list = infoService.getInfoPage(pageReqVO).getList();
         // 导出 Excel
         // 导出 Excel
         ExcelUtils.write(response, "固定资产信息.xls", "数据", AssetInfoRespVO.class,
         ExcelUtils.write(response, "固定资产信息.xls", "数据", AssetInfoRespVO.class,
-                        BeanUtils.toBean(list, AssetInfoRespVO.class));
+                list);
     }
     }
 
 
 }
 }

+ 12 - 12
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoPageReqVO.java

@@ -1,13 +1,13 @@
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo;
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.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 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
@@ -15,10 +15,10 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 @ToString(callSuper = true)
 public class AssetInfoPageReqVO extends PageParam {
 public class AssetInfoPageReqVO extends PageParam {
 
 
-    @Schema(description = "资产编号:年月日+uuid", example = "11811")
+    @Schema(description = "资产编号:年月日+uuid")
     private String assetInfoUuid;
     private String assetInfoUuid;
 
 
-    @Schema(description = "资产名称", example = "王五")
+    @Schema(description = "资产名称")
     private String name;
     private String name;
 
 
     @Schema(description = "资产型号")
     @Schema(description = "资产型号")
@@ -27,8 +27,8 @@ public class AssetInfoPageReqVO extends PageParam {
     @Schema(description = "资产序列号")
     @Schema(description = "资产序列号")
     private String serialNumber;
     private String serialNumber;
 
 
-    @Schema(description = "资产化日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @Schema(description = "资产化日期", example = "2024-08-08,2024-08-08")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
     private String[] capitalizationDate;
     private String[] capitalizationDate;
 
 
     @Schema(description = "折旧年限(大于0的自然数)")
     @Schema(description = "折旧年限(大于0的自然数)")
@@ -37,10 +37,10 @@ public class AssetInfoPageReqVO extends PageParam {
     @Schema(description = "资产状态:0可用 1占用 2报废")
     @Schema(description = "资产状态:0可用 1占用 2报废")
     private String assetState;
     private String assetState;
 
 
-    @Schema(description = "领用人id", example = "32331")
-    private Long receiveEmployeeId;
+    @Schema(description = "领用人名称")
+    private String receiveEmployeeName;
 
 
-    @Schema(description = "资产归属部门", example = "8133")
+    @Schema(description = "资产归属部门")
     private Long assetDeptId;
     private Long assetDeptId;
 
 
 }
 }

+ 38 - 19
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoRespVO.java

@@ -1,34 +1,31 @@
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo;
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.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 org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 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 AssetInfoRespVO {
 public class AssetInfoRespVO {
 
 
-    @Schema(description = "资产信息主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10483")
+    @Schema(description = "资产信息主键自增id")
     @ExcelProperty("资产信息主键自增id")
     @ExcelProperty("资产信息主键自增id")
     private Long id;
     private Long id;
 
 
-    @Schema(description = "资产编号:年月日+uuid", example = "11811")
+    @Schema(description = "资产编号:年月日+uuid")
     @ExcelProperty("资产编号:年月日+uuid")
     @ExcelProperty("资产编号:年月日+uuid")
     private String assetInfoUuid;
     private String assetInfoUuid;
 
 
-    @Schema(description = "资产名称", example = "王五")
+    @Schema(description = "资产名称")
     @ExcelProperty("资产名称")
     @ExcelProperty("资产名称")
     private String name;
     private String name;
 
 
-    @Schema(description = "备用字段:资产数量,默认为1", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("备用字段:资产数量,默认为1")
-    private Integer number;
-
     @Schema(description = "资产型号")
     @Schema(description = "资产型号")
     @ExcelProperty("资产型号")
     @ExcelProperty("资产型号")
     private String typeNumber;
     private String typeNumber;
@@ -49,42 +46,62 @@ public class AssetInfoRespVO {
     @ExcelProperty("折旧年限(大于0的自然数)")
     @ExcelProperty("折旧年限(大于0的自然数)")
     private Integer depreciationYear;
     private Integer depreciationYear;
 
 
-    @Schema(description = "资产状态:0可用 1占用 2报废", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "资产状态:0可用 1占用 2报废")
     @ExcelProperty("资产状态:0可用 1占用 2报废")
     @ExcelProperty("资产状态:0可用 1占用 2报废")
     private String assetState;
     private String assetState;
 
 
-    @Schema(description = "领用人id", example = "32331")
+    @Schema(description = "资产状态描述:0可用 1占用 2报废")
+    @ExcelProperty("资产状态描述:0可用 1占用 2报废")
+    private String assetStateDesc;
+
+    @Schema(description = "领用人id")
     @ExcelProperty("领用人id")
     @ExcelProperty("领用人id")
     private Long receiveEmployeeId;
     private Long receiveEmployeeId;
 
 
-    @Schema(description = "领用信息表主键id", example = "6952")
+    @Schema(description = "领用人姓名")
+    @ExcelProperty("领用人姓名")
+    private Long receiveEmployeeName;
+
+    @Schema(description = "领用信息表主键id")
     @ExcelProperty("领用信息表主键id")
     @ExcelProperty("领用信息表主键id")
     private Long receiveInfoId;
     private Long receiveInfoId;
 
 
-    @Schema(description = "资产归属部门", example = "8133")
+    @Schema(description = "资产归属部门")
     @ExcelProperty("资产归属部门")
     @ExcelProperty("资产归属部门")
     private Long assetDeptId;
     private Long assetDeptId;
 
 
+    @Schema(description = "资产归属部门名称")
+    @ExcelProperty("资产归属部门名称")
+    private String assetDeptName;
+
     @Schema(description = "资产归属地")
     @Schema(description = "资产归属地")
     @ExcelProperty("资产归属地")
     @ExcelProperty("资产归属地")
     private String assetPlace;
     private String assetPlace;
 
 
-    @Schema(description = "资产管理负责人", example = "21608")
+    @Schema(description = "资产管理负责人")
     @ExcelProperty("资产管理负责人")
     @ExcelProperty("资产管理负责人")
     private Long assetManagerEmployeeId;
     private Long assetManagerEmployeeId;
 
 
+    @Schema(description = "资产管理负责人名称")
+    @ExcelProperty("资产管理负责人名称")
+    private String assetManagerEmployeeName;
+
     @Schema(description = "报废日期")
     @Schema(description = "报废日期")
     @ExcelProperty("报废日期")
     @ExcelProperty("报废日期")
     private String retirementDate;
     private String retirementDate;
 
 
-    @Schema(description = "报废原因", example = "不对")
+    @Schema(description = "报废原因")
     @ExcelProperty("报废原因")
     @ExcelProperty("报废原因")
     private String retirementReason;
     private String retirementReason;
 
 
-    @Schema(description = "单据状态:0:已完成,1:作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @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;
@@ -93,4 +110,6 @@ public class AssetInfoRespVO {
     @ExcelProperty("创建时间")
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
     private LocalDateTime createTime;
 
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
 }
 }

+ 27 - 14
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoSaveReqVO.java

@@ -1,45 +1,58 @@
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo;
 package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.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.util.List;
 
 
 @Schema(description = "管理后台 - 固定资产信息新增/修改 Request VO")
 @Schema(description = "管理后台 - 固定资产信息新增/修改 Request VO")
 @Data
 @Data
 public class AssetInfoSaveReqVO {
 public class AssetInfoSaveReqVO {
 
 
-    @Schema(description = "资产信息主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10483")
+    @Schema(description = "资产信息主键自增id", example = "1")
     private Long id;
     private Long id;
 
 
-    @Schema(description = "资产名称", example = "王五")
+    @Schema(description = "资产名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "资产名称不能为空")
+    @NotBlank(message = "资产名称不能为空")
     private String name;
     private String name;
 
 
-    @Schema(description = "资产型号")
+    @Schema(description = "资产型号", example = "资产型号可以为空")
     private String typeNumber;
     private String typeNumber;
 
 
-    @Schema(description = "资产序列号")
+    @Schema(description = "资产序列号", example = "资产序列号可以为空")
     private String serialNumber;
     private String serialNumber;
 
 
-    @Schema(description = "购买日期")
+    @Schema(description = "购买日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-08-08")
+    @NotBlank(message = "购买日期不能为空")
     private String purchaseDate;
     private String purchaseDate;
 
 
-    @Schema(description = "资产化日期")
+    @Schema(description = "资产化日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-08-09")
+    @NotBlank(message = "资产化日期不能为空")
     private String capitalizationDate;
     private String capitalizationDate;
 
 
-    @Schema(description = "折旧年限(大于0的自然数)")
+    @Schema(description = "折旧年限(大于0的自然数)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "折旧年限不能为空")
+    @Min(value = 1, message = "折旧年限必须大于0")
     private Integer depreciationYear;
     private Integer depreciationYear;
 
 
-    @Schema(description = "资产归属部门", example = "8133")
+    @Schema(description = "资产归属部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "103")
+    @NotNull(message = "资产归属部门不能为空")
     private Long assetDeptId;
     private Long assetDeptId;
 
 
-    @Schema(description = "资产归属地")
+    @Schema(description = "资产归属地", example = "资产归属地可以为空")
     private String assetPlace;
     private String assetPlace;
 
 
-    @Schema(description = "资产管理负责人", example = "21608")
+    @Schema(description = "资产管理负责人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "资产管理负责人不能为空")
     private Long assetManagerEmployeeId;
     private Long assetManagerEmployeeId;
 
 
-    @Schema(description = "备注")
+    @Schema(description = "备注", example = "备注可以为空")
     private String remarks;
     private String remarks;
 
 
+    @Schema(description = "附件主键id", example = "[]")
+    private List<Long> fileIdList;
+
 }
 }

+ 22 - 6
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/assetinfo/AssetInfoMapper.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.asset.dal.mysql.assetinfo;
 package cn.iocoder.yudao.module.asset.dal.mysql.assetinfo;
 
 
-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.asset.controller.admin.assetinfo.vo.AssetInfoPageReqVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO;
 import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
 import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
 /**
  * 固定资产信息 Mapper
  * 固定资产信息 Mapper
@@ -26,9 +28,23 @@ public interface AssetInfoMapper extends BaseMapperX<AssetInfoDO> {
                 .betweenIfPresent(AssetInfoDO::getCapitalizationDate, reqVO.getCapitalizationDate())
                 .betweenIfPresent(AssetInfoDO::getCapitalizationDate, reqVO.getCapitalizationDate())
                 .eqIfPresent(AssetInfoDO::getDepreciationYear, reqVO.getDepreciationYear())
                 .eqIfPresent(AssetInfoDO::getDepreciationYear, reqVO.getDepreciationYear())
                 .eqIfPresent(AssetInfoDO::getAssetState, reqVO.getAssetState())
                 .eqIfPresent(AssetInfoDO::getAssetState, reqVO.getAssetState())
-                .eqIfPresent(AssetInfoDO::getReceiveEmployeeId, reqVO.getReceiveEmployeeId())
                 .eqIfPresent(AssetInfoDO::getAssetDeptId, reqVO.getAssetDeptId())
                 .eqIfPresent(AssetInfoDO::getAssetDeptId, reqVO.getAssetDeptId())
                 .orderByDesc(AssetInfoDO::getId));
                 .orderByDesc(AssetInfoDO::getId));
     }
     }
 
 
-}
+    /**
+     * 查询资产信息的总条数
+     *
+     * @param pageReqVO 包含查询条件的分页请求对象
+     * @return 总条数
+     */
+    long selectPageCount(@Param("page") AssetInfoPageReqVO pageReqVO);
+
+    /**
+     * 根据分页条件查询资产信息列表
+     *
+     * @param pageReqVO 包含查询条件的分页请求对象
+     * @return 资产信息列表
+     */
+    List<AssetInfoRespVO> selectPageList(@Param("page") AssetInfoPageReqVO pageReqVO);
+}

+ 7 - 6
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoService.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.asset.service.assetinfo;
 package cn.iocoder.yudao.module.asset.service.assetinfo;
 
 
-import java.util.*;
-import javax.validation.*;
-import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.*;
-import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
 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.asset.controller.admin.assetinfo.vo.AssetInfoPageReqVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoSaveReqVO;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
+
+import javax.validation.Valid;
 
 
 /**
 /**
  * 固定资产信息 Service 接口
  * 固定资产信息 Service 接口
@@ -50,6 +51,6 @@ public interface AssetInfoService {
      * @param pageReqVO 分页查询
      * @param pageReqVO 分页查询
      * @return 固定资产信息分页
      * @return 固定资产信息分页
      */
      */
-    PageResult<AssetInfoDO> getInfoPage(AssetInfoPageReqVO pageReqVO);
+    PageResult<AssetInfoRespVO> getInfoPage(AssetInfoPageReqVO pageReqVO);
 
 
 }
 }

+ 84 - 20
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoServiceImpl.java

@@ -1,21 +1,31 @@
 package cn.iocoder.yudao.module.asset.service.assetinfo;
 package cn.iocoder.yudao.module.asset.service.assetinfo;
 
 
-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.asset.controller.admin.assetinfo.vo.*;
-import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
-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.asset.controller.admin.assetinfo.vo.AssetInfoPageReqVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoSaveReqVO;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
 import cn.iocoder.yudao.module.asset.dal.mysql.assetinfo.AssetInfoMapper;
 import cn.iocoder.yudao.module.asset.dal.mysql.assetinfo.AssetInfoMapper;
+import cn.iocoder.yudao.module.asset.enums.AssetStateEnum;
+import cn.iocoder.yudao.module.asset.enums.AssetStatusEnum;
+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.asset.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.INFO_NOT_EXISTS;
+import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.OCCUPIED_ASSET_NOT_ALLOWED_DELETE;
 
 
 /**
 /**
  * 固定资产信息 Service 实现类
  * 固定资产信息 Service 实现类
@@ -29,36 +39,78 @@ public class AssetInfoServiceImpl implements AssetInfoService {
     @Resource
     @Resource
     private AssetInfoMapper infoMapper;
     private AssetInfoMapper infoMapper;
 
 
+    @Resource
+    private EmployeeApi employeeApi;
+
+    @Resource
+    private FileApi fileApi;
+
     @Override
     @Override
     public Long createInfo(AssetInfoSaveReqVO createReqVO) {
     public Long createInfo(AssetInfoSaveReqVO createReqVO) {
-        // 插入
+        // 获取当前登录用户ID
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // 通过用户ID获取当前登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+
+        // 将创建请求对象转换为资产信息实体对象
         AssetInfoDO info = BeanUtils.toBean(createReqVO, AssetInfoDO.class);
         AssetInfoDO info = BeanUtils.toBean(createReqVO, AssetInfoDO.class);
+
+        // 生成资产信息的唯一标识(UUID),使用当前日期和随机UUID组合
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        String format = formatter.format(LocalDateTime.now());
+        info.setAssetInfoUuid(format + IdUtil.fastSimpleUUID());
+
+        // 设置资产状态为可用
+        info.setAssetState(AssetStateEnum.AVAILABLE.getState());
+
+        // 单据状态
+        info.setStatus(AssetStatusEnum.COMPLETED.getStatus());
+
+        // 设置创建人为当前登录员工
+        info.setCreator(String.valueOf(loginEmployee.getId()));
+
+        // 插入资产信息到数据库
         infoMapper.insert(info);
         infoMapper.insert(info);
-        // 返回
+
+        // 更新文件业务关系
+        fileApi.updateFileBiz(createReqVO.getFileIdList(), info.getAssetInfoUuid());
+
+        // 返回创建的资产信息的ID
         return info.getId();
         return info.getId();
     }
     }
-
     @Override
     @Override
     public void updateInfo(AssetInfoSaveReqVO updateReqVO) {
     public void updateInfo(AssetInfoSaveReqVO updateReqVO) {
         // 校验存在
         // 校验存在
-        validateInfoExists(updateReqVO.getId());
+        AssetInfoDO assetInfoDO = validateInfoExists(updateReqVO.getId());
         // 更新
         // 更新
         AssetInfoDO updateObj = BeanUtils.toBean(updateReqVO, AssetInfoDO.class);
         AssetInfoDO updateObj = BeanUtils.toBean(updateReqVO, AssetInfoDO.class);
+
+        // 附件
+        fileApi.updateFileBiz(updateReqVO.getFileIdList(), assetInfoDO.getAssetInfoUuid());
+
         infoMapper.updateById(updateObj);
         infoMapper.updateById(updateObj);
     }
     }
 
 
     @Override
     @Override
     public void deleteInfo(Long id) {
     public void deleteInfo(Long id) {
         // 校验存在
         // 校验存在
-        validateInfoExists(id);
+        AssetInfoDO assetInfoDO = validateInfoExists(id);
+        // 校验能否删除
+        // 占用中的不能删除
+        if (AssetStateEnum.OCCUPIED.getState().equals(assetInfoDO.getAssetState())) {
+            throw exception(OCCUPIED_ASSET_NOT_ALLOWED_DELETE);
+        }
+        // 领用中的资产不能删除
         // 删除
         // 删除
         infoMapper.deleteById(id);
         infoMapper.deleteById(id);
     }
     }
 
 
-    private void validateInfoExists(Long id) {
-        if (infoMapper.selectById(id) == null) {
+    private AssetInfoDO validateInfoExists(Long id) {
+        AssetInfoDO assetInfoDO = infoMapper.selectById(id);
+        if (assetInfoDO == null) {
             throw exception(INFO_NOT_EXISTS);
             throw exception(INFO_NOT_EXISTS);
         }
         }
+        return assetInfoDO;
     }
     }
 
 
     @Override
     @Override
@@ -67,8 +119,20 @@ public class AssetInfoServiceImpl implements AssetInfoService {
     }
     }
 
 
     @Override
     @Override
-    public PageResult<AssetInfoDO> getInfoPage(AssetInfoPageReqVO pageReqVO) {
-        return infoMapper.selectPage(pageReqVO);
+    public PageResult<AssetInfoRespVO> getInfoPage(AssetInfoPageReqVO pageReqVO) {
+        // 分页起始位置
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
+
+        // 查询总记录数
+        long pageCount = -1;
+        if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
+            pageCount = infoMapper.selectPageCount(pageReqVO);
+        }
+
+        // 查询分页数据
+        List<AssetInfoRespVO> pageList = infoMapper.selectPageList(pageReqVO);
+
+        return new PageResult<>(pageList, pageCount);
     }
     }
 
 
 }
 }

+ 112 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/resources/mapper/assetinfo/AssetInfoMapper.xml

@@ -9,4 +9,116 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
      -->
 
 
+    <select id="selectPageCount" resultType="java.lang.Long">
+        SELECT
+            count(fai.id)
+        FROM
+        finance_asset_info fai
+        LEFT JOIN employee_info ei ON ei.id = fai.receive_employee_id AND ei.deleted = 0
+        LEFT JOIN employee_info ei2 ON ei2.id = fai.asset_manager_employee_id AND ei2.deleted = 0
+        LEFT JOIN system_dept sd ON sd.id = fai.asset_dept_id AND sd.deleted = 0
+        WHERE
+        fai.deleted = 0
+        <if test="page.assetInfoUuid != null and page.assetInfoUuid != ''">
+            AND fai.asset_info_uuid like concat('%',#{page.assetInfoUuid},'%')
+        </if>
+        <if test="page.name != null and page.name != ''">
+            AND fai.name like concat('%',#{page.name},'%')
+        </if>
+        <if test="page.typeNumber != null and page.typeNumber != ''">
+            AND fai.type_number like concat('%',#{page.typeNumber},'%')
+        </if>
+        <if test="page.serialNumber != null and page.serialNumber != ''">
+            AND fai.serial_number like concat('%',#{page.serialNumber},'%')
+        </if>
+        <if test="page.capitalizationDate != null and page.capitalizationDate.length > 0">
+            AND fai.capitalization_date BETWEEN #{page.capitalizationDate[0]} AND #{page.capitalizationDate[1]}
+        </if>
+        <if test="page.depreciationYear != null">
+            AND fai.depreciation_year = #{page.depreciationYear}
+        </if>
+        <if test="page.assetState != null and page.assetState != ''">
+            AND fai.asset_state = #{page.assetState}
+        </if>
+        <if test="page.receiveEmployeeName != null and page.receiveEmployeeName != ''">
+            AND ei.name like concat('%',#{page.receiveEmployeeName},'%')
+        </if>
+        <if test="page.assetDeptId != null">
+            AND fai.asset_dept_id = #{page.assetDeptId}
+        </if>
+    </select>
+    <select id="selectPageList"
+            resultType="cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.AssetInfoRespVO">
+        SELECT
+            fai.id,
+            fai.asset_info_uuid,
+            fai.`name`,
+            fai.number,
+            fai.type_number,
+            fai.serial_number,
+            fai.purchase_date,
+            fai.capitalization_date,
+            fai.depreciation_year,
+            fai.asset_state,
+            CASE
+                WHEN fai.asset_state = '0' THEN '可用'
+                WHEN fai.asset_state = '1' THEN '占用'
+                WHEN fai.asset_state = '2' THEN '已报废'
+            END AS assetStateDesc,
+            fai.receive_employee_id,
+            ei.name AS receiveEmployeeName,
+            fai.receive_info_id,
+            fai.asset_dept_id,
+            sd.name AS assetDeptName,
+            fai.asset_place,
+            fai.asset_manager_employee_id,
+            ei2.name AS assetManagerEmployeeName,
+            fai.retirement_date,
+            fai.retirement_reason,
+            fai.`status`,
+            CASE
+               WHEN fai.`status` = '0' THEN '已完成'
+               WHEN fai.`status` = '1' THEN '作废'
+            END AS statusDesc,
+            fai.remarks
+        FROM
+            finance_asset_info fai
+                LEFT JOIN employee_info ei ON ei.id = fai.receive_employee_id AND ei.deleted = 0
+                LEFT JOIN employee_info ei2 ON ei2.id = fai.asset_manager_employee_id AND ei2.deleted = 0
+                LEFT JOIN system_dept sd ON sd.id = fai.asset_dept_id AND sd.deleted = 0
+        WHERE
+            fai.deleted = 0
+        <if test="page.assetInfoUuid != null and page.assetInfoUuid != ''">
+            AND fai.asset_info_uuid like concat('%',#{page.assetInfoUuid},'%')
+        </if>
+        <if test="page.name != null and page.name != ''">
+            AND fai.name like concat('%',#{page.name},'%')
+        </if>
+        <if test="page.typeNumber != null and page.typeNumber != ''">
+            AND fai.type_number like concat('%',#{page.typeNumber},'%')
+        </if>
+        <if test="page.serialNumber != null and page.serialNumber != ''">
+            AND fai.serial_number like concat('%',#{page.serialNumber},'%')
+        </if>
+        <if test="page.capitalizationDate != null and page.capitalizationDate.length > 0">
+            AND fai.capitalization_date BETWEEN #{page.capitalizationDate[0]} AND #{page.capitalizationDate[1]}
+        </if>
+        <if test="page.depreciationYear != null">
+            AND fai.depreciation_year = #{page.depreciationYear}
+        </if>
+        <if test="page.assetState != null and page.assetState != ''">
+            AND fai.asset_state = #{page.assetState}
+        </if>
+        <if test="page.receiveEmployeeName != null and page.receiveEmployeeName != ''">
+            AND ei.name like concat('%',#{page.receiveEmployeeName},'%')
+        </if>
+        <if test="page.assetDeptId != null">
+            AND fai.asset_dept_id = #{page.assetDeptId}
+        </if>
+        ORDER BY
+            fai.create_time DESC
+        <if test="page.pageSize != -1">
+            LIMIT #{page.pageNo}, #{page.pageSize}
+        </if>
+    </select>
 </mapper>
 </mapper>

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

@@ -107,7 +107,7 @@ public class PaymentInfoServiceImpl implements PaymentInfoService {
 
 
     @Override
     @Override
     public PageResult<PaymentInfoRespVO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO) {
     public PageResult<PaymentInfoRespVO> getPaymentInfoPage(PaymentInfoPageReqVO pageReqVO) {
-        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
 
 
         long pageCount = -1;
         long pageCount = -1;
         if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
         if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {

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

@@ -102,7 +102,7 @@ public class RefundInfoServiceImpl implements RefundInfoService {
 
 
     @Override
     @Override
     public PageResult<RefundInfoRespVO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO) {
     public PageResult<RefundInfoRespVO> getRefundInfoPage(RefundInfoPageReqVO pageReqVO) {
-        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
 
 
         long pageCount = -1;
         long pageCount = -1;
         if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {
         if (!PageParam.PAGE_SIZE_NONE.equals(pageReqVO.getPageSize())) {

+ 1 - 1
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/service/expenseinfo/ExpenseInfoServiceImpl.java

@@ -221,7 +221,7 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
     @Override
     @Override
     public PageResult<ExpenseInfoRespVO> getInfoPage(ExpenseInfoPageReqVO pageReqVO) {
     public PageResult<ExpenseInfoRespVO> getInfoPage(ExpenseInfoPageReqVO pageReqVO) {
 
 
-        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+        pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
 
 
         long pageCount = 0;
         long pageCount = 0;
         if (!Objects.equals(pageReqVO.getPageSize(), PageParam.PAGE_SIZE_NONE)) {
         if (!Objects.equals(pageReqVO.getPageSize(), PageParam.PAGE_SIZE_NONE)) {