package com.ghsc.partybuild.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ghsc.partybuild.mapper.CfMenuRoleMapper; import com.ghsc.partybuild.mapper.CfRolesCQuery; import com.ghsc.partybuild.mapper.CfRolesMapper; import com.ghsc.partybuild.mapper.CfUserrolesMapper; import com.ghsc.partybuild.model.*; import com.ghsc.partybuild.service.RoleService; import com.ghsc.partybuild.util.MapUtils; import com.ghsc.partybuild.util.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.*; @Service("roleService") public class RoleServiceImpl implements RoleService { @Autowired private CfRolesMapper cfRolesMapper; @Autowired private CfMenuRoleMapper cfMenuRoleMapper; @Autowired private CfRolesCQuery cfRolesCQuery; @Autowired private CfUserrolesMapper cfUserrolesMapper; @Autowired private StringUtils stringUtils; @Autowired private MapUtils mapUtils; @Override public String saveRole(CfRoles cfRoles) { if (stringUtils.IsNullOrEmpty(cfRoles.getRoleid())) { cfRoles.setRoleid(UUID.randomUUID().toString()); cfRolesMapper.insert(cfRoles); } else { cfRolesMapper.updateByPrimaryKey(cfRoles); } return cfRoles.getRoleid(); } @Override public PageInfo getRoleList(int pageNum, int pageSize, String appid, String roleName) { PageHelper.startPage(pageNum, pageSize); CfRolesExample exp = new CfRolesExample(); CfRolesExample.Criteria criteria1 = exp.or().andApplicationidEqualTo(appid); if (roleName != null && roleName.length() > 0) { criteria1.andRolenameLike(roleName.trim()); } List roles = cfRolesMapper.selectByExample(exp); PageInfo result = new PageInfo(roles); return result; } @Override public PageInfo getRoleList(int pageNum, int pageSize, String appid, String roleName, String userId) { //如果非管理员GetRoleList List> roleList = cfRolesCQuery.valUserRole(userId, "管理员"); String roleCondition = ""; if (roleList.size() == 0) { //获取用户所有分组的角色和最大等级 List> userRoles = cfRolesCQuery.getUserRoles(userId); if (userRoles.size() > 0) { roleCondition = " and (1=2"; for (HashMap r : userRoles) { roleCondition += " or (GROUPBY='" + r.get("GROUPBY") + "' and orderby<=" + r.get("ORDERBY") + ")"; } roleCondition += ")"; } } PageHelper.startPage(pageNum, pageSize); PageHelper.orderBy("groupby asc,orderby desc"); List roles = cfRolesCQuery.selectRoleByExample(roleName, roleCondition); PageInfo result = new PageInfo(roles); return result; } @Override public List getRolesByUid(String uid) { List roles = cfRolesCQuery.selectRoleByUserid(uid); return roles; } @Override public List getMenuIdsByRoleId(String roleId) { CfMenuRoleExample exp = new CfMenuRoleExample(); exp.or().andRoleidEqualTo(roleId); List menulist = new ArrayList(); cfMenuRoleMapper.selectByExample(exp).forEach(it -> menulist.add(it.getMenuid())); return menulist; } @Override public CfRoles getRoleById(String roleId) { return cfRolesMapper.selectByPrimaryKey(roleId); } @Override public PageInfo> getRoleUserList(String roleId,String username, int pageIndex, int pageSize) { PageHelper.startPage(pageIndex, pageSize); List> users = cfRolesCQuery.selectRoleUserList(roleId,username); return new PageInfo(users); } @Override public int SaveRoleList(String roleId, String menuIds) { String[] menuIdArray = menuIds == null ? new String[]{} : menuIds.split(","); List menuIdList = Arrays.asList(menuIdArray); CfMenuRoleExample expMR = new CfMenuRoleExample(); expMR.or().andRoleidEqualTo(roleId); List exitMR = cfMenuRoleMapper.selectByExample(expMR); List exitMRKeyList = new ArrayList<>(); int changeCount = 1; //清除掉差异数据 for (CfMenuRoleKey exitKey : exitMR) { exitMRKeyList.add(exitKey.getMenuid()); if (!menuIdList.contains(exitKey.getMenuid())) { int drow = cfMenuRoleMapper.deleteByPrimaryKey(exitKey); if (drow > 0) { changeCount++; } } } //新增添加数据 for (String menuId : menuIdList) { if (!exitMRKeyList.contains(menuId)) { CfMenuRoleKey cfMenuRole = new CfMenuRoleKey(); cfMenuRole.setRoleid(roleId); cfMenuRole.setMenuid(menuId); int irow = cfMenuRoleMapper.insert(cfMenuRole); if (irow > 0) { changeCount++; } } } return changeCount; } @Override public String deleteRole(String roleId) { String result; CfUserrolesExample expUr = new CfUserrolesExample(); expUr.or().andRoleidEqualTo(roleId); List cfURModel = cfUserrolesMapper.selectByExample(expUr); if (cfURModel.isEmpty()) { CfMenuRoleExample expMr = new CfMenuRoleExample(); expMr.or().andRoleidEqualTo(roleId); int drowUr = cfMenuRoleMapper.deleteByExample(expMr); int drowRole = cfRolesMapper.deleteByPrimaryKey(roleId); result = ""; } else { result = "删除角色必需先清理角色下相关人员!"; } return result; } @Override public List getRoleNameByUserId(String userId) { // return this.cfUserrolesMapper.GetRoleNameByUserId(userId); return null; } @Override public List getRoleUsersByRoleName(String roleName){ String roleid=getRoleId(roleName); CfUserrolesExample expUr = new CfUserrolesExample(); expUr.or().andRoleidEqualTo(roleid); List cfURModel = cfUserrolesMapper.selectByExample(expUr); return cfURModel; } private String getRoleId(String roleName) { CfRolesExample example = new CfRolesExample(); example.or().andRolenameEqualTo(roleName); List roles = cfRolesMapper.selectByExample(example); if (roles.size() > 0) { return roles.get(0).getRoleid(); } return null; } @Override public List> getRoleByUserName(String userName) { return this.cfRolesCQuery.GetRoleByUserName(userName); } @Override public int insertUserRole(String userName, String roleId) { return this.cfRolesCQuery.insertUserRole(userName, roleId); } }