From 4ad572c4e51e44e3134def3c70879b3a698ab1d8 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 29 九月 2025 19:56:16 +0800
Subject: [PATCH] 资产变更

---
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java              |   63 +++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java  |    2 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml                   |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java            |   30 +
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java  |  161 ++------
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java     |   13 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml                     |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java         |   79 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java     |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java  |   36 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java           |    2 
 generator/src/test/java/com/xizang/CodeGeneratorTests.java                                             |    7 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java      |   84 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java      |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java             |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java            |   47 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java      |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java           |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java                     |   12 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml                    |   34 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java              |   14 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java          |   86 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java    |   29 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java           |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java  |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java            |   24 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java   |  160 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java                     |  166 ++++++--
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java               |    2 
 33 files changed, 899 insertions(+), 207 deletions(-)

diff --git a/generator/src/test/java/com/xizang/CodeGeneratorTests.java b/generator/src/test/java/com/xizang/CodeGeneratorTests.java
index 3b0448d..cde9302 100644
--- a/generator/src/test/java/com/xizang/CodeGeneratorTests.java
+++ b/generator/src/test/java/com/xizang/CodeGeneratorTests.java
@@ -3,7 +3,12 @@
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.generator.AutoGenerator;
 import com.baomidou.mybatisplus.generator.InjectionConfig;
-import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.FileOutConfig;
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.TemplateConfig;
 import com.baomidou.mybatisplus.generator.config.po.LikeTable;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java
index 2ee0916..120bb3e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java
@@ -1,8 +1,31 @@
 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.OaApprovalApplicationChangeDTO;
+import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.OaApprovalApplicationChangeService;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
 
 /**
  * <p>
@@ -12,9 +35,68 @@
  * @author WuGuanFengYue
  * @since 2025-09-15
  */
+@Validated
 @RestController
+@Api(tags = {"OA审批-资产变更相关接口"})
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
 @RequestMapping("/oa-approval-application-change")
 public class OaApprovalApplicationChangeController {
 
+    private final OaApprovalApplicationChangeService oaApprovalApplicationChangeService;
+    private final ISysUserService sysUserService;
+
+    @ApiOperation("提交资产变更申请")
+    @PostMapping("/submit-change")
+    @Log(title = "资产变更申请-提交", businessType = BusinessType.INSERT)
+    public R<Void> submitChange(@Valid @RequestBody OaApprovalApplicationChangeDTO dto) {
+        oaApprovalApplicationChangeService.submitChange(dto);
+        return R.ok();
+    }
+
+    @ApiOperation("获取资产变更申请分页列表")
+    @PostMapping("/page-list")
+    public R<IPage<OaApprovalApplicationChangePageVO>> getChangePageList(@RequestBody OaApprovalApplicationChangePageQuery pageQuery) {
+        // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
+        
+        if (!isAdmin) {
+            try {
+                // 获取当前用户的部门名称
+                String deptName = sysUserService.selectUserById(userId).getDept().getDeptName();
+                
+                // 非超级管理员且非资产管理部,设置部门权限
+                if (!"资产管理部".equals(deptName)) {
+                    pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                }
+            } catch (Exception e) {
+                // 如果获取部门信息失败,默认设置部门权限
+                try {
+                    pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                } catch (Exception ex) {
+                    // ignore parse, leave null if cannot parse
+                }
+            }
+        }
+        
+        IPage<OaApprovalApplicationChangePageVO> page = oaApprovalApplicationChangeService.getChangePageList(pageQuery);
+        return R.ok(page);
+    }
+
+    @ApiOperation("获取资产变更申请详情")
+    @GetMapping("/detail/{id}")
+    public R<OaApprovalApplicationChangeDetailVO> getChangeDetail(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) {
+        OaApprovalApplicationChangeDetailVO detail = oaApprovalApplicationChangeService.getChangeDetail(id);
+        return R.ok(detail);
+    }
+
+
+    @ApiOperation("删除资产变更申请")
+    @DeleteMapping("/{id}")
+    public R<?> deleteByApplicationId(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) {
+        oaApprovalApplicationChangeService.deleteByApplicationId(id);
+        return R.ok();
+    }
+
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java
index 03bb7f9..ad93aec 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java
@@ -5,11 +5,12 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.system.dto.dispose.OaApprovalApplicationDisposeDTO;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO;
 import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery;
 import com.ruoyi.system.service.OaApprovalApplicationDisposeService;
 import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -17,6 +18,7 @@
 import org.springframework.context.annotation.Lazy;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -87,5 +89,12 @@
         oaApprovalApplicationDisposeService.deleteByApplicationId(id);
         return R.ok();
     }
+
+    @ApiOperation("获取资产处置申请详情")
+    @GetMapping("/detail/{id}")
+    public R<OaApprovalApplicationDisposeDetailVO> getDisposeDetail(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) {
+        OaApprovalApplicationDisposeDetailVO detail = oaApprovalApplicationDisposeService.getDisposeDetail(id);
+        return R.ok(detail);
+    }
 }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java
new file mode 100644
index 0000000..04cb751
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.dto.asset;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 资产变更申请DTO
+ * @author mitao
+ * @date 2025/9/29
+ */
+@Data
+@ApiModel("资产变更申请DTO")
+public class OaApprovalApplicationChangeDTO {
+
+    @ApiModelProperty("事项标题")
+    @NotNull(message = "事项标题不能为空")
+    private String title;
+
+    @ApiModelProperty("资产类型ID")
+    @NotNull(message = "资产类型不能为空")
+    private Integer assetTypeId;
+
+    @ApiModelProperty("变更日期")
+    @NotNull(message = "变更日期不能为空")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate changeTime;
+
+    @ApiModelProperty("变更备注")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
+    @NotNull(message = "使用/位置类型不能为空")
+    private Integer addressType;
+
+    @ApiModelProperty(value = "使用部门ID")
+    private Integer useDeptId;
+
+    @ApiModelProperty(value = "仓库ID")
+    private Integer warehouseId;
+
+    @ApiModelProperty(value = "所在位置")
+    private String address;
+
+    @ApiModelProperty(value = "管理部门ID")
+    @NotNull(message = "管理部门不能为空")
+    private Integer  ownershipDeptId;
+
+    @ApiModelProperty(value = "使用人")
+    @NotBlank(message = "使用人不能为空")
+    private String userName;
+
+    @ApiModelProperty("资产列表")
+    @NotEmpty(message = "资产列表不能为空")
+    private List<Integer> assetMainIds;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java
similarity index 97%
rename from ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java
index 9b75f6b..71500ff 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.dto.dispose;
+package com.ruoyi.system.dto.asset;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
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 7e64a27..d434cb9 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
@@ -55,7 +55,7 @@
 
         @ApiModelProperty(value = "数量")
         @NotNull(message = "数量不能为空")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         @NotNull(message = "单价不能为空")
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 c1a0677..02e2cd3 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
@@ -55,7 +55,7 @@
 
         @ApiModelProperty(value = "数量")
         @NotNull(message = "数量不能为空")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         @NotNull(message = "单价不能为空")
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 73e8116..f6533bd 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
@@ -55,7 +55,7 @@
 
         @ApiModelProperty(value = "数量")
         @NotNull(message = "数量不能为空")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         @NotNull(message = "单价不能为空")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java
index 11c4eaa..1cb3240 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java
@@ -1,7 +1,11 @@
 package com.ruoyi.system.mapper;
 
-import com.ruoyi.system.model.OaApprovalApplicationChange;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.system.model.OaApprovalApplicationChange;
+import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,12 @@
  */
 public interface OaApprovalApplicationChangeMapper extends BaseMapper<OaApprovalApplicationChange> {
 
+    /**
+     * 分页查询资产变更申请列表
+     * @param page 分页参数
+     * @param pageQuery 查询条件
+     * @return 分页结果
+     */
+    IPage<OaApprovalApplicationChangePageVO> selectChangePage(IPage<OaApprovalApplicationChangePageVO> page, @Param("query") OaApprovalApplicationChangePageQuery pageQuery);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java
index 8211d62..a8081e6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java
@@ -5,7 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.model.OaApprovalApplicationDispose;
 import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery;
-import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO;
 import org.apache.ibatis.annotations.Param;
 
 /**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java
index 5d35924..6c79c4f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java
@@ -52,12 +52,16 @@
     @TableField("ownership_dept_id")
     private Integer ownershipDeptId;
 
-    @ApiModelProperty(value = "仓库ID,关联warehouse表")
-    @TableField("warehouse_id")
+    @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
+    private Integer addressType;
+
+    @ApiModelProperty(value = "使用部门ID")
+    private Integer useDeptId;
+
+    @ApiModelProperty(value = "仓库ID")
     private Integer warehouseId;
 
-    @ApiModelProperty(value = "存放地点")
-    @TableField("address")
+    @ApiModelProperty(value = "所在位置")
     private String address;
 
     @ApiModelProperty(value = "使用人")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java
index dac7d99..4ae5eaf 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java
@@ -64,7 +64,7 @@
     private String measurementUnit;
 
     @ApiModelProperty(value = "数量")
-    private BigDecimal quantity;
+    private Integer quantity;
 
     @ApiModelProperty(value = "单价")
     private BigDecimal unitPrice;
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
index 7414d54..f741625 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java
@@ -23,5 +23,8 @@
 
     @ApiModelProperty("操作类型 前端不传")
     private Integer type; // 0-领用,1-借用,2-归还
+
+    @ApiModelProperty("是否查询归还提醒 前端不传")
+    private Integer returnNotify = 0;
 }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java
new file mode 100644
index 0000000..fc57489
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.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(value = "资产变更申请分页查询参数")
+public class OaApprovalApplicationChangePageQuery extends BasePage {
+
+    private static final long serialVersionUID = 5275799518107306565L;
+
+    @ApiModelProperty(value = "标题/单号")
+    private String keyword;
+
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptId;
+}
\ No newline at end of file
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 f06d353..242d43c 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
@@ -98,4 +98,6 @@
      * @param applicationId
      */
     void deleteByApplicationId(Integer applicationId);
+
+    OaApprovalApplicationAsset getOaApprovalApplicationAssetByApplicationId(Integer applicationId);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java
index 743cc8f..3c36eb6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java
@@ -1,7 +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.dto.asset.OaApprovalApplicationChangeDTO;
 import com.ruoyi.system.model.OaApprovalApplicationChange;
+import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO;
 
 /**
  * <p>
@@ -13,4 +18,29 @@
  */
 public interface OaApprovalApplicationChangeService extends IService<OaApprovalApplicationChange> {
 
+    /**
+     * 提交变更申请
+     * @param dto 变更申请数据
+     */
+    void submitChange(OaApprovalApplicationChangeDTO dto);
+
+    /**
+     * 获取资产变更申请分页列表
+     * @param pageQuery 分页查询参数
+     * @return 分页结果
+     */
+    IPage<OaApprovalApplicationChangePageVO> getChangePageList(OaApprovalApplicationChangePageQuery pageQuery);
+
+    /**
+     * 获取资产变更申请详情
+     * @param id 申请单ID
+     * @return 详情信息
+     */
+    OaApprovalApplicationChangeDetailVO getChangeDetail(Integer id);
+
+    /**
+     * 删除资产变更申请
+     * @param id
+     */
+    void deleteByApplicationId(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java
index 2824162..dab3ce2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java
@@ -2,10 +2,11 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.system.dto.dispose.OaApprovalApplicationDisposeDTO;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO;
 import com.ruoyi.system.model.OaApprovalApplicationDispose;
 import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery;
-import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO;
 
 /**
  * <p>
@@ -35,4 +36,11 @@
      * @param applicationId
      */
     void deleteByApplicationId(Integer applicationId);
+
+    /**
+     * 获取处置申请详情
+     * @param id 申请单ID
+     * @return 处置申请详情
+     */
+    OaApprovalApplicationDisposeDetailVO getDisposeDetail(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
index db13495..3a144ff 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
@@ -41,11 +41,12 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -115,20 +116,45 @@
             return;
         }
         
+        List<AssetMain> assetMainList = new ArrayList<>();
+        Map<Integer, Integer> storageAssetIdToAssetMainIdMap = new HashMap<>();
+        Map<Integer, Integer> storageAssetIdToAssetTypeMap = new HashMap<>();
+        
+        // 预查询当天已存在的资产编码数量
+        LocalDate currentDate = LocalDate.now();
+        Map<Integer, Long> assetTypeCountMap = new HashMap<>();
+        
         for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) {
+            Integer assetTypeId = storageAsset.getAssetTypeId();
             Integer assetMainType = storageAsset.getAssetMainType();
-            BigDecimal quantity = storageAsset.getQuantity();
+            Integer quantity = storageAsset.getQuantity();
             
             // 根据数量生成对应条数的资产记录
-            int assetCount = quantity != null ? quantity.intValue() : 1;
+            int assetCount = quantity != null ? quantity : 1;
+            
+            // 获取该类型资产的编码前缀和当前数量
+            String typeCodePrefix = assetTypeService.getAssetCodePrefix(assetTypeId);
+            String dateStr = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+            String prefix = typeCodePrefix + dateStr + "-";
+            
+            // 获取当天该类型资产的当前数量(只查询一次)
+            Long currentCount = assetTypeCountMap.computeIfAbsent(assetTypeId, k -> 
+                this.lambdaQuery()
+                    .like(AssetMain::getAssetCode, prefix)
+                    .ge(AssetMain::getCreateTime, currentDate.atStartOfDay())
+                    .lt(AssetMain::getCreateTime, currentDate.plusDays(1).atStartOfDay())
+                    .count()
+            );
             
             for (int i = 0; i < assetCount; i++) {
                 // 创建资产主表记录
                 AssetMain assetMain = new AssetMain();
-                BeanUtil.copyProperties(storageAsset, assetMain);
+                BeanUtil.copyProperties(storageAsset, assetMain, "id");
                 
-                // 为每个资产生成编码
-                String assetCode = generateAssetCode(storageAsset.getAssetTypeId(), LocalDate.now());
+                // 生成资产编码,使用递增的序号
+                int sequence = (currentCount != null ? currentCount.intValue() : 0) + i + 1;
+                String sequenceStr = String.format("%04d", sequence);
+                String assetCode = prefix + sequenceStr;
                 assetMain.setAssetCode(assetCode);
                 
                 // 单个资产的数量设为1
@@ -141,66 +167,102 @@
                 assetMain.setCreateBy(SecurityUtils.getUsername());
                 assetMain.setDisabled(false);
                 
-                // 保存资产主表
-                assetMainMapper.insert(assetMain);
+                assetMainList.add(assetMain);
                 
-                // 2. 根据资产类型保存扩展信息
-                if (assetMainType != null) {
-                    if (assetMainType == 1) {
-                        // 房产资产 - 保存房产扩展信息
-                        savePropertyExtension(storageAsset.getId(), assetMain.getId());
-                    } else if (assetMainType == 2) {
-                        // 车辆资产 - 保存车辆扩展信息
-                        saveVehicleExtension(storageAsset.getId(), assetMain.getId());
-                    }
-                    // assetMainType == 0 为通用资产,无需保存扩展信息
-                }
+                // 记录storageAssetId和资产类型的映射关系,用于后续创建扩展信息
+                storageAssetIdToAssetTypeMap.put(storageAsset.getId(), assetMainType);
+            }
+            
+            // 更新计数器,确保下一个storageAsset的编码序号正确
+            if (currentCount != null) {
+                assetTypeCountMap.put(assetTypeId, currentCount + assetCount);
             }
         }
-    }
-    
-    /**
-     * 保存房产资产扩展信息
-     */
-    private void savePropertyExtension(Integer storageAssetId, Integer assetMainId) {
-        // 查询房产扩展信息
-        OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper
-                .selectOne(new LambdaQueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>()
-                        .eq(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetId));
         
-        if (propertyExt != null) {
-            AssetPropertyExt assetPropertyExt = new AssetPropertyExt();
-            BeanUtil.copyProperties(propertyExt, assetPropertyExt);
-            assetPropertyExt.setAssetMainId(assetMainId);
-            assetPropertyExt.setCreateTime(LocalDateTime.now());
-            assetPropertyExt.setCreateBy(SecurityUtils.getUsername());
-            assetPropertyExt.setDisabled(false);
+        // 批量保存资产主表
+        if (!assetMainList.isEmpty()) {
+            this.saveBatch(assetMainList);
             
-            assetPropertyExtMapper.insert(assetPropertyExt);
+            // 建立storageAssetId到assetMainId的映射关系
+            int assetMainIndex = 0;
+            for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) {
+                int quantity = storageAsset.getQuantity() != null ? storageAsset.getQuantity() : 1;
+                for (int i = 0; i < quantity; i++) {
+                    if (assetMainIndex < assetMainList.size()) {
+                        storageAssetIdToAssetMainIdMap.put(storageAsset.getId(), assetMainList.get(assetMainIndex).getId());
+                        assetMainIndex++;
+                    }
+                }
+            }
+            
+            // 准备并保存扩展信息
+            saveExtensionInfoBatch(storageAssetIdToAssetMainIdMap, storageAssetIdToAssetTypeMap);
         }
     }
     
     /**
-     * 保存车辆资产扩展信息
+     * 批量保存扩展信息
      */
-    private void saveVehicleExtension(Integer storageAssetId, Integer assetMainId) {
-        // 查询车辆扩展信息
-        OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper
-                .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>()
-                        .eq("storage_asset_id", storageAssetId));
+    private void saveExtensionInfoBatch(Map<Integer, Integer> storageAssetIdToAssetMainIdMap, Map<Integer, Integer> storageAssetIdToAssetTypeMap) {
+        List<AssetPropertyExt> propertyExtList = new ArrayList<>();
+        List<AssetVehicleExt> vehicleExtList = new ArrayList<>();
         
-        if (vehicleExt != null) {
-            AssetVehicleExt assetVehicleExt = new AssetVehicleExt();
-            BeanUtil.copyProperties(vehicleExt, assetVehicleExt);
-            assetVehicleExt.setAssetMainId(assetMainId);
-            assetVehicleExt.setCreateTime(LocalDateTime.now());
-            assetVehicleExt.setCreateBy(SecurityUtils.getUsername());
-            assetVehicleExt.setDisabled(false);
+        // 遍历所有需要扩展信息的storageAsset
+        for (Map.Entry<Integer, Integer> entry : storageAssetIdToAssetMainIdMap.entrySet()) {
+            Integer storageAssetId = entry.getKey();
+            Integer assetMainId = entry.getValue();
+            Integer assetMainType = storageAssetIdToAssetTypeMap.get(storageAssetId);
             
-            assetVehicleExtMapper.insert(assetVehicleExt);
+            if (assetMainType == null) {
+                continue;
+            }
+            
+            if (assetMainType == 1) {
+                // 房产资产 - 查询并准备房产扩展信息
+                OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper
+                        .selectOne(new LambdaQueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>()
+                                .eq(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetId));
+                
+                if (propertyExt != null) {
+                    AssetPropertyExt assetPropertyExt = new AssetPropertyExt();
+                    BeanUtil.copyProperties(propertyExt, assetPropertyExt,"id");
+                    assetPropertyExt.setAssetMainId(assetMainId);
+                    assetPropertyExt.setCreateTime(LocalDateTime.now());
+                    assetPropertyExt.setCreateBy(SecurityUtils.getUsername());
+                    assetPropertyExt.setDisabled(false);
+                    
+                    propertyExtList.add(assetPropertyExt);
+                }
+            } else if (assetMainType == 2) {
+                // 车辆资产 - 查询并准备车辆扩展信息
+                OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper
+                        .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>()
+                                .eq("storage_asset_id", storageAssetId));
+                
+                if (vehicleExt != null) {
+                    AssetVehicleExt assetVehicleExt = new AssetVehicleExt();
+                    BeanUtil.copyProperties(vehicleExt, assetVehicleExt,"id");
+                    assetVehicleExt.setAssetMainId(assetMainId);
+                    assetVehicleExt.setCreateTime(LocalDateTime.now());
+                    assetVehicleExt.setCreateBy(SecurityUtils.getUsername());
+                    assetVehicleExt.setDisabled(false);
+                    
+                    vehicleExtList.add(assetVehicleExt);
+                }
+            }
+            // assetMainType == 0 为通用资产,无需保存扩展信息
+        }
+        
+        // 批量保存扩展信息
+        if (!propertyExtList.isEmpty()) {
+            assetPropertyExtService.saveBatch(propertyExtList);
+        }
+        if (!vehicleExtList.isEmpty()) {
+            assetVehicleExtService.saveBatch(vehicleExtList);
         }
     }
-
+    
+    
     @Override
     public List<AssetMainVO> getListByIds(List<Integer> assetMainIds) {
         if (!CollectionUtils.isEmpty(assetMainIds)) {
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 36986e6..0f91b35 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
@@ -166,7 +166,7 @@
         if (app == null) {
             throw new ServiceException("审批主记录不存在");
         }
-        OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one();
+        OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId());
         if (detail == null) {
             throw new ServiceException("记录不存在");
         }
@@ -198,7 +198,7 @@
         if (app == null) {
             throw new ServiceException("审批主记录不存在");
         }
-        OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one();
+        OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId());
         if (detail == null) {
             throw new ServiceException("记录不存在");
         }
@@ -228,6 +228,7 @@
         vo.setAssetTypeId(detail.getAssetTypeId());
         vo.setOperateTime(detail.getOperateTime());
         vo.setExpectReturnDate(detail.getExpectReturnDate());
+        vo.setReturnStatus(detail.getReturnStatus());
         vo.setItems(assetMainVOS);
         return vo;
     }
@@ -266,6 +267,7 @@
         OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class);
         applications.setApplicationCode(generateApplicationCode("GH"));
         applications.setApprovalId(ApprovalTypeEnum.RETURN.getCode());
+        applications.setApplicationDate(LocalDate.now());
 
         // 2. 获取流程首节点,设置当前节点,并保存
         OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.RETURN.getCode());
@@ -308,11 +310,14 @@
     @Override
     public IPage<OaApprovalApplicationAssetPageVO> getReturnNotifyPageList(OaApprovalApplicationAssetPageQuery pageQuery) {
         Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
-        pageQuery.setType(AssetOperateTypeEnum.RETURN.getCode());
+        pageQuery.setType(AssetOperateTypeEnum.BORROW.getCode());
+        pageQuery.setReturnNotify(1);
         IPage<OaApprovalApplicationAssetPageVO> pageByType = this.baseMapper.getPageByType(page, pageQuery);
         LocalDate toDay = LocalDate.now();
         pageByType.getRecords().forEach(item->{
-            item.setDueDays(toDay.until(item.getExpectReturnDate()).getDays());
+            if (Objects.nonNull(item.getExpectReturnDate())) {
+                item.setDueDays(toDay.until(item.getExpectReturnDate()).getDays());
+            }
         });
         return pageByType;
     }
@@ -323,11 +328,17 @@
         if (app == null) {
             throw new ServiceException("审批主记录不存在");
         }
-        OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one();
+        OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(id);
         if (detail == null) {
             throw new ServiceException("记录不存在");
         }
         oaApprovalApplicationsService.assembleApplicationDetail(app);
+        //查询借用申请单
+        OaApprovalApplications borrowApprovalApplication = oaApprovalApplicationsService.getById(detail.getBorrowApplicationId());
+        OaApprovalApplicationAsset borrowApprovalApplicationAsset = null;
+        if (Objects.nonNull(borrowApprovalApplication)) {
+            borrowApprovalApplicationAsset = getOaApprovalApplicationAssetByApplicationId(borrowApprovalApplication.getId());
+        }
         List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
                 .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
                 .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
@@ -335,9 +346,12 @@
 
         List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds);
         OaApprovalApplicationAssetDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationAssetDetailVO.class);
+
         vo.setTitle(detail.getTitle());
         vo.setAssetTypeId(detail.getAssetTypeId());
         vo.setOperateTime(detail.getOperateTime());
+        vo.setBorrowDate(Objects.nonNull(borrowApprovalApplicationAsset) ? borrowApprovalApplicationAsset.getOperateTime() : null);
+        vo.setReturnStatus(detail.getReturnStatus());
         vo.setItems(assetMainVOS);
         return vo;
     }
@@ -348,4 +362,9 @@
         oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove();
         oaApprovalApplicationsService.removeById(applicationId);
     }
+
+    @Override
+    public OaApprovalApplicationAsset getOaApprovalApplicationAssetByApplicationId(Integer applicationId) {
+        return this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, applicationId).one();
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java
index 5ded75c..e73f360 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java
@@ -1,10 +1,40 @@
 package com.ruoyi.system.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+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.OaApprovalApplicationChangeDTO;
+import com.ruoyi.system.emums.ApprovalStatusEnum;
+import com.ruoyi.system.emums.ApprovalTypeEnum;
 import com.ruoyi.system.mapper.OaApprovalApplicationChangeMapper;
+import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
 import com.ruoyi.system.model.OaApprovalApplicationChange;
+import com.ruoyi.system.model.OaApprovalApplications;
+import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery;
+import com.ruoyi.system.service.AssetMainService;
+import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
 import com.ruoyi.system.service.OaApprovalApplicationChangeService;
+import com.ruoyi.system.service.OaApprovalApplicationsService;
+import com.ruoyi.system.service.OaApprovalFlowNodeService;
+import com.ruoyi.system.service.OaApprovalTodoService;
+import com.ruoyi.system.vo.asset.AssetMainVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -15,6 +45,136 @@
  * @since 2025-09-15
  */
 @Service
+@RequiredArgsConstructor
 public class OaApprovalApplicationChangeServiceImpl extends ServiceImpl<OaApprovalApplicationChangeMapper, OaApprovalApplicationChange> implements OaApprovalApplicationChangeService {
 
+    private final OaApprovalApplicationsService oaApprovalApplicationsService;
+    private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
+    private final OaApprovalTodoService oaApprovalTodoService;
+    private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService;
+    private final AssetMainService assetMainService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitChange(OaApprovalApplicationChangeDTO dto) {
+        if (CollUtil.isEmpty(dto.getAssetMainIds())) {
+            throw new ServiceException("资产ID列表不能为空");
+        }
+        
+        // 1. 构建并保存审批主表
+        OaApprovalApplications applications = buildOaApprovalApplications(dto);
+
+        // 2. 获取流程首节点,设置当前节点,并保存
+        OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.ASSET_CHANGE.getCode());
+        applications.setCurrentFlowNodeId(firstFlowNode.getId());
+        oaApprovalApplicationsService.save(applications);
+
+        // 3. 创建待办
+        oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getOwnershipDeptId());
+
+        // 4. 保存变更明细
+        OaApprovalApplicationChange detail = buildOaApprovalApplicationChange(dto, applications.getId());
+        this.save(detail);
+
+        // 5. 保存关联的资产项
+        List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream()
+                .map(i -> {
+                    OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem();
+                    item.setApprovalApplicationId(applications.getId());
+                    item.setAssetMainId(i);
+                    return item;
+                })
+                .collect(Collectors.toList());
+        oaApprovalApplicationAssetItemService.saveBatch(items);
+    }
+
+    private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationChangeDTO dto) {
+        OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class);
+        applications.setApplicationCode(generateApplicationCode("BG"));
+        applications.setApprovalId(ApprovalTypeEnum.ASSET_CHANGE.getCode());
+        applications.setApplicationDate(LocalDate.now());
+        applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode());
+        return applications;
+    }
+
+    private OaApprovalApplicationChange buildOaApprovalApplicationChange(OaApprovalApplicationChangeDTO dto, Integer applicationId) {
+        OaApprovalApplicationChange change = BeanUtil.copyProperties(dto, OaApprovalApplicationChange.class);
+        change.setApprovalApplicationId(applicationId);
+        return change;
+    }
+
+    private OaApprovalFlowNode getFirstFlowNode(Integer approvalId) {
+        List<OaApprovalFlowNode> flowNodes = oaApprovalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, approvalId)
+                .eq(OaApprovalFlowNode::getStatus, 1)
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .list();
+        if (CollectionUtils.isEmpty(flowNodes)) {
+            throw new ServiceException("未找到有效的审批流程配置");
+        }
+        return flowNodes.get(0);
+    }
+
+    /**
+     * 生成申请单号:BG + yyyyMMdd + 3位序号
+     */
+    private String generateApplicationCode(String prefix) {
+        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        prefix = prefix + dateStr;
+        Long count = oaApprovalApplicationsService.lambdaQuery()
+                .like(OaApprovalApplications::getApplicationCode, prefix)
+                .count();
+        return prefix + String.format("%03d", count + 1);
+    }
+
+    @Override
+    public IPage<OaApprovalApplicationChangePageVO> getChangePageList(OaApprovalApplicationChangePageQuery pageQuery) {
+        Page<OaApprovalApplicationChangePageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+        return this.baseMapper.selectChangePage(page, pageQuery);
+    }
+
+    @Override
+    public OaApprovalApplicationChangeDetailVO getChangeDetail(Integer id) {
+        OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+        if (app == null) {
+            throw new ServiceException("审批主记录不存在");
+        }
+        OaApprovalApplicationChange detail = this.lambdaQuery().eq(OaApprovalApplicationChange::getApprovalApplicationId, app.getId()).one();
+        if (detail == null) {
+            throw new ServiceException("记录不存在");
+        }
+        oaApprovalApplicationsService.assembleApplicationDetail(app);
+        List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+                .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+                .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+                .distinct().collect(Collectors.toList());
+
+        List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds);
+        OaApprovalApplicationChangeDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationChangeDetailVO.class);
+        vo.setTitle(detail.getTitle());
+        vo.setAssetTypeId(detail.getAssetTypeId());
+        vo.setAddressType(detail.getAddressType());
+        vo.setUseDeptId(detail.getUseDeptId());
+        vo.setWarehouseId(detail.getWarehouseId());
+        vo.setAddress(detail.getAddress());
+        vo.setOwnershipDeptId(detail.getOwnershipDeptId());
+        vo.setUserName(detail.getUserName());
+        vo.setItems(assetMainVOS);
+        return vo;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteByApplicationId(Integer id) {
+        OaApprovalApplications applications = oaApprovalApplicationsService.getById(id);
+        if (Objects.isNull(applications)) {
+            throw new ServiceException("申请记录不存在");
+        }
+        if (!applications.getApprovalStatus().equals(ApprovalStatusEnum.REFUSED.getCode())) {
+            throw new ServiceException("该申请不能删除");
+        }
+        this.lambdaUpdate().eq(OaApprovalApplicationChange::getApprovalApplicationId, id).remove();
+        oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, id).remove();
+        oaApprovalApplicationsService.removeById(id);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
index edd5be5..6659bdc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
@@ -6,7 +6,7 @@
 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.dispose.OaApprovalApplicationDisposeDTO;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO;
 import com.ruoyi.system.emums.ApprovalStatusEnum;
 import com.ruoyi.system.emums.ApprovalTypeEnum;
 import com.ruoyi.system.mapper.OaApprovalApplicationDisposeMapper;
@@ -15,12 +15,15 @@
 import com.ruoyi.system.model.OaApprovalApplications;
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery;
+import com.ruoyi.system.service.AssetMainService;
 import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
 import com.ruoyi.system.service.OaApprovalApplicationDisposeService;
 import com.ruoyi.system.service.OaApprovalApplicationsService;
 import com.ruoyi.system.service.OaApprovalFlowNodeService;
 import com.ruoyi.system.service.OaApprovalTodoService;
-import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO;
+import com.ruoyi.system.vo.asset.AssetMainVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,6 +31,7 @@
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -47,6 +51,7 @@
     private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
     private final OaApprovalTodoService oaApprovalTodoService;
     private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService;
+    private final AssetMainService assetMainService;
 
     @Override
     public IPage<OaApprovalApplicationDisposePageVO> getDisposePageList(OaApprovalApplicationDisposePageQuery pageQuery) {
@@ -133,4 +138,31 @@
         oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove();
         oaApprovalApplicationsService.removeById(applicationId);
     }
+
+    @Override
+    public OaApprovalApplicationDisposeDetailVO getDisposeDetail(Integer id) {
+        OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+        if (app == null) {
+            throw new ServiceException("审批主记录不存在");
+        }
+        OaApprovalApplicationDispose detail = this.lambdaQuery().eq(OaApprovalApplicationDispose::getApprovalApplicationId, app.getId()).one();
+        if (detail == null) {
+            throw new ServiceException("记录不存在");
+        }
+        oaApprovalApplicationsService.assembleApplicationDetail(app);
+        List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+                .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+                .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+                .distinct().collect(Collectors.toList());
+
+        List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds);
+        OaApprovalApplicationDisposeDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationDisposeDetailVO.class);
+        vo.setTitle(detail.getTitle());
+        vo.setAssetTypeId(detail.getAssetTypeId());
+        vo.setDisposeTime(detail.getDisposeTime());
+        vo.setDisposeType(detail.getDisposeType());
+        vo.setDisposeTotalAmount(detail.getDisposeTotalAmount());
+        vo.setItems(assetMainVOS);
+        return vo;
+    }
 }
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 8482ca5..97d8f45 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
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -38,6 +39,7 @@
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePropertyDetailVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageVehicleDetailVO;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -213,16 +215,9 @@
      * 构建通用资产主表数据
      */
     private OaApprovalApplicationStorageAsset buildAssetMain(OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStorageGeneralDTO baseDto) {
-        OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset();
-        assetMain.setApprovalApplicationId(applicationId.intValue());
-        assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
-        assetMain.setAssetName(item.getAssetName());
-        assetMain.setCategory(item.getCategory());
-        assetMain.setSpecificationModel(item.getSpecificationModel());
+        OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class);
+        assetMain.setApprovalApplicationId(applicationId);
         assetMain.setAssetTypeId(assetTypeId);
-        assetMain.setMeasurementUnit(item.getMeasurementUnit());
-        assetMain.setUnitPrice(item.getUnitPrice());
-        assetMain.setUsefulLife(item.getUsefulLife());
         // 根据权属单位/部门名称填充ID
         if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
             TDept ownerDept = tDeptService.lambdaQuery()
@@ -232,19 +227,9 @@
                 assetMain.setOwnershipDeptId(ownerDept.getId());
             }
         }
-        assetMain.setUserName(item.getUserName());
         // 根据整单 addressType 写入使用部门ID或仓库ID
         applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress());
-        assetMain.setAddressType(item.getAddressType());
         assetMain.setAssetMainType(AssetTypeEnum.GENERAL.getCode());
-        assetMain.setAssetStatus(item.getAssetStatus());
-        assetMain.setRemarks(item.getRemarks());
-        assetMain.setAccountingStatus(item.getAccountingStatus());
-        assetMain.setAccountingDate(item.getAccountingDate());
-        assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo());
-        assetMain.setAccountingSubject(item.getAccountingSubject());
-        assetMain.setAccountingAmount(item.getAccountingAmount());
-        assetMain.setDisabled(false);
         return assetMain;
     }
 
@@ -252,16 +237,9 @@
      * 构建房产资产主表数据
      */
     private OaApprovalApplicationStorageAsset buildAssetMainFromProperty(OaApprovalApplicationStoragePropertyDTO.PropertyAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStoragePropertyDTO baseDto) {
-        OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset();
-        assetMain.setApprovalApplicationId(applicationId.intValue());
-        assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
-        assetMain.setAssetName(item.getAssetName());
-        assetMain.setCategory(item.getCategory());
-        assetMain.setSpecificationModel(item.getSpecificationModel());
+        OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class);
+        assetMain.setApprovalApplicationId(applicationId);
         assetMain.setAssetTypeId(assetTypeId);
-        assetMain.setMeasurementUnit(item.getMeasurementUnit());
-        assetMain.setUnitPrice(item.getUnitPrice());
-        assetMain.setUsefulLife(item.getUsefulLife());
         if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
             TDept ownerDept = tDeptService.lambdaQuery()
                     .eq(TDept::getDeptName, item.getOwnershipDeptName())
@@ -270,18 +248,8 @@
                 assetMain.setOwnershipDeptId(ownerDept.getId());
             }
         }
-        assetMain.setUserName(item.getUserName());
         applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress());
-        assetMain.setAddressType(item.getAddressType());
         assetMain.setAssetMainType(AssetTypeEnum.HOUSE.getCode());
-        assetMain.setAssetStatus(item.getAssetStatus());
-        assetMain.setRemarks(item.getRemarks());
-        assetMain.setAccountingStatus(item.getAccountingStatus());
-        assetMain.setAccountingDate(item.getAccountingDate());
-        assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo());
-        assetMain.setAccountingSubject(item.getAccountingSubject());
-        assetMain.setAccountingAmount(item.getAccountingAmount());
-        assetMain.setDisabled(false);
         return assetMain;
     }
 
@@ -289,16 +257,9 @@
      * 构建车辆资产主表数据
      */
     private OaApprovalApplicationStorageAsset buildAssetMainFromVehicle(OaApprovalApplicationStorageVehicleDTO.VehicleAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStorageVehicleDTO baseDto) {
-        OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset();
-        assetMain.setApprovalApplicationId(applicationId.intValue());
-        assetMain.setAssetOriginalCode(item.getAssetOriginalCode());
-        assetMain.setAssetName(item.getAssetName());
-        assetMain.setCategory(item.getCategory());
-        assetMain.setSpecificationModel(item.getSpecificationModel());
+        OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class);
+        assetMain.setApprovalApplicationId(applicationId);
         assetMain.setAssetTypeId(assetTypeId);
-        assetMain.setMeasurementUnit(item.getMeasurementUnit());
-        assetMain.setUnitPrice(item.getUnitPrice());
-        assetMain.setUsefulLife(item.getUsefulLife());
         if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) {
             TDept ownerDept = tDeptService.lambdaQuery()
                     .eq(TDept::getDeptName, item.getOwnershipDeptName())
@@ -307,18 +268,8 @@
                 assetMain.setOwnershipDeptId(ownerDept.getId());
             }
         }
-        assetMain.setUserName(item.getUserName());
         applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress());
-        assetMain.setAddressType(item.getAddressType());
         assetMain.setAssetMainType(AssetTypeEnum.VEHICLE.getCode());
-        assetMain.setAssetStatus(item.getAssetStatus());
-        assetMain.setRemarks(item.getRemarks());
-        assetMain.setAccountingStatus(item.getAccountingStatus());
-        assetMain.setAccountingDate(item.getAccountingDate());
-        assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo());
-        assetMain.setAccountingSubject(item.getAccountingSubject());
-        assetMain.setAccountingAmount(item.getAccountingAmount());
-        assetMain.setDisabled(false);
         return assetMain;
     }
 
@@ -368,25 +319,8 @@
      * 构建房产资产扩展数据
      */
     private OaApprovalApplicationStorageAssetPropertyExt buildAssetPropertyExt(OaApprovalApplicationStoragePropertyDTO.PropertyAssetItemDTO item, Integer assetMainId) {
-        OaApprovalApplicationStorageAssetPropertyExt propertyExt = new OaApprovalApplicationStorageAssetPropertyExt();
+        OaApprovalApplicationStorageAssetPropertyExt propertyExt = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAssetPropertyExt.class);
         propertyExt.setStorageAssetId(assetMainId);
-        propertyExt.setRegion(item.getRegion());
-        propertyExt.setDesignPurpose(item.getDesignPurpose());
-        propertyExt.setBuilding(item.getBuilding());
-        propertyExt.setRoomNumber(item.getRoomNumber());
-        propertyExt.setConstructionArea(item.getConstructionArea());
-        propertyExt.setStructureType(item.getStructureType());
-        propertyExt.setCertificateNumber(item.getCertificateNumber());
-        propertyExt.setCompletionDate(item.getCompletionDate());
-        propertyExt.setDetailedLocation(item.getDetailedLocation());
-        propertyExt.setProvincialPlatformValue(item.getProvincialPlatformValue());
-        propertyExt.setResettlementSituation(item.getResettlementSituation());
-        propertyExt.setMortgaged(item.getMortgaged());
-        propertyExt.setTenantName(item.getTenantName());
-        propertyExt.setRentalAmount(item.getRentalAmount());
-        propertyExt.setLeaseStartDate(item.getLeaseStartDate());
-        propertyExt.setLeaseEndDate(item.getLeaseEndDate());
-        propertyExt.setDisabled(false);
         return propertyExt;
     }
 
@@ -394,17 +328,8 @@
      * 构建车辆资产扩展数据
      */
     private OaApprovalApplicationStorageAssetVehicleExt buildAssetVehicleExt(OaApprovalApplicationStorageVehicleDTO.VehicleAssetItemDTO item, Integer assetMainId) {
-        OaApprovalApplicationStorageAssetVehicleExt vehicleExt = new OaApprovalApplicationStorageAssetVehicleExt();
+        OaApprovalApplicationStorageAssetVehicleExt vehicleExt = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAssetVehicleExt.class);
         vehicleExt.setStorageAssetId(assetMainId);
-        vehicleExt.setLicensePlate(item.getLicensePlate());
-        vehicleExt.setVinCode(item.getVinCode());
-        vehicleExt.setEngineNumber(item.getEngineNumber());
-        vehicleExt.setDisplacement(item.getDisplacement());
-        vehicleExt.setStaffingSituation(item.getStaffingSituation());
-        vehicleExt.setOrigin(item.getOrigin());
-        vehicleExt.setAcquisitionDate(item.getAcquisitionDate());
-        vehicleExt.setPropertyRightForm(item.getPropertyRightForm());
-        vehicleExt.setDisabled(false);
         return vehicleExt;
     }
 
@@ -431,39 +356,20 @@
      */
     private OaApprovalApplications buildOaApprovalApplications(Object dto) {
         OaApprovalApplications applications = new OaApprovalApplications();
-        applications.setApprovalId(ApprovalTypeEnum.IN_STOCK.getCode());
-        applications.setApplicationDate(LocalDate.now());
+
         if (dto instanceof OaApprovalApplicationStorageGeneralDTO) {
             OaApprovalApplicationStorageGeneralDTO generalDTO = (OaApprovalApplicationStorageGeneralDTO) dto;
-            applications.setApplicantUserId(generalDTO.getApplicantUserId());
-            applications.setApplicantName(generalDTO.getApplicantName());
-            applications.setDeptId(generalDTO.getDeptId());
-            applications.setDeptName(generalDTO.getDeptName());
-            applications.setApplicationDate(LocalDate.now());
-            applications.setApplicationReason(generalDTO.getApplicationReason());
-            applications.setAttachmentUrl(generalDTO.getAttachmentUrl());
+            BeanUtils.copyProperties(generalDTO, applications);
         } else if (dto instanceof OaApprovalApplicationStoragePropertyDTO) {
             OaApprovalApplicationStoragePropertyDTO propertyDTO = (OaApprovalApplicationStoragePropertyDTO) dto;
-            applications.setApplicantUserId(propertyDTO.getApplicantUserId());
-            applications.setApplicantName(propertyDTO.getApplicantName());
-            applications.setDeptId(propertyDTO.getDeptId());
-            applications.setDeptName(propertyDTO.getDeptName());
-            applications.setApplicationDate(LocalDate.now());
-            applications.setApplicationReason(propertyDTO.getApplicationReason());
-            applications.setAttachmentUrl(propertyDTO.getAttachmentUrl());
+            BeanUtils.copyProperties(propertyDTO, applications);
         } else if (dto instanceof OaApprovalApplicationStorageVehicleDTO) {
             OaApprovalApplicationStorageVehicleDTO vehicleDTO = (OaApprovalApplicationStorageVehicleDTO) dto;
-            applications.setApplicantUserId(vehicleDTO.getApplicantUserId());
-            applications.setApplicantName(vehicleDTO.getApplicantName());
-            applications.setDeptId(vehicleDTO.getDeptId());
-            applications.setDeptName(vehicleDTO.getDeptName());
-            applications.setApplicationDate(LocalDate.now());
-            applications.setApplicationReason(vehicleDTO.getApplicationReason());
-            applications.setAttachmentUrl(vehicleDTO.getAttachmentUrl());
+            BeanUtils.copyProperties(vehicleDTO, applications);
         }
-        
+        applications.setApprovalId(ApprovalTypeEnum.IN_STOCK.getCode());
+        applications.setApplicationDate(LocalDate.now());
         applications.setApplicationCode(generateApplicationCode());
-        applications.setDisabled(0);
         applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode());
         return applications;
     }
@@ -473,26 +379,17 @@
      */
     private OaApprovalApplicationStorage buildOaApprovalApplicationStorage(Object dto, Integer applicationId) {
         OaApprovalApplicationStorage storage = new OaApprovalApplicationStorage();
-        storage.setApprovalApplicationId(applicationId.intValue());
+        storage.setApprovalApplicationId(applicationId);
         
         if (dto instanceof OaApprovalApplicationStorageGeneralDTO) {
             OaApprovalApplicationStorageGeneralDTO generalDTO = (OaApprovalApplicationStorageGeneralDTO) dto;
-            storage.setTitle(generalDTO.getTitle());
-            storage.setAssetTypeId(generalDTO.getAssetTypeId());
-            storage.setStorageType(generalDTO.getStorageType());
-            storage.setStorageTime(generalDTO.getStorageTime());
+            BeanUtils.copyProperties(generalDTO, storage);
         } else if (dto instanceof OaApprovalApplicationStoragePropertyDTO) {
             OaApprovalApplicationStoragePropertyDTO propertyDTO = (OaApprovalApplicationStoragePropertyDTO) dto;
-            storage.setTitle(propertyDTO.getTitle());
-            storage.setAssetTypeId(propertyDTO.getAssetTypeId());
-            storage.setStorageType(propertyDTO.getStorageType());
-            storage.setStorageTime(propertyDTO.getStorageTime());
+            BeanUtils.copyProperties(propertyDTO, storage);
         } else if (dto instanceof OaApprovalApplicationStorageVehicleDTO) {
             OaApprovalApplicationStorageVehicleDTO vehicleDTO = (OaApprovalApplicationStorageVehicleDTO) dto;
-            storage.setTitle(vehicleDTO.getTitle());
-            storage.setAssetTypeId(vehicleDTO.getAssetTypeId());
-            storage.setStorageType(vehicleDTO.getStorageType());
-            storage.setStorageTime(vehicleDTO.getStorageTime());
+            BeanUtils.copyProperties(vehicleDTO, storage);
         }
         
         return storage;
@@ -791,6 +688,24 @@
     public void removeByApplicationId(Integer id) {
         //删除入库申请相关数据
         this.lambdaUpdate().eq(OaApprovalApplicationStorage::getApprovalApplicationId, id).remove();
+        List<OaApprovalApplicationStorageAsset> list = oaApprovalApplicationStorageAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, id).list();
+        List<Integer> storageAssetIds = list.stream().map(OaApprovalApplicationStorageAsset::getId).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(storageAssetIds)) {
+            //删除资产申请扩展表数据
+            OaApprovalApplicationStorageAsset oaApprovalApplicationStorageAsset = list.get(0);
+            if (oaApprovalApplicationStorageAsset.getAssetMainType().equals(AssetTypeEnum.HOUSE.getCode())) {
+                oaApprovalApplicationStorageAssetPropertyExtService.lambdaUpdate()
+                        .in(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetIds).remove();
+
+            }else if (oaApprovalApplicationStorageAsset.getAssetMainType().equals(AssetTypeEnum.VEHICLE.getCode())) {
+                oaApprovalApplicationStorageAssetVehicleExtService.lambdaUpdate()
+                        .in(OaApprovalApplicationStorageAssetVehicleExt::getStorageAssetId, storageAssetIds).remove();
+            }
+        }
+        //删除资产申请主表数据
+        oaApprovalApplicationStorageAssetService.lambdaUpdate()
+                .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, id).remove();
         //删除入库申请单
         oaApprovalApplicationsService.removeById(id);
     }
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
index 6cc9e09..4fefbc6 100644
--- 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
@@ -73,6 +73,13 @@
     @ApiModelProperty(value = "借用审批ID,类型为归还时使用。")
     private Integer borrowApplicationId;
 
+    @ApiModelProperty(value = "归还状态 0-待归还,1-部分归还,2-全部归还")
+    private Integer returnStatus;
+
+    @ApiModelProperty(value = "借用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private LocalDate borrowDate;
+
     @ApiModelProperty("关联资产项列表")
     private List<AssetMainVO> items;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java
new file mode 100644
index 0000000..c5639da
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java
@@ -0,0 +1,86 @@
+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;
+import java.util.List;
+
+/**
+ * 资产领用/借用/归还 详情VO
+ */
+@Data
+@ApiModel("资产变更详情VO")
+public class OaApprovalApplicationChangeDetailVO implements Serializable {
+
+    private static final long serialVersionUID = -7331732809498749263L;
+
+    @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 = "当前流程id")
+    private Integer currentFlowNodeId;
+
+    @ApiModelProperty(value = "事项标题")
+    private String title;
+
+    @ApiModelProperty(value = "资产类型")
+    private Integer assetTypeId;
+
+    @ApiModelProperty(value = "变更日期")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate changeTime;
+
+    @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址")
+    private Integer addressType;
+
+    @ApiModelProperty(value = "使用部门ID")
+    private Integer useDeptId;
+
+    @ApiModelProperty(value = "仓库ID")
+    private Integer warehouseId;
+
+    @ApiModelProperty(value = "所在位置")
+    private String address;
+
+    @ApiModelProperty(value = "管理部门ID")
+    private Integer  ownershipDeptId;
+
+    @ApiModelProperty(value = "使用人")
+    private String userName;
+
+    @ApiModelProperty("关联资产项列表")
+    private List<AssetMainVO> items;
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java
new file mode 100644
index 0000000..0449f8b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.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;
+
+/**
+ * 资产变更申请分页列表VO
+ */
+@Data
+@ApiModel(value = "资产变更申请分页列表VO")
+public class OaApprovalApplicationChangePageVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "审批申请ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "单据号")
+    private String applicationCode;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "变更部门/公司")
+    private String deptName;
+
+    @ApiModelProperty(value = "申请人")
+    private String applicantName;
+
+    @ApiModelProperty(value = "申请原因")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "申请日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate applicationDate;
+
+    @ApiModelProperty(value = "审核状态 0-待审核,1-审核中,2-已通过,3-已拒绝")
+    private Integer approvalStatus;
+
+    @ApiModelProperty(value = "审核状态名称")
+    private String approvalStatusName;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java
new file mode 100644
index 0000000..98a842d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java
@@ -0,0 +1,79 @@
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 资产领用/借用/归还 详情VO
+ */
+@Data
+@ApiModel("资产处置详情VO")
+public class OaApprovalApplicationDisposeDetailVO implements Serializable {
+
+    private static final long serialVersionUID = -7331732809498749263L;
+
+    @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("处置日期")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate disposeTime;
+
+    @ApiModelProperty("处置方式 0-报废,1-报损,2-捐赠")
+    private Integer disposeType;
+
+    @ApiModelProperty("处置总金额(元)")
+    private BigDecimal disposeTotalAmount;
+
+    @ApiModelProperty("关联资产项列表")
+    private List<AssetMainVO> items;
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java
similarity index 97%
rename from ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java
index bea87a4..9f1e6d3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.vo.dispose;
+package com.ruoyi.system.vo.asset;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
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 a1a6221..3b793d1 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
@@ -81,7 +81,7 @@
         private String measurementUnit;
 
         @ApiModelProperty(value = "数量")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         private BigDecimal unitPrice;
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 7586819..35fe07f 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
@@ -80,7 +80,7 @@
         private String measurementUnit;
 
         @ApiModelProperty(value = "数量")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         private BigDecimal unitPrice;
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 f250691..3b1f624 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
@@ -80,7 +80,7 @@
         private String measurementUnit;
 
         @ApiModelProperty(value = "数量")
-        private BigDecimal quantity;
+        private Integer quantity;
 
         @ApiModelProperty(value = "单价")
         private BigDecimal unitPrice;
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
index 0dac4af..5c0e42c 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
@@ -42,6 +42,9 @@
         <where>
             AND aaa.disabled = 0
             AND oaa.type = #{query.type}
+           <if test="query.returnNotify == 1">
+               AND oaa.return_status != 2
+           </if>
             <if test="query != null and query.keyword != null and query.keyword != ''">
                 AND (
                     oaa.title LIKE CONCAT('%', #{query.keyword}, '%')
@@ -71,7 +74,7 @@
         LEFT JOIN oa_approval_application_asset oaaa ON oaaai.approval_application_id = oaaa.approval_application_id
         LEFT JOIN oa_approval_applications oaa ON oaaai.approval_application_id = oaa.id
         <where>
-            oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId}
+            oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId} AND oaa.approval_status = 1
             <if test="assetMainIds != null and assetMainIds.size() > 0">
                 AND oaaai.asset_main_id IN
                 <foreach collection="assetMainIds" item="id" open="(" separator="," close=")">
@@ -86,14 +89,20 @@
             parameterType="java.lang.Long">
         SELECT
             oaa.*,
+            oaaa.title,
+            oaaa.asset_type_id,
             oaaa.operate_time
         FROM
             oa_approval_applications oaa
                 LEFT JOIN oa_approval_application_asset oaaa ON oaa.id = oaaa.approval_application_id
+                LEFT JOIN oa_approval_application_asset borrow_oaaa ON borrow_oaaa.borrow_application_id = oaa.id
+                AND borrow_oaaa.return_status != 2
         WHERE
             oaa.applicant_user_id = #{userId}
-          AND oaa.approval_status = 1
+          AND oaa.approval_status = '${@com.ruoyi.system.emums.ApprovalStatusEnum@PASSED.getCode()}'
           AND oaaa.type = 1
+        AND oaa.approval_id = '${@com.ruoyi.system.emums.ApprovalTypeEnum@BORROW.getCode()}'
+
     </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml
index df95262..ff77153 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml
@@ -20,4 +20,38 @@
         id, approval_application_id, title, asset_type_id, change_time, ownership_dept_id, warehouse_id, address, user_name
     </sql>
 
+    <!-- 分页查询资产变更申请列表 -->
+    <select id="selectChangePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO">
+        SELECT 
+            app.id,
+            app.application_code AS applicationCode,
+            change.title,
+            d.dept_name AS deptName,
+            u.nick_name AS applicantName,
+            app.application_reason AS applicationReason,
+            app.application_date AS applicationDate,
+            app.approval_status AS approvalStatus,
+            CASE app.approval_status
+                WHEN 0 THEN '待审核'
+                WHEN 1 THEN '审核中'
+                WHEN 2 THEN '已通过'
+                WHEN 3 THEN '已拒绝'
+                ELSE '未知'
+            END AS approvalStatusName
+        FROM oa_approval_applications app
+        INNER JOIN oa_approval_application_change change ON app.id = change.approval_application_id
+        LEFT JOIN sys_user u ON app.applicant_user_id = u.user_id
+        LEFT JOIN t_dept d ON app.dept_id = d.id
+        WHERE app.disabled = 0
+        AND app.approval_id = 4  <!-- 资产变更审批类型 -->
+        <if test="query.keyword != null and query.keyword != ''">
+            AND (change.title LIKE CONCAT('%', #{query.keyword}, '%') 
+                 OR app.application_code LIKE CONCAT('%', #{query.keyword}, '%'))
+        </if>
+        <if test="query.deptId != null">
+            AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.parent_id))
+        </if>
+        ORDER BY app.create_time DESC
+    </select>
+
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml
index 5beab85..ca94849 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml
@@ -19,7 +19,7 @@
     </sql>
 
     <!-- 分页查询资产处置申请列表 -->
-    <select id="getDisposePageList" resultType="com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO">
+    <select id="getDisposePageList" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO">
         SELECT 
             app.id,
             app.application_code AS applicationCode,
@@ -60,7 +60,7 @@
                  OR app.application_code LIKE CONCAT('%', #{query.keyword}, '%'))
         </if>
         <if test="query.deptId != null">
-            AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.ancestors))
+            AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.parent_id))
         </if>
         ORDER BY app.create_time DESC
     </select>

--
Gitblit v1.7.1