From 50ee6ccb8d8036ffaa2aabb4e4999c14a05b45a3 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 30 九月 2025 16:35:12 +0800 Subject: [PATCH] 资产管理数据权限修改 --- ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml | 3 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationStoragePageQuery.java | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java | 5 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetWarehouseService.java | 8 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java | 6 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml | 36 +++-- ruoyi-system/src/main/java/com/ruoyi/system/constants/AssetDeptConstant.java | 12 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java | 13 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetWarehouseController.java | 10 + ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java | 8 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java | 58 ++++++++- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java | 25 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java | 12 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetWarehouseServiceImpl.java | 7 + ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml | 8 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java | 16 -- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java | 68 +++++++++++ 19 files changed, 241 insertions(+), 62 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetWarehouseController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetWarehouseController.java index 071962b..2d258b7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetWarehouseController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetWarehouseController.java @@ -7,12 +7,15 @@ import com.ruoyi.system.query.AssetWarehousePageQuery; import com.ruoyi.system.service.AssetWarehouseService; import com.ruoyi.system.vo.asset.AssetWarehouseVO; + +import java.util.List; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; 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.PutMapping; @@ -66,5 +69,12 @@ return R.ok(); } + @ApiOperation("获取仓库列表(不分页)") + @GetMapping("/list") + public R<List<AssetWarehouseVO>> getList() { + List<AssetWarehouseVO> list = assetWarehouseService.getAllList(); + return R.ok(list); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java index 7f04abe..b684ab7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java @@ -6,9 +6,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.constants.AssetDeptConstant; import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReturnDTO; import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.OaApprovalApplicationAssetService; import com.ruoyi.system.vo.asset.AssetMainVO; import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO; @@ -42,12 +44,12 @@ public class OaApprovalApplicationAssetController { private final OaApprovalApplicationAssetService oaApprovalApplicationAssetService; + private final ISysUserService sysUserService; @ApiOperation("提交资产领用申请") @PostMapping("/submit-receive") @Log(title = "资产领用申请-提交", businessType = BusinessType.INSERT) public R<Void> submitReceive(@Valid @RequestBody OaApprovalApplicationAssetReceiveDTO dto) { - //TODO 提交时需要校验资产状态,是否已经被领用借用处置 oaApprovalApplicationAssetService.submitReceiveBorrow(dto); return R.ok(); } @@ -55,14 +57,26 @@ @ApiOperation("获取资产领用申请分页列表") @PostMapping("/page-list") public R<IPage<OaApprovalApplicationAssetPageVO>> getReceivePageList(@RequestBody OaApprovalApplicationAssetPageQuery pageQuery) { - // 数据权限:非管理员仅能查看本部门 + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 Long userId = SecurityUtils.getUserId(); boolean isAdmin = SecurityUtils.isAdmin(userId); + if (!isAdmin) { try { - pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getDeptId())); + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } } catch (Exception e) { - // ignore parse, leave null if cannot parse + // 如果获取部门信息失败,默认设置部门权限 + try { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } catch (Exception ex) { + // ignore parse, leave null if cannot parse + } } } IPage<OaApprovalApplicationAssetPageVO> page = oaApprovalApplicationAssetService.getReceivePageList(pageQuery); @@ -133,14 +147,26 @@ @ApiOperation("获取资产归还申请分页列表") @PostMapping("/page-return-list") public R<IPage<OaApprovalApplicationAssetPageVO>> getReturnPageList(@RequestBody OaApprovalApplicationAssetPageQuery pageQuery) { - // 数据权限:非管理员仅能查看本部门 + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 Long userId = SecurityUtils.getUserId(); boolean isAdmin = SecurityUtils.isAdmin(userId); + if (!isAdmin) { try { - pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getDeptId())); + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } } catch (Exception e) { - // ignore parse, leave null if cannot parse + // 如果获取部门信息失败,默认设置部门权限 + try { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } catch (Exception ex) { + // ignore parse, leave null if cannot parse + } } } IPage<OaApprovalApplicationAssetPageVO> page = oaApprovalApplicationAssetService.getReturnPageList(pageQuery); @@ -150,14 +176,26 @@ @ApiOperation("获取资产归还提醒分页列表") @PostMapping("/page-return-notify-list") public R<IPage<OaApprovalApplicationAssetPageVO>> getReturnNotifyPageList(@RequestBody OaApprovalApplicationAssetPageQuery pageQuery) { - // 数据权限:非管理员仅能查看本部门 + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 Long userId = SecurityUtils.getUserId(); boolean isAdmin = SecurityUtils.isAdmin(userId); + if (!isAdmin) { try { - pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getDeptId())); + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } } catch (Exception e) { - // ignore parse, leave null if cannot parse + // 如果获取部门信息失败,默认设置部门权限 + try { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } catch (Exception ex) { + // ignore parse, leave null if cannot parse + } } } IPage<OaApprovalApplicationAssetPageVO> page = oaApprovalApplicationAssetService.getReturnNotifyPageList(pageQuery); 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 120bb3e..249a1d9 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 @@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.constants.AssetDeptConstant; import com.ruoyi.system.dto.asset.OaApprovalApplicationChangeDTO; import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery; import com.ruoyi.system.service.ISysUserService; @@ -66,7 +67,7 @@ String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); // 非超级管理员且非资产管理部,设置部门权限 - if (!"资产管理部".equals(deptName)) { + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); } } catch (Exception e) { 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 ad93aec..d0e754f 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,10 +5,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.constants.AssetDeptConstant; 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.service.OaApprovalApplicationDisposeService; import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO; import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO; import io.swagger.annotations.Api; @@ -66,7 +67,7 @@ String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); // 非超级管理员且非资产管理部,设置部门权限 - if (!"资产管理部".equals(deptName)) { + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); } } catch (Exception e) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java index 515d92c..a0c5174 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java @@ -9,12 +9,14 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.constants.AssetDeptConstant; import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageGeneralDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationStoragePropertyDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageVehicleDTO; import com.ruoyi.system.model.AssetWarehouse; import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery; import com.ruoyi.system.service.AssetWarehouseService; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.OaApprovalApplicationStorageService; import com.ruoyi.system.service.TDeptService; import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageGeneralDetailVO; @@ -56,6 +58,7 @@ private final OaApprovalApplicationStorageService oaApprovalApplicationStorageService; private final TDeptService deptService; private final AssetWarehouseService assetWarehouseService; + private final ISysUserService sysUserService; @ApiOperation("提交通用资产入库申请") @PostMapping("/submit-general") @@ -126,6 +129,28 @@ @PostMapping("/page-list") public R<IPage<OaApprovalApplicationStoragePageVO>> getPageList(@RequestBody OaApprovalApplicationStoragePageQuery pageQuery) { IPage<OaApprovalApplicationStoragePageVO> page = null; + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 + Long userId = SecurityUtils.getUserId(); + boolean isAdmin = SecurityUtils.isAdmin(userId); + + if (!isAdmin) { + try { + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.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 + } + } + } try { page = oaApprovalApplicationStorageService.getPageList(pageQuery); } catch (Exception e) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/constants/AssetDeptConstant.java b/ruoyi-system/src/main/java/com/ruoyi/system/constants/AssetDeptConstant.java new file mode 100644 index 0000000..8c0ddc3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/constants/AssetDeptConstant.java @@ -0,0 +1,12 @@ +package com.ruoyi.system.constants; + +/** + * @author mitao + * @date 2025/9/30 + */ +public interface AssetDeptConstant { + /** + * 资产管理部名称,用于写死资产管理模块数据权限 + */ + String ASSET_DEPARTMENT_NAME = "资产管理部"; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationStoragePageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationStoragePageQuery.java index a2c6084..8a0994c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationStoragePageQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationStoragePageQuery.java @@ -17,5 +17,8 @@ @ApiModelProperty("关键词(标题/入库单号/所属部门)") private String keyword; + + @ApiModelProperty(value = "部门ID") + private Integer deptId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetWarehouseService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetWarehouseService.java index ba42580..7bafe2e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetWarehouseService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetWarehouseService.java @@ -7,6 +7,8 @@ import com.ruoyi.system.query.AssetWarehousePageQuery; import com.ruoyi.system.vo.asset.AssetWarehouseVO; +import java.util.List; + /** * <p> * 仓库信息表 服务类 @@ -39,4 +41,10 @@ * @param id */ void delete(Integer id); + + /** + * 获取所有仓库列表 + * @return + */ + List<AssetWarehouseVO> getAllList(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java index 3e5a129..9bca775 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java @@ -6,6 +6,8 @@ import com.ruoyi.system.query.ApprovalDetailQuery; import com.ruoyi.system.vo.GrabListVO; +import java.util.List; + /** * <p> * 资产领用/借用/归还/处置审批关系表 服务类 @@ -17,4 +19,10 @@ public interface OaApprovalApplicationAssetItemService extends IService<OaApprovalApplicationAssetItem> { PageInfo<GrabListVO> pageList(ApprovalDetailQuery query); + + /** + * 校验资产状态,检查是否存在待审批的记录 + * @param assetMainIds 资产ID列表 + */ + void validateAssetStatus(List<Integer> assetMainIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java index 46354d3..fb4d5ed 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; -import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.dto.asset.AssetTypeDTO; @@ -21,14 +20,12 @@ import com.ruoyi.system.service.AssetInventoryRecordService; import com.ruoyi.system.service.AssetMainService; import com.ruoyi.system.service.AssetTypeService; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.vo.AssetIdleListVO; import com.ruoyi.system.vo.AssetInventoryVO; import com.ruoyi.system.vo.AssetStatisticsDetailVO; import com.ruoyi.system.vo.AssetStatisticsVO; import com.ruoyi.system.vo.asset.AssetTypeTreeVO; -import com.ruoyi.system.vo.system.NotificationVO; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -37,7 +34,12 @@ import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; /** @@ -55,6 +57,7 @@ private final AssetMainService assetMainService; private final AssetTypeService assetTypeService; private final AssetInventoryRecordService assetInventoryRecordService; + private final ISysUserService sysUserService; @Override public List<AssetTypeTreeVO> getAssetTypeTree() { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetWarehouseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetWarehouseServiceImpl.java index 9bab973..a2dad76 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetWarehouseServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetWarehouseServiceImpl.java @@ -120,4 +120,11 @@ } this.removeById(id); } + + @Override + public List<AssetWarehouseVO> getAllList() { + LambdaQueryWrapper<AssetWarehouse> queryWrapper = new LambdaQueryWrapper<>(); + List<AssetWarehouse> list = this.list(queryWrapper); + return BeanUtil.copyToList(list, AssetWarehouseVO.class); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java index b307d20..652a386 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java @@ -1,16 +1,26 @@ 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 com.ruoyi.system.vo.PurchaseListVO; +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; /** * <p> @@ -21,8 +31,10 @@ * @since 2025-09-15 */ @Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class OaApprovalApplicationAssetItemServiceImpl extends ServiceImpl<OaApprovalApplicationAssetItemMapper, OaApprovalApplicationAssetItem> implements OaApprovalApplicationAssetItemService { - + private final AssetMainService assetMainService; + private final OaApprovalApplicationsService oaApprovalApplicationsService; @Override public PageInfo<GrabListVO> pageList(ApprovalDetailQuery query) { PageInfo<GrabListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); @@ -30,4 +42,56 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public void validateAssetStatus(List<Integer> assetMainIds) { + if (CollUtil.isEmpty(assetMainIds)) { + return; + } + + // 1. 根据资产ID列表查询资产关联表 + List<OaApprovalApplicationAssetItem> assetItems = this.lambdaQuery() + .in(OaApprovalApplicationAssetItem::getAssetMainId, assetMainIds) + .list(); + + if (CollUtil.isEmpty(assetItems)) { + return; + } + + // 2. 收集所有资产关联表中的审批申请ID + List<Integer> approvalApplicationIds = assetItems.stream() + .map(OaApprovalApplicationAssetItem::getApprovalApplicationId) + .distinct() + .collect(Collectors.toList()); + + // 3. 查询待审核状态的审批记录 + List<OaApprovalApplications> pendingApplications = oaApprovalApplicationsService.lambdaQuery() + .in(OaApprovalApplications::getId, approvalApplicationIds) + .eq(OaApprovalApplications::getApprovalStatus, ApprovalStatusEnum.PENDING.getCode()) + .list(); + + if (CollUtil.isNotEmpty(pendingApplications)) { + // 4. 如果存在待审批记录,获取涉及的资产ID + Set<Integer> 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<AssetMain> pendingAssets = assetMainService.listByIds(pendingAssetIds); + String assetNames = pendingAssets.stream() + .map(AssetMain::getAssetName) + .collect(Collectors.joining("、")); + + throw new ServiceException("操作失败," + assetNames + "资产已存在待审批的记录"); + } + } + } 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 0f91b35..0232b33 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 @@ -65,10 +65,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void submitReceiveBorrow(OaApprovalApplicationAssetReceiveDTO dto) { - if (CollUtil.isEmpty(dto.getAssetMainIds())) { - throw new ServiceException("资产ID列表不能为空"); - } - validateAssetStatus(dto.getAssetMainIds()); + //校验资产状态 + oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); // 1. 构建并保存审批主表 OaApprovalApplications applications = buildOaApprovalApplications(dto); @@ -95,11 +93,6 @@ }) .collect(Collectors.toList()); oaApprovalApplicationAssetItemService.saveBatch(items); - } - - //TODO 是否需要限制只有未提交审批的资产才能提交 - private void validateAssetStatus(List<Integer> assetMainIds) { - } private OaApprovalFlowNode getFirstFlowNode(Integer approvalId) { @@ -260,9 +253,8 @@ } @Override public void submitReturn(OaApprovalApplicationAssetReturnDTO dto) { - if (CollUtil.isEmpty(dto.getAssetMainIds())) { - throw new ServiceException("资产ID列表不能为空"); - } + //校验资产状态 + oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); // 1. 构建并保存审批主表 OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); applications.setApplicationCode(generateApplicationCode("GH")); 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 e73f360..5caf438 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,11 +1,11 @@ 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.common.utils.SecurityUtils; import com.ruoyi.system.dto.asset.OaApprovalApplicationChangeDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.emums.ApprovalTypeEnum; @@ -57,10 +57,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void submitChange(OaApprovalApplicationChangeDTO dto) { - if (CollUtil.isEmpty(dto.getAssetMainIds())) { - throw new ServiceException("资产ID列表不能为空"); - } - + //校验资产状态 + oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); // 1. 构建并保存审批主表 OaApprovalApplications applications = buildOaApprovalApplications(dto); @@ -94,6 +92,10 @@ applications.setApprovalId(ApprovalTypeEnum.ASSET_CHANGE.getCode()); applications.setApplicationDate(LocalDate.now()); applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); + applications.setApplicantUserId(SecurityUtils.getUserId().intValue()); + applications.setApplicantName(SecurityUtils.getLoginUser().getUser().getNickName()); + applications.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId())); + applications.setDeptName(SecurityUtils.getLoginUser().getUser().getDeptName()); return applications; } 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 6659bdc..15a4143 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 @@ -1,7 +1,6 @@ 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; @@ -62,9 +61,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void submitDispose(OaApprovalApplicationDisposeDTO dto) { - if (CollUtil.isEmpty(dto.getAssetMainIds())) { - throw new ServiceException("资产ID列表不能为空"); - } + //校验资产状态 + oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); // 1. 构建并保存审批主表 OaApprovalApplications applications = buildOaApprovalApplications(dto); diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml index 5bb2d5c..6927d64 100644 --- a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml @@ -69,6 +69,8 @@ LEFT JOIN asset_type at ON at.id = am.asset_type_id LEFT JOIN t_dept od ON od.id = am.ownership_dept_id LEFT JOIN t_dept ud ON ud.id = am.use_dept_id + LEFT JOIN oa_approval_application_asset_item oaaai ON oaaai.asset_main_id = am.id + LEFT JOIN oa_approval_applications oaa ON oaa.id = oaaai.approval_application_id <where> AND IFNULL(am.disabled, 0) = 0 AND IFNULL(aaa.disabled, 0) = 0 @@ -76,6 +78,7 @@ AND IFNULL(am.is_disposed, 0) = 0 AND IFNULL(am.is_in_use, 0) = 0 AND IFNULL(am.is_borrowed, 0) = 0 + AND ( oaa.id IS NULL OR oaa.approval_status != 0 ) <if test="query != null and query.assetTypeId != null"> AND am.asset_type_id = #{query.assetTypeId} </if> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml index 5c0e42c..31ea207 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml @@ -54,7 +54,7 @@ ) </if> <if test="query != null and query.deptId != null"> - AND aaa.dept_id = #{query.deptId} + AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, td.parent_id)) </if> </where> ORDER BY oaa.operate_time DESC, oaa.id DESC diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml index ff77153..e423268 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml @@ -25,7 +25,7 @@ SELECT app.id, app.application_code AS applicationCode, - change.title, + oaac.title, d.dept_name AS deptName, u.nick_name AS applicantName, app.application_reason AS applicationReason, @@ -39,13 +39,13 @@ ELSE '未知' END AS approvalStatusName FROM oa_approval_applications app - INNER JOIN oa_approval_application_change change ON app.id = change.approval_application_id + INNER JOIN oa_approval_application_change oaac ON app.id = oaac.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 <!-- 资产变更审批类型 --> + AND app.approval_id = '${@com.ruoyi.system.emums.ApprovalTypeEnum@ASSET_CHANGE.getCode()}' <if test="query.keyword != null and query.keyword != ''"> - AND (change.title LIKE CONCAT('%', #{query.keyword}, '%') + AND (oaac.title LIKE CONCAT('%', #{query.keyword}, '%') OR app.application_code LIKE CONCAT('%', #{query.keyword}, '%')) </if> <if test="query.deptId != null"> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml index 2da4995..695809a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml @@ -20,30 +20,34 @@ <!-- 分页查询:资产入库申请列表(关联审批记录与资产类型) --> <select id="selectApplicationStoragePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO"> SELECT - aaa.id AS id, - oas.asset_type_id AS assetTypeId, - aaa.dept_name AS deptName, - aaa.application_code AS applicationCode, - oas.title AS title, - CASE WHEN at2.level = 2 THEN at1.type_name ELSE at2.type_name END AS firstAssetTypeName, - CASE WHEN at2.level = 2 THEN at2.type_name ELSE NULL END AS secondAssetTypeName, - aaa.applicant_name AS applicantName, - oas.storage_time AS storageTime, - oas.storage_type AS storageType, - aaa.approval_status AS approvalStatus + aaa.id, + oas.asset_type_id, + aaa.dept_name, + aaa.application_code, + oas.title, + CASE WHEN at2.level = 2 THEN at1.type_name ELSE at2.type_name END AS firstAssetTypeName, + CASE WHEN at2.level = 2 THEN at2.type_name ELSE NULL END AS secondAssetTypeName, + aaa.applicant_name, + oas.storage_time, + oas.storage_type, + aaa.approval_status FROM oa_approval_application_storage oas - INNER JOIN oa_approval_applications aaa ON aaa.id = oas.approval_application_id - LEFT JOIN asset_type at2 ON at2.id = oas.asset_type_id - LEFT JOIN asset_type at1 ON at1.id = (CASE WHEN at2.level = 2 THEN at2.parent_id ELSE at2.id END) + INNER JOIN oa_approval_applications aaa ON aaa.id = oas.approval_application_id + LEFT JOIN asset_type at2 ON at2.id = oas.asset_type_id + LEFT JOIN asset_type at1 ON at1.id = (CASE WHEN at2.level = 2 THEN at2.parent_id ELSE at2.id END) + LEFT JOIN t_dept d ON aaa.dept_id = d.id <where> AND aaa.disabled = 0 <if test="query != null and query.keyword != null and query.keyword != ''"> AND ( oas.title LIKE CONCAT('%', #{query.keyword}, '%') - OR aaa.application_code LIKE CONCAT('%', #{query.keyword}, '%') - OR aaa.dept_name LIKE CONCAT('%', #{query.keyword}, '%') + OR aaa.application_code LIKE CONCAT('%', #{query.keyword}, '%') + OR aaa.dept_name 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> </where> ORDER BY oas.storage_time DESC, oas.id DESC </select> -- Gitblit v1.7.1