package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.whyc.dto.Response; import com.whyc.mapper.CommonMapper; import com.whyc.mapper.PermitGroupMapper; import com.whyc.mapper.PermitGroupUserMapper; import com.whyc.mapper.UserMapper; import com.whyc.pojo.db_user.Permitgroup; import com.whyc.pojo.db_user.PermitgroupUsr; import com.whyc.pojo.db_user.User; import com.whyc.util.ActionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Transactional public class PermitGroupService { @Resource private PermitGroupMapper mapper; @Resource private PermitGroupUserMapper permitGroupUserMapper; @Resource private CommonMapper commonMapper; @Resource private UserMapper userInfMapper; @Autowired private UserService userService; @Transactional public Response add(List permitGroupList) { //首先校验当前用户所在的权限组,是否存在权限编辑权限 permit_edit_permit // if (!checkUserPermit()) return new Response().set(1, false, "当前用户没有权限编辑权限组"); Response response = new Response(); //权限互斥,查询已存在的权限组,不允许存在权限完全一样的权限组 /* QueryWrapper wrapper = Wrappers.query(); //wrapper.select("permit_group_id","permit_item_name","permit_item_value"); wrapper.select("permit_group_id","permit_item_value").ge("permit_group_id",100); List existGroupList = mapper.selectList(wrapper); Map> existGroupListMap = existGroupList.stream().collect(Collectors.groupingBy(PermitGroup::getPermitGroupId)); Set keySet = existGroupListMap.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()){ boolean diff = false; List existGroupListII = existGroupListMap.get(iterator.next()); for (int i = 0; i < existGroupListII.size(); i++) { if(!permitGroupList.get(i).getPermitItemValue().equals(existGroupListII.get(i).getPermitItemValue())){ //存在差异,进入下个组校验 diff = true; break; } } //如果每项都不存在差异 if(!diff){ return response.set(1,false,"有存在权限完全相同的权限组,无法添加"); } }*/ //权限组id生成 int maxValue = (int) commonMapper.getMaxValue("db_user", "tb_permitgroup", "permit_group_id"); int newPermitGroupId = maxValue+1; permitGroupList.stream().forEach(permitGroup -> permitGroup.setPermitGroupId(newPermitGroupId)); mapper.insertBatchSomeColumn(permitGroupList); return response.set(1,true,"添加成功"); } //验证权限 private boolean checkUserPermit() { Integer uId = ActionUtil.getUser().getId(); List itemList = permitGroupUserMapper.getItemList(uId); if (!itemList.contains("permit_edit_permit")){ return false; } return true; } //验证指定权限 public boolean checkUserPermitWithName(String permitName) { Integer uid = ActionUtil.getUser().getId(); List itemList = permitGroupUserMapper.getItemList(uid); if (!itemList.contains(permitName)){ return false; } return true; } @Transactional public Response update(List permitGroupList) { //首先校验当前用户所在的权限组,是否存在权限编辑权限 permit_edit_permit //if (!checkUserPermit()) return new Response().set(1, false, "当前用户没有权限编辑权限组"); Response response = new Response<>(); //权限互斥,查询已存在的权限组,不允许存在权限完全一样的权限组(应该剔除掉数据库中的自己权限组的校验,可以不更新) /*QueryWrapper wrapper = Wrappers.query(); //wrapper.select("permit_group_id","permit_item_name","permit_item_value"); wrapper.select("permit_group_id","permit_item_value").ge("permit_group_id",100).ne("permit_group_id",permitGroupList.get(0).getPermitGroupId()); List existGroupList = mapper.selectList(wrapper); Map> existGroupListMap = existGroupList.stream().collect(Collectors.groupingBy(PermitGroup::getPermitGroupId)); Set keySet = existGroupListMap.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()){ boolean diff = false; List existGroupListII = existGroupListMap.get(iterator.next()); for (int i = 0; i < existGroupListII.size(); i++) { if(!permitGroupList.get(i).getPermitItemValue().equals(existGroupListII.get(i).getPermitItemValue())){ //存在差异,进入下个组校验 diff = true; break; } } //如果每项都不存在差异 if(!diff){ return response.set(1,false,"有存在权限完全相同的权限组,无法更新"); } }*/ //先删除,后增加 UpdateWrapper updateWrapper = Wrappers.update(); updateWrapper.eq("permit_group_id",permitGroupList.get(0).getPermitGroupId()); mapper.delete(updateWrapper); mapper.insertBatchSomeColumn(permitGroupList); return response.set(1,true,"更新成功"); } @Transactional public boolean delete(Integer permitGroupId) { if(permitGroupId==100001){ return false; } //删除权限组表记录 UpdateWrapper groupWrapper = Wrappers.update(); groupWrapper.eq("permit_group_id",permitGroupId); mapper.delete(groupWrapper); //删除权限组对应的用户记录 UpdateWrapper groupUserWrapper = Wrappers.update(); groupUserWrapper.eq("permit_group_id",permitGroupId); permitGroupUserMapper.delete(groupUserWrapper); return true; } public List getList() { QueryWrapper wrapper = Wrappers.query(); wrapper.select("distinct permit_group_id,permit_group_name"); return mapper.selectList(wrapper); } public Map getPermitGroupInfo(Integer permitGroupId) { Map resultMap = new HashMap<>(); //查询权限组已添加的用户 List relatedUserInfList = permitGroupUserMapper.getUserInf(permitGroupId); //查询权限组未添加的用户 //List allUserInfList = userInfMapper.selectList(null); //List notRelatedUserInfList = allUserInfList.stream().filter(userInf -> !relatedUserInfList.contains(userInf)).collect(Collectors.toList()); //查询未被添加到所有权限组的用户 List notRelatedUserInfList = userService.searchCS_All2(); //查询权限组的明细权限 QueryWrapper wrapper = Wrappers.query(); wrapper.eq("permit_group_id",permitGroupId); List permitGroupList = mapper.selectList(wrapper); resultMap.put("usersAdded",relatedUserInfList); resultMap.put("usersNotAdded",notRelatedUserInfList); resultMap.put("permits",permitGroupList); return resultMap; } public List getPermitList() { QueryWrapper wrapper = Wrappers.query(); wrapper.select("distinct permit_item_name"); List permitGroups = mapper.selectList(wrapper); return permitGroups; } //查询权限组信息 public List getPermitGroup(int permitGroupId) { QueryWrapper wrapper = Wrappers.query(); wrapper.eq("permit_group_id",permitGroupId); wrapper.eq("permit_item_value",1); List permitGroups = mapper.selectList(wrapper); return permitGroups; } }