package com.ruoyi.system.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.mapper.OaApprovalApplicationAssetItemMapper; import com.ruoyi.system.model.AssetMain; import com.ruoyi.system.model.OaApprovalApplicationAssetItem; import com.ruoyi.system.model.OaApprovalApplications; import com.ruoyi.system.query.ApprovalDetailQuery; import com.ruoyi.system.service.AssetMainService; import com.ruoyi.system.service.OaApprovalApplicationAssetItemService; import com.ruoyi.system.service.OaApprovalApplicationsService; import com.ruoyi.system.vo.GrabListVO; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** *

* 资产领用/借用/归还/处置审批关系表 服务实现类 *

* * @author WuGuanFengYue * @since 2025-09-15 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class OaApprovalApplicationAssetItemServiceImpl extends ServiceImpl implements OaApprovalApplicationAssetItemService { private final AssetMainService assetMainService; private final OaApprovalApplicationsService oaApprovalApplicationsService; @Override public PageInfo pageList(ApprovalDetailQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.pageList(query,pageInfo); pageInfo.setRecords(list); return pageInfo; } @Override public void validateAssetStatus(List assetMainIds) { if (CollUtil.isEmpty(assetMainIds)) { return; } // 1. 根据资产ID列表查询资产关联表 List assetItems = this.lambdaQuery() .in(OaApprovalApplicationAssetItem::getAssetMainId, assetMainIds) .list(); if (CollUtil.isEmpty(assetItems)) { return; } // 2. 收集所有资产关联表中的审批申请ID List approvalApplicationIds = assetItems.stream() .map(OaApprovalApplicationAssetItem::getApprovalApplicationId) .distinct() .collect(Collectors.toList()); // 3. 查询待审核状态的审批记录 List pendingApplications = oaApprovalApplicationsService.lambdaQuery() .in(OaApprovalApplications::getId, approvalApplicationIds) .eq(OaApprovalApplications::getApprovalStatus, ApprovalStatusEnum.PENDING.getCode()) .list(); if (CollUtil.isNotEmpty(pendingApplications)) { // 4. 如果存在待审批记录,获取涉及的资产ID Set pendingAssetIds = this.lambdaQuery() .in(OaApprovalApplicationAssetItem::getApprovalApplicationId, pendingApplications.stream() .map(OaApprovalApplications::getId) .collect(Collectors.toList())) .list() .stream() .map(OaApprovalApplicationAssetItem::getAssetMainId) .distinct() .collect(Collectors.toSet()); //取交集 pendingAssetIds.retainAll(assetMainIds); // 获取资产信息用于错误提示 List pendingAssets = assetMainService.listByIds(pendingAssetIds); String assetNames = pendingAssets.stream() .map(AssetMain::getAssetName) .collect(Collectors.joining("、")); throw new ServiceException("操作失败," + assetNames + "资产已存在待审批的记录"); } } }