From 098d3347a0df808908aab8c554cd7c4febc5e6d9 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 26 八月 2024 11:43:59 +0800 Subject: [PATCH] !577 发布 5.2.2 正式版 安全性提升 Merge pull request !577 from 疯狂的狮子Li/dev --- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java | 84 ++++++++++++++++++++++++++++++++++------- 1 files changed, 69 insertions(+), 15 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java index d9529e7..2c38129 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java @@ -1,27 +1,33 @@ package org.dromara.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysPost; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysPostMapper; import org.dromara.system.mapper.SysUserPostMapper; import org.dromara.system.service.ISysPostService; -import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 宀椾綅淇℃伅 鏈嶅姟灞傚鐞� @@ -33,12 +39,12 @@ public class SysPostServiceImpl implements ISysPostService { private final SysPostMapper baseMapper; + private final SysDeptMapper deptMapper; private final SysUserPostMapper userPostMapper; @Override public TableDataInfo<SysPostVo> selectPagePostList(SysPostBo post, PageQuery pageQuery) { - LambdaQueryWrapper<SysPost> lqw = buildQueryWrapper(post); - Page<SysPostVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page<SysPostVo> page = baseMapper.selectPagePostList(pageQuery.build(), buildQueryWrapper(post)); return TableDataInfo.build(page); } @@ -50,17 +56,39 @@ */ @Override public List<SysPostVo> selectPostList(SysPostBo post) { - LambdaQueryWrapper<SysPost> lqw = buildQueryWrapper(post); - return baseMapper.selectVoList(lqw); + return baseMapper.selectVoList(buildQueryWrapper(post)); } + /** + * 鏍规嵁鏌ヨ鏉′欢鏋勫缓鏌ヨ鍖呰鍣� + * + * @param bo 鏌ヨ鏉′欢瀵硅薄 + * @return 鏋勫缓濂界殑鏌ヨ鍖呰鍣� + */ private LambdaQueryWrapper<SysPost> buildQueryWrapper(SysPostBo bo) { - LambdaQueryWrapper<SysPost> lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getPostCode()), SysPost::getPostCode, bo.getPostCode()); - lqw.like(StringUtils.isNotBlank(bo.getPostName()), SysPost::getPostName, bo.getPostName()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysPost::getStatus, bo.getStatus()); - lqw.orderByAsc(SysPost::getPostSort); - return lqw; + LambdaQueryWrapper<SysPost> wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(bo.getPostCode()), SysPost::getPostCode, bo.getPostCode()) + .like(StringUtils.isNotBlank(bo.getPostCategory()), SysPost::getPostCategory, bo.getPostCategory()) + .like(StringUtils.isNotBlank(bo.getPostName()), SysPost::getPostName, bo.getPostName()) + .eq(StringUtils.isNotBlank(bo.getStatus()), SysPost::getStatus, bo.getStatus()) + .orderByAsc(SysPost::getPostSort); + if (ObjectUtil.isNotNull(bo.getDeptId())) { + //浼樺厛鍗曢儴闂ㄦ悳绱� + wrapper.eq(SysPost::getDeptId, bo.getDeptId()); + } else if (ObjectUtil.isNotNull(bo.getBelongDeptId())) { + //閮ㄩ棬鏍戞悳绱� + wrapper.and(x -> { + List<Long> deptIds = deptMapper.selectList(new LambdaQueryWrapper<SysDept>() + .select(SysDept::getDeptId) + .apply(DataBaseHelper.findInSet(bo.getBelongDeptId(), "ancestors"))) + .stream() + .map(SysDept::getDeptId) + .collect(Collectors.toList()); + deptIds.add(bo.getBelongDeptId()); + x.in(SysPost::getDeptId, deptIds); + }); + } + return wrapper; } /** @@ -92,7 +120,22 @@ */ @Override public List<Long> selectPostListByUserId(Long userId) { - return baseMapper.selectPostListByUserId(userId); + List<SysPostVo> list = baseMapper.selectPostsByUserId(userId); + return StreamUtils.toList(list, SysPostVo::getPostId); + } + + /** + * 閫氳繃宀椾綅ID涓叉煡璇㈠矖浣� + * + * @param postIds 宀椾綅id涓� + * @return 宀椾綅鍒楄〃淇℃伅 + */ + @Override + public List<SysPostVo> selectPostByIds(List<Long> postIds) { + return baseMapper.selectVoList(new LambdaQueryWrapper<SysPost>() + .select(SysPost::getPostId, SysPost::getPostName, SysPost::getPostCode) + .eq(SysPost::getStatus, UserConstants.POST_NORMAL) + .in(CollUtil.isNotEmpty(postIds), SysPost::getPostId, postIds)); } /** @@ -135,6 +178,17 @@ } /** + * 閫氳繃閮ㄩ棬ID鏌ヨ宀椾綅浣跨敤鏁伴噺 + * + * @param deptId 閮ㄩ棬id + * @return 缁撴灉 + */ + @Override + public long countPostByDeptId(Long deptId) { + return baseMapper.selectCount(new LambdaQueryWrapper<SysPost>().eq(SysPost::getDeptId, deptId)); + } + + /** * 鍒犻櫎宀椾綅淇℃伅 * * @param postId 宀椾綅ID @@ -156,10 +210,10 @@ for (Long postId : postIds) { SysPost post = baseMapper.selectById(postId); if (countUserPostById(postId) > 0) { - throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", post.getPostName())); + throw new ServiceException(String.format("%1$s宸插垎閰嶏紝涓嶈兘鍒犻櫎!", post.getPostName())); } } - return baseMapper.deleteBatchIds(Arrays.asList(postIds)); + return baseMapper.deleteByIds(Arrays.asList(postIds)); } /** -- Gitblit v1.9.3