kimi
2020-05-27 2893347bf72477c4d108e8589a0f61e3e97a990c
src/main/java/com/highdatas/mdm/controller/FileController.java
@@ -26,7 +26,7 @@
/**
 * @author kimi
 * @description
 * @description  简单上传文件接口
 * @date 2019-12-18 10:22
 */
@@ -52,6 +52,14 @@
    @Autowired
    UnBigDataDataSourceInfo unBigDataDataSourceInfo;
    /**
     *
     * @description:  汇集  上传由源表组合的sql
     * @param file 文件
     * @param dbId 数据源
     * @return: 是否添加成功
     *
     */
    @RequestMapping(value = "/loadSqlTable", method = RequestMethod.POST)
    @ResponseBody
    public Result loadSqlTable(@RequestParam("file")MultipartFile file,@RequestParam String dbId, HttpServletRequest request) {
@@ -59,17 +67,21 @@
            byte[] bytes = file.getBytes();
            String sql = new String (bytes);
            //去除空格防治sql因为空格报错
            sql = DbUtils.replaceEscape(sql);
            String[] split = sql.split(Constant.SEMICOLON);
            //校验sql语句条数
            if (split.length > 1) {
                return Result.error(new CodeMsg(6001 , "sql脚本上传错误,仅能支持一条语句"));
            }
            String sqlId = DbUtils.getUUID();
            //添加进缓存内,后续使用
            boolean b = redisClient.putRedisVal(sqlId, sql);
            if (!b){
                return Result.error(new CodeMsg(6002, "sql保存失败"));
            }
            // 暂不校验是不是select语句了  后续需要再校验
            //通过sql查询字段
            List<String> fieldsBySql = dbService.getFieldsBySql(dbId, sql);
            JSONObject object = new JSONObject();
            object.fluentPut("fields", fieldsBySql);
@@ -82,11 +94,19 @@
        }
    }
    /**
     *
     * @description:  汇集 上传清洗sql
     * @param file 清洗文件
     * @param id 汇集id
     * @return: 是否添加成功
     *
     */
    @RequestMapping(value = "/loadPurgeSql", method = RequestMethod.POST)
    @ResponseBody
    public Result loadPurgeSql(@RequestParam("file")MultipartFile file,@RequestParam String id, HttpServletRequest request) {
        // 暂不校验是不是select语句了  后续需要再校验
        //通过id获取汇集任务信息
        SysAssemble assemble = assembleService.selectById(id);
        if (assemble == null){
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
@@ -95,7 +115,9 @@
            byte[] bytes = file.getBytes();
            String sql = new String (bytes);
            //去除空格防治sql因为空格报错
            sql = DbUtils.replaceEscape(sql);
            // 暂不校验是不是select语句了  后续需要再校验
            //TODO 校验sql 暂不进行
            assemble.setPurgeSql(sql);
            boolean update = assemble.updateById();
@@ -111,7 +133,14 @@
        }
    }
    /**
     *
     * @description:  汇集 上传参数更新sql
     * @param file 清洗文件
     * @param id 汇集id
     * @return: 是否添加成功
     *
     */
    @RequestMapping(value = "/loadParamsUpdateSql", method = RequestMethod.POST)
    @ResponseBody
    public Result loadParamsUpdateSql(@RequestParam("file")MultipartFile file,@RequestParam String id, HttpServletRequest request) {
@@ -124,6 +153,7 @@
            byte[] bytes = file.getBytes();
            String sql = new String (bytes);
            //去除空格防治sql因为空格报错
            sql = DbUtils.replaceEscape(sql);
            //TODO 校验sql 暂不进行
            sysAssembleParams.setUpdateSql(sql).setUpdateTime(new Date()).updateById();
@@ -136,21 +166,32 @@
    }
    /**
     *
     * @description:  视图,值对值转换
     * @param file 清洗文件
     * @param id 视图id
     * @param menuId 视图对应数据来源的主题id
     * @return: 是否添加成功
     *
     */
    @RequestMapping(value = "/loadMappingFile", method = RequestMethod.POST)
    @ResponseBody
    public Result loadMappingFile(@RequestParam("file")MultipartFile file,@RequestParam String id, @RequestParam String menuId, @RequestParam String field, HttpServletRequest request) {
        //获取视图信息
        SysView sysView = viewService.selectById(id);
        if (sysView == null){
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        //获取视图对应的mapping表
        String mappingTable = sysView.getMappingTable();
        if (StringUtils.isEmpty(mappingTable)){
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        //检验是否存在
        boolean exists = unBigDataDataSourceInfo.checkTableExists(mappingTable);
        if (!exists) {
            //不存在则创建mapping表
            ArrayList<String> fields = new ArrayList<>();
            fields.add(Constant.ID);
            fields.add(Constant.Code);
@@ -165,22 +206,27 @@
        SqlSession session = null;
        try {
            String name = file.getOriginalFilename();
            //通过文件获取转换mapping列表
            List<ViewMappingItem> viewMappingByExcel = ExcelUtil.getViewMappingByExcel(file.getInputStream(), name);
            if (viewMappingByExcel.isEmpty()) {
                return Result.error(CodeMsg.EMPTY_ERROR);
            }
            //获取视图对应主题的版本信息
            Maintain maintainByMenu = viewService.getMaintainByMenu(sysView, menuId);
            if (maintainByMenu == null) {
                return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
            }
            //获取转换后的视图实际使用的字段
            String changeFieldName = viewService.changeFieldName(maintainByMenu.getTableName(), field);
            Segment segment = new Segment(Constant.Code, changeFieldName);
            //By 字段删除原来的mapping
            tableInfoMapper.delete(mappingTable, segment.toString());
            session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//关闭session的自动提交
            SysViewMapper mapper = session.getMapper(SysViewMapper.class);
            AtomicInteger idx = new AtomicInteger(0);
            ContentBuilder builder = new ContentBuilder(Constant.COMMA);
            //批量执行插入语句
            for (ViewMappingItem viewMappingItem : viewMappingByExcel) {
                builder.clear();
                builder.append(DbUtils.quotedStr(changeFieldName));