package doumeemes.service.system.impl; import com.alibaba.fastjson.JSONArray; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.core.utils.Constants; import doumeemes.dao.ext.vo.DepartmentExtListVO; import doumeemes.dao.system.SystemDataPermissionMapper; import doumeemes.dao.system.SystemRoleMapper; import doumeemes.dao.system.model.SystemDataPermission; import doumeemes.dao.system.model.SystemRole; import doumeemes.dao.system.model.SystemUser; import doumeemes.dao.system.vo.SystemDataPermissionListVO; import doumeemes.service.ext.DepartmentExtService; import doumeemes.service.system.SystemDataPermissionService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 数据权限配置Service实现 * @author Eva.Caesar Liu * @date 2022/04/18 18:12 */ @Service public class SystemDataPermissionServiceImpl implements SystemDataPermissionService { @Autowired private DepartmentExtService departmentExtService; @Autowired private SystemDataPermissionMapper systemDataPermissionMapper; @Autowired private SystemRoleMapper systemRoleMapper; @Override public Integer create(SystemDataPermission systemDataPermission) { systemDataPermissionMapper.insert(systemDataPermission); return systemDataPermission.getId(); } @Override public void deleteById(Integer id) { SystemDataPermission dataPermission = new SystemDataPermission(); dataPermission.setId(id); dataPermission.setDeleted(Boolean.TRUE); this.updateById(dataPermission); } @Override public void delete(SystemDataPermission systemDataPermission) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(systemDataPermission); /* if(systemDataPermission.getCompanyId()!=null){ deleteWrapper.exists("select system_role.id from system_role where system_role.id=system_data_permission.`ROLE_ID` and system_role`COMPANY_ID`="+systemDataPermission.getCompanyId()); }*/ systemDataPermissionMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } systemDataPermissionMapper.deleteBatchIds(ids); } @Override public void updateById(SystemDataPermission systemDataPermission) { systemDataPermissionMapper.updateById(systemDataPermission); } @Override public void updateByIdInBatch(List systemDataPermissions) { if (CollectionUtils.isEmpty(systemDataPermissions)) { return; } for (SystemDataPermission systemDataPermission: systemDataPermissions) { this.updateById(systemDataPermission); } } @Override public SystemDataPermission findById(Integer id) { return systemDataPermissionMapper.selectById(id); } @Override public SystemDataPermission findOne(SystemDataPermission systemDataPermission) { Wrapper wrapper = new QueryWrapper<>(systemDataPermission); return systemDataPermissionMapper.selectOne(wrapper); } @Override public List findList(SystemDataPermission systemDataPermission) { Wrapper wrapper = new QueryWrapper<>(systemDataPermission); return systemDataPermissionMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); return PageData.from(new PageInfo<>(systemDataPermissionMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause()))); } @Override public List selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user, DepartmentExtListVO department) { Listlist = systemDataPermissionMapper.selectUserList(model,role,user.getId()) ; if(list !=null){ boolean all = false; boolean departAndChild=false; boolean depart=false; boolean departAndLeaf=false; boolean custom=false; String c = ""; for(SystemDataPermissionListVO d : list){ if(!all && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.all)){ all =true; } if(!depart && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.depart)){ depart =true; } if(!departAndChild && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndChild)){ departAndChild =true; } if(!departAndLeaf && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndLeaf)){ departAndLeaf =true; } if( Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.custom)){ custom =true; c += StringUtils.defaultString(d.getCustomData(),""); } } if(all){ return null; }else{ List dList = new ArrayList<>(); if(custom) { //如果有自定义部门 String[] idStrs = c.split(","); for(String s :idStrs){ try { Integer si = Integer.parseInt(s); if(!isExists(si,dList)){ dList.add(si); } }catch (Exception e){ } } } if(departAndLeaf){ if(department!= null){ dList.addAll(departmentExtService.userDataPermissonList(department,true)); } }else if(departAndChild){ if(department!= null) { dList.addAll(departmentExtService.userDataPermissonList(department, false)); } }else if(depart){ if(department!= null && !isExists(department.getId(), dList)){ dList.add(department.getId()); } } return dList; } } return new ArrayList<>(); } private boolean isExists(Integer s, List dList) { if(dList!=null){ for(Integer t : dList){ if(Constants.equalsInteger(s,t)){ return true; } } } return false; } @Override public List selectUserList( SystemDataPermission model,SystemRole role,Integer userId) { return systemDataPermissionMapper.selectUserList(model,role,userId) ; } @Override public List findDataPermission(String businessCode, List roles) { if (CollectionUtils.isEmpty(roles)) { return Collections.emptyList(); } // 查询角色 QueryWrapper queryRoleWrapper = new QueryWrapper<>(); queryRoleWrapper.lambda().in(SystemRole::getCode, roles).eq(SystemRole::getDeleted, Boolean.FALSE); List systemRoles = systemRoleMapper.selectList(queryRoleWrapper); if (CollectionUtils.isEmpty(systemRoles)) { return Collections.emptyList(); } List roleIds = new ArrayList<>(); for (SystemRole role : systemRoles) { roleIds.add(role.getId()); } // 查询数据权限 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .eq(SystemDataPermission::getBusinessCode, businessCode) .in(SystemDataPermission::getRoleId, roleIds) .eq(SystemDataPermission::getDeleted, Boolean.FALSE) .eq(SystemDataPermission::getDisabled, Boolean.FALSE); return systemDataPermissionMapper.selectList(queryWrapper); } @Override public SystemDataPermission findByRoleId(SystemDataPermission pageWrap){ if ( pageWrap.getRoleId() == null) { return null; } // 查询数据权限 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .eq(SystemDataPermission::getBusinessCode, "DEPARTMENT") .eq(SystemDataPermission::getRoleId, pageWrap.getRoleId()) .eq(SystemDataPermission::getDeleted, Boolean.FALSE) .eq(SystemDataPermission::getDisabled, Boolean.FALSE); List result = systemDataPermissionMapper.selectList(queryWrapper); if(result!=null && result.size()>0){ return result.get(0); } return null; } @Override public long count(SystemDataPermission systemDataPermission) { Wrapper wrapper = new QueryWrapper<>(systemDataPermission); return systemDataPermissionMapper.selectCount(wrapper); } }