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.TableInfoMapper; 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.Constant; import com.highdatas.mdm.util.DbUtils; import lombok.SneakyThrows; 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 javax.servlet.http.HttpServletResponse; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* @desctiption 视图接口 * @author kimi * @since 2020-04-15 */ @RestController @RequestMapping("/sysView") public class SysViewController { @Autowired ISysViewService viewService; @Autowired ISysViewJoinService sysViewJoinService; @Autowired IMaintainService maintainService; @Autowired ISysMenuService menuService; @Autowired IMasterAuthorService masterAuthorService; @Autowired MasterDataService masterDataService; @Autowired TableInfoMapper tableInfoMapper; @Autowired IMenuMappingService menuMappingService; @Autowired ISysViewLogicService logicService; @Autowired ISysViewLogicmapService logicmapService; /** * * @description: By用户获取视图list * @param userId 用户id * @return: 视图list * */ @RequestMapping(value = "/all/{userId}", method = RequestMethod.GET) public Result getAll(@PathVariable String userId, HttpServletRequest request) { //ByuserId 获取视图列表 Wrapper eq = new EntityWrapper().eq(Constant.USERID, userId); List records = viewService.selectList(eq); for (SysView record : records) { String id = record.getId(); 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 sysViewJoins = sysViewJoinService.selectList(new EntityWrapper().eq(Constant.PARENT_ID, id)); List menuIds = sysViewJoins.stream() .map(sysViewJoin -> sysViewJoin.getMenuId()) .collect(Collectors.toList()); if (!menuIds.isEmpty()) { List 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); } else { return Result.error(CodeMsg.CREATE_ERROR); } } /** * * @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); } int pageSize = 15; 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) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } int pageSize = 15; 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> 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 field = masterAuthorService.getField(user, nowVersion.getId()); return Result.success(field) ; } //根据权限获取字段 List 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); if (sysView == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } List mapField = viewService.getMapField(sysView); 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); if (sysView == null) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } String menuId = sysView.getMenuId(); //获取主题的父级主题链 LinkedHashSet parentIdSet = new LinkedHashSet<>(); parentIdSet.add(menuId); LinkedHashSet byParentId = menuService.getByParentId(parentIdSet); ArrayList strings = new ArrayList<>(byParentId); Collections.reverse(strings); String collect = strings.stream().collect(Collectors.joining(Constant.SEMICOLON)); sysView.setMenuName(collect); //获取关联主题 List sysViewJoins = sysViewJoinService.selectList(new EntityWrapper().eq(Constant.PARENT_ID, id)); for (SysViewJoin sysViewJoin : sysViewJoins) { //获取关联主题的父级主题链 parentIdSet.clear(); parentIdSet.add(sysViewJoin.getMenuId()); LinkedHashSet subParent = menuService.getByParentId(parentIdSet); ArrayList subList = new ArrayList<>(subParent); Collections.reverse(subList); String subMenuName = subList.stream().collect(Collectors.joining(Constant.SEMICOLON)); sysViewJoin.setMenuName(subMenuName); } sysView.setViewJoinList(sysViewJoins); List sysViewLogicmaps = logicmapService.selectList(new EntityWrapper().eq(Constant.PARENT_ID, sysView.getId())); 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 userWrapper = new EntityWrapper().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(); object.fluentPut("totalCnt", totalCnt); object.fluentPut("activeCnt", activeCnt); object.fluentPut("subscribeCnt", subscribeCnt); 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().eq(Constant.PARENT_ID, id).eq(Constant.FIELD, changedField)); List sysViewLogicmaps = logicmapService.selectList(new EntityWrapper().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 subFieldList = viewService.getSubFieldList(sysViewJoin, user); boolean delete = false; for (String subField: subFieldList) { String changeFieldName = viewService.changeFieldName(joinMaintain.getTableName(), subField); logicmapService.delete(new EntityWrapper() .eq(Constant.PARENT_ID, sysView.getId()) .eq(Constant.FIELD, changeFieldName) ); //删除1对1mapping 表内数据 delete = viewService.deleteMapField(sysView, changeFieldName); } if (delete) { return Result.success(CodeMsg.DELETE_SUCCESS); } else { return Result.error(CodeMsg.DELETE_ERROR); } } /** * * @description: 删除视图 * @param id 视图id * @return: 是否删除 * */ @SneakyThrows @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) public Result delete(@PathVariable String id) { 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 maintainSet = masterAuthorService.getMaintainSet(tableNameByMenu, user); ArrayList maintains = new ArrayList<>(maintainSet); for (Maintain maintain : maintains) { maintain.setNeedUpdate(false); } Maintain max = new Maintain(); max.setId(tableNameByMenu); max.setTableName(tableNameByMenu); max.setNeedUpdate(true); 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); } if (StringUtils.isEmpty(view.getViewTableName())) { viewService.getViewTableName(view); } List logicmapList = view.getLogicmapList(); //delete 之前关联的逻辑转换 数据 logicmapService.delete(new EntityWrapper().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 之前关联主题数据 sysViewJoinService.delete(new EntityWrapper().eq(Constant.PARENT_ID, view.getId())); List viewJoinList = view.getViewJoinList(); boolean insert; for (SysViewJoin sysViewJoin : viewJoinList) { insert = sysViewJoin.setId(DbUtils.getUUID()).insert(); if (!insert) { return Result.error(CodeMsg.INSERT_ERROR); } } view.setUpdateTime(new Date()); 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); } }