From 03587b58b343956f910a653c37b9a7bcd84e4af9 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 19 九月 2025 18:54:03 +0800
Subject: [PATCH] 资产管理-资产领用列表 阿里云OSS文件上传

---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java  |    5 
 ruoyi-admin/src/main/resources/application-test.yml                                                    |   11 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                        |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java               |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java                          |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java  |  117 ++++---
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml                     |   36 ++
 pom.xml                                                                                                |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java     |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java             |   47 +++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java      |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetGeneralExt.java                                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java             |   24 +
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java      |   48 --
 ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java                                    |   28 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java     |   28 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java           |   78 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java                                       |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java    |   32 ++
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java                                |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAsset.java                      |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java             |   15 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java           |   33 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FileUploadController.java                    |   43 ++
 ruoyi-common/pom.xml                                                                                   |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java                           |  119 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageDTO.java             |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java  |   36 --
 ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java                                      |   59 +++
 ruoyi-admin/src/main/resources/application-prod.yml                                                    |    9 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java       |   33 ++
 ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java                        |    7 
 34 files changed, 719 insertions(+), 173 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0e23835..f9a01cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,7 @@
         <poi.version>4.1.2</poi.version>
         <velocity.version>2.3</velocity.version>
         <jwt.version>0.9.1</jwt.version>
+        <aliyun-oss.version>3.17.4</aliyun-oss.version>
     </properties>
 
     <!-- 依赖声明 -->
@@ -156,6 +157,12 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!--阿里云oss-->
+            <dependency>
+                <groupId>com.aliyun.oss</groupId>
+                <artifactId>aliyun-sdk-oss</artifactId>
+                <version>${aliyun-oss.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java
index b5d1163..7540da5 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java
@@ -1,16 +1,23 @@
 package com.ruoyi.web.controller.api;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO;
+import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery;
 import com.ruoyi.system.service.OaApprovalApplicationAssetService;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -38,5 +45,29 @@
         oaApprovalApplicationAssetService.submitReceive(dto);
         return R.ok();
     }
-}
 
+    @ApiOperation("获取资产领用申请分页列表")
+    @PostMapping("/page-list")
+    public R<IPage<OaApprovalApplicationAssetPageVO>> getReceivePageList(@RequestBody OaApprovalApplicationAssetPageQuery pageQuery) {
+        // 数据权限:非管理员仅能查看本部门
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
+        if (!isAdmin) {
+            try {
+                pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getDeptId()));
+            } catch (Exception e) {
+                // ignore parse, leave null if cannot parse
+            }
+        }
+        IPage<OaApprovalApplicationAssetPageVO> page = oaApprovalApplicationAssetService.getReceivePageList(pageQuery);
+        return R.ok(page);
+    }
+
+    @ApiOperation("获取资产领用详情")
+    @GetMapping("/detail/receive/{id}")
+    public R<OaApprovalApplicationAssetDetailVO> getReceiveDetail(@PathVariable Integer id) {
+        OaApprovalApplicationAssetDetailVO detail = oaApprovalApplicationAssetService.getDetail(id);
+        return R.ok(detail);
+    }
+
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java
index 89ae307..92e6aad 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java
@@ -58,6 +58,16 @@
     @Log(title = "通用资产入库申请-提交", businessType = BusinessType.INSERT)
     public R<Void> submitGeneralAssetStorage(@Valid @RequestBody OaApprovalApplicationStorageGeneralDTO dto) {
         validateAddress(dto);
+        // 校验每条明细的权属单位/部门名称是否存在
+        for (OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item : dto.getAssetItems()) {
+            if (StringUtils.isEmpty(item.getOwnershipDeptName())) {
+                throw new ServiceException("权属单位/部门名称不能为空");
+            }
+            TDept owner = deptService.lambdaQuery().eq(TDept::getDeptName, item.getOwnershipDeptName()).one();
+            if (owner == null) {
+                throw new ServiceException("权属单位/部门不存在: " + item.getOwnershipDeptName());
+            }
+        }
         oaApprovalApplicationStorageService.submitGeneralAssetStorage(dto);
         return R.ok();
     }
@@ -67,6 +77,15 @@
     @Log(title = "房产资产入库申请-提交", businessType = BusinessType.INSERT)
     public R<Void> submitPropertyAssetStorage(@Valid @RequestBody OaApprovalApplicationStoragePropertyDTO dto) {
         validateAddress(dto);
+        for (OaApprovalApplicationStoragePropertyDTO.PropertyAssetItemDTO item : dto.getAssetItems()) {
+            if (StringUtils.isEmpty(item.getOwnershipDeptName())) {
+                throw new ServiceException("权属单位/部门名称不能为空");
+            }
+            TDept owner = deptService.lambdaQuery().eq(TDept::getDeptName, item.getOwnershipDeptName()).one();
+            if (owner == null) {
+                throw new ServiceException("权属单位/部门不存在: " + item.getOwnershipDeptName());
+            }
+        }
         oaApprovalApplicationStorageService.submitPropertyAssetStorage(dto);
         return R.ok();
     }
@@ -76,6 +95,15 @@
     @Log(title = "车辆资产入库申请-提交", businessType = BusinessType.INSERT)
     public R<Void> submitVehicleAssetStorage(@Valid @RequestBody OaApprovalApplicationStorageVehicleDTO dto) {
         validateAddress(dto);
+        for (OaApprovalApplicationStorageVehicleDTO.VehicleAssetItemDTO item : dto.getAssetItems()) {
+            if (StringUtils.isEmpty(item.getOwnershipDeptName())) {
+                throw new ServiceException("权属单位/部门名称不能为空");
+            }
+            TDept owner = deptService.lambdaQuery().eq(TDept::getDeptName, item.getOwnershipDeptName()).one();
+            if (owner == null) {
+                throw new ServiceException("权属单位/部门不存在: " + item.getOwnershipDeptName());
+            }
+        }
         oaApprovalApplicationStorageService.submitVehicleAssetStorage(dto);
         return R.ok();
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
index 4440d2e..29b8690 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -6,13 +6,31 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.web.service.TokenService;
-import com.ruoyi.system.dto.*;
-import com.ruoyi.system.emums.ApprovalFlowNodeEnum;
+import com.ruoyi.system.dto.AddAdvertisementDTO;
+import com.ruoyi.system.dto.AddBusinessTripDTO;
+import com.ruoyi.system.dto.AddContactDTO;
+import com.ruoyi.system.dto.AddContractDTO;
+import com.ruoyi.system.dto.AddLeaveDTO;
+import com.ruoyi.system.dto.AddLeaveDestroyDTO;
+import com.ruoyi.system.dto.AddMoneyDTO;
+import com.ruoyi.system.dto.AddOutDTO;
+import com.ruoyi.system.dto.AddPaymentDTO;
+import com.ruoyi.system.dto.AddReimbursementDTO;
+import com.ruoyi.system.emums.ApprovalStatusEnum;
 import com.ruoyi.system.emums.ApprovalTypeEnum;
-import com.ruoyi.system.model.*;
+import com.ruoyi.system.model.OaApprovalApplicationAdvertisement;
+import com.ruoyi.system.model.OaApprovalApplicationAttendance;
+import com.ruoyi.system.model.OaApprovalApplicationContact;
+import com.ruoyi.system.model.OaApprovalApplicationContract;
+import com.ruoyi.system.model.OaApprovalApplicationMoney;
+import com.ruoyi.system.model.OaApprovalApplicationPayment;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursement;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
 import com.ruoyi.system.model.OaApprovalApplications;
+import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OaApprovalApplicationAdvertisementService;
 import com.ruoyi.system.service.OaApprovalApplicationAttendanceService;
@@ -31,12 +49,11 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import oshi.driver.mac.net.NetStat;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -47,8 +64,6 @@
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
-import com.ruoyi.system.emums.ApprovalStatusEnum;
-import com.ruoyi.common.exception.ServiceException;
 
 /**
  * <p>
@@ -581,9 +596,9 @@
     }
 
     @Log(title = "审批-撤回通用审批单", businessType = BusinessType.UPDATE)
-    @ApiOperation(value = "撤回审批单:仅更新状态为已撤回")
+    @ApiOperation(value = "撤回审批单(通用接口)")
     @PutMapping(value = "/withdraw/{id}")
-    public R withdraw(@PathVariable Integer id) {
+    public R<?> withdraw(@PathVariable Integer id) {
         OaApprovalApplications current = approvalApplicationsService.getById(id);
         if (current == null) {
             throw new ServiceException("审批单不存在");
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FileUploadController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FileUploadController.java
new file mode 100644
index 0000000..2df854a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FileUploadController.java
@@ -0,0 +1,43 @@
+package com.ruoyi.web.controller.system;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.service.OssService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * @author mitao
+ * @date 2025/9/19
+ */
+@Api(tags = {"文件上传接口"})
+@RestController
+@RequestMapping("/file-upload/")
+public class FileUploadController {
+    @Autowired
+    private OssService ossService;
+    /**
+     * 上传文件
+     *
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "OSS文件上传")
+    @PostMapping("/upload-oss")
+    public R<String> upload(@RequestPart("file") MultipartFile file) {
+        String fileUrl;
+        try {
+            fileUrl = ossService.uploadFile(file);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok(fileUrl);
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 1da9602..8576c1d 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -220,3 +220,12 @@
     bucketAddr:
     rootSrc:
     location: /clean
+
+# 阿里云对象存储
+oss:
+  accessKeyId: LTAI5tNW8B4CYP1WK7yS3bfW
+  accessKeySecret: 9RrPDLd7wh4VGCjXxD8ULIdKiuY5Ly
+  upload-endpoint: https://oss-cn-chengdu.aliyuncs.com
+  download-endpoint: https://zhpt-oss.oss-cn-chengdu.aliyuncs.com
+  bucketName: zhpt
+  folder: shehongchengtou
diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml
index b03fdda..a0ed1ba 100644
--- a/ruoyi-admin/src/main/resources/application-test.yml
+++ b/ruoyi-admin/src/main/resources/application-test.yml
@@ -65,7 +65,7 @@
   devtools:
     restart:
       # 热部署开关
-      enabled: true
+      enabled: false
   # redis 配置
   redis:
     # 地址
@@ -221,6 +221,15 @@
     bucketAddr:
     rootSrc:
     location: /clean
+
+# 阿里云对象存储
+oss:
+  accessKeyId: LTAI5tNW8B4CYP1WK7yS3bfW
+  accessKeySecret: 9RrPDLd7wh4VGCjXxD8ULIdKiuY5Ly
+  upload-endpoint: https://oss-cn-chengdu.aliyuncs.com
+  download-endpoint: https://zhpt-oss.oss-cn-chengdu.aliyuncs.com
+  bucketName: zhpt
+  folder: shehongchengtou
 sms:
   enable: true
   appId: 1400957506
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 99ab005..acb0c99 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -210,6 +210,11 @@
             <artifactId>javax.mail</artifactId>
             <version>1.6.2</version> <!-- 请检查是否有更新的版本 -->
         </dependency>
+        <!--阿里云oss-->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java
new file mode 100644
index 0000000..0e42529
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/OssConfig.java
@@ -0,0 +1,59 @@
+package com.ruoyi.common.config;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 存储-配置
+ *
+ * @author mitao
+ */
+@ConfigurationProperties(prefix = "oss")
+@Component
+@Slf4j
+@Data
+public class OssConfig {
+
+    private String folder = "dev";
+
+    private String accessKeyId;
+
+    private String accessKeySecret;
+
+    private String uploadEndpoint;
+
+    private String downloadEndpoint;
+
+    private String bucketName;
+
+    public static String FOLDER;
+    public static String ACCESS_KEY_ID;
+    public static String ACCESS_KEY_SECRET;
+    public static String UPLOAD_ENDPOINT;
+    public static String DOWNLOAD_ENDPOINT;
+    public static String BUCKET_NAME;
+
+
+    @PostConstruct
+    public void init() {
+
+        log.debug("OSS配置信息:" + JSONObject.toJSONString(this));
+        FOLDER = folder;
+        ACCESS_KEY_ID = accessKeyId;
+        ACCESS_KEY_SECRET = accessKeySecret;
+        UPLOAD_ENDPOINT = uploadEndpoint;
+        DOWNLOAD_ENDPOINT = downloadEndpoint;
+        BUCKET_NAME = bucketName;
+    }
+
+    public String getStoreFolder() {
+
+        return getFolder();
+    }
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
index c02d68a..132ef6d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -5,10 +5,13 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.awt.*;
 import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageDTO.java
index 56155a6..9daa4d7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageDTO.java
@@ -36,11 +36,6 @@
     @NotBlank(message = "申请人姓名不能为空")
     private String applicantName;
 
-    @ApiModelProperty(value = "申请日期")
-    @NotNull(message = "申请日期不能为空")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate applicationDate;
-
     @ApiModelProperty(value = "入库备注")
     @Size(max = 500, message = "入库备注不能超过500字符")
     private String applicationReason;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java
index 63d5584..7e64a27 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java
@@ -42,6 +42,10 @@
         @NotBlank(message = "资产名称不能为空")
         private String assetName;
 
+        @ApiModelProperty(value = "类别")
+        @NotBlank(message = "类别不能为空")
+        private String category;
+
         @ApiModelProperty(value = "规格型号")
         private String specificationModel;
 
@@ -60,13 +64,16 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "总金额")
+        private BigDecimal totalValue;
+
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownershipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
 
-        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
+        @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
         private Integer addressType;
 
         @ApiModelProperty(value = "使用部门/位置名称")
@@ -99,40 +106,5 @@
 
         @ApiModelProperty(value = "入账金额")
         private BigDecimal accountingAmount;
-
-        // 通用资产扩展表字段
-        @ApiModelProperty(value = "供应商名称")
-        private String supplierName;
-
-        @ApiModelProperty(value = "采购日期")
-        @DateTimeFormat(pattern = "yyyy-MM-dd")
-        private LocalDate purchaseDate;
-
-        @ApiModelProperty(value = "保修期(月)")
-        private Integer warrantyPeriod;
-
-        @ApiModelProperty(value = "保修到期日期")
-        @DateTimeFormat(pattern = "yyyy-MM-dd")
-        private LocalDate warrantyExpireDate;
-
-        @ApiModelProperty(value = "折旧方法")
-        private String depreciationMethod;
-
-        @ApiModelProperty(value = "折旧率")
-        private BigDecimal depreciationRate;
-
-        @ApiModelProperty(value = "净值")
-        private BigDecimal netValue;
-
-        @ApiModelProperty(value = "维护周期(月)")
-        private Integer maintenanceCycle;
-
-        @ApiModelProperty(value = "上次维护日期")
-        @DateTimeFormat(pattern = "yyyy-MM-dd")
-        private LocalDate lastMaintenanceDate;
-
-        @ApiModelProperty(value = "下次维护日期")
-        @DateTimeFormat(pattern = "yyyy-MM-dd")
-        private LocalDate nextMaintenanceDate;
     }
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java
index d74064c..f38430e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java
@@ -42,6 +42,10 @@
         @NotBlank(message = "资产名称不能为空")
         private String assetName;
 
+        @ApiModelProperty(value = "类别")
+        @NotBlank(message = "类别不能为空")
+        private String category;
+
         @ApiModelProperty(value = "规格型号")
         private String specificationModel;
 
@@ -60,13 +64,13 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownershipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
 
-        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
+        @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
         private Integer addressType;
 
         @ApiModelProperty(value = "使用部门/位置名称")
@@ -136,7 +140,7 @@
         private String resettlementSituation;
 
         @ApiModelProperty(value = "是否抵押:0-否,1-是")
-        private Boolean isMortgaged;
+        private Integer mortgaged;
 
         @ApiModelProperty(value = "承租方")
         private String tenantName;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java
index ec0146a..73e8116 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java
@@ -42,6 +42,10 @@
         @NotBlank(message = "资产名称不能为空")
         private String assetName;
 
+        @ApiModelProperty(value = "类别")
+        @NotBlank(message = "类别不能为空")
+        private String category;
+
         @ApiModelProperty(value = "规格型号")
         private String specificationModel;
 
@@ -60,13 +64,13 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownershipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
 
-        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
+        @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
         private Integer addressType;
 
         @ApiModelProperty(value = "使用部门/位置名称")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java
index 56dce6a..862157f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java
@@ -1,7 +1,12 @@
 package com.ruoyi.system.mapper;
 
-import com.ruoyi.system.model.OaApprovalApplicationAsset;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.OaApprovalApplicationAsset;
+import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +18,6 @@
  */
 public interface OaApprovalApplicationAssetMapper extends BaseMapper<OaApprovalApplicationAsset> {
 
+    IPage<OaApprovalApplicationAssetPageVO> selectReceivePage(Page<OaApprovalApplicationAssetPageVO> page,
+                                                             @Param("query") OaApprovalApplicationAssetPageQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetGeneralExt.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetGeneralExt.java
index d6930dd..214b556 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetGeneralExt.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetGeneralExt.java
@@ -18,7 +18,7 @@
  * <p>
  * 通用资产扩展表
  * </p>
- *
+ * 已弃用
  * @author WuGuanFengYue
  * @since 2025-09-15
  */
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
index 1cc1695..d557b64 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
@@ -54,6 +54,10 @@
     @TableField("specification_model")
     private String specificationModel;
 
+    @ApiModelProperty(value = "类别")
+    @TableField("category")
+    private String category;
+
     @ApiModelProperty(value = "资产类别ID,关联asset_type表")
     @TableField("asset_type_id")
     private Integer assetTypeId;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java
index e0c1bb0..74c5526 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java
@@ -84,7 +84,7 @@
 
     @ApiModelProperty(value = "是否抵押:0-否,1-是")
     @TableField("is_mortgaged")
-    private Boolean isMortgaged;
+    private Integer mortgaged;
 
     @ApiModelProperty(value = "承租方")
     @TableField("tenant_name")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAsset.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAsset.java
index 5c8f830..71bc14c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAsset.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAsset.java
@@ -54,7 +54,7 @@
 
     @ApiModelProperty(value = "操作类型 0-领用,1-借用,2-归还")
     @TableField("type")
-    private Boolean type;
+    private Integer type;
 
     @ApiModelProperty(value = "借用审批ID,类型为归还时使用。")
     @TableField("borrow_application_id")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
index f120640..dd7282c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
@@ -48,14 +48,14 @@
     @ApiModelProperty(value = "申请人")
     @TableField("applicant_name")
     private String applicantName;
+
     @ApiModelProperty(value = "所属部门")
     @TableField("dept_name")
     private String deptName;
+
     @ApiModelProperty(value = "部门ID")
     @TableField("dept_id")
     private Integer deptId;
-
-
 
     @ApiModelProperty(value = "申请日期")
     @TableField("application_date")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java
new file mode 100644
index 0000000..9c63463
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 资产领用申请分页查询对象
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("资产领用申请分页查询对象")
+public class OaApprovalApplicationAssetPageQuery extends BasePage {
+    private static final long serialVersionUID = 5202319182345234524L;
+
+    @ApiModelProperty("关键词(标题/单据号/部门/领用人)")
+    private String keyword;
+
+    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤)")
+    private Integer deptId;
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java
index abf9846..e1b747b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java
@@ -1,8 +1,12 @@
 package com.ruoyi.system.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.system.model.OaApprovalApplicationAsset;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO;
+import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO;
 
 /**
  * <p>
@@ -19,4 +23,15 @@
      * @param dto 领用申请DTO
      */
     void submitReceive(OaApprovalApplicationAssetReceiveDTO dto);
+
+    /**
+     * 获取资产领用申请分页列表
+     */
+    IPage<OaApprovalApplicationAssetPageVO> getReceivePageList(OaApprovalApplicationAssetPageQuery pageQuery);
+
+    /**
+     * 获取资产领用/借用/归还详情
+     * @param id 领用/借用/归还明细表ID(oa_approval_application_asset.id)
+     */
+    OaApprovalApplicationAssetDetailVO getDetail(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java
new file mode 100644
index 0000000..2b6d049
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OssService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.system.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * @author mitao
+ * @date 2024/12/23
+ */
+public interface OssService {
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    String uploadFile(MultipartFile file) throws IOException;
+
+    /**
+     * 文件上传,指定上传路径
+     *
+     * @param storagePath
+     * @param file
+     * @return
+     */
+    String upload(String storagePath, MultipartFile file) throws IOException;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
index 0640ed2..051d780 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
@@ -1,5 +1,7 @@
 package com.ruoyi.system.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO;
@@ -10,11 +12,14 @@
 import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
 import com.ruoyi.system.model.OaApprovalApplications;
 import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery;
 import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
 import com.ruoyi.system.service.OaApprovalApplicationAssetService;
 import com.ruoyi.system.service.OaApprovalApplicationsService;
 import com.ruoyi.system.service.OaApprovalFlowNodeService;
 import com.ruoyi.system.service.OaApprovalTodoService;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -111,7 +116,7 @@
         asset.setAssetTypeId(dto.getAssetTypeId());
         asset.setOperateTime(dto.getOperateTime());
         asset.setExpectReturnDate(dto.getExpectReturnDate());
-        asset.setType(Boolean.FALSE); // 0-领用
+        asset.setType(0); // 0-领用
         return asset;
     }
 
@@ -130,4 +135,29 @@
         String sequenceStr = String.format("%03d", sequence);
         return prefix + sequenceStr;
     }
+
+    @Override
+    public IPage<OaApprovalApplicationAssetPageVO> getReceivePageList(OaApprovalApplicationAssetPageQuery pageQuery) {
+        Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+        return this.baseMapper.selectReceivePage(page, pageQuery);
+    }
+
+    @Override
+    public OaApprovalApplicationAssetDetailVO getDetail(Integer id) {
+        OaApprovalApplicationAsset detail = this.getById(id);
+        if (detail == null) {
+            throw new ServiceException("记录不存在");
+        }
+        OaApprovalApplications app = oaApprovalApplicationsService.getById(detail.getApprovalApplicationId());
+        if (app == null) {
+            throw new ServiceException("审批主记录不存在");
+        }
+        List<OaApprovalApplicationAssetItem> items = oaApprovalApplicationAssetItemService.lambdaQuery()
+                .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+                .list();
+
+        OaApprovalApplicationAssetDetailVO vo = new OaApprovalApplicationAssetDetailVO();
+        vo.setItems(items);
+        return vo;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java
index 50069a7..33e9534 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java
@@ -10,8 +10,6 @@
 import com.ruoyi.system.model.OaApprovalApplicationPurchaseItem;
 import com.ruoyi.system.model.OaApprovalApplications;
 import com.ruoyi.system.model.OaApprovalFlowNode;
-import com.ruoyi.system.service.ISysDeptService;
-import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OaApprovalApplicationPurchaseItemService;
 import com.ruoyi.system.service.OaApprovalApplicationPurchaseService;
 import com.ruoyi.system.service.OaApprovalApplicationsService;
@@ -42,8 +40,6 @@
     private final OaApprovalApplicationPurchaseItemService oaApprovalApplicationPurchaseItemService;
     private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
     private final OaApprovalTodoService oaApprovalTodoService;
-    private final ISysUserService sysUserService;
-    private final ISysDeptService sysDeptService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
index 8b336fd..a197e1c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
@@ -20,6 +20,7 @@
 import com.ruoyi.system.model.OaApprovalApplicationStorage;
 import com.ruoyi.system.model.OaApprovalApplications;
 import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery;
 import com.ruoyi.system.service.AssetGeneralExtService;
 import com.ruoyi.system.service.AssetMainService;
 import com.ruoyi.system.service.AssetPropertyExtService;
@@ -33,8 +34,8 @@
 import com.ruoyi.system.service.OaApprovalFlowNodeService;
 import com.ruoyi.system.service.OaApprovalTodoService;
 import com.ruoyi.system.service.TDeptService;
-import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageGeneralDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePropertyDetailVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageVehicleDetailVO;
 import lombok.RequiredArgsConstructor;
@@ -146,8 +147,7 @@
      */
     private void saveGeneralAssets(List<OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO> assetItems, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStorageGeneralDTO baseDto) {
         List<AssetMain> allAssetMains = new ArrayList<>();
-        List<AssetGeneralExt> allGeneralExts = new ArrayList<>();
-        
+
         for (OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item : assetItems) {
             // 根据数量创建对应数量的资产记录
             int quantity = item.getQuantity().intValue();
@@ -162,19 +162,6 @@
         
         // 批量保存资产主表数据
         assetMainService.saveBatch(allAssetMains);
-
-        // 为每个资产主表记录创建对应的扩展信息
-        int assetMainIndex = 0;
-        for (OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item : assetItems) {
-            int quantity = item.getQuantity().intValue();
-            for (int i = 0; i < quantity; i++) {
-                AssetGeneralExt generalExt = buildAssetGeneralExt(item, allAssetMains.get(assetMainIndex).getId());
-                allGeneralExts.add(generalExt);
-                assetMainIndex++;
-            }
-        }
-        
-        assetGeneralExtService.saveBatch(allGeneralExts);
     }
 
     /**
@@ -258,12 +245,21 @@
         assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
         assetMain.setAssetCode(generateAssetCode(assetTypeId, storageDate)); // 系统生成资产编码
         assetMain.setAssetName(item.getAssetName());
+        assetMain.setCategory(item.getCategory());
         assetMain.setSpecificationModel(item.getSpecificationModel());
         assetMain.setAssetTypeId(assetTypeId);
         assetMain.setMeasurementUnit(item.getMeasurementUnit());
         assetMain.setUnitPrice(item.getUnitPrice());
         assetMain.setUsefulLife(item.getUsefulLife());
-        assetMain.setOwnershipDeptId(item.getOwnershipDeptId());
+        // 根据权属单位/部门名称填充ID
+        if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
+            TDept ownerDept = tDeptService.lambdaQuery()
+                    .eq(TDept::getDeptName, item.getOwnershipDeptName())
+                    .one();
+            if (ownerDept != null) {
+                assetMain.setOwnershipDeptId(ownerDept.getId());
+            }
+        }
         assetMain.setUserName(item.getUserName());
         // 根据整单 addressType 写入使用部门ID或仓库ID
         applyAddressToAssetMain(assetMain, baseDto.getAddressType(), baseDto.getUseDeptName(), baseDto.getWarehouseName(), baseDto.getAddress());
@@ -288,12 +284,20 @@
         assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
         assetMain.setAssetCode(generateAssetCode(assetTypeId, storageDate));
         assetMain.setAssetName(item.getAssetName());
+        assetMain.setCategory(item.getCategory());
         assetMain.setSpecificationModel(item.getSpecificationModel());
         assetMain.setAssetTypeId(assetTypeId);
         assetMain.setMeasurementUnit(item.getMeasurementUnit());
         assetMain.setUnitPrice(item.getUnitPrice());
         assetMain.setUsefulLife(item.getUsefulLife());
-        assetMain.setOwnershipDeptId(item.getOwnershipDeptId());
+        if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
+            TDept ownerDept = tDeptService.lambdaQuery()
+                    .eq(TDept::getDeptName, item.getOwnershipDeptName())
+                    .one();
+            if (ownerDept != null) {
+                assetMain.setOwnershipDeptId(ownerDept.getId());
+            }
+        }
         assetMain.setUserName(item.getUserName());
         applyAddressToAssetMain(assetMain, baseDto.getAddressType(), baseDto.getUseDeptName(), baseDto.getWarehouseName(), baseDto.getAddress());
         assetMain.setAssetMainType(baseDto.getAddressType());
@@ -317,12 +321,20 @@
         assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
         assetMain.setAssetCode(generateAssetCode(assetTypeId, storageDate));
         assetMain.setAssetName(item.getAssetName());
+        assetMain.setCategory(item.getCategory());
         assetMain.setSpecificationModel(item.getSpecificationModel());
         assetMain.setAssetTypeId(assetTypeId);
         assetMain.setMeasurementUnit(item.getMeasurementUnit());
         assetMain.setUnitPrice(item.getUnitPrice());
         assetMain.setUsefulLife(item.getUsefulLife());
-        assetMain.setOwnershipDeptId(item.getOwnershipDeptId());
+        if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
+            TDept ownerDept = tDeptService.lambdaQuery()
+                    .eq(TDept::getDeptName, item.getOwnershipDeptName())
+                    .one();
+            if (ownerDept != null) {
+                assetMain.setOwnershipDeptId(ownerDept.getId());
+            }
+        }
         assetMain.setUserName(item.getUserName());
         applyAddressToAssetMain(assetMain, baseDto.getAddressType(), baseDto.getUseDeptName(), baseDto.getWarehouseName(), baseDto.getAddress());
         assetMain.setAssetMainType(baseDto.getAddressType());
@@ -383,16 +395,6 @@
     private AssetGeneralExt buildAssetGeneralExt(OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item, Integer assetMainId) {
         AssetGeneralExt generalExt = new AssetGeneralExt();
         generalExt.setAssetMainId(assetMainId);
-        generalExt.setSupplierName(item.getSupplierName());
-        generalExt.setPurchaseDate(item.getPurchaseDate());
-        generalExt.setWarrantyPeriod(item.getWarrantyPeriod());
-        generalExt.setWarrantyExpireDate(item.getWarrantyExpireDate());
-        generalExt.setDepreciationMethod(item.getDepreciationMethod());
-        generalExt.setDepreciationRate(item.getDepreciationRate());
-        generalExt.setNetValue(item.getNetValue());
-        generalExt.setMaintenanceCycle(item.getMaintenanceCycle());
-        generalExt.setLastMaintenanceDate(item.getLastMaintenanceDate());
-        generalExt.setNextMaintenanceDate(item.getNextMaintenanceDate());
         generalExt.setDisabled(false);
         return generalExt;
     }
@@ -414,7 +416,7 @@
         propertyExt.setDetailedLocation(item.getDetailedLocation());
         propertyExt.setProvincialPlatformValue(item.getProvincialPlatformValue());
         propertyExt.setResettlementSituation(item.getResettlementSituation());
-        propertyExt.setIsMortgaged(item.getIsMortgaged());
+        propertyExt.setMortgaged(item.getMortgaged());
         propertyExt.setTenantName(item.getTenantName());
         propertyExt.setRentalAmount(item.getRentalAmount());
         propertyExt.setLeaseStartDate(item.getLeaseStartDate());
@@ -472,7 +474,7 @@
             applications.setApplicantName(generalDTO.getApplicantName());
             applications.setDeptId(generalDTO.getDeptId());
             applications.setDeptName(generalDTO.getDeptName());
-            applications.setApplicationDate(generalDTO.getApplicationDate());
+            applications.setApplicationDate(LocalDate.now());
             applications.setApplicationReason(generalDTO.getApplicationReason());
             applications.setAttachmentUrl(generalDTO.getAttachmentUrl());
         } else if (dto instanceof OaApprovalApplicationStoragePropertyDTO) {
@@ -481,7 +483,7 @@
             applications.setApplicantName(propertyDTO.getApplicantName());
             applications.setDeptId(propertyDTO.getDeptId());
             applications.setDeptName(propertyDTO.getDeptName());
-            applications.setApplicationDate(propertyDTO.getApplicationDate());
+            applications.setApplicationDate(LocalDate.now());
             applications.setApplicationReason(propertyDTO.getApplicationReason());
             applications.setAttachmentUrl(propertyDTO.getAttachmentUrl());
         } else if (dto instanceof OaApprovalApplicationStorageVehicleDTO) {
@@ -490,7 +492,7 @@
             applications.setApplicantName(vehicleDTO.getApplicantName());
             applications.setDeptId(vehicleDTO.getDeptId());
             applications.setDeptName(vehicleDTO.getDeptName());
-            applications.setApplicationDate(vehicleDTO.getApplicationDate());
+            applications.setApplicationDate(LocalDate.now());
             applications.setApplicationReason(vehicleDTO.getApplicationReason());
             applications.setAttachmentUrl(vehicleDTO.getAttachmentUrl());
         }
@@ -577,7 +579,7 @@
     }
     
     @Override
-    public IPage<OaApprovalApplicationStoragePageVO> getPageList(com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery pageQuery) {
+    public IPage<OaApprovalApplicationStoragePageVO> getPageList(OaApprovalApplicationStoragePageQuery pageQuery) {
         Page<OaApprovalApplicationStoragePageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
         return this.baseMapper.selectApplicationStoragePage(page, pageQuery);
     }
@@ -604,8 +606,11 @@
 
         if (!CollectionUtils.isEmpty(mains)) {
             List<Integer> mainIds = mains.stream().map(AssetMain::getId).collect(Collectors.toList());
-            List<AssetGeneralExt> exts = assetGeneralExtService.lambdaQuery().in(AssetGeneralExt::getAssetMainId, mainIds).list();
-            Map<Integer, AssetGeneralExt> extMap = exts.stream().collect(Collectors.toMap(AssetGeneralExt::getAssetMainId, e -> e));
+            // 批量查询权属部门,避免循环内查询
+            List<Integer> ownerIds = mains.stream().map(AssetMain::getOwnershipDeptId)
+                    .filter(id -> id != null).distinct().collect(Collectors.toList());
+            Map<Integer, TDept> ownerDeptMap = ownerIds.isEmpty() ? java.util.Collections.emptyMap()
+                    : tDeptService.listByIds(ownerIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
 
             List<OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO> items = mains.stream().map(m -> {
                 OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO item = new OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO();
@@ -616,7 +621,10 @@
                 item.setQuantity(m.getQuantity());
                 item.setUnitPrice(m.getUnitPrice());
                 item.setUsefulLife(m.getUsefulLife());
-                item.setOwnershipDeptId(m.getOwnershipDeptId());
+                if (m.getOwnershipDeptId() != null) {
+                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
+                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
+                }
                 item.setUserName(m.getUserName());
                 item.setAssetStatus(m.getAssetStatus());
                 item.setRemarks(m.getRemarks());
@@ -625,19 +633,6 @@
                 item.setAccountingVoucherNo(m.getAccountingVoucherNo());
                 item.setAccountingSubject(m.getAccountingSubject());
                 item.setAccountingAmount(m.getAccountingAmount());
-                AssetGeneralExt ext = extMap.get(m.getId());
-                if (ext != null) {
-                    item.setSupplierName(ext.getSupplierName());
-                    item.setPurchaseDate(ext.getPurchaseDate());
-                    item.setWarrantyPeriod(ext.getWarrantyPeriod());
-                    item.setWarrantyExpireDate(ext.getWarrantyExpireDate());
-                    item.setDepreciationMethod(ext.getDepreciationMethod());
-                    item.setDepreciationRate(ext.getDepreciationRate());
-                    item.setNetValue(ext.getNetValue());
-                    item.setMaintenanceCycle(ext.getMaintenanceCycle());
-                    item.setLastMaintenanceDate(ext.getLastMaintenanceDate());
-                    item.setNextMaintenanceDate(ext.getNextMaintenanceDate());
-                }
                 return item;
             }).collect(Collectors.toList());
             vo.setAssetItems(items);
@@ -669,6 +664,11 @@
             List<Integer> mainIds = mains.stream().map(AssetMain::getId).collect(Collectors.toList());
             List<AssetPropertyExt> exts = assetPropertyExtService.lambdaQuery().in(AssetPropertyExt::getAssetMainId, mainIds).list();
             Map<Integer, AssetPropertyExt> extMap = exts.stream().collect(Collectors.toMap(AssetPropertyExt::getAssetMainId, e -> e));
+            // 批量查询权属部门
+            List<Integer> ownerIds = mains.stream().map(AssetMain::getOwnershipDeptId)
+                    .filter(id -> id != null).distinct().collect(Collectors.toList());
+            Map<Integer, TDept> ownerDeptMap = ownerIds.isEmpty() ? java.util.Collections.emptyMap()
+                    : tDeptService.listByIds(ownerIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
 
             List<OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO> items = mains.stream().map(m -> {
                 OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO item = new OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO();
@@ -679,7 +679,10 @@
                 item.setQuantity(m.getQuantity());
                 item.setUnitPrice(m.getUnitPrice());
                 item.setUsefulLife(m.getUsefulLife());
-                item.setOwnershipDeptId(m.getOwnershipDeptId());
+                if (m.getOwnershipDeptId() != null) {
+                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
+                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
+                }
                 item.setUserName(m.getUserName());
                 item.setAssetStatus(m.getAssetStatus());
                 item.setRemarks(m.getRemarks());
@@ -701,7 +704,7 @@
                     item.setDetailedLocation(ext.getDetailedLocation());
                     item.setProvincialPlatformValue(ext.getProvincialPlatformValue());
                     item.setResettlementSituation(ext.getResettlementSituation());
-                    item.setIsMortgaged(ext.getIsMortgaged());
+                    item.setMortgaged(ext.getMortgaged());
                     item.setTenantName(ext.getTenantName());
                     item.setRentalAmount(ext.getRentalAmount());
                     item.setLeaseStartDate(ext.getLeaseStartDate());
@@ -738,6 +741,11 @@
             List<Integer> mainIds = mains.stream().map(AssetMain::getId).collect(Collectors.toList());
             List<AssetVehicleExt> exts = assetVehicleExtService.lambdaQuery().in(AssetVehicleExt::getAssetMainId, mainIds).list();
             Map<Integer, AssetVehicleExt> extMap = exts.stream().collect(Collectors.toMap(AssetVehicleExt::getAssetMainId, e -> e));
+            // 批量查询权属部门
+            List<Integer> ownerIds = mains.stream().map(AssetMain::getOwnershipDeptId)
+                    .filter(id -> id != null).distinct().collect(Collectors.toList());
+            Map<Integer, TDept> ownerDeptMap = ownerIds.isEmpty() ? java.util.Collections.emptyMap()
+                    : tDeptService.listByIds(ownerIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
 
             List<OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO> items = mains.stream().map(m -> {
                 OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO item = new OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO();
@@ -748,7 +756,10 @@
                 item.setQuantity(m.getQuantity());
                 item.setUnitPrice(m.getUnitPrice());
                 item.setUsefulLife(m.getUsefulLife());
-                item.setOwnershipDeptId(m.getOwnershipDeptId());
+                if (m.getOwnershipDeptId() != null) {
+                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
+                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
+                }
                 item.setUserName(m.getUserName());
                 item.setAssetStatus(m.getAssetStatus());
                 item.setRemarks(m.getRemarks());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java
new file mode 100644
index 0000000..2d53aea
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OssServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ruoyi.system.service.impl;
+
+import com.aliyun.oss.ClientBuilderConfiguration;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.common.auth.CredentialsProvider;
+import com.aliyun.oss.common.auth.DefaultCredentialProvider;
+import com.aliyun.oss.common.comm.SignVersion;
+import com.aliyun.oss.model.PutObjectRequest;
+import com.aliyun.oss.model.PutObjectResult;
+import com.ruoyi.common.config.FileUploadConfig;
+import com.ruoyi.common.config.OssConfig;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.system.service.OssService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Objects;
+import java.util.UUID;
+
+/**
+ * @author mitao
+ * @date 2024/12/23
+ */
+@Service
+public class OssServiceImpl implements OssService {
+    @Autowired
+    private FileUploadConfig fileUploadConfig;
+    /**
+     * 文件上传
+     *
+     * @param file
+     * @return
+     */
+    @Override
+    public String uploadFile(MultipartFile file) throws IOException {
+        if (Objects.isNull(file)) {
+            throw new ServiceException("文件不能为空");
+        }
+        // 获取文件名称
+        String filename = file.getOriginalFilename();
+        // 获取文件后缀
+        String ext = filename.substring(filename.lastIndexOf("."), filename.length());
+        // 检查文件类型
+        if (!fileUploadConfig.getAllowExt().contains(ext)) {
+            throw new ServiceException("上传文件格式不正确,仅支持"+ fileUploadConfig.getAllowExt());
+        }
+        return upload(OssConfig.FOLDER, file);
+    }
+
+    /**
+     * 文件上传,指定上传路径
+     *
+     * @param storagePath
+     * @param file
+     * @return
+     */
+    @Override
+    public String upload(String storagePath, MultipartFile file) throws IOException {
+        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(OssConfig.ACCESS_KEY_ID, OssConfig.ACCESS_KEY_SECRET);
+        String region = "cn-chengdu";
+        // 创建OSSClient实例。
+        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
+        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
+        OSS ossClient = OSSClientBuilder.create()
+                .endpoint(OssConfig.UPLOAD_ENDPOINT)
+                .credentialsProvider(credentialsProvider)
+                .clientConfiguration(clientBuilderConfiguration)
+                .region(region)
+                .build();
+        InputStream inputStream = file.getInputStream();
+
+        String originFileName = file.getOriginalFilename();
+        String fileExt = Objects.requireNonNull(originFileName).substring(originFileName.lastIndexOf(".") + 1);
+        String fileName = originFileName.substring(0, originFileName.lastIndexOf("."));
+        // 设置文件名
+        String filePathName = generateRelativeStoragePath(storagePath, fileExt, fileName);
+        // 创建PutObjectRequest对象。
+        PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfig.BUCKET_NAME, filePathName, inputStream);
+        // 创建PutObject请求。
+        PutObjectResult result = ossClient.putObject(putObjectRequest);
+
+        return OssConfig.DOWNLOAD_ENDPOINT + filePathName;
+    }
+    
+    /**
+     * <pre>
+     * 获取存储的相对路径
+     * 规则path + / + yyyyMMddHH  + uuid
+     * </pre>
+     *
+     * @param storagePath
+     * @return
+     */
+    private static String generateRelativeStoragePath(String storagePath, String fileType, String fileName) {
+
+        String time = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
+        String uuid = UUID.randomUUID().toString();
+        StringBuilder sb = new StringBuilder();
+        if (StringUtils.isNotBlank(storagePath)) {
+            sb.append(storagePath).append("/");
+        }
+        if (fileName == null) {
+            sb.append(time).append(uuid);
+        } else {
+            sb.append(fileName).append(time);
+        }
+        if (StringUtils.isNotBlank(fileType)) {
+            sb.append(".").append(fileType);
+        }
+        return sb.toString();
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java
new file mode 100644
index 0000000..a3eea4e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java
@@ -0,0 +1,78 @@
+package com.ruoyi.system.vo.asset;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 资产领用/借用/归还 详情VO
+ */
+@Data
+@ApiModel("资产领用/借用/归还 详情VO")
+public class OaApprovalApplicationAssetDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "申请单号")
+    private String applicationCode;
+
+    @ApiModelProperty(value = "审批ID")
+    private Integer approvalId;
+
+    @ApiModelProperty(value = "申请人ID")
+    private Integer applicantUserId;
+
+    @ApiModelProperty(value = "申请人")
+    private String applicantName;
+
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptId;
+
+    @ApiModelProperty(value = "申请日期")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate applicationDate;
+
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
+    private Integer approvalStatus;
+
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+
+    @ApiModelProperty(value = "当前流程id")
+    private Integer currentFlowNodeId;
+
+    @ApiModelProperty(value = "事项标题")
+    private String title;
+
+    @ApiModelProperty(value = "资产类型")
+    private Integer assetTypeId;
+
+    @ApiModelProperty(value = "领用/借用日期")
+    private LocalDate operateTime;
+
+    @ApiModelProperty(value = "预计退还日期")
+    private LocalDate expectReturnDate;
+
+    @ApiModelProperty(value = "操作类型 0-领用,1-借用,2-归还")
+    private Integer type;
+
+    @ApiModelProperty(value = "借用审批ID,类型为归还时使用。")
+    private Integer borrowApplicationId;
+
+    @ApiModelProperty("关联资产项列表")
+    private List<OaApprovalApplicationAssetItem> items;
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java
new file mode 100644
index 0000000..c420e67
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java
@@ -0,0 +1,47 @@
+package com.ruoyi.system.vo.asset;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+/**
+ * 资产领用申请分页列表返回对象
+ */
+@Data
+@ApiModel("资产领用申请分页列表返回对象")
+public class OaApprovalApplicationAssetPageVO implements Serializable {
+    private static final long serialVersionUID = 4352345234523452346L;
+
+    @ApiModelProperty("主键ID")
+    private Integer id;
+
+    @ApiModelProperty("单据号")
+    private String applicationCode;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("领用部门")
+    private String deptName;
+
+    @ApiModelProperty("领用人")
+    private String applicantName;
+
+    @ApiModelProperty("资产一级类型名称")
+    private String firstAssetTypeName;
+
+    @ApiModelProperty("资产二级类型名称")
+    private String secondAssetTypeName;
+
+    @ApiModelProperty("领用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate operateTime;
+
+    @ApiModelProperty("状态 0-草稿,1-待审批,2-通过,3-拒绝,4-撤回")
+    private Integer approvalStatus;
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java
index ec1cde5..a4edb80 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java
@@ -88,8 +88,8 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownerShipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
@@ -114,37 +114,5 @@
 
         @ApiModelProperty(value = "入账金额")
         private BigDecimal accountingAmount;
-
-        // 通用资产扩展表字段
-        @ApiModelProperty(value = "供应商名称")
-        private String supplierName;
-
-        @ApiModelProperty(value = "采购日期")
-        private LocalDate purchaseDate;
-
-        @ApiModelProperty(value = "保修期(月)")
-        private Integer warrantyPeriod;
-
-        @ApiModelProperty(value = "保修到期日期")
-        private LocalDate warrantyExpireDate;
-
-        @ApiModelProperty(value = "折旧方法")
-        private String depreciationMethod;
-
-        @ApiModelProperty(value = "折旧率")
-        private java.math.BigDecimal depreciationRate;
-
-        @ApiModelProperty(value = "净值")
-        private java.math.BigDecimal netValue;
-
-        @ApiModelProperty(value = "维护周期(月)")
-        private Integer maintenanceCycle;
-
-        @ApiModelProperty(value = "上次维护日期")
-        private LocalDate lastMaintenanceDate;
-
-        @ApiModelProperty(value = "下次维护日期")
-        private LocalDate nextMaintenanceDate;
     }
 }
-
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java
index e1e2179..10c6515 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.vo.asset;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -88,8 +89,8 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownerShipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
@@ -150,7 +151,7 @@
         private String resettlementSituation;
 
         @ApiModelProperty(value = "是否抵押:0-否,1-是")
-        private Boolean isMortgaged;
+        private Integer mortgaged;
 
         @ApiModelProperty(value = "承租方")
         private String tenantName;
@@ -159,10 +160,11 @@
         private BigDecimal rentalAmount;
 
         @ApiModelProperty(value = "租赁期限起")
+        @JsonFormat(pattern = "yyyy-MM-dd")
         private LocalDate leaseStartDate;
 
         @ApiModelProperty(value = "租赁期限止")
+        @JsonFormat(pattern = "yyyy-MM-dd")
         private LocalDate leaseEndDate;
     }
 }
-
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java
index 114a50a..d44729a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java
@@ -88,8 +88,8 @@
         @ApiModelProperty(value = "使用年限(年)")
         private Integer usefulLife;
 
-        @ApiModelProperty(value = "权属单位/部门ID")
-        private Integer ownershipDeptId;
+        @ApiModelProperty(value = "权属单位/部门名称")
+        private String ownerShipDeptName;
 
         @ApiModelProperty(value = "使用人")
         private String userName;
@@ -141,4 +141,3 @@
         private String propertyRightForm;
     }
 }
-
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
index 1974701..4f1cd2e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
@@ -17,6 +17,40 @@
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id, approval_application_id, title, asset_type_id, operate_time, expect_return_date, type, borrow_application_id
-    </sql>
+</sql>
+
+    <!-- 分页查询:资产领用申请列表(关联审批记录与资产类型) -->
+    <select id="selectReceivePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO">
+        SELECT
+            oaa.id                               AS id,
+            aaa.application_code                 AS applicationCode,
+            oaa.title                            AS title,
+            aaa.dept_name                        AS deptName,
+            aaa.applicant_name                   AS applicantName,
+            CASE WHEN at2.level = 2 THEN at1.type_name ELSE at2.type_name END AS firstAssetTypeName,
+            CASE WHEN at2.level = 2 THEN at2.type_name ELSE NULL END         AS secondAssetTypeName,
+            oaa.operate_time                     AS operateTime,
+            aaa.approval_status                  AS approvalStatus
+        FROM oa_approval_application_asset oaa
+                 INNER JOIN oa_approval_applications aaa ON aaa.id = oaa.approval_application_id
+                 LEFT JOIN asset_type at2 ON at2.id = oaa.asset_type_id
+                 LEFT JOIN asset_type at1 ON at1.id = (CASE WHEN at2.level = 2 THEN at2.parent_id ELSE at2.id END)
+        <where>
+            AND aaa.disabled = 0
+            AND oaa.type = 0
+            <if test="query != null and query.keyword != null and query.keyword != ''">
+                AND (
+                    oaa.title LIKE CONCAT('%', #{query.keyword}, '%')
+                    OR  aaa.application_code LIKE CONCAT('%', #{query.keyword}, '%')
+                    OR  aaa.dept_name LIKE CONCAT('%', #{query.keyword}, '%')
+                    OR  aaa.applicant_name LIKE CONCAT('%', #{query.keyword}, '%')
+                )
+            </if>
+            <if test="query != null and query.deptId != null">
+                AND aaa.dept_id = #{query.deptId}
+            </if>
+        </where>
+        ORDER BY oaa.operate_time DESC, oaa.id DESC
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index dd84c2d..d0043e3 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -266,7 +266,7 @@
 	select  * from sys_user
 	where 1=1
 		<if test="ids != null and ids.size()>0">
-			AND deptId IN
+			AND dept_id IN
 			<foreach collection="ids" separator="," item="id" open="(" close=")">
 				#{id}
 			</foreach>
@@ -277,7 +277,7 @@
 
     <select id="selectListByDeptId" resultType="com.ruoyi.common.core.domain.entity.SysUser">
 		select u.*
-		from sys_user u where u.deptId = #{deptId} and u.status = 0 and u.del_flag = 0
+		from sys_user u where u.dept_id = #{deptId} and u.status = 0 and u.del_flag = 0
 	</select>
 	<select id="selectListByDeptType" resultType="com.ruoyi.common.core.domain.entity.SysUser">
 		select u.*
@@ -287,7 +287,7 @@
 		select u.*
 		from sys_user u where u.status = 0 and u.del_flag = 0
 		<if test="projectIds != null and projectIds.size() > 0">
-			and u.deptId in
+			and u.dept_id in
 			<foreach item="item" collection="projectIds" open="(" separator="," close=")">
 				#{item}
 			</foreach>
@@ -299,7 +299,7 @@
 			and deptType = #{deptType}
 		</if>
 		<if test="projectIds != null and projectIds.size() > 0">
-			and deptId in
+			and dept_id in
 			<foreach item="item" collection="projectIds" open="(" separator="," close=")">
 				#{item}
 			</foreach>

--
Gitblit v1.7.1