kimi
2020-05-27 c007f0ca1785db093d48f4846cda82fe8e955765
src/main/java/com/highdatas/mdm/controller/SysViewController.java
@@ -1,18 +1,15 @@
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;
@@ -29,7 +26,7 @@
 * <p>
 *  前端控制器
 * </p>
 *
 * @desctiption 视图接口
 * @author kimi
 * @since 2020-04-15
 */
@@ -45,8 +42,6 @@
    @Autowired
    ISysMenuService menuService;
    @Autowired
    UserMapper mapper;
    @Autowired
    IMasterAuthorService masterAuthorService;
    @Autowired
    MasterDataService masterDataService;
@@ -54,52 +49,42 @@
    TableInfoMapper tableInfoMapper;
    @Autowired
    IMenuMappingService menuMappingService;
    @Autowired
    ISysViewLogicService logicService;
    @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())
@@ -108,6 +93,7 @@
                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);
            }
@@ -115,32 +101,61 @@
        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);
@@ -150,20 +165,39 @@
    }
    /**
     *
     * @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);
@@ -172,12 +206,22 @@
        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) {
@@ -187,25 +231,47 @@
        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);
@@ -217,6 +283,13 @@
        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);
@@ -224,6 +297,7 @@
            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);
@@ -231,8 +305,10 @@
        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);
@@ -242,19 +318,32 @@
            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();
@@ -264,37 +353,62 @@
        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);
        }
        boolean b = viewService.deleteMapField(sysView, changedField);
        if (!b) {
            return Result.error(CodeMsg.DELETE_ERROR);
        }
        //删除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);
@@ -302,13 +416,21 @@
        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) {
@@ -317,7 +439,13 @@
            return  Result.error(CodeMsg.DELETE_ERROR);
        }
    }
    /**
     *
     * @description:  删除视图
     * @param id 视图id
     * @return: 是否删除
     *
     */
    @SneakyThrows
    @RequestMapping(value = "/delete/{id}",  method = RequestMethod.GET)
@@ -325,16 +453,27 @@
        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) {
@@ -347,18 +486,35 @@
        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
        //delete 之前关联主题数据
        sysViewJoinService.delete(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, view.getId()));
        List<SysViewJoin> viewJoinList = view.getViewJoinList();
@@ -373,19 +529,30 @@
        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);
    }
}