| | |
| | | package com.highdatas.mdm.controller; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | 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.TableInfoMapper; |
| | | import com.highdatas.mdm.mapper.UserMapper; |
| | | import com.highdatas.mdm.pojo.CodeMsg; |
| | | import com.highdatas.mdm.pojo.Result; |
| | | import com.highdatas.mdm.pojo.ViewMapFieldItem; |
| | | import com.highdatas.mdm.service.*; |
| | | import com.highdatas.mdm.util.AESUtil; |
| | | import com.highdatas.mdm.util.Constant; |
| | | import com.highdatas.mdm.util.DbUtils; |
| | | import lombok.SneakyThrows; |
| | |
| | | * <p> |
| | | * 前端控制器 |
| | | * </p> |
| | | * |
| | | * @desctiption 视图接口 |
| | | * @author kimi |
| | | * @since 2020-04-15 |
| | | */ |
| | |
| | | @Autowired |
| | | ISysMenuService menuService; |
| | | @Autowired |
| | | UserMapper mapper; |
| | | @Autowired |
| | | IMasterAuthorService masterAuthorService; |
| | | @Autowired |
| | | MasterDataService masterDataService; |
| | |
| | | @Autowired |
| | | ISysViewLogicmapService logicmapService; |
| | | |
| | | @SneakyThrows |
| | | @RequestMapping(value = "/test", method = RequestMethod.GET) |
| | | public Result test(HttpServletRequest request) throws Exception { |
| | | List<Map<String, Object>> test = mapper.test(); |
| | | String keys = "ismytestkeys"; |
| | | byte[] secretKey = AESUtil.getSecretKey(keys); |
| | | String content = JSONArray.toJSONString(test); |
| | | long start = System.currentTimeMillis(); |
| | | byte[] bytes = content.getBytes("utf-8"); |
| | | int length = bytes.length; |
| | | System.out.println(length + "K"); |
| | | String s = AESUtil.aesPKCS7PaddingEncrypt(content, secretKey.toString()); |
| | | long end = System.currentTimeMillis(); |
| | | float time = (end - start) ; |
| | | System.out.println(time + "s"); |
| | | return Result.success(s); |
| | | } |
| | | |
| | | @RequestMapping(value = "/test1", method = RequestMethod.GET) |
| | | public Result test1(HttpServletRequest request) throws InterruptedException { |
| | | Thread.sleep(3000); |
| | | return Result.success(null); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: By用户获取视图list |
| | | * @param userId 用户id |
| | | * @return: 视图list |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/all/{userId}", method = RequestMethod.GET) |
| | | public Result getAll(@PathVariable String userId, HttpServletRequest request) { |
| | | //TODO |
| | | //ByuserId 获取视图列表 |
| | | Wrapper<SysView> eq = new EntityWrapper<SysView>().eq(Constant.USERID, userId); |
| | | List<SysView> records = viewService.selectList(eq); |
| | | for (SysView record : records) { |
| | | String id = record.getId(); |
| | | String baseMaintainStr = record.getBaseMaintain(); |
| | | |
| | | Maintain baseMaintain = viewService.getBaseMaintain(record); |
| | | //校验基准版本是否存在 |
| | | if (baseMaintain == null) { |
| | | continue; |
| | | } |
| | | //获取 版本号,表名返回前端 |
| | | record.setBaseTableName(baseMaintain.getTableName()); |
| | | record.setBaseVersion(baseMaintain.getVersion()); |
| | | String menuId = record.getMenuId(); |
| | | SysMenu sysMenu = menuService.selectById(menuId); |
| | | //校验主题是否存在 |
| | | if (sysMenu == null) { |
| | | continue; |
| | | } |
| | | //获取主题名称返回前端 |
| | | record.setMenuName(sysMenu.getName()); |
| | | //获取关联主题 |
| | | List<SysViewJoin> sysViewJoins = sysViewJoinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, id)); |
| | | List<String> menuIds = sysViewJoins.stream() |
| | | .map(sysViewJoin -> sysViewJoin.getMenuId()) |
| | |
| | | List<SysMenu> sysMenus = menuService.selectBatchIds(menuIds); |
| | | Collections.reverse(sysMenus); |
| | | String subMenuName = sysMenus.stream().map(subMenu -> subMenu.getName()).collect(Collectors.joining(Constant.SEMICOLON)); |
| | | //获取关联主题的名称组合后返回给前端 |
| | | record.setSubMenuName(subMenuName); |
| | | } |
| | | |
| | |
| | | return Result.success(records); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 更新视图数据 |
| | | * @param id 视图id |
| | | * @return: 是否更新成功 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/refreshData/{id}", method = RequestMethod.GET) |
| | | public Result createView(@RequestParam String id, @RequestParam Boolean active) { |
| | | //获取视图信息 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | //从新创建视图 |
| | | viewService.createView(sysView.getId()); |
| | | return Result.success(sysView); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 保存关联字段信息 |
| | | * @param id 视图id |
| | | * @param mapField 关联字段 |
| | | * @return: 是否保存成功 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/saveMapField/{id}", method = RequestMethod.GET) |
| | | public Result saveMapField(@RequestParam String id, @RequestParam String mapField) { |
| | | //获取视图信息 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | //保存关联字段 |
| | | sysView.setMappingField(mapField).updateById(); |
| | | return Result.success(sysView); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 创建视图 |
| | | * @param id 视图id |
| | | * @return: 是否创建成功 |
| | | * |
| | | */ |
| | | |
| | | @RequestMapping(value = "/createView/{id}", method = RequestMethod.GET) |
| | | public Result createView(@PathVariable String id) { |
| | | //获取视图信息 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | //创建视图 |
| | | boolean view = viewService.createView(sysView.getId()); |
| | | if (view) { |
| | | return Result.success(null); |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @description: 更新视图激活状态 |
| | | * @param id 视图id |
| | | * @return: 是否更新成功 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/active/{id}", method = RequestMethod.GET) |
| | | public Result active(@PathVariable String id, @RequestParam Boolean active) { |
| | | //获取视图信息 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | //更新激活状态 |
| | | sysView.setActive(active).updateById(); |
| | | return Result.success(sysView); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 获取视图数据 |
| | | * @param id 视图id |
| | | * @param pageNo 页数 |
| | | * @return: 视图术后据 |
| | | * |
| | | */ |
| | | |
| | | @RequestMapping(value = "/getViewData/{id}/page/{pageNo}", method = RequestMethod.GET) |
| | | public Result getViewData(@PathVariable String id, @PathVariable Integer pageNo, HttpServletRequest request) { |
| | | //pageSize ,每页数据量 |
| | | String pageSizeStr = request.getParameter("pageSize"); |
| | | //获取视图数据 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | |
| | | if (!StringUtils.isEmpty(pageSizeStr)) { |
| | | pageSize = Integer.valueOf(pageSizeStr); |
| | | } |
| | | |
| | | //分页获取视图数据 |
| | | return viewService.getViewData(sysView, pageNo, pageSize); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 获取视图一对一转换的map数据 |
| | | * @param id 视图id |
| | | * @param pageNo 页数 |
| | | * @return: map数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/getMapData/{id}/page/{pageNo}", method = RequestMethod.GET) |
| | | public Result getMapData(@PathVariable String id, @PathVariable Integer pageNo, @RequestParam String changedField, HttpServletRequest request) { |
| | | //pageSize 每页数据 |
| | | String pageSizeStr = request.getParameter("pageSize"); |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | |
| | | if (!StringUtils.isEmpty(pageSizeStr)) { |
| | | pageSize = Integer.valueOf(pageSizeStr); |
| | | } |
| | | //获取maping的数据 |
| | | return viewService.getMapData(sysView, changedField, pageNo, pageSize); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过用户获取有权限的字段 |
| | | * @param userId 用户id |
| | | * @param needUpdate 是否需要从新获取一遍数据 |
| | | * @param maintainId 版本id |
| | | * @return: 字段列表 |
| | | * |
| | | */ |
| | | |
| | | @RequestMapping(value = "/field/{userId}", method = RequestMethod.GET) |
| | | public Result<List<SysField>> fieldList(@PathVariable String userId, @RequestParam boolean needUpdate, @RequestParam String maintainId, HttpServletRequest request) { |
| | | //请求头里获取用户信息 |
| | | TUser user = DbUtils.getUserById(userId); |
| | | if (user == null) { |
| | | return Result.error(CodeMsg.USER_NOT_MATHED); |
| | | } |
| | | |
| | | if (needUpdate) { |
| | | //从新获取一遍最新的版本字段 |
| | | Maintain nowVersion = maintainService.getNowVersion(maintainId); |
| | | List<SysField> field = masterAuthorService.getField(user, nowVersion.getId()); |
| | | return Result.success(field) ; |
| | | } |
| | | //根据权限获取字段 |
| | | List<SysField> field = masterAuthorService.getField(user, maintainId); |
| | | return Result.success(field) ; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 获取视图一对一转换的map数据 |
| | | * @param id 视图id |
| | | * @return: map数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/mapFieldList/{id}", method = RequestMethod.GET) |
| | | public Result active(@PathVariable String id) { |
| | | SysView sysView = viewService.selectById(id); |
| | |
| | | return Result.success(mapField); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 获取视图数据 |
| | | * @param id 视图id |
| | | * @return: 视图数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) |
| | | public Result get(@PathVariable String id) { |
| | | SysView sysView = viewService.selectById(id); |
| | |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | String menuId = sysView.getMenuId(); |
| | | //获取主题的父级主题链 |
| | | LinkedHashSet<String> parentIdSet = new LinkedHashSet<>(); |
| | | parentIdSet.add(menuId); |
| | | LinkedHashSet<String> byParentId = menuService.getByParentId(parentIdSet); |
| | |
| | | Collections.reverse(strings); |
| | | String collect = strings.stream().collect(Collectors.joining(Constant.SEMICOLON)); |
| | | sysView.setMenuName(collect); |
| | | //获取关联主题 |
| | | List<SysViewJoin> sysViewJoins = sysViewJoinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, id)); |
| | | for (SysViewJoin sysViewJoin : sysViewJoins) { |
| | | //获取关联主题的父级主题链 |
| | | parentIdSet.clear(); |
| | | parentIdSet.add(sysViewJoin.getMenuId()); |
| | | LinkedHashSet<String> subParent = menuService.getByParentId(parentIdSet); |
| | |
| | | sysView.setLogicmapList(sysViewLogicmaps); |
| | | return Result.success(sysView); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 获取可用视图 |
| | | * @param userId 用户id |
| | | * @return: 视图数 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/getCnt/{userId}", method = RequestMethod.GET) |
| | | public Result cnt(@PathVariable String userId, HttpServletRequest request) { |
| | | //获取用户信息 |
| | | TUser user = DbUtils.getUserById(userId); |
| | | if (user == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | Wrapper<SysView> userWrapper = new EntityWrapper<SysView>().eq("user_id", userId); |
| | | //获取视图总数 |
| | | int totalCnt = viewService.selectCount(userWrapper); |
| | | //可用视图数 |
| | | userWrapper.eq("active", true); |
| | | int activeCnt = viewService.selectCount(userWrapper); |
| | | //已注册视图数 |
| | | userWrapper.eq("subscribe", true); |
| | | int subscribeCnt = viewService.selectCount(userWrapper); |
| | | JSONObject object = new JSONObject(); |
| | |
| | | return Result.success(object); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @description: 创建视图 |
| | | * @param userId 用户id |
| | | * @return: 视图数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/create/{userId}", method = RequestMethod.GET) |
| | | public Result add(@PathVariable String userId, HttpServletRequest request) { |
| | | SysView sysView = new SysView(); |
| | | //设置视图初始数据 |
| | | sysView.setId(DbUtils.getUUID()) |
| | | .setUserId(userId) |
| | | .setCreateTime(new Date()) |
| | | .setStatus(ViewStatus.edit) |
| | | .setEmptyData(true) |
| | | .insert(); |
| | | //生成并保存mapping表 表名 |
| | | viewService.getMappingTableName(sysView); |
| | | return Result.success(sysView); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 删除一对一mapping |
| | | * @param id 视图id |
| | | * @return: map数据 |
| | | * |
| | | */ |
| | | @SneakyThrows |
| | | @RequestMapping(value = "/deleteMap/{id}", method = RequestMethod.GET) |
| | | public Result deleteMap(@PathVariable String id, @RequestParam String changedField) { |
| | | //获取视图数据 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | |
| | | //删除mapping字段 |
| | | viewService.deleteMapField(sysView, changedField); |
| | | logicmapService.delete(new EntityWrapper<SysViewLogicmap>().eq(Constant.PARENT_ID, id).eq(Constant.FIELD, changedField)); |
| | | List<SysViewLogicmap> sysViewLogicmaps = logicmapService.selectList(new EntityWrapper<SysViewLogicmap>().eq(Constant.PARENT_ID, sysView.getId())); |
| | | sysView.setLogicmapList(sysViewLogicmaps); |
| | | return Result.success(sysView); |
| | | } |
| | | /** |
| | | * |
| | | * @description: 删除关联主题数据 |
| | | * @param id 视图关联主题id |
| | | * @return: 是否删除成功 |
| | | * |
| | | */ |
| | | |
| | | @SneakyThrows |
| | | @RequestMapping(value = "/delete/detail/{id}", method = RequestMethod.GET) |
| | | public Result deleteDetail(@PathVariable String id) { |
| | | //获取关联主题数据 |
| | | SysViewJoin sysViewJoin = sysViewJoinService.selectById(id); |
| | | if (sysViewJoin == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | |
| | | String parentId = sysViewJoin.getParentId(); |
| | | SysView sysView = viewService.selectById(parentId); |
| | | String userId = sysView.getUserId(); |
| | | //获取用户信息 |
| | | TUser user = DbUtils.getUserById(userId); |
| | | |
| | | //获取关联主题信息 |
| | | Maintain joinMaintain = viewService.getJoinMaintain(sysViewJoin); |
| | | List<String> subFieldList = viewService.getSubFieldList(sysViewJoin, user); |
| | | boolean delete = false; |
| | | |
| | | for (String subField: subFieldList) { |
| | | String changeFieldName = viewService.changeFieldName(joinMaintain.getTableName(), subField); |
| | | logicService.delete(new EntityWrapper<SysViewLogic>() |
| | | logicmapService.delete(new EntityWrapper<SysViewLogicmap>() |
| | | .eq(Constant.PARENT_ID, sysView.getId()) |
| | | .eq(Constant.FIELD, changeFieldName) |
| | | ); |
| | | //删除1对1mapping 表内数据 |
| | | delete = viewService.deleteMapField(sysView, changeFieldName); |
| | | } |
| | | if (delete) { |
| | |
| | | return Result.error(CodeMsg.DELETE_ERROR); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 删除视图 |
| | | * @param id 视图id |
| | | * @return: 是否删除 |
| | | * |
| | | */ |
| | | |
| | | @SneakyThrows |
| | | @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) |
| | |
| | | return viewService.deleteView(id); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过用户获取某主题下的版本泪飙 |
| | | * @param userId 用户id |
| | | * @param menuId 主题 |
| | | * @return: map数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/maintainList/{userId}", method = RequestMethod.GET) |
| | | public Result add(@PathVariable String userId, @RequestParam String menuId, HttpServletRequest request) { |
| | | //获取用户信息 |
| | | TUser user = DbUtils.getUserById(userId); |
| | | if (user == null) { |
| | | return Result.error(CodeMsg.USER_NOT_MATHED); |
| | | } |
| | | //获取表名 |
| | | String tableNameByMenu = menuMappingService.getTableNameByMenu(menuId); |
| | | if (StringUtils.isEmpty(tableNameByMenu)) { |
| | | return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); |
| | | } |
| | | //获取版本list |
| | | LinkedHashSet<Maintain> maintainSet = masterAuthorService.getMaintainSet(tableNameByMenu, user); |
| | | ArrayList<Maintain> maintains = new ArrayList<>(maintainSet); |
| | | for (Maintain maintain : maintains) { |
| | |
| | | maintains.add(0, max); |
| | | return Result.success(maintains); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 更新视图 |
| | | * @return: 视图数据 |
| | | * |
| | | */ |
| | | @RequestMapping(value = "/update", method = RequestMethod.POST) |
| | | public Result add(@RequestBody SysView view) { |
| | | //校验必传字段 |
| | | if (StringUtils.isEmpty(view.getId())) { |
| | | return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); |
| | | } |
| | | if (StringUtils.isEmpty(view.getMenuId()) || StringUtils.isEmpty(view.getBaseMaintain()) ) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | List<SysViewLogicmap> logicmapList = view.getLogicmapList(); |
| | | |
| | | logicmapService.delete(new EntityWrapper<SysViewLogicmap>().eq(Constant.PARENT_ID, view.getId())); |
| | | |
| | | for (SysViewLogicmap logicmap : logicmapList) { |
| | | logicmap.setId(DbUtils.getUUID()).setParentId(view.getId()).insert(); |
| | | if (StringUtils.isEmpty(view.getViewTableName())) { |
| | | viewService.getViewTableName(view); |
| | | } |
| | | List<SysViewLogicmap> logicmapList = view.getLogicmapList(); |
| | | //delete 之前关联的逻辑转换 数据 |
| | | logicmapService.delete(new EntityWrapper<SysViewLogicmap>().eq(Constant.PARENT_ID, view.getId())); |
| | | if (logicmapList != null) { |
| | | for (SysViewLogicmap logicmap : logicmapList) { |
| | | logicmap.setId(DbUtils.getUUID()).setParentId(view.getId()).insert(); |
| | | } |
| | | } |
| | | |
| | | view.setEmptyData(false).setStatus(ViewStatus.edit); |
| | | //delete |
| | | //delete 之前关联主题数据 |
| | | sysViewJoinService.delete(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, view.getId())); |
| | | |
| | | List<SysViewJoin> viewJoinList = view.getViewJoinList(); |
| | |
| | | view.updateById(); |
| | | return Result.success(view); |
| | | } |
| | | /** |
| | | * |
| | | * @description: 下载视图一对一转换的map数据 |
| | | * @param id 视图id |
| | | * @param menuId 主题id |
| | | * @param field 字段 |
| | | * @return: map数据 |
| | | * |
| | | */ |
| | | @SneakyThrows |
| | | @RequestMapping(value = "/download/{id}", method = RequestMethod.GET) |
| | | public void download(@PathVariable String id, @RequestParam String menuId, @RequestParam String field, HttpServletResponse response) { |
| | | |
| | | //获取视图信息 |
| | | SysView sysView = viewService.selectById(id); |
| | | if (sysView == null) { |
| | | return; |
| | | } |
| | | String userId = sysView.getUserId(); |
| | | //获取用户信息 |
| | | TUser user = DbUtils.getUserById(userId); |
| | | if (user == null) { |
| | | return; |
| | | } |
| | | //下载某个主题下的字段关联的1对1 mapping数据 |
| | | viewService.downlodMap(sysView,user, response, field, menuId); |
| | | } |
| | | } |