| | |
| | | package com.highdatas.mdm.controller; |
| | | |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | 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 org.springframework.stereotype.Controller; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | | * 前端控制器 |
| | | * </p> |
| | | * |
| | | * @desctiption 视图接口 |
| | | * @author kimi |
| | | * @since 2020-04-15 |
| | | */ |
| | | @Controller |
| | | @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<SysView> eq = new EntityWrapper<SysView>().eq(Constant.USERID, userId); |
| | | List<SysView> 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<SysViewJoin> sysViewJoins = sysViewJoinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, id)); |
| | | List<String> menuIds = sysViewJoins.stream() |
| | | .map(sysViewJoin -> sysViewJoin.getMenuId()) |
| | | .collect(Collectors.toList()); |
| | | if (!menuIds.isEmpty()) { |
| | | 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); |
| | | } 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<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); |
| | | if (sysView == null) { |
| | | return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); |
| | | } |
| | | |
| | | List<ViewMapFieldItem> 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<String> parentIdSet = new LinkedHashSet<>(); |
| | | parentIdSet.add(menuId); |
| | | LinkedHashSet<String> byParentId = menuService.getByParentId(parentIdSet); |
| | | ArrayList<String> strings = new ArrayList<>(byParentId); |
| | | 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); |
| | | ArrayList<String> subList = new ArrayList<>(subParent); |
| | | Collections.reverse(subList); |
| | | String subMenuName = subList.stream().collect(Collectors.joining(Constant.SEMICOLON)); |
| | | sysViewJoin.setMenuName(subMenuName); |
| | | } |
| | | sysView.setViewJoinList(sysViewJoins); |
| | | |
| | | List<SysViewLogicmap> sysViewLogicmaps = logicmapService.selectList(new EntityWrapper<SysViewLogicmap>().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<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(); |
| | | 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<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); |
| | | 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.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<Maintain> maintainSet = masterAuthorService.getMaintainSet(tableNameByMenu, user); |
| | | ArrayList<Maintain> 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<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 之前关联主题数据 |
| | | sysViewJoinService.delete(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, view.getId())); |
| | | |
| | | List<SysViewJoin> 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); |
| | | } |
| | | } |