package com.xmzs.system.service.impl; 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 com.xmzs.common.core.exception.ServiceException; import com.xmzs.common.core.utils.MapstructUtils; import com.xmzs.common.core.utils.StringUtils; import com.xmzs.common.mybatis.core.page.PageQuery; import com.xmzs.common.mybatis.core.page.TableDataInfo; import com.xmzs.system.domain.SysPost; import com.xmzs.system.domain.SysUserPost; import com.xmzs.system.domain.bo.SysPostBo; import com.xmzs.system.domain.vo.SysPostVo; import com.xmzs.system.mapper.SysPostMapper; import com.xmzs.system.mapper.SysUserPostMapper; import com.xmzs.system.service.ISysPostService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; /** * 岗位信息 服务层处理 * * @author Lion Li */ @RequiredArgsConstructor @Service public class SysPostServiceImpl implements ISysPostService { private final SysPostMapper baseMapper; private final SysUserPostMapper userPostMapper; @Override public TableDataInfo selectPagePostList(SysPostBo post, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(post); Page page = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(page); } /** * 查询岗位信息集合 * * @param post 岗位信息 * @return 岗位信息集合 */ @Override public List selectPostList(SysPostBo post) { LambdaQueryWrapper lqw = buildQueryWrapper(post); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(SysPostBo bo) { LambdaQueryWrapper 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; } /** * 查询所有岗位 * * @return 岗位列表 */ @Override public List selectPostAll() { return baseMapper.selectVoList(new QueryWrapper<>()); } /** * 通过岗位ID查询岗位信息 * * @param postId 岗位ID * @return 角色对象信息 */ @Override public SysPostVo selectPostById(Long postId) { return baseMapper.selectVoById(postId); } /** * 根据用户ID获取岗位选择框列表 * * @param userId 用户ID * @return 选中岗位ID列表 */ @Override public List selectPostListByUserId(Long userId) { return baseMapper.selectPostListByUserId(userId); } /** * 校验岗位名称是否唯一 * * @param post 岗位信息 * @return 结果 */ @Override public boolean checkPostNameUnique(SysPostBo post) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysPost::getPostName, post.getPostName()) .ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); return !exist; } /** * 校验岗位编码是否唯一 * * @param post 岗位信息 * @return 结果 */ @Override public boolean checkPostCodeUnique(SysPostBo post) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysPost::getPostCode, post.getPostCode()) .ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); return !exist; } /** * 通过岗位ID查询岗位使用数量 * * @param postId 岗位ID * @return 结果 */ @Override public long countUserPostById(Long postId) { return userPostMapper.selectCount(new LambdaQueryWrapper().eq(SysUserPost::getPostId, postId)); } /** * 删除岗位信息 * * @param postId 岗位ID * @return 结果 */ @Override public int deletePostById(Long postId) { return baseMapper.deleteById(postId); } /** * 批量删除岗位信息 * * @param postIds 需要删除的岗位ID * @return 结果 */ @Override public int deletePostByIds(Long[] postIds) { for (Long postId : postIds) { SysPost post = baseMapper.selectById(postId); if (countUserPostById(postId) > 0) { throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); } } return baseMapper.deleteBatchIds(Arrays.asList(postIds)); } /** * 新增保存岗位信息 * * @param bo 岗位信息 * @return 结果 */ @Override public int insertPost(SysPostBo bo) { SysPost post = MapstructUtils.convert(bo, SysPost.class); return baseMapper.insert(post); } /** * 修改保存岗位信息 * * @param bo 岗位信息 * @return 结果 */ @Override public int updatePost(SysPostBo bo) { SysPost post = MapstructUtils.convert(bo, SysPost.class); return baseMapper.updateById(post); } }