package com.highdatas.mdm.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.highdatas.mdm.entity.*; import com.highdatas.mdm.mapper.MasterAuthorMapper; import com.highdatas.mdm.pojo.CodeMsg; import com.highdatas.mdm.pojo.MasterAuthorType; import com.highdatas.mdm.pojo.Result; import com.highdatas.mdm.service.*; import com.highdatas.mdm.util.Constant; import com.highdatas.mdm.util.DbUtils; import com.highdatas.mdm.util.RedisClient; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author kimi * @since 2020-03-23 */ @RestController @RequestMapping("/masterAuthor") public class MasterAuthorController { @Autowired IMasterAuthorService authorService; @Autowired IMasterAuthorDetailService authorDetailService; @Autowired IMenuMappingService menuMappingService; @Autowired ISysMenuService menuService; @Autowired MasterAuthorMapper masterAuthorMapper; @Autowired IMaintainFieldService maintainFieldService; @Autowired IMasterAuthorUnactiveService masterAuthorUnactiveService; @Autowired IMasterAuthorSubscribeService masterAuthorSubscribeService; @Autowired IMaintainService maintainService; @Autowired RedisClient redisClient; public static final String masterAuthorType = "masterAuthorType"; public static final String masterId = "masterId"; public static final String tableName = "table_name"; public static final String characterId = "characterId"; public static final String character_id = "character_id"; public static final String fields = "fields"; private String maintainFieldId = "maintainFieldId"; private String maintain_field_id = "maintain_field_id"; /** * * @description: 添加或者更新权限 * @return 权限数据 * */ @RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST) public Result deleteModel(@RequestBody MasterAuthor masterAuthor) { if (StringUtils.isEmpty(masterAuthor.getMaintainFieldId())) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } if (!StringUtils.isEmpty(masterAuthor.getId())) { masterAuthor.setUpdateTime(new Date()); }else { masterAuthor.setId(DbUtils.getUUID()).setCreateTime(new Date()); } String menuId = masterAuthor.getMenuId(); String tableName = menuMappingService.getTableNameByMenu(menuId); masterAuthor.setTableName(tableName); //delete pre boolean delete = authorDetailService.delete(new EntityWrapper().eq(Constant.PARENT_ID, masterAuthor.getId())); if (!delete){ return Result.error(CodeMsg.DELETE_ERROR); } for (MasterAuthorDetail detail : masterAuthor.getFields()) { detail.setId(DbUtils.getUUID()).setParentId(masterAuthor.getId()).insert(); } boolean b = masterAuthor.insertOrUpdate(); if (b) { redisClient.delByCharacter(masterAuthor.getCharacterId()); return Result.success(masterAuthor); }else { return Result.error(CodeMsg.UPDATE_ERROR); } } /** * * @description: 通过系统用户获取权限 * @param characterId 系统用户 * @param isGroup 是否为用户组数据 * @param type 用户类型 * @return 具体数据 * */ @RequestMapping(value = "/get/{characterId}", method = RequestMethod.GET) public Result get(@PathVariable String characterId,@RequestParam boolean isGroup, @RequestParam MasterAuthorType type, HttpServletRequest request){ List masterAuthorList = authorService.selectList(new EntityWrapper().eq("user_group", isGroup).eq("type", type.name()).eq("character_id", characterId)); if (type.equals(MasterAuthorType.role) && masterAuthorList.isEmpty()) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); }else if (type.equals(MasterAuthorType.user) && masterAuthorList.isEmpty()){ //user 获取角色 多脚色混合 String userId = characterId; Set roleIdSet; if (isGroup) { roleIdSet = DbUtils.getRoleByGroup(userId); } else { roleIdSet = DbUtils.getRoleByUser(userId); } if (roleIdSet.isEmpty()) { return Result.success(null); } HashMap tableMasterAuthor = authorService.merageRoleAuthor(roleIdSet); if (tableMasterAuthor == null) { Result.success(null); } JSONObject object = new JSONObject(); ArrayList list = new ArrayList(tableMasterAuthor.values()); object.fluentPut("type", MasterAuthorType.role); object.fluentPut("author",list); Set collect = list.stream().map(masterAuthor -> masterAuthor.getMenuId()).collect(Collectors.toSet()); LinkedHashSet menuIds= new LinkedHashSet<>(collect); List sysMenus = menuService.getMenuByParentId(menuIds); if (sysMenus == null) { return Result.success(object); } object.fluentPut("audit",sysMenus); return Result.success(object); } for (MasterAuthor masterAuthor : masterAuthorList) { List masterAuthorDetails = authorDetailService .selectList(new EntityWrapper() .eq(Constant.PARENT_ID, masterAuthor.getId())); masterAuthor.setFields(masterAuthorDetails); } JSONObject object = new JSONObject(); object.fluentPut("type", type); object.fluentPut("author",masterAuthorList); Set collect = masterAuthorList.stream().map(masterAuthor -> masterAuthor.getMenuId()).collect(Collectors.toSet()); LinkedHashSet menuIds= new LinkedHashSet<>(collect); List sysMenus = menuService.getMenuByParentId(menuIds); if (sysMenus == null) { return Result.success(object); } object.fluentPut("audit",sysMenus); return Result.success(object); } /** * * @description: 通过系统用户删除权限 * @param characterId 系统用户 * @param type 用户类型 * @return 是否删除成功 * */ @RequestMapping(value = "/delete/{characterId}", method = RequestMethod.GET) public Result delete(@PathVariable String characterId, @RequestParam MasterAuthorType type){ List masterAuthorList = authorService.selectList(new EntityWrapper() .eq(Constant.TYPE, type).eq(this.character_id, characterId)); if (masterAuthorList.isEmpty()) { return Result.success(null); } boolean delete = false; for (MasterAuthor masterAuthor : masterAuthorList) { delete = authorDetailService.delete(new EntityWrapper().eq(Constant.PARENT_ID, masterAuthor.getId())); if (delete) { delete = masterAuthor.deleteById(); } } if (delete) { redisClient.delByCharacter(characterId); return Result.success(CodeMsg.DELETE_SUCCESS); }else { return Result.error(CodeMsg.DELETE_ERROR); } } /** * * @description: 通过主题删除权限 * @param characterId 系统用户 * @param menuId 主题id * @param type 用户类型 * @return 具体数据 * */ @RequestMapping(value = "/delete/menu/{menuId}", method = RequestMethod.GET) public Result deleteTable(@PathVariable String menuId, @RequestParam String characterId, @RequestParam MasterAuthorType type, HttpServletRequest request){ String maintainFieldId = request.getParameter(this.maintainFieldId); Wrapper masterAuthorWrapper = new EntityWrapper() .eq(Constant.TYPE, type) .eq(character_id, characterId) .eq("menu_id", menuId); Wrapper menuWrapper = new EntityWrapper() .eq(Constant.TYPE, type) .eq(character_id, characterId) .eq("menu_id", menuId); if (!StringUtils.isEmpty(maintainFieldId)) { masterAuthorWrapper.eq(this.maintain_field_id, maintainFieldId); } int count = authorService.selectCount(menuWrapper); boolean only = false; if (count == 1 && !StringUtils.isEmpty(maintainFieldId)) { only = true; } List masterAuthors = authorService.selectList(masterAuthorWrapper); if (masterAuthors == null || masterAuthors.isEmpty()) { return Result.success(null); } boolean delete = false; for (MasterAuthor masterAuthor : masterAuthors) { delete = authorDetailService.delete(new EntityWrapper().eq(Constant.PARENT_ID, masterAuthor.getId())); if (delete) { if (only){ delete = masterAuthor.setMaintainFieldId(null).setFieldAuto(false).setMaintainAuto(false).setUpdateTime(new Date()).updateById(); }else { delete = masterAuthor.deleteById(); } } } if (delete) { redisClient.delByCharacter(characterId); return Result.success(CodeMsg.DELETE_SUCCESS); }else { return Result.error(CodeMsg.DELETE_ERROR); } } /** * * @description: 用户组添加角色关联 * @param groupId 用户组id * @param roleId 角色id * @return 是否添加成功 * */ @RequestMapping(value = "/groupAddRole/{roleId}", method = RequestMethod.GET) public Result addGroupRole(@PathVariable String roleId, @RequestParam String groupId, HttpServletRequest request){ TUser user = DbUtils.getUser(request); if (user == null){ return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } ArrayList addRoleList = new ArrayList<>(); Set roleIdSet = DbUtils.getRoleByGroup(groupId); addRoleList.addAll(roleIdSet); addRoleList.add(roleId); boolean b = DbUtils.groupAddOneRole(user.getUserId(),groupId, addRoleList); if (!b) { return Result.error(CodeMsg.INSERT_ERROR); } roleIdSet.add(roleId); HashMap tableMasterAuthor = authorService.merageRoleAuthor(roleIdSet); if (tableMasterAuthor == null) { Result.success(null); } return Result.success(tableMasterAuthor.values()); } /** * * @description: 用户添加角色关联 * @param userId 用户id * @param roleId 角色id * @return 是否添加成功 * */ @RequestMapping(value = "/userAddRole/{roleId}", method = RequestMethod.GET) public Result addRole(@PathVariable String roleId, @RequestParam String userId, HttpServletRequest request){ TUser user = DbUtils.getUserById(userId); if (user == null){ return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } ArrayList addRoleList = new ArrayList<>(); Set roleIdSet = DbUtils.getRoleByUser(userId); addRoleList.addAll(roleIdSet); addRoleList.add(roleId); boolean b = DbUtils.addOneRole(user, addRoleList); if (!b) { return Result.error(CodeMsg.INSERT_ERROR); } roleIdSet.add(roleId); HashMap tableMasterAuthor = authorService.merageRoleAuthor(roleIdSet); if (tableMasterAuthor == null) { Result.success(null); } return Result.success(tableMasterAuthor.values()); } /** * * @description: 用户删除角色关联 * @param userId 用户id * @param roleId 角色id * @return 是否删除成功 * */ @RequestMapping(value = "/userDelRole/{roleId}", method = RequestMethod.GET) public Result delRole(@PathVariable String roleId, @RequestParam String userId, HttpServletRequest request){ ArrayList delRoleList = new ArrayList<>(); delRoleList.add(roleId); boolean b = DbUtils.delOneRole(userId, delRoleList); if (!b) { return Result.error(CodeMsg.INSERT_ERROR); } Set roleIdSet = DbUtils.getRoleByUser(userId); HashMap tableMasterAuthor = authorService.merageRoleAuthor(roleIdSet); if (tableMasterAuthor == null) { Result.success(null); } return Result.success(tableMasterAuthor.values()); } /** * * @description: 用户组删除角色关联 * @param groupId 用户组id * @param roleId 角色id * @return 是否删除成功 * */ @RequestMapping(value = "/groupDelRole/{roleId}", method = RequestMethod.GET) public Result delGroupRole(@PathVariable String roleId, @RequestParam String groupId, HttpServletRequest request){ ArrayList delRoleList = new ArrayList<>(); delRoleList.add(roleId); boolean b = DbUtils.groupDelOneRole(groupId, delRoleList); if (!b) { return Result.error(CodeMsg.INSERT_ERROR); } Set roleIdSet = DbUtils.getRoleByGroup(groupId); HashMap tableMasterAuthor = authorService.merageRoleAuthor(roleIdSet); if (tableMasterAuthor == null) { Result.success(null); } return Result.success(tableMasterAuthor.values()); } /** * * @description: 通过用户id获取已经注册list * @param userId 用户id * @return 已注册list * */ @RequestMapping(value = "/subscribeList/{userId}", method = RequestMethod.GET) public Result subscribeList(@PathVariable String userId, HttpServletRequest request){ TUser user = DbUtils.getUserById(userId); if (user == null){ return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } List menuList = authorService.getMenuUnParent(user, true); if (menuList == null) { return Result.success(null); } List userAuthor = authorService.getUserAuthor(userId, null); ArrayList result = new ArrayList<>(); for (SysMenu sysMenu : menuList) { long count = userAuthor.stream().filter(masterAuthor -> masterAuthor.getMenuId().equalsIgnoreCase(sysMenu.getId())).count(); if (count > 0) { result.add(sysMenu); } } LinkedHashSet parentSet = new LinkedHashSet<>(); for (SysMenu menu : result) { menu.setShow(false); String menuId = menu.getId(); String tableNameByMenu = menuMappingService.getTableNameByMenu(menuId); menu.setTableName(tableNameByMenu); parentSet.clear(); parentSet.add(menuId); List sysMenus = menuService.getMenuByParentId(parentSet); menu.setParentMenuList(sysMenus); int i = masterAuthorSubscribeService.selectCount(new EntityWrapper().eq("menu_id", menuId).eq("user_id", userId)); if (i > 0) { menu.setSubscribe(true); } } return Result.success(result); } // @RequestMapping(value = "/canLoadData/{userId}", method = RequestMethod.GET) // public Result canLoadData(@PathVariable String userId, @RequestParam String tableName, HttpServletRequest request) { // TUser user = DbUtils.getUserById(userId); // if (user == null) { // return Result.error(CodeMsg.USER_NOT_MATHED); // } // } /** * * @description: 通过userid获取有权限的主题 * @param userId 用户id * @return 主题列表 * */ @RequestMapping(value = "/menu/{userId}", method = RequestMethod.GET) public Result> menuList(@PathVariable String userId, HttpServletRequest request) { TUser user = DbUtils.getUserById(userId); if (user == null) { return Result.error(CodeMsg.USER_NOT_MATHED); } List menu = authorService.getMenu(user, true); return Result.success(menu) ; } /** * * @description: 通过userid获取有权限的主题数据 * @param userId 用户id * @return 获取有权限的数据数 * */ @RequestMapping(value = "/getCnt/{userId}", method = RequestMethod.GET) public Result cnt(@PathVariable String userId, HttpServletRequest request) { //TODO active TUser user = DbUtils.getUserById(userId); if (user == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } List userAuthor = authorService.getUserAuthor(userId, null); List menuList = authorService.getMenuUnParent(user, true); int totalCnt = 0; int subscribeCnt = 0; int activeCnt = 0; if (menuList == null) { JSONObject object = new JSONObject(); object.fluentPut("totalCnt", 0); object.fluentPut("activeCnt", 0); object.fluentPut("subscribeCnt", 0); return Result.success(object); } for (SysMenu sysMenu : menuList) { List authorMaintainFieldList = userAuthor.stream() .filter(masterAuthor -> masterAuthor.getMenuId().equalsIgnoreCase(sysMenu.getId())) .collect(Collectors.toList()); int count = authorMaintainFieldList.size(); if (count > 0) { totalCnt++; HashSet maintainSet = new HashSet<>(); for (MasterAuthor masterAuthor : authorMaintainFieldList) { String maintainFieldId = masterAuthor.getMaintainFieldId(); String tableName = masterAuthor.getTableName(); List maintainByMaintainField = maintainFieldService.getMaintainByMaintainField(maintainFieldId, tableName); if (maintainByMaintainField != null) { maintainSet.addAll(maintainByMaintainField); } } int unActiveCnt = masterAuthorUnactiveService.selectCount(new EntityWrapper().in("maintain_id", maintainSet).eq("user_id", userId)); if (maintainSet.size() != unActiveCnt) { activeCnt++; } int oneSubscribeCnt = masterAuthorSubscribeService.selectCount(new EntityWrapper().eq("user_id", userId).eq("menu_id", sysMenu.getId())); if (oneSubscribeCnt > 0){ subscribeCnt++; } } } JSONObject object = new JSONObject(); object.fluentPut("totalCnt", totalCnt); object.fluentPut("activeCnt", activeCnt); object.fluentPut("subscribeCnt", subscribeCnt); return Result.success(object); } /** * * @description: 通过版本获取激活的主题 * @param maintainId 主题id * @param userId 用户id * @param active 激活状态 * @return 已激活的主题数 * */ @RequestMapping(value = "/active/{maintainId}", method = RequestMethod.GET) public Result active(@PathVariable String maintainId, @RequestParam String userId, @RequestParam Boolean active) { TUser user = DbUtils.getUserById(userId); if (user == null) { return Result.error(CodeMsg.USER_NOT_MATHED); } MasterAuthorUnactive masterAuthorUnactive = masterAuthorUnactiveService.selectOne(new EntityWrapper().eq(Constant.USERID, userId).eq("maintain_id", maintainId)); if (masterAuthorUnactive == null && active) { return Result.success(null); } else if (masterAuthorUnactive == null && !active) { boolean insert = new MasterAuthorUnactive().setId(DbUtils.getUUID()).setMaintainId(maintainId).setUserId(userId).insert(); if (insert) { return Result.success(null); } else { return Result.error(null); } } else if (active) { boolean delete = masterAuthorUnactive.deleteById(); if (delete) { return Result.success(null); } else { return Result.error(null); } } else { return Result.success(null); } } /** * * @description: 获取有权限的list和用户map * @return list和用户map列表 * */ @RequestMapping(value = "/cntList", method = RequestMethod.GET) public Result cntList() { HashMap result = new HashMap<>(); //user Set allUser = DbUtils.getAllUser(); for (TUser user : allUser) { int activeCnt = 0; List userAuthor = authorService.getUserAuthor(user.getUserId(), null); List menuList = authorService.getMenuUnParent(user, true); if (menuList == null) { continue; } for (SysMenu sysMenu : menuList) { List authorMaintainFieldList = userAuthor.stream() .filter(masterAuthor -> masterAuthor.getMenuId().equalsIgnoreCase(sysMenu.getId())) .collect(Collectors.toList()); int count = authorMaintainFieldList.size(); if (count > 0) { HashSet maintainSet = new HashSet<>(); for (MasterAuthor masterAuthor : authorMaintainFieldList) { String maintainFieldId = masterAuthor.getMaintainFieldId(); String tableName = masterAuthor.getTableName(); List maintainByMaintainField = maintainFieldService.getMaintainByMaintainField(maintainFieldId, tableName); maintainSet.addAll(maintainByMaintainField); } int unActiveCnt = masterAuthorUnactiveService.selectCount(new EntityWrapper().in("maintain_id", maintainSet).eq("user_id", user.getUserId())); if (maintainSet.size() != unActiveCnt) { activeCnt++; } } result.put(user.getUserId(), Long.valueOf(activeCnt)); } } List> userMapList = masterAuthorMapper.selectViewCnt(); merageUserCnt(result, userMapList); if (result.isEmpty()) { return Result.success(null); } return Result.success(result); } /** * * @description: 通过表名获取有权限的版本list * @param userId 用户id * @param tableName 表名 * @return 获取有权限的版本list * */ @RequestMapping(value = "/maintainList/{userId}", method = RequestMethod.GET) public Result maintainList(@PathVariable String userId, @RequestParam String tableName) { TUser user = DbUtils.getUserById(userId); if (user == null) { return Result.error(CodeMsg.USER_NOT_MATHED); } Set maintainSet = authorService.getMaintainSet(tableName, user); List masterAuthorUnactives = masterAuthorUnactiveService.selectList(new EntityWrapper().eq(Constant.USERID, userId)); for (Maintain maintain : maintainSet) { long count = masterAuthorUnactives.stream() .filter(masterAuthorUnactive -> !StringUtils.isEmpty(masterAuthorUnactive.getMaintainId())) .filter(masterAuthorUnactive -> masterAuthorUnactive.getMaintainId().equalsIgnoreCase(maintain.getId())) .count(); if (count > 0) { maintain.setActive(false); } else { maintain.setActive(true); } } return Result.success(maintainSet); } /** * * @description: 通过版本获取激活的主题 * @param result 组装用户id, 数据的 map * @param masterUserMapList 视图的数据list map * @return result 用户id, 权限数据量的 map * */ private void merageUserCnt(HashMap result, List> masterUserMapList) { for (Map stringStringMap : masterUserMapList) { String user = stringStringMap.get(Constant.USERID).toString(); long cnt = (long)(stringStringMap.get(Constant.CNT)); Long val = result.get(user); if (val == null) { result.put(user, Long.valueOf(cnt)); } else { val += Long.valueOf(cnt); result.put(user, val); } } } }