package com.isu.gaswellwatch.service.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.isu.gaswellwatch.config.SnowflakeConfig; import com.isu.gaswellwatch.constants.UserConstant; import com.isu.gaswellwatch.entity.*; import com.isu.gaswellwatch.service.BlockDepartmentService; import com.isu.gaswellwatch.service.UserService; import com.isu.gaswellwatch.utils.ConverterUtil; import com.isu.gaswellwatch.vo.UserLoginInfoVO; import com.isu.gaswellwatch.vo.UserVO; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.isu.gaswellwatch.dto.BlockCreateRequest; import com.isu.gaswellwatch.dto.BlockEditRequest; import com.isu.gaswellwatch.vo.BlockPageQuery; import com.isu.gaswellwatch.vo.BlockVO; import com.isu.gaswellwatch.dao.BlockDao; import com.isu.gaswellwatch.service.BlockService; import com.isu.gaswellwatch.mapper.BlockMapper; import org.mapstruct.factory.Mappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * 区块Service业务层处理 * * @author scwsl * @date 2024-11-17 */ @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class BlockServiceImpl extends ServiceImpl implements BlockService { private final BlockDao blockDao; private final BlockMapper blockMapper = Mappers.getMapper(BlockMapper.class); @Resource private BlockDepartmentService blockDepartmentService; @Resource private UserService userService; @Resource private SnowflakeConfig snowflakeConfig; /** * 查询区块 * * @param id 区块主键 * @return 区块 */ @Override public BlockVO selectBlockById(Long id) { return ConverterUtil.convert(blockDao.selectBlockById(id),BlockVO.class); } /** * 查询区块列表 * * @return 区块 */ @Override public List selectBlockList() { //根据当前用户所属的部门筛选可以看到的区块 UserLoginInfoVO userLoginInfoVO = (UserLoginInfoVO) StpUtil.getTokenSession().get(UserConstant.TOKEN_SESSION); UserVO userVO = userService.selectUserInfo(userLoginInfoVO.getUserVO().getUsername()); if("admin".equals(userVO.getUsername())){ //对admin用户不进行过滤筛选 return blockDao.selectBlockList(null); }else{ if(userVO.getDepartment()!=null){ return blockDao.selectBlockList(userVO.getDepartment().getId()); }else{ return new ArrayList<>(); } } } /** * 分页查询区块列表 * * @param name 区块名称 * @return 区块 */ @Override public Page pageForQuery(Integer currentPage,Integer pageSize,String name){ return blockDao.pageForQuery(new Page<>(currentPage, pageSize), name); } /** * 新增区块 * * @param blockCreateRequest 区块 * @return 结果 */ @Override @Transactional(rollbackFor = Throwable.class) public void insertBlock(BlockCreateRequest blockCreateRequest) { blockCreateRequest.setId(snowflakeConfig.snowflakeId()); blockDao.insertBlock(blockMapper.create(blockCreateRequest)); //增加区块部门关联 if(blockCreateRequest.getDepartmentId()!=null){ blockDepartmentService.remove(new LambdaQueryWrapper().eq(BlockDepartment::getBlockId, blockCreateRequest.getId())); addDepartment(blockCreateRequest.getDepartmentId(), blockCreateRequest.getId()); } } private void addDepartment(Long departmentId, Long blockId) { BlockDepartment.builder().id(snowflakeConfig.snowflakeId()).blockId(blockId).departmentId(departmentId).build().insert(); } /** * 修改区块 * * @param blockEditRequest 区块 * @return 结果 */ @Override @Transactional(rollbackFor = Throwable.class) public void updateBlock(BlockEditRequest blockEditRequest) { updateById(Block.builder().id(blockEditRequest.getId()).name(blockEditRequest.getName()).details(blockEditRequest.getDetails()).build()); //增加区块部门关联 if(blockEditRequest.getDepartmentId()!=null){ blockDepartmentService.remove(new LambdaQueryWrapper().eq(BlockDepartment::getBlockId, blockEditRequest.getId())); addDepartment(blockEditRequest.getDepartmentId(), blockEditRequest.getId()); } } /** * 删除区块信息 * * @param id 区块主键 * @return 结果 */ @Override @Transactional(rollbackFor = Throwable.class) public void deleteBlockById(Long id) { blockDao.deleteBlockById(id); blockDepartmentService.remove(new LambdaQueryWrapper().eq(BlockDepartment::getBlockId, id)); } /** * 批量删除删除区块信息 * * @param ids 区块主键 * @return 数量 */ @Override @Transactional(rollbackFor = Throwable.class) public int deleteBlockByIds(Collection ids) { return blockDao.deleteBlockByIds(ids); } }