mitao
1 天以前 236fb6ff1f6a955db5f78560204e042e977e2167
资产入库审批通过保存资产数据
15个文件已修改
623 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageAssetVehicleExtService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePageVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java
@@ -24,6 +24,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -43,6 +44,7 @@
 * @author CodeBuddy
 * @since 2025-09-17
 */
@Slf4j
@Api(tags = {"OA审批-资产入库申请相关接口"})
@Validated
@RestController
@@ -122,7 +124,13 @@
    @ApiOperation("获取资产入库申请分页列表")
    @PostMapping("/page-list")
    public R<IPage<OaApprovalApplicationStoragePageVO>> getPageList(@RequestBody OaApprovalApplicationStoragePageQuery pageQuery) {
        IPage<OaApprovalApplicationStoragePageVO> page = oaApprovalApplicationStorageService.getPageList(pageQuery);
        IPage<OaApprovalApplicationStoragePageVO> page = null;
        try {
            page = oaApprovalApplicationStorageService.getPageList(pageQuery);
        } catch (Exception e) {
            log.error("获取资产入库申请分页列表失败", e);
            return R.fail("服务器开小差啦");
        }
        return R.ok(page);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
@@ -7,22 +7,89 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.TDept;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddLeaveDTO;
import com.ruoyi.system.dto.AuditDTO;
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.model.*;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.model.OaApproval;
import com.ruoyi.system.model.OaApprovalApplicationAdvertisement;
import com.ruoyi.system.model.OaApprovalApplicationAsset;
import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
import com.ruoyi.system.model.OaApprovalApplicationAttendance;
import com.ruoyi.system.model.OaApprovalApplicationChange;
import com.ruoyi.system.model.OaApprovalApplicationContract;
import com.ruoyi.system.model.OaApprovalApplicationDispose;
import com.ruoyi.system.model.OaApprovalApplicationMoney;
import com.ruoyi.system.model.OaApprovalApplicationPayment;
import com.ruoyi.system.model.OaApprovalApplicationPurchase;
import com.ruoyi.system.model.OaApprovalApplicationReimbursement;
import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
import com.ruoyi.system.model.OaApprovalApplicationStorage;
import com.ruoyi.system.model.OaApprovalApplications;
import com.ruoyi.system.model.OaApprovalFlowAudit;
import com.ruoyi.system.model.OaApprovalFlowNode;
import com.ruoyi.system.model.OaApprovalTodo;
import com.ruoyi.system.query.ApprovalDetailQuery;
import com.ruoyi.system.query.ApprovalTodoListQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.OaApprovalApplicationAdvertisementService;
import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
import com.ruoyi.system.service.OaApprovalApplicationAssetService;
import com.ruoyi.system.service.OaApprovalApplicationAttendanceService;
import com.ruoyi.system.service.OaApprovalApplicationChangeService;
import com.ruoyi.system.service.OaApprovalApplicationContactService;
import com.ruoyi.system.service.OaApprovalApplicationContractService;
import com.ruoyi.system.service.OaApprovalApplicationDisposeService;
import com.ruoyi.system.service.OaApprovalApplicationMoneyService;
import com.ruoyi.system.service.OaApprovalApplicationPaymentService;
import com.ruoyi.system.service.OaApprovalApplicationPurchaseItemService;
import com.ruoyi.system.service.OaApprovalApplicationPurchaseService;
import com.ruoyi.system.service.OaApprovalApplicationReimbursementItemService;
import com.ruoyi.system.service.OaApprovalApplicationReimbursementService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetService;
import com.ruoyi.system.service.OaApprovalApplicationStorageService;
import com.ruoyi.system.service.OaApprovalApplicationsService;
import com.ruoyi.system.service.OaApprovalFlowAuditService;
import com.ruoyi.system.service.OaApprovalFlowNodeService;
import com.ruoyi.system.service.OaApprovalFlowService;
import com.ruoyi.system.service.OaApprovalService;
import com.ruoyi.system.service.OaApprovalTodoService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.AdvertisementDetailVO;
import com.ruoyi.system.vo.ApprovalFlowNodeListVO;
import com.ruoyi.system.vo.ApprovalTodoVO;
import com.ruoyi.system.vo.BackDetailVO;
import com.ruoyi.system.vo.BorrowDetailVO;
import com.ruoyi.system.vo.BusinessTripDetailVO;
import com.ruoyi.system.vo.ChangeDetailVO;
import com.ruoyi.system.vo.ContactDetailVO;
import com.ruoyi.system.vo.ContractDetailVO;
import com.ruoyi.system.vo.DisposeDetailVO;
import com.ruoyi.system.vo.GrabDetailVO;
import com.ruoyi.system.vo.GrabListVO;
import com.ruoyi.system.vo.LeaveDestroyDetailVO;
import com.ruoyi.system.vo.LeaveDetailVO;
import com.ruoyi.system.vo.MoneyDetailVO;
import com.ruoyi.system.vo.OutDetailVO;
import com.ruoyi.system.vo.PaymentDetailVO;
import com.ruoyi.system.vo.PurchaseDetailVO;
import com.ruoyi.system.vo.PurchaseListVO;
import com.ruoyi.system.vo.ReimbursementDetailVO;
import com.ruoyi.system.vo.StorageDetailVO;
import com.ruoyi.system.vo.StorageListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
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.annotation.Resource;
import java.time.LocalDateTime;
@@ -74,6 +141,8 @@
    private OaApprovalApplicationMoneyService approvalApplicationMoneyService;
    @Resource
    private AssetMainService assetMainService;
    @Resource
    private OaApprovalApplicationStorageAssetService oaApprovalApplicationStorageAssetService;
    @Resource
    private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService;
    @Resource
@@ -1076,6 +1145,10 @@
                    }
                    assetMainService.updateBatchById(assetMains);
                }
                //如果为资产入库审批,处理审批通过逻辑,创建该审批的资产信息
                if (approval.getApprovalCategory().equals(ApprovalTypeEnum.IN_STOCK.getCode())) {
                    assetMainService.saveAssetByApprovalApplicationId(approvalApplications.getId());
                }
            }else{
                // 生成下一个节点的待办事项
                for (int i = 0; i < approvalFlowNodes.size(); i++) {
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetPropertyExt.java
@@ -82,9 +82,9 @@
    @TableField("resettlement_situation")
    private String resettlementSituation;
    @ApiModelProperty(value = "是否抵押:0-否,1-是")
    @ApiModelProperty(value = "是否抵押:否,是")
    @TableField("is_mortgaged")
    private Integer mortgaged;
    private String mortgaged;
    @ApiModelProperty(value = "承租方")
    @TableField("tenant_name")
ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java
@@ -81,9 +81,6 @@
    @ApiModelProperty(value = "使用人")
    private String userName;
    @ApiModelProperty(value = "使用类型")
    private String useType;
    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
    private Integer addressType;
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java
@@ -6,6 +6,8 @@
import com.ruoyi.system.query.AssetMainPageQuery;
import com.ruoyi.system.vo.asset.AssetMainPageVO;
import java.time.LocalDate;
/**
 * 资产主表 服务类
 */
@@ -18,4 +20,17 @@
     */
    IPage<AssetMainPageVO> getApprovedPageList(AssetMainPageQuery pageQuery);
    /**
     * 生成资产编码
     * @param assetTypeId
     * @param storageDate
     * @return
     */
    String generateAssetCode(Integer assetTypeId, LocalDate storageDate);
    /**
     * 根据审批单ID保存资产信息
     * @param id
     */
    void saveAssetByApprovalApplicationId(Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageAssetVehicleExtService.java
@@ -1,7 +1,7 @@
package com.ruoyi.system.service;
import com.ruoyi.system.model.OaApprovalApplicationStorageAssetVehicleExt;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.model.OaApprovalApplicationStorageAssetVehicleExt;
/**
 * <p>
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
@@ -1,24 +1,187 @@
package com.ruoyi.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import org.springframework.util.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.utils.SecurityUtils;
import com.ruoyi.system.mapper.AssetMainMapper;
import com.ruoyi.system.mapper.AssetPropertyExtMapper;
import com.ruoyi.system.mapper.AssetVehicleExtMapper;
import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetMapper;
import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetPropertyExtMapper;
import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetVehicleExtMapper;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetPropertyExt;
import com.ruoyi.system.model.AssetVehicleExt;
import com.ruoyi.system.model.OaApprovalApplicationStorageAsset;
import com.ruoyi.system.model.OaApprovalApplicationStorageAssetPropertyExt;
import com.ruoyi.system.model.OaApprovalApplicationStorageAssetVehicleExt;
import com.ruoyi.system.query.AssetMainPageQuery;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetPropertyExtService;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.service.AssetVehicleExtService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetPropertyExtService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetVehicleExtService;
import com.ruoyi.system.vo.asset.AssetMainPageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
 * 资产主表 服务实现类
 */
@Service
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class AssetMainServiceImpl extends ServiceImpl<AssetMainMapper, AssetMain> implements AssetMainService {
    private final AssetTypeService assetTypeService;
    private final OaApprovalApplicationStorageAssetService oaApprovalApplicationStorageAssetService;
    private final OaApprovalApplicationStorageAssetPropertyExtService oaApprovalApplicationStorageAssetPropertyExtService;
    private final OaApprovalApplicationStorageAssetVehicleExtService oaApprovalApplicationStorageAssetVehicleExtService;
    private final AssetVehicleExtService assetVehicleExtService;
    private final AssetPropertyExtService assetPropertyExtService;
    private final AssetMainMapper assetMainMapper;
    private final OaApprovalApplicationStorageAssetMapper oaApprovalApplicationStorageAssetMapper;
    private final OaApprovalApplicationStorageAssetPropertyExtMapper oaApprovalApplicationStorageAssetPropertyExtMapper;
    private final OaApprovalApplicationStorageAssetVehicleExtMapper oaApprovalApplicationStorageAssetVehicleExtMapper;
    private final AssetPropertyExtMapper assetPropertyExtMapper;
    private final AssetVehicleExtMapper assetVehicleExtMapper;
    @Override
    public IPage<AssetMainPageVO> getApprovedPageList(AssetMainPageQuery pageQuery) {
        Page<AssetMainPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
        return this.baseMapper.selectApprovedAssetPage(page, pageQuery);
    }
    /**
     * 生成资产编码
     * 格式:资产类型一级分类简写+资产类型子类简写+入库日期+【-】+数量顺序编号(4位)
     * 例如:GDFC20250917-0001
     */
    @Override
    public String generateAssetCode(Integer assetTypeId, LocalDate storageDate) {
        // 根据资产类型ID获取资产编码前缀
        String typeCodePrefix = assetTypeService.getAssetCodePrefix(assetTypeId);
        String dateStr = storageDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String prefix = typeCodePrefix + dateStr + "-";
        // 查询当天该类型资产的数量
        Long count = this.lambdaQuery()
                .like(AssetMain::getAssetCode, prefix)
                .ge(AssetMain::getCreateTime, storageDate.atStartOfDay())
                .lt(AssetMain::getCreateTime, storageDate.plusDays(1).atStartOfDay())
                .count();
        int sequence = (count != null ? count.intValue() : 0) + 1;
        String sequenceStr = String.format("%04d", sequence);
        return prefix + sequenceStr;
    }
    @Override
    public void saveAssetByApprovalApplicationId(Integer approvalApplicationId) {
        // 1. 根据approvalApplicationId查询审批通过的资产列表
        List<OaApprovalApplicationStorageAsset> storageAssets = oaApprovalApplicationStorageAssetMapper
                .selectList(new QueryWrapper<OaApprovalApplicationStorageAsset>()
                        .eq("approval_application_id", approvalApplicationId));
        if (CollectionUtils.isEmpty(storageAssets)) {
            return;
        }
        for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) {
            Integer assetMainType = storageAsset.getAssetMainType();
            BigDecimal quantity = storageAsset.getQuantity();
            // 根据数量生成对应条数的资产记录
            int assetCount = quantity != null ? quantity.intValue() : 1;
            for (int i = 0; i < assetCount; i++) {
                // 创建资产主表记录
                AssetMain assetMain = new AssetMain();
                BeanUtil.copyProperties(storageAsset, assetMain);
                // 为每个资产生成编码
                String assetCode = generateAssetCode(storageAsset.getAssetTypeId(), LocalDate.now());
                assetMain.setAssetCode(assetCode);
                // 单个资产的数量设为1
                assetMain.setQuantity(BigDecimal.ONE);
                // 单个资产的总价值等于单价
                assetMain.setTotalValue(storageAsset.getUnitPrice());
                // 设置创建信息
                assetMain.setCreateTime(LocalDateTime.now());
                assetMain.setCreateBy(SecurityUtils.getUsername());
                assetMain.setDisabled(false);
                // 保存资产主表
                assetMainMapper.insert(assetMain);
                // 2. 根据资产类型保存扩展信息
                if (assetMainType != null) {
                    if (assetMainType == 1) {
                        // 房产资产 - 保存房产扩展信息
                        savePropertyExtension(storageAsset.getId(), assetMain.getId());
                    } else if (assetMainType == 2) {
                        // 车辆资产 - 保存车辆扩展信息
                        saveVehicleExtension(storageAsset.getId(), assetMain.getId());
                    }
                    // assetMainType == 0 为通用资产,无需保存扩展信息
                }
            }
        }
    }
    /**
     * 保存房产资产扩展信息
     */
    private void savePropertyExtension(Integer storageAssetId, Integer assetMainId) {
        // 查询房产扩展信息
        OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper
                .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>()
                        .eq("storage_asset_id", 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);
            assetPropertyExtMapper.insert(assetPropertyExt);
        }
    }
    /**
     * 保存车辆资产扩展信息
     */
    private void saveVehicleExtension(Integer storageAssetId, Integer assetMainId) {
        // 查询车辆扩展信息
        OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper
                .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>()
                        .eq("storage_asset_id", storageAssetId));
        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);
            assetVehicleExtMapper.insert(assetVehicleExt);
        }
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java
@@ -15,6 +15,7 @@
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,7 +35,7 @@
 * @since 2025-09-15
 */
@Service
@RequiredArgsConstructor
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class AssetTypeServiceImpl extends ServiceImpl<AssetTypeMapper, AssetType> implements AssetTypeService {
    private final AssetMainService assetMainService;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,7 +14,6 @@
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.emums.AssetTypeEnum;
import com.ruoyi.system.mapper.OaApprovalApplicationStorageMapper;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetWarehouse;
import com.ruoyi.system.model.OaApprovalApplicationStorage;
import com.ruoyi.system.model.OaApprovalApplicationStorageAsset;
@@ -23,10 +23,6 @@
import com.ruoyi.system.model.OaApprovalFlowNode;
import com.ruoyi.system.query.ApprovalDetailQuery;
import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetPropertyExtService;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.service.AssetVehicleExtService;
import com.ruoyi.system.service.AssetWarehouseService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetPropertyExtService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetService;
@@ -36,7 +32,6 @@
import com.ruoyi.system.service.OaApprovalFlowNodeService;
import com.ruoyi.system.service.OaApprovalTodoService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.PurchaseListVO;
import com.ruoyi.system.vo.StorageListVO;
import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageGeneralDetailVO;
import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
@@ -50,8 +45,10 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -70,10 +67,6 @@
    private final OaApprovalApplicationStorageAssetService oaApprovalApplicationStorageAssetService;
    private final OaApprovalApplicationStorageAssetPropertyExtService oaApprovalApplicationStorageAssetPropertyExtService;
    private final OaApprovalApplicationStorageAssetVehicleExtService oaApprovalApplicationStorageAssetVehicleExtService;
    private final AssetMainService assetMainService;
    private final AssetPropertyExtService assetPropertyExtService;
    private final AssetVehicleExtService assetVehicleExtService;
    private final AssetTypeService assetTypeService;
    private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
    private final OaApprovalTodoService oaApprovalTodoService;
    private final TDeptService tDeptService;
@@ -239,7 +232,8 @@
        }
        assetMain.setUserName(item.getUserName());
        // 根据整单 addressType 写入使用部门ID或仓库ID
        applyUseDeptInfoToAssetMain(assetMain, baseDto.getUseDeptName());
        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());
@@ -275,7 +269,8 @@
            }
        }
        assetMain.setUserName(item.getUserName());
        applyUseDeptInfoToAssetMain(assetMain, baseDto.getUseDeptName());
        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());
@@ -311,7 +306,8 @@
            }
        }
        assetMain.setUserName(item.getUserName());
        applyUseDeptInfoToAssetMain(assetMain, baseDto.getUseDeptName());
        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());
@@ -327,17 +323,43 @@
    /**
     * 按整单地址类型设置资产主表位置信息(使用部门ID或仓库ID或地址)
     */
    private void applyUseDeptInfoToAssetMain(OaApprovalApplicationStorageAsset assetMain, String useDeptName) {
        // 使用部门
        if (useDeptName != null && !useDeptName.isEmpty()) {
            TDept dept = tDeptService.lambdaQuery()
                    .eq(TDept::getDeptName, useDeptName)
                    .one();
            if (dept != null) {
                assetMain.setUseDeptId(dept.getId());
            }
    private void applyAddressToAssetMain(OaApprovalApplicationStorageAsset assetMain, Integer addressType, String useDeptName, String warehouseName, String address) {
        if (addressType == null) {
            return;
        }
        switch (addressType) {
            case 0:
                // 使用部门
                if (useDeptName != null && !useDeptName.isEmpty()) {
                    TDept dept = tDeptService.lambdaQuery()
                            .eq(TDept::getDeptName, useDeptName)
                            .one();
                    if (dept != null) {
                        assetMain.setUseDeptId(dept.getId());
                    }
                }
                break;
            case 1:
                if (warehouseName != null && !warehouseName.isEmpty()) {
                    AssetWarehouse warehouse = assetWarehouseService.lambdaQuery()
                            .eq(AssetWarehouse::getWarehouseName, warehouseName)
                            .one();
                    if (warehouse != null) {
                        assetMain.setWarehouseId(warehouse.getId());
                        assetMain.setWarehouseName(warehouse.getWarehouseName());
                    }
                }
                break;
            case 2:
                if (address != null && !address.isEmpty()) {
                    assetMain.setAddress(address);
                }
                break;
            default:
                // ignore
        }
    }
    /**
@@ -494,31 +516,6 @@
        return prefix + sequenceStr;
    }
    /**
     * 生成资产编码
     * 格式:资产类型一级分类简写+资产类型子类简写+入库日期+【-】+数量顺序编号(4位)
     * 例如:GDFC20250917-0001
     */
    private String generateAssetCode(Integer assetTypeId, LocalDate storageDate) {
        // 根据资产类型ID获取资产编码前缀
        String typeCodePrefix = assetTypeService.getAssetCodePrefix(assetTypeId);
        String dateStr = storageDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String prefix = typeCodePrefix + dateStr + "-";
        // 查询当天该类型资产的数量
        Long count = assetMainService.lambdaQuery()
                .like(AssetMain::getAssetCode, prefix)
                .ge(AssetMain::getCreateTime, storageDate.atStartOfDay())
                .lt(AssetMain::getCreateTime, storageDate.plusDays(1).atStartOfDay())
                .count();
        int sequence = (count != null ? count.intValue() : 0) + 1;
        String sequenceStr = String.format("%04d", sequence);
        return prefix + sequenceStr;
    }
    @Override
    public IPage<OaApprovalApplicationStoragePageVO> getPageList(OaApprovalApplicationStoragePageQuery pageQuery) {
        Page<OaApprovalApplicationStoragePageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
@@ -543,36 +540,35 @@
                .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, app.getId())
                .eq(OaApprovalApplicationStorageAsset::getAssetTypeId, storage.getAssetTypeId())
                .list();
        setAddressInfo(vo, mains);
        if (!CollectionUtils.isEmpty(mains)) {
            // 批量查询权属部门,避免循环内查询
            // 批量查询权属部门
            List<Integer> ownerIds = mains.stream().map(OaApprovalApplicationStorageAsset::getOwnershipDeptId)
                    .filter(id -> id != null).distinct().collect(Collectors.toList());
            Map<Integer, TDept> ownerDeptMap = ownerIds.isEmpty() ? java.util.Collections.emptyMap()
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> ownerDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(ownerIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询使用部门
            List<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO item = new OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO();
                item.setAssetOriginalCode(m.getAssetOriginalCode());
                item.setAssetName(m.getAssetName());
                item.setSpecificationModel(m.getSpecificationModel());
                item.setMeasurementUnit(m.getMeasurementUnit());
                item.setQuantity(m.getQuantity());
                item.setUnitPrice(m.getUnitPrice());
                item.setUsefulLife(m.getUsefulLife());
                OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO.class);
                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());
                item.setAccountingStatus(m.getAccountingStatus());
                item.setAccountingDate(m.getAccountingDate());
                item.setAccountingVoucherNo(m.getAccountingVoucherNo());
                item.setAccountingSubject(m.getAccountingSubject());
                item.setAccountingAmount(m.getAccountingAmount());
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
                    item.setUseDeptName(dept != null ? dept.getDeptName() : null);
                } else if (m.getAddressType().equals(1) && m.getWarehouseId() != null){
                    AssetWarehouse assetWarehouse = warehouseMap.get(m.getWarehouseId());
                    item.setWarehouseName(assetWarehouse != null ? assetWarehouse.getWarehouseName() : null);
                }
                return item;
            }).collect(Collectors.toList());
            vo.setAssetItems(items);
@@ -598,7 +594,6 @@
                .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, app.getId())
                .eq(OaApprovalApplicationStorageAsset::getAssetTypeId, storage.getAssetTypeId())
                .list();
        setAddressInfo(vo, mains);
        if (!CollectionUtils.isEmpty(mains)) {
            List<Integer> mainIds = mains.stream().map(OaApprovalApplicationStorageAsset::getId).collect(Collectors.toList());
@@ -609,28 +604,30 @@
                    .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<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO item = new OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO();
                item.setAssetOriginalCode(m.getAssetOriginalCode());
                item.setAssetName(m.getAssetName());
                item.setSpecificationModel(m.getSpecificationModel());
                item.setMeasurementUnit(m.getMeasurementUnit());
                item.setQuantity(m.getQuantity());
                item.setUnitPrice(m.getUnitPrice());
                item.setUsefulLife(m.getUsefulLife());
                OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO.class);
                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());
                item.setAccountingStatus(m.getAccountingStatus());
                item.setAccountingDate(m.getAccountingDate());
                item.setAccountingVoucherNo(m.getAccountingVoucherNo());
                item.setAccountingSubject(m.getAccountingSubject());
                item.setAccountingAmount(m.getAccountingAmount());
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
                    item.setUseDeptName(dept != null ? dept.getDeptName() : null);
                } else if (m.getAddressType().equals(1) && m.getWarehouseId() != null){
                    AssetWarehouse assetWarehouse = warehouseMap.get(m.getWarehouseId());
                    item.setWarehouseName(assetWarehouse != null ? assetWarehouse.getWarehouseName() : null);
                }
                OaApprovalApplicationStorageAssetPropertyExt ext = extMap.get(m.getId());
                if (ext != null) {
                    item.setRegion(ext.getRegion());
@@ -675,7 +672,6 @@
                .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, app.getId())
                .eq(OaApprovalApplicationStorageAsset::getAssetTypeId, storage.getAssetTypeId())
                .list();
        setAddressInfo(vo, mains);
        if (!CollectionUtils.isEmpty(mains)) {
            List<Integer> mainIds = mains.stream().map(OaApprovalApplicationStorageAsset::getId).collect(Collectors.toList());
@@ -686,28 +682,29 @@
                    .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<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO item = new OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO();
                item.setAssetOriginalCode(m.getAssetOriginalCode());
                item.setAssetName(m.getAssetName());
                item.setSpecificationModel(m.getSpecificationModel());
                item.setMeasurementUnit(m.getMeasurementUnit());
                item.setQuantity(m.getQuantity());
                item.setUnitPrice(m.getUnitPrice());
                item.setUsefulLife(m.getUsefulLife());
                OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO.class);
                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());
                item.setAccountingStatus(m.getAccountingStatus());
                item.setAccountingDate(m.getAccountingDate());
                item.setAccountingVoucherNo(m.getAccountingVoucherNo());
                item.setAccountingSubject(m.getAccountingSubject());
                item.setAccountingAmount(m.getAccountingAmount());
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
                    item.setUseDeptName(dept != null ? dept.getDeptName() : null);
                } else if (m.getAddressType().equals(1) && m.getWarehouseId() != null){
                    AssetWarehouse assetWarehouse = warehouseMap.get(m.getWarehouseId());
                    item.setWarehouseName(assetWarehouse != null ? assetWarehouse.getWarehouseName() : null);
                }
                OaApprovalApplicationStorageAssetVehicleExt ext = extMap.get(m.getId());
                if (ext != null) {
                    item.setLicensePlate(ext.getLicensePlate());
@@ -766,51 +763,6 @@
            v.setAssetTypeId(storage.getAssetTypeId());
            v.setStorageType(storage.getStorageType());
            v.setStorageTime(storage.getStorageTime());
        }
    }
    private void setAddressInfo(Object vo, List<OaApprovalApplicationStorageAsset> mains) {
        if (CollectionUtils.isEmpty(mains)) {
            return;
        }
        OaApprovalApplicationStorageAsset sample = mains.get(0);
        Integer addressType = null;
        String useDeptName = null;
        String warehouseName = null;
        String address = null;
        switch (sample.getAddressType()) {
            case 0:
                TDept dept = tDeptService.getById(sample.getUseDeptId());
                useDeptName = dept != null ? dept.getDeptName() : null;
                break;
            case 1:
                AssetWarehouse wh = assetWarehouseService.getById(sample.getWarehouseId());
                warehouseName = wh != null ? wh.getWarehouseName() : null;
                break;
            case 2:
                break;
            default:
                return;
        }
        if (vo instanceof OaApprovalApplicationStorageGeneralDetailVO) {
            OaApprovalApplicationStorageGeneralDetailVO v = (OaApprovalApplicationStorageGeneralDetailVO) vo;
            v.setAddressType(sample.getAddressType());
            v.setUseDeptName(useDeptName);
            v.setWarehouseName(warehouseName);
            v.setAddress(sample.getAddress());
        } else if (vo instanceof OaApprovalApplicationStoragePropertyDetailVO) {
            OaApprovalApplicationStoragePropertyDetailVO v = (OaApprovalApplicationStoragePropertyDetailVO) vo;
            v.setAddressType(sample.getAddressType());
            v.setUseDeptName(useDeptName);
            v.setWarehouseName(warehouseName);
            v.setAddress(sample.getAddress());
        } else if (vo instanceof OaApprovalApplicationStorageVehicleDetailVO) {
            OaApprovalApplicationStorageVehicleDetailVO v = (OaApprovalApplicationStorageVehicleDetailVO) vo;
            v.setAddressType(sample.getAddressType());
            v.setUseDeptName(useDeptName);
            v.setWarehouseName(warehouseName);
            v.setAddress(sample.getAddress());
        }
    }
ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
@@ -8,7 +8,6 @@
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Data
@@ -24,7 +23,7 @@
    @ApiModelProperty(value = "标题")
    private String title;
    @ApiModelProperty(value = "入库类型 0-正常入库")
    private Boolean storageType;
    private Integer storageType;
    @ApiModelProperty(value = "入库日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate storageTime;
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java
@@ -52,18 +52,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate storageTime;
    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
    private Integer addressType;
    @ApiModelProperty(value = "使用部门/位置名称")
    private String useDeptName;
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    @ApiModelProperty(value = "所在位置")
    private String address;
    @ApiModelProperty(value = "通用资产明细列表(按保存展开后的一条资产记录对应一条明细)")
    private List<GeneralAssetItemVO> assetItems;
@@ -117,5 +105,17 @@
        @ApiModelProperty(value = "入账金额")
        private BigDecimal accountingAmount;
        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
        private Integer addressType;
        @ApiModelProperty(value = "使用部门/位置名称")
        private String useDeptName;
        @ApiModelProperty(value = "仓库名称")
        private String warehouseName;
        @ApiModelProperty(value = "所在位置")
        private String address;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePageVO.java
@@ -19,6 +19,9 @@
    @ApiModelProperty("主键ID")
    private Integer id;
    @ApiModelProperty("资产类型ID")
    private Integer assetTypeId;
    @ApiModelProperty("所属部门")
    private String deptName;
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java
@@ -52,18 +52,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate storageTime;
    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
    private Integer addressType;
    @ApiModelProperty(value = "使用部门/位置名称")
    private String useDeptName;
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    @ApiModelProperty(value = "所在位置")
    private String address;
    @ApiModelProperty(value = "房产资产明细列表(按保存展开后的一条资产记录对应一条明细)")
    private List<PropertyAssetItemVO> assetItems;
@@ -168,5 +156,17 @@
        @ApiModelProperty(value = "租赁期限止")
        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate leaseEndDate;
        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
        private Integer addressType;
        @ApiModelProperty(value = "使用部门/位置名称")
        private String useDeptName;
        @ApiModelProperty(value = "仓库名称")
        private String warehouseName;
        @ApiModelProperty(value = "所在位置")
        private String address;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java
@@ -52,18 +52,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate storageTime;
    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
    private Integer addressType;
    @ApiModelProperty(value = "使用部门/位置名称")
    private String useDeptName;
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    @ApiModelProperty(value = "所在位置")
    private String address;
    @ApiModelProperty(value = "车辆资产明细列表(按保存展开后的一条资产记录对应一条明细)")
    private List<VehicleAssetItemVO> assetItems;
@@ -142,5 +130,18 @@
        @ApiModelProperty(value = "产权形式")
        private String propertyRightForm;
        @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
        private Integer addressType;
        @ApiModelProperty(value = "使用部门/位置名称")
        private String useDeptName;
        @ApiModelProperty(value = "仓库名称")
        private String warehouseName;
        @ApiModelProperty(value = "所在位置")
        private String address;
    }
}
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml
@@ -21,6 +21,7 @@
    <select id="selectApplicationStoragePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO">
        SELECT
            oas.id                               AS id,
            oas.asset_type_id                    AS assetTypeId,
            aaa.dept_name                        AS deptName,
            aaa.application_code                 AS applicationCode,
            oas.title                            AS title,
@@ -56,9 +57,9 @@
                   end as useName
               from asset_main t1
                             left join asset_type t2 on t3.id = t1.asset_type_id
                             left join t_dept t3 on t4.id = t3.ownership_dept_id
               from oa_approval_application_storage_asset t1
                             left join asset_type t2 on t2.id = t1.asset_type_id
                             left join t_dept t3 on t3.id = t1.ownership_dept_id
        where t1.approval_application_id = #{query.approvalApplicationId}
        order by t1.create_time  desc