Ver código fonte

1、固定资产信息、固定资产领用信息基础代码生成

dongpo 7 meses atrás
pai
commit
0a0da2e987
22 arquivos alterados com 1449 adições e 0 exclusões
  1. 12 0
      yudao-module-finance/yudao-module-asset-api/src/main/java/cn/iocoder/yudao/module/asset/enums/ErrorCodeConstants.java
  2. 99 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/AssetInfoController.java
  3. 46 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoPageReqVO.java
  4. 96 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoRespVO.java
  5. 45 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetinfo/vo/AssetInfoSaveReqVO.java
  6. 99 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/AssetReceiveInfoController.java
  7. 47 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoPageReqVO.java
  8. 78 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoRespVO.java
  9. 36 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoSaveReqVO.java
  10. 103 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/assetinfo/AssetInfoDO.java
  11. 87 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/assetreceiveinfo/AssetReceiveInfoDO.java
  12. 34 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/assetinfo/AssetInfoMapper.java
  13. 34 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/assetreceiveinfo/AssetReceiveInfoMapper.java
  14. 27 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/framework/config/AssetWebConfiguration.java
  15. 55 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoService.java
  16. 74 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoServiceImpl.java
  17. 55 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoService.java
  18. 74 0
      yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoServiceImpl.java
  19. 12 0
      yudao-module-finance/yudao-module-asset-biz/src/main/resources/mapper/assetinfo/AssetInfoMapper.xml
  20. 12 0
      yudao-module-finance/yudao-module-asset-biz/src/main/resources/mapper/assetreceiveinfo/AssetReceiveInfoMapper.xml
  21. 162 0
      yudao-module-finance/yudao-module-asset-biz/src/test/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoServiceImplTest.java
  22. 162 0
      yudao-module-finance/yudao-module-asset-biz/src/test/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoServiceImplTest.java

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

@@ -0,0 +1,12 @@
+package cn.iocoder.yudao.module.asset.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+
+    // ========== 固定资产信息 1_051_001_001 ==========
+    ErrorCode INFO_NOT_EXISTS = new ErrorCode(1_051_001_001, "固定资产信息不存在");
+
+    // ========== 固定资产领用信息 1_051_002_001 ==========
+    ErrorCode RECEIVE_INFO_NOT_EXISTS = new ErrorCode(1_051_002_001, "固定资产领用信息不存在");
+}

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

@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetinfo;
+
+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.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+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.service.assetinfo.AssetInfoService;
+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.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
+@RequestMapping("/asset/info")
+@Validated
+public class AssetInfoController {
+
+    @Resource
+    private AssetInfoService infoService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建固定资产信息")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('asset:info:create')")
+    public CommonResult<Long> createInfo(@Valid @RequestBody AssetInfoSaveReqVO createReqVO) {
+        return success(infoService.createInfo(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新固定资产信息")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('asset:info:update')")
+    public CommonResult<Boolean> updateInfo(@Valid @RequestBody AssetInfoSaveReqVO updateReqVO) {
+        infoService.updateInfo(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除固定资产信息")
+    @ApiOperationSupport(order = 3)
+    @Parameter(name = "id", description = "编号", required = true)
+    // @PreAuthorize("@ss.hasPermission('asset:info:delete')")
+    public CommonResult<Boolean> deleteInfo(@RequestParam("id") Long id) {
+        infoService.deleteInfo(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得固定资产信息")
+    @ApiOperationSupport(order = 4)
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    // @PreAuthorize("@ss.hasPermission('asset:info:query')")
+    public CommonResult<AssetInfoRespVO> getInfo(@RequestParam("id") Long id) {
+        AssetInfoDO info = infoService.getInfo(id);
+        return success(BeanUtils.toBean(info, AssetInfoRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得固定资产信息分页")
+    @ApiOperationSupport(order = 5)
+    // @PreAuthorize("@ss.hasPermission('asset:info:query')")
+    public CommonResult<PageResult<AssetInfoRespVO>> getInfoPage(@Valid AssetInfoPageReqVO pageReqVO) {
+        PageResult<AssetInfoDO> pageResult = infoService.getInfoPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AssetInfoRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出固定资产信息 Excel")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('asset:info:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportInfoExcel(@Valid AssetInfoPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<AssetInfoDO> list = infoService.getInfoPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "固定资产信息.xls", "数据", AssetInfoRespVO.class,
+                        BeanUtils.toBean(list, AssetInfoRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,46 @@
+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 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;
+
+@Schema(description = "管理后台 - 固定资产信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AssetInfoPageReqVO extends PageParam {
+
+    @Schema(description = "资产编号:年月日+uuid", example = "11811")
+    private String assetInfoUuid;
+
+    @Schema(description = "资产名称", example = "王五")
+    private String name;
+
+    @Schema(description = "资产型号")
+    private String typeNumber;
+
+    @Schema(description = "资产序列号")
+    private String serialNumber;
+
+    @Schema(description = "资产化日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] capitalizationDate;
+
+    @Schema(description = "折旧年限(大于0的自然数)")
+    private Integer depreciationYear;
+
+    @Schema(description = "资产状态:0可用 1占用 2报废")
+    private String assetState;
+
+    @Schema(description = "领用人id", example = "32331")
+    private Long receiveEmployeeId;
+
+    @Schema(description = "资产归属部门", example = "8133")
+    private Long assetDeptId;
+
+}

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

@@ -0,0 +1,96 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 固定资产信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AssetInfoRespVO {
+
+    @Schema(description = "资产信息主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10483")
+    @ExcelProperty("资产信息主键自增id")
+    private Long id;
+
+    @Schema(description = "资产编号:年月日+uuid", example = "11811")
+    @ExcelProperty("资产编号:年月日+uuid")
+    private String assetInfoUuid;
+
+    @Schema(description = "资产名称", example = "王五")
+    @ExcelProperty("资产名称")
+    private String name;
+
+    @Schema(description = "备用字段:资产数量,默认为1", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("备用字段:资产数量,默认为1")
+    private Integer number;
+
+    @Schema(description = "资产型号")
+    @ExcelProperty("资产型号")
+    private String typeNumber;
+
+    @Schema(description = "资产序列号")
+    @ExcelProperty("资产序列号")
+    private String serialNumber;
+
+    @Schema(description = "购买日期")
+    @ExcelProperty("购买日期")
+    private String purchaseDate;
+
+    @Schema(description = "资产化日期")
+    @ExcelProperty("资产化日期")
+    private String capitalizationDate;
+
+    @Schema(description = "折旧年限(大于0的自然数)")
+    @ExcelProperty("折旧年限(大于0的自然数)")
+    private Integer depreciationYear;
+
+    @Schema(description = "资产状态:0可用 1占用 2报废", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("资产状态:0可用 1占用 2报废")
+    private String assetState;
+
+    @Schema(description = "领用人id", example = "32331")
+    @ExcelProperty("领用人id")
+    private Long receiveEmployeeId;
+
+    @Schema(description = "领用信息表主键id", example = "6952")
+    @ExcelProperty("领用信息表主键id")
+    private Long receiveInfoId;
+
+    @Schema(description = "资产归属部门", example = "8133")
+    @ExcelProperty("资产归属部门")
+    private Long assetDeptId;
+
+    @Schema(description = "资产归属地")
+    @ExcelProperty("资产归属地")
+    private String assetPlace;
+
+    @Schema(description = "资产管理负责人", example = "21608")
+    @ExcelProperty("资产管理负责人")
+    private Long assetManagerEmployeeId;
+
+    @Schema(description = "报废日期")
+    @ExcelProperty("报废日期")
+    private String retirementDate;
+
+    @Schema(description = "报废原因", example = "不对")
+    @ExcelProperty("报废原因")
+    private String retirementReason;
+
+    @Schema(description = "单据状态:0:已完成,1:作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("单据状态:0:已完成,1:作废")
+    private String status;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 固定资产信息新增/修改 Request VO")
+@Data
+public class AssetInfoSaveReqVO {
+
+    @Schema(description = "资产信息主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10483")
+    private Long id;
+
+    @Schema(description = "资产名称", example = "王五")
+    private String name;
+
+    @Schema(description = "资产型号")
+    private String typeNumber;
+
+    @Schema(description = "资产序列号")
+    private String serialNumber;
+
+    @Schema(description = "购买日期")
+    private String purchaseDate;
+
+    @Schema(description = "资产化日期")
+    private String capitalizationDate;
+
+    @Schema(description = "折旧年限(大于0的自然数)")
+    private Integer depreciationYear;
+
+    @Schema(description = "资产归属部门", example = "8133")
+    private Long assetDeptId;
+
+    @Schema(description = "资产归属地")
+    private String assetPlace;
+
+    @Schema(description = "资产管理负责人", example = "21608")
+    private Long assetManagerEmployeeId;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+}

+ 99 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/AssetReceiveInfoController.java

@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo;
+
+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.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.AssetReceiveInfoPageReqVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.AssetReceiveInfoRespVO;
+import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.AssetReceiveInfoSaveReqVO;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetreceiveinfo.AssetReceiveInfoDO;
+import cn.iocoder.yudao.module.asset.service.assetreceiveinfo.AssetReceiveInfoService;
+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.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
+@RequestMapping("/asset/receive-info")
+@Validated
+public class AssetReceiveInfoController {
+
+    @Resource
+    private AssetReceiveInfoService receiveInfoService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建固定资产领用信息")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:create')")
+    public CommonResult<Long> createReceiveInfo(@Valid @RequestBody AssetReceiveInfoSaveReqVO createReqVO) {
+        return success(receiveInfoService.createReceiveInfo(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新固定资产领用信息")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:update')")
+    public CommonResult<Boolean> updateReceiveInfo(@Valid @RequestBody AssetReceiveInfoSaveReqVO updateReqVO) {
+        receiveInfoService.updateReceiveInfo(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除固定资产领用信息")
+    @ApiOperationSupport(order = 3)
+    @Parameter(name = "id", description = "编号", required = true)
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:delete')")
+    public CommonResult<Boolean> deleteReceiveInfo(@RequestParam("id") Long id) {
+        receiveInfoService.deleteReceiveInfo(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得固定资产领用信息")
+    @ApiOperationSupport(order = 4)
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:query')")
+    public CommonResult<AssetReceiveInfoRespVO> getReceiveInfo(@RequestParam("id") Long id) {
+        AssetReceiveInfoDO receiveInfo = receiveInfoService.getReceiveInfo(id);
+        return success(BeanUtils.toBean(receiveInfo, AssetReceiveInfoRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得固定资产领用信息分页")
+    @ApiOperationSupport(order = 5)
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:query')")
+    public CommonResult<PageResult<AssetReceiveInfoRespVO>> getReceiveInfoPage(@Valid AssetReceiveInfoPageReqVO pageReqVO) {
+        PageResult<AssetReceiveInfoDO> pageResult = receiveInfoService.getReceiveInfoPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, AssetReceiveInfoRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出固定资产领用信息 Excel")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('asset:receive-info:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportReceiveInfoExcel(@Valid AssetReceiveInfoPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<AssetReceiveInfoDO> list = receiveInfoService.getReceiveInfoPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "固定资产领用信息.xls", "数据", AssetReceiveInfoRespVO.class,
+                        BeanUtils.toBean(list, AssetReceiveInfoRespVO.class));
+    }
+
+}

+ 47 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoPageReqVO.java

@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+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;
+
+@Schema(description = "管理后台 - 固定资产领用信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AssetReceiveInfoPageReqVO extends PageParam {
+
+    @Schema(description = "领用人id", example = "4857")
+    private Long employeeId;
+
+    @Schema(description = "部门id", example = "4527")
+    private Long deptId;
+
+    @Schema(description = "职位id", example = "13139")
+    private Long postId;
+
+    @Schema(description = "固定资产名称", example = "张三")
+    private String assetInfoName;
+
+    @Schema(description = "领用日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] receiveDate;
+
+    @Schema(description = "是否归还:0未归还,1已归还")
+    private Integer returned;
+
+    @Schema(description = "归还日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] returnDate;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "创建者")
+    private String creator;
+
+}

+ 78 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoRespVO.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 固定资产领用信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AssetReceiveInfoRespVO {
+
+    @Schema(description = "主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28086")
+    @ExcelProperty("主键自增id")
+    private Long id;
+
+    @Schema(description = "领用编号uuid", example = "15552")
+    @ExcelProperty("领用编号uuid")
+    private String receiveInfoUuid;
+
+    @Schema(description = "领用人id", example = "4857")
+    @ExcelProperty("领用人id")
+    private Long employeeId;
+
+    @Schema(description = "部门id", example = "4527")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "职位id", example = "13139")
+    @ExcelProperty("职位id")
+    private Long postId;
+
+    @Schema(description = "固定资产信息表主键id", example = "23094")
+    @ExcelProperty("固定资产信息表主键id")
+    private Long assetInfoId;
+
+    @Schema(description = "固定资产名称", example = "张三")
+    @ExcelProperty("固定资产名称")
+    private String assetInfoName;
+
+    @Schema(description = "领用日期")
+    @ExcelProperty("领用日期")
+    private String receiveDate;
+
+    @Schema(description = "领用原因", example = "不喜欢")
+    @ExcelProperty("领用原因")
+    private String reason;
+
+    @Schema(description = "是否归还:0未归还,1已归还", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("是否归还:0未归还,1已归还")
+    private Integer returned;
+
+    @Schema(description = "归还日期")
+    @ExcelProperty("归还日期")
+    private String returnDate;
+
+    @Schema(description = "归还原因", example = "不喜欢")
+    @ExcelProperty("归还原因")
+    private String returnReason;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "单据状态:0:已完成,1:作废", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("单据状态:0:已完成,1:作废")
+    private String status;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "创建者")
+    @ExcelProperty("创建者")
+    private String creator;
+
+}

+ 36 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/assetreceiveinfo/vo/AssetReceiveInfoSaveReqVO.java

@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 固定资产领用信息新增/修改 Request VO")
+@Data
+public class AssetReceiveInfoSaveReqVO {
+
+    @Schema(description = "主键自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28086")
+    private Long id;
+
+    @Schema(description = "领用人id", example = "4857")
+    private Long employeeId;
+
+    @Schema(description = "固定资产信息表主键id", example = "23094")
+    private Long assetInfoId;
+
+    @Schema(description = "领用日期")
+    private String receiveDate;
+
+    @Schema(description = "领用原因", example = "不喜欢")
+    private String reason;
+
+    @Schema(description = "归还日期")
+    private String returnDate;
+
+    @Schema(description = "归还原因", example = "不喜欢")
+    private String returnReason;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+}

+ 103 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/assetinfo/AssetInfoDO.java

@@ -0,0 +1,103 @@
+package cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 固定资产信息 DO
+ *
+ * @author dp
+ */
+@TableName("finance_asset_info")
+@KeySequence("finance_asset_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AssetInfoDO extends BaseDO {
+
+    /**
+     * 资产信息主键自增id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 资产编号:年月日+uuid
+     */
+    private String assetInfoUuid;
+    /**
+     * 资产名称
+     */
+    private String name;
+    /**
+     * 备用字段:资产数量,默认为1
+     */
+    private Integer number;
+    /**
+     * 资产型号
+     */
+    private String typeNumber;
+    /**
+     * 资产序列号
+     */
+    private String serialNumber;
+    /**
+     * 购买日期
+     */
+    private String purchaseDate;
+    /**
+     * 资产化日期
+     */
+    private String capitalizationDate;
+    /**
+     * 折旧年限(大于0的自然数)
+     */
+    private Integer depreciationYear;
+    /**
+     * 资产状态:0可用 1占用 2报废
+     */
+    private String assetState;
+    /**
+     * 领用人id
+     */
+    private Long receiveEmployeeId;
+    /**
+     * 领用信息表主键id
+     */
+    private Long receiveInfoId;
+    /**
+     * 资产归属部门
+     */
+    private Long assetDeptId;
+    /**
+     * 资产归属地
+     */
+    private String assetPlace;
+    /**
+     * 资产管理负责人
+     */
+    private Long assetManagerEmployeeId;
+    /**
+     * 报废日期
+     */
+    private String retirementDate;
+    /**
+     * 报废原因
+     */
+    private String retirementReason;
+    /**
+     * 单据状态:0:已完成,1:作废
+     */
+    private String status;
+    /**
+     * 备注
+     */
+    private String remarks;
+
+}

+ 87 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/assetreceiveinfo/AssetReceiveInfoDO.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.asset.dal.dataobject.assetreceiveinfo;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 固定资产领用信息 DO
+ *
+ * @author dp
+ */
+@TableName("finance_asset_receive_info")
+@KeySequence("finance_asset_receive_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AssetReceiveInfoDO extends BaseDO {
+
+    /**
+     * 主键自增id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 领用编号uuid
+     */
+    private String receiveInfoUuid;
+    /**
+     * 领用人id
+     */
+    private Long employeeId;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 职位id
+     */
+    private Long postId;
+    /**
+     * 固定资产信息表主键id
+     */
+    private Long assetInfoId;
+    /**
+     * 固定资产名称
+     */
+    private String assetInfoName;
+    /**
+     * 领用日期
+     */
+    private String receiveDate;
+    /**
+     * 领用原因
+     */
+    private String reason;
+    /**
+     * 是否归还:0未归还,1已归还
+     */
+    private Integer returned;
+    /**
+     * 归还日期
+     */
+    private String returnDate;
+    /**
+     * 归还原因
+     */
+    private String returnReason;
+    /**
+     * 数据来源,0流程添加、1手动添加
+     */
+    private String infoSource;
+    /**
+     * 单据状态:0:已完成,1:作废
+     */
+    private String status;
+    /**
+     * 备注
+     */
+    private String remarks;
+
+}

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

@@ -0,0 +1,34 @@
+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.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.*;
+
+/**
+ * 固定资产信息 Mapper
+ *
+ * @author dp
+ */
+@Mapper
+public interface AssetInfoMapper extends BaseMapperX<AssetInfoDO> {
+
+    default PageResult<AssetInfoDO> selectPage(AssetInfoPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<AssetInfoDO>()
+                .eqIfPresent(AssetInfoDO::getAssetInfoUuid, reqVO.getAssetInfoUuid())
+                .likeIfPresent(AssetInfoDO::getName, reqVO.getName())
+                .eqIfPresent(AssetInfoDO::getTypeNumber, reqVO.getTypeNumber())
+                .eqIfPresent(AssetInfoDO::getSerialNumber, reqVO.getSerialNumber())
+                .betweenIfPresent(AssetInfoDO::getCapitalizationDate, reqVO.getCapitalizationDate())
+                .eqIfPresent(AssetInfoDO::getDepreciationYear, reqVO.getDepreciationYear())
+                .eqIfPresent(AssetInfoDO::getAssetState, reqVO.getAssetState())
+                .eqIfPresent(AssetInfoDO::getReceiveEmployeeId, reqVO.getReceiveEmployeeId())
+                .eqIfPresent(AssetInfoDO::getAssetDeptId, reqVO.getAssetDeptId())
+                .orderByDesc(AssetInfoDO::getId));
+    }
+
+}

+ 34 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/assetreceiveinfo/AssetReceiveInfoMapper.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.asset.dal.mysql.assetreceiveinfo;
+
+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.module.asset.dal.dataobject.assetreceiveinfo.AssetReceiveInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.*;
+
+/**
+ * 固定资产领用信息 Mapper
+ *
+ * @author dp
+ */
+@Mapper
+public interface AssetReceiveInfoMapper extends BaseMapperX<AssetReceiveInfoDO> {
+
+    default PageResult<AssetReceiveInfoDO> selectPage(AssetReceiveInfoPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<AssetReceiveInfoDO>()
+                .eqIfPresent(AssetReceiveInfoDO::getEmployeeId, reqVO.getEmployeeId())
+                .eqIfPresent(AssetReceiveInfoDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(AssetReceiveInfoDO::getPostId, reqVO.getPostId())
+                .likeIfPresent(AssetReceiveInfoDO::getAssetInfoName, reqVO.getAssetInfoName())
+                .betweenIfPresent(AssetReceiveInfoDO::getReceiveDate, reqVO.getReceiveDate())
+                .eqIfPresent(AssetReceiveInfoDO::getReturned, reqVO.getReturned())
+                .betweenIfPresent(AssetReceiveInfoDO::getReturnDate, reqVO.getReturnDate())
+                .eqIfPresent(AssetReceiveInfoDO::getInfoSource, reqVO.getInfoSource())
+                .eqIfPresent(AssetReceiveInfoDO::getCreator, reqVO.getCreator())
+                .orderByDesc(AssetReceiveInfoDO::getId));
+    }
+
+}

+ 27 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/framework/config/AssetWebConfiguration.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.asset.framework.config;
+
+import cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration;
+import org.springdoc.core.GroupedOpenApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 资产模块的Web配置类
+ * 用于配置模块相关的Web功能,例如Swagger文档分组
+ */
+@Configuration(proxyBeanMethods = false)
+public class AssetWebConfiguration {
+
+    /**
+     * 配置Swagger文档的分组
+     * 这样可以将资产模块的API接口文档独立分组,便于在Swagger UI中管理和查看
+     *
+     * @return 分组配置对象
+     */
+    @Bean
+    public GroupedOpenApi assetGroupedOpenApi() {
+        return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("asset");
+    }
+
+}
+

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

@@ -0,0 +1,55 @@
+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.PageParam;
+
+/**
+ * 固定资产信息 Service 接口
+ *
+ * @author dp
+ */
+public interface AssetInfoService {
+
+    /**
+     * 创建固定资产信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createInfo(@Valid AssetInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新固定资产信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateInfo(@Valid AssetInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除固定资产信息
+     *
+     * @param id 编号
+     */
+    void deleteInfo(Long id);
+
+    /**
+     * 获得固定资产信息
+     *
+     * @param id 编号
+     * @return 固定资产信息
+     */
+    AssetInfoDO getInfo(Long id);
+
+    /**
+     * 获得固定资产信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 固定资产信息分页
+     */
+    PageResult<AssetInfoDO> getInfoPage(AssetInfoPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,74 @@
+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.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.asset.dal.mysql.assetinfo.AssetInfoMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.*;
+
+/**
+ * 固定资产信息 Service 实现类
+ *
+ * @author dp
+ */
+@Service
+@Validated
+public class AssetInfoServiceImpl implements AssetInfoService {
+
+    @Resource
+    private AssetInfoMapper infoMapper;
+
+    @Override
+    public Long createInfo(AssetInfoSaveReqVO createReqVO) {
+        // 插入
+        AssetInfoDO info = BeanUtils.toBean(createReqVO, AssetInfoDO.class);
+        infoMapper.insert(info);
+        // 返回
+        return info.getId();
+    }
+
+    @Override
+    public void updateInfo(AssetInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateInfoExists(updateReqVO.getId());
+        // 更新
+        AssetInfoDO updateObj = BeanUtils.toBean(updateReqVO, AssetInfoDO.class);
+        infoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteInfo(Long id) {
+        // 校验存在
+        validateInfoExists(id);
+        // 删除
+        infoMapper.deleteById(id);
+    }
+
+    private void validateInfoExists(Long id) {
+        if (infoMapper.selectById(id) == null) {
+            throw exception(INFO_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public AssetInfoDO getInfo(Long id) {
+        return infoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<AssetInfoDO> getInfoPage(AssetInfoPageReqVO pageReqVO) {
+        return infoMapper.selectPage(pageReqVO);
+    }
+
+}

+ 55 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.asset.service.assetreceiveinfo;
+
+import java.util.*;
+import javax.validation.*;
+import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.*;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetreceiveinfo.AssetReceiveInfoDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
+/**
+ * 固定资产领用信息 Service 接口
+ *
+ * @author dp
+ */
+public interface AssetReceiveInfoService {
+
+    /**
+     * 创建固定资产领用信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createReceiveInfo(@Valid AssetReceiveInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新固定资产领用信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateReceiveInfo(@Valid AssetReceiveInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除固定资产领用信息
+     *
+     * @param id 编号
+     */
+    void deleteReceiveInfo(Long id);
+
+    /**
+     * 获得固定资产领用信息
+     *
+     * @param id 编号
+     * @return 固定资产领用信息
+     */
+    AssetReceiveInfoDO getReceiveInfo(Long id);
+
+    /**
+     * 获得固定资产领用信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 固定资产领用信息分页
+     */
+    PageResult<AssetReceiveInfoDO> getReceiveInfoPage(AssetReceiveInfoPageReqVO pageReqVO);
+
+}

+ 74 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoServiceImpl.java

@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.asset.service.assetreceiveinfo;
+
+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.assetreceiveinfo.vo.*;
+import cn.iocoder.yudao.module.asset.dal.dataobject.assetreceiveinfo.AssetReceiveInfoDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.asset.dal.mysql.assetreceiveinfo.AssetReceiveInfoMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.*;
+
+/**
+ * 固定资产领用信息 Service 实现类
+ *
+ * @author dp
+ */
+@Service
+@Validated
+public class AssetReceiveInfoServiceImpl implements AssetReceiveInfoService {
+
+    @Resource
+    private AssetReceiveInfoMapper receiveInfoMapper;
+
+    @Override
+    public Long createReceiveInfo(AssetReceiveInfoSaveReqVO createReqVO) {
+        // 插入
+        AssetReceiveInfoDO receiveInfo = BeanUtils.toBean(createReqVO, AssetReceiveInfoDO.class);
+        receiveInfoMapper.insert(receiveInfo);
+        // 返回
+        return receiveInfo.getId();
+    }
+
+    @Override
+    public void updateReceiveInfo(AssetReceiveInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateReceiveInfoExists(updateReqVO.getId());
+        // 更新
+        AssetReceiveInfoDO updateObj = BeanUtils.toBean(updateReqVO, AssetReceiveInfoDO.class);
+        receiveInfoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteReceiveInfo(Long id) {
+        // 校验存在
+        validateReceiveInfoExists(id);
+        // 删除
+        receiveInfoMapper.deleteById(id);
+    }
+
+    private void validateReceiveInfoExists(Long id) {
+        if (receiveInfoMapper.selectById(id) == null) {
+            throw exception(RECEIVE_INFO_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public AssetReceiveInfoDO getReceiveInfo(Long id) {
+        return receiveInfoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<AssetReceiveInfoDO> getReceiveInfoPage(AssetReceiveInfoPageReqVO pageReqVO) {
+        return receiveInfoMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.asset.dal.mysql.assetinfo.AssetInfoMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-finance/yudao-module-asset-biz/src/main/resources/mapper/assetreceiveinfo/AssetReceiveInfoMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.asset.dal.mysql.assetreceiveinfo.AssetReceiveInfoMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 162 - 0
yudao-module-finance/yudao-module-asset-biz/src/test/java/cn/iocoder/yudao/module/asset/service/assetinfo/AssetInfoServiceImplTest.java

@@ -0,0 +1,162 @@
+// package cn.iocoder.yudao.module.asset.service.assetinfo;
+//
+// import org.junit.jupiter.api.Disabled;
+// import org.junit.jupiter.api.Test;
+// import org.springframework.boot.test.mock.mockito.MockBean;
+//
+// import javax.annotation.Resource;
+//
+// import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+//
+// import cn.iocoder.yudao.module.asset.controller.admin.assetinfo.vo.*;
+// import cn.iocoder.yudao.module.asset.dal.dataobject.assetinfo.AssetInfoDO;
+// import cn.iocoder.yudao.module.asset.dal.mysql.assetinfo.AssetInfoMapper;
+// import cn.iocoder.yudao.framework.common.pojo.PageResult;
+//
+// import javax.annotation.Resource;
+// import org.springframework.context.annotation.Import;
+// import java.util.*;
+// import java.time.LocalDateTime;
+//
+// import static cn.hutool.core.util.RandomUtil.*;
+// import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.*;
+// import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
+// import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
+// import static org.junit.jupiter.api.Assertions.*;
+// import static org.mockito.Mockito.*;
+//
+// /**
+//  * {@link AssetInfoServiceImpl} 的单元测试类
+//  *
+//  * @author dp
+//  */
+// @Import(AssetInfoServiceImpl.class)
+// public class AssetInfoServiceImplTest extends BaseDbUnitTest {
+//
+//     @Resource
+//     private AssetInfoServiceImpl infoService;
+//
+//     @Resource
+//     private AssetInfoMapper infoMapper;
+//
+//     @Test
+//     public void testCreateInfo_success() {
+//         // 准备参数
+//         AssetInfoSaveReqVO createReqVO = randomPojo(AssetInfoSaveReqVO.class).setId(null);
+//
+//         // 调用
+//         Long infoId = infoService.createInfo(createReqVO);
+//         // 断言
+//         assertNotNull(infoId);
+//         // 校验记录的属性是否正确
+//         AssetInfoDO info = infoMapper.selectById(infoId);
+//         assertPojoEquals(createReqVO, info, "id");
+//     }
+//
+//     @Test
+//     public void testUpdateInfo_success() {
+//         // mock 数据
+//         AssetInfoDO dbInfo = randomPojo(AssetInfoDO.class);
+//         infoMapper.insert(dbInfo);// @Sql: 先插入出一条存在的数据
+//         // 准备参数
+//         AssetInfoSaveReqVO updateReqVO = randomPojo(AssetInfoSaveReqVO.class, o -> {
+//             o.setId(dbInfo.getId()); // 设置更新的 ID
+//         });
+//
+//         // 调用
+//         infoService.updateInfo(updateReqVO);
+//         // 校验是否更新正确
+//         AssetInfoDO info = infoMapper.selectById(updateReqVO.getId()); // 获取最新的
+//         assertPojoEquals(updateReqVO, info);
+//     }
+//
+//     @Test
+//     public void testUpdateInfo_notExists() {
+//         // 准备参数
+//         AssetInfoSaveReqVO updateReqVO = randomPojo(AssetInfoSaveReqVO.class);
+//
+//         // 调用, 并断言异常
+//         assertServiceException(() -> infoService.updateInfo(updateReqVO), INFO_NOT_EXISTS);
+//     }
+//
+//     @Test
+//     public void testDeleteInfo_success() {
+//         // mock 数据
+//         AssetInfoDO dbInfo = randomPojo(AssetInfoDO.class);
+//         infoMapper.insert(dbInfo);// @Sql: 先插入出一条存在的数据
+//         // 准备参数
+//         Long id = dbInfo.getId();
+//
+//         // 调用
+//         infoService.deleteInfo(id);
+//        // 校验数据不存在了
+//        assertNull(infoMapper.selectById(id));
+//     }
+//
+//     @Test
+//     public void testDeleteInfo_notExists() {
+//         // 准备参数
+//         Long id = randomLongId();
+//
+//         // 调用, 并断言异常
+//         assertServiceException(() -> infoService.deleteInfo(id), INFO_NOT_EXISTS);
+//     }
+//
+//     @Test
+//     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+//     public void testGetInfoPage() {
+//        // mock 数据
+//        AssetInfoDO dbInfo = randomPojo(AssetInfoDO.class, o -> { // 等会查询到
+//            o.setAssetInfoUuid(null);
+//            o.setName(null);
+//            o.setTypeNumber(null);
+//            o.setSerialNumber(null);
+//            o.setCapitalizationDate(null);
+//            o.setDepreciationYear(null);
+//            o.setAssetState(null);
+//            o.setReceiveEmployeeId(null);
+//            o.setAssetDeptId(null);
+//        });
+//        infoMapper.insert(dbInfo);
+//        // 测试 assetInfoUuid 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setAssetInfoUuid(null)));
+//        // 测试 name 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setName(null)));
+//        // 测试 typeNumber 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setTypeNumber(null)));
+//        // 测试 serialNumber 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setSerialNumber(null)));
+//        // 测试 capitalizationDate 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setCapitalizationDate(null)));
+//        // 测试 depreciationYear 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setDepreciationYear(null)));
+//        // 测试 assetState 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setAssetState(null)));
+//        // 测试 receiveEmployeeId 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setReceiveEmployeeId(null)));
+//        // 测试 assetDeptId 不匹配
+//        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setAssetDeptId(null)));
+//        // 准备参数
+//        AssetInfoPageReqVO reqVO = new AssetInfoPageReqVO();
+//        reqVO.setAssetInfoUuid(null);
+//        reqVO.setName(null);
+//        reqVO.setTypeNumber(null);
+//        reqVO.setSerialNumber(null);
+//        reqVO.setCapitalizationDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+//        reqVO.setDepreciationYear(null);
+//        reqVO.setAssetState(null);
+//        reqVO.setReceiveEmployeeId(null);
+//        reqVO.setAssetDeptId(null);
+//
+//        // 调用
+//        PageResult<AssetInfoDO> pageResult = infoService.getInfoPage(reqVO);
+//        // 断言
+//        assertEquals(1, pageResult.getTotal());
+//        assertEquals(1, pageResult.getList().size());
+//        assertPojoEquals(dbInfo, pageResult.getList().get(0));
+//     }
+//
+// }

+ 162 - 0
yudao-module-finance/yudao-module-asset-biz/src/test/java/cn/iocoder/yudao/module/asset/service/assetreceiveinfo/AssetReceiveInfoServiceImplTest.java

@@ -0,0 +1,162 @@
+// package cn.iocoder.yudao.module.asset.service.assetreceiveinfo;
+//
+// import org.junit.jupiter.api.Disabled;
+// import org.junit.jupiter.api.Test;
+// import org.springframework.boot.test.mock.mockito.MockBean;
+//
+// import javax.annotation.Resource;
+//
+// import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+//
+// import cn.iocoder.yudao.module.asset.controller.admin.assetreceiveinfo.vo.*;
+// import cn.iocoder.yudao.module.asset.dal.dataobject.assetreceiveinfo.AssetReceiveInfoDO;
+// import cn.iocoder.yudao.module.asset.dal.mysql.assetreceiveinfo.AssetReceiveInfoMapper;
+// import cn.iocoder.yudao.framework.common.pojo.PageResult;
+//
+// import javax.annotation.Resource;
+// import org.springframework.context.annotation.Import;
+// import java.util.*;
+// import java.time.LocalDateTime;
+//
+// import static cn.hutool.core.util.RandomUtil.*;
+// import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.*;
+// import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
+// import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
+// import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
+// import static org.junit.jupiter.api.Assertions.*;
+// import static org.mockito.Mockito.*;
+//
+// /**
+//  * {@link AssetReceiveInfoServiceImpl} 的单元测试类
+//  *
+//  * @author dp
+//  */
+// @Import(AssetReceiveInfoServiceImpl.class)
+// public class AssetReceiveInfoServiceImplTest extends BaseDbUnitTest {
+//
+//     @Resource
+//     private AssetReceiveInfoServiceImpl receiveInfoService;
+//
+//     @Resource
+//     private AssetReceiveInfoMapper receiveInfoMapper;
+//
+//     @Test
+//     public void testCreateReceiveInfo_success() {
+//         // 准备参数
+//         AssetReceiveInfoSaveReqVO createReqVO = randomPojo(AssetReceiveInfoSaveReqVO.class).setId(null);
+//
+//         // 调用
+//         Long receiveInfoId = receiveInfoService.createReceiveInfo(createReqVO);
+//         // 断言
+//         assertNotNull(receiveInfoId);
+//         // 校验记录的属性是否正确
+//         AssetReceiveInfoDO receiveInfo = receiveInfoMapper.selectById(receiveInfoId);
+//         assertPojoEquals(createReqVO, receiveInfo, "id");
+//     }
+//
+//     @Test
+//     public void testUpdateReceiveInfo_success() {
+//         // mock 数据
+//         AssetReceiveInfoDO dbReceiveInfo = randomPojo(AssetReceiveInfoDO.class);
+//         receiveInfoMapper.insert(dbReceiveInfo);// @Sql: 先插入出一条存在的数据
+//         // 准备参数
+//         AssetReceiveInfoSaveReqVO updateReqVO = randomPojo(AssetReceiveInfoSaveReqVO.class, o -> {
+//             o.setId(dbReceiveInfo.getId()); // 设置更新的 ID
+//         });
+//
+//         // 调用
+//         receiveInfoService.updateReceiveInfo(updateReqVO);
+//         // 校验是否更新正确
+//         AssetReceiveInfoDO receiveInfo = receiveInfoMapper.selectById(updateReqVO.getId()); // 获取最新的
+//         assertPojoEquals(updateReqVO, receiveInfo);
+//     }
+//
+//     @Test
+//     public void testUpdateReceiveInfo_notExists() {
+//         // 准备参数
+//         AssetReceiveInfoSaveReqVO updateReqVO = randomPojo(AssetReceiveInfoSaveReqVO.class);
+//
+//         // 调用, 并断言异常
+//         assertServiceException(() -> receiveInfoService.updateReceiveInfo(updateReqVO), RECEIVE_INFO_NOT_EXISTS);
+//     }
+//
+//     @Test
+//     public void testDeleteReceiveInfo_success() {
+//         // mock 数据
+//         AssetReceiveInfoDO dbReceiveInfo = randomPojo(AssetReceiveInfoDO.class);
+//         receiveInfoMapper.insert(dbReceiveInfo);// @Sql: 先插入出一条存在的数据
+//         // 准备参数
+//         Long id = dbReceiveInfo.getId();
+//
+//         // 调用
+//         receiveInfoService.deleteReceiveInfo(id);
+//        // 校验数据不存在了
+//        assertNull(receiveInfoMapper.selectById(id));
+//     }
+//
+//     @Test
+//     public void testDeleteReceiveInfo_notExists() {
+//         // 准备参数
+//         Long id = randomLongId();
+//
+//         // 调用, 并断言异常
+//         assertServiceException(() -> receiveInfoService.deleteReceiveInfo(id), RECEIVE_INFO_NOT_EXISTS);
+//     }
+//
+//     @Test
+//     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+//     public void testGetReceiveInfoPage() {
+//        // mock 数据
+//        AssetReceiveInfoDO dbReceiveInfo = randomPojo(AssetReceiveInfoDO.class, o -> { // 等会查询到
+//            o.setEmployeeId(null);
+//            o.setDeptId(null);
+//            o.setPostId(null);
+//            o.setAssetInfoName(null);
+//            o.setReceiveDate(null);
+//            o.setReturned(null);
+//            o.setReturnDate(null);
+//            o.setInfoSource(null);
+//            o.setCreator(null);
+//        });
+//        receiveInfoMapper.insert(dbReceiveInfo);
+//        // 测试 employeeId 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setEmployeeId(null)));
+//        // 测试 deptId 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setDeptId(null)));
+//        // 测试 postId 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setPostId(null)));
+//        // 测试 assetInfoName 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setAssetInfoName(null)));
+//        // 测试 receiveDate 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setReceiveDate(null)));
+//        // 测试 returned 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setReturned(null)));
+//        // 测试 returnDate 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setReturnDate(null)));
+//        // 测试 infoSource 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setInfoSource(null)));
+//        // 测试 creator 不匹配
+//        receiveInfoMapper.insert(cloneIgnoreId(dbReceiveInfo, o -> o.setCreator(null)));
+//        // 准备参数
+//        AssetReceiveInfoPageReqVO reqVO = new AssetReceiveInfoPageReqVO();
+//        reqVO.setEmployeeId(null);
+//        reqVO.setDeptId(null);
+//        reqVO.setPostId(null);
+//        reqVO.setAssetInfoName(null);
+//        reqVO.setReceiveDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+//        reqVO.setReturned(null);
+//        reqVO.setReturnDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+//        reqVO.setInfoSource(null);
+//        reqVO.setCreator(null);
+//
+//        // 调用
+//        PageResult<AssetReceiveInfoDO> pageResult = receiveInfoService.getReceiveInfoPage(reqVO);
+//        // 断言
+//        assertEquals(1, pageResult.getTotal());
+//        assertEquals(1, pageResult.getList().size());
+//        assertPojoEquals(dbReceiveInfo, pageResult.getList().get(0));
+//     }
+//
+// }