kimi
2020-05-27 2893347bf72477c4d108e8589a0f61e3e97a990c
src/main/java/com/highdatas/mdm/controller/SysAssembleDbTableController.java
@@ -30,7 +30,7 @@
 * <p>
 *  前端控制器
 * </p>
 *
 * @desctiption 汇集源表接口
 * @author kimi
 * @since 2020-02-20
 */
@@ -54,8 +54,16 @@
    @Autowired
    RedisClient redisClient;
    /**
     *
     * @description: 获取汇集任务用到的源表list
     * @param id 数据源id
     * @return: 源表list
     *
     */
    @RequestMapping(value = "/get/parent/{id}", method = RequestMethod.GET)
    public Result get(@PathVariable String id, HttpServletRequest request) {
        //获取数据源信息
        SysAssembleDb sysAssembleDb = dbService.selectById(id);
        if (sysAssembleDb == null) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
@@ -67,6 +75,13 @@
    }
    /**
     *
     * @description: 删除汇集任务用到的源表
     * @param id 源表id
     * @return: 源表
     *
     */
    @Transactional(rollbackFor=Exception.class)
    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
    public Result delete(@PathVariable String id) {
@@ -87,18 +102,33 @@
        }
    }
    /**
     *
     * @description: 获取汇集任务用到的源表
     * @param id 源表id
     * @return: 源表信息
     *
     */
    @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
    public Result get(@PathVariable String id) {
        SysAssembleDbTable sysAssembleDb = dbTableService.selectById(id);
        if (sysAssembleDb == null) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        //获取原表关联的字段list
        Wrapper<SysAssembleDbField> fieldWrapper = new EntityWrapper<SysAssembleDbField>().eq(Constant.PARENT_ID, id);
        List<SysAssembleDbField> sysAssembleDbFields = dbFieldService.selectList(fieldWrapper);
        sysAssembleDb.setFieldList(sysAssembleDbFields);
        return Result.success(sysAssembleDb);
    }
    /**
     *
     * @description: 获取原表用到的字段list
     * @param id 源表id
     * @return: 字段list
     *
     */
    @RequestMapping(value = "/getField/{id}", method = RequestMethod.GET)
    public Result check(@PathVariable String id) {
        SysAssembleDbTable sysAssembleDb = dbTableService.selectById(id);
@@ -110,7 +140,13 @@
        sysAssembleDb.setFieldList(sysAssembleDbFields);
        return Result.success(sysAssembleDb);
    }
    /**
     *
     * @description: 获取源sql用到的字段list
     * @param id 源sql id
     * @return: 字段list
     *
     */
    @RequestMapping(value = "/getSqlField/{id}", method = RequestMethod.GET)
    public Result getSqlField(@PathVariable String id) {
        SysAssembleDbTable sysAssembleDb = dbTableService.selectById(id);
@@ -118,15 +154,21 @@
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        String sql = sysAssembleDb.getSql();
        //通过sql 获取字段;list
        List<String> fieldsBySql = dbService.getFieldsBySql(sysAssembleDb.getParentId(), sql);
        return Result.success(fieldsBySql);
    }
    /**
     *
     * @description: 更新源表的筛选sql
     * @param id 源表id
     * @return: 源表信息
     *
     */
    @RequestMapping(value = "/setFilterSql/{id}", method = RequestMethod.GET)
    public Result setFilterSql(@PathVariable String id,@RequestParam String filter, HttpServletRequest request) {
        //TODO 对filter 做检验?
        SysAssembleDbTable sysAssembleDbTable = dbTableService.selectById(id);
        if (sysAssembleDbTable == null) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
@@ -135,6 +177,13 @@
        return Result.success(sysAssembleDbTable);
    }
    /**
     *
     * @description: 测试源表的filter sql
     * @param id 汇集任务id
     * @return: 是否通过
     *
     */
    @RequestMapping(value = "/testFilter/{id}", method = RequestMethod.GET)
    public Result testFilter(@PathVariable String id, @RequestParam String filter) {
        SysAssembleDbTable sysAssembleDbTable = dbTableService.selectById(id);
@@ -150,19 +199,23 @@
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        String assembleId = sysAssembleDb.getParentId();
        //获取字段信息
        List<SysAssembleDbField> fieldList = dbFieldService.selectList(new EntityWrapper<SysAssembleDbField>().eq(Constant.PARENT_ID, id));
        String fields = fieldList.stream().map(SysAssembleDbField::getField).collect(Collectors.joining(Constant.COMMA));
        SysAssembleTableType type = sysAssembleDbTable.getType();
        String tableName = null;
        //获取内部的子表
        if (type.equals(SysAssembleTableType.sql)) {
            tableName = sysAssembleDbTable.getSql();
        } else if (type.equals(SysAssembleTableType.table)) {
            tableName = sysAssembleDbTable.getTableName();
        }
        //组装filter
        if (StringUtils.isEmpty(filter)) {
            filter = Constant.WHERE_DEFAULT;
        } else {
            //有变量的需要替换掉
            Set<String> matcher = DbUtils.matcher(filter);
            for (String code : matcher) {
                SysAssembleParams sysAssembleParams = paramsService.selectOne(new EntityWrapper<SysAssembleParams>().eq(Constant.PARENT_ID, assembleId).eq(Constant.Code, code));
@@ -177,24 +230,32 @@
                filter = filter.replace(DbUtils.assemblParam(code), val);
            }
        }
        //根据不同类型走不同的sql
        String runSqlTemplate = null;
        if (type.equals(SysAssembleTableType.table)){
            runSqlTemplate = Constant.selectFieldTableTemplate;
        }else if(type.equals(SysAssembleTableType.sql)){
            runSqlTemplate = Constant.selectFieldSqlTemplate;
        }
        //组装sql
        String sql = MessageFormat.format(runSqlTemplate, fields, tableName, filter);
        boolean b = dbService.testSql(parentId, sql);
        return Result.success(b);
    }
    /**
     *
     * @description: 添加或者更新源表信息
     * @return: 是否更新成功
     *
     */
    @ResponseBody
    @RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST)
    public Result addOne(@RequestBody SysAssembleDbTable sysAssembleDb) {
        if (sysAssembleDb == null) {
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        //校验必传字段
        if (StringUtils.isEmpty(sysAssembleDb.getId())) {
            sysAssembleDb.setId(DbUtils.getUUID());
            if (StringUtils.isEmpty(sysAssembleDb.getSqlId()) && sysAssembleDb.getType().equals(SysAssembleTableType.sql)) {
@@ -217,6 +278,7 @@
        }else {
            dataSourceInfo = unBigDataDataSourceInfo;
        }
        //获取字段列表
        List<String> fieldStrList = sysAssembleDb.getFieldList().stream().map(SysAssembleDbField::getField).collect(Collectors.toList());
        String suffix = null;
        try {
@@ -225,6 +287,7 @@
            e.printStackTrace();
            suffix = DbUtils.getUUID(16);
        }
        //生成临时表名
        String tempTableName = null;
        if (sysAssembleDb.getType().equals(SysAssembleTableType.table)) {
            tempTableName = (Constant.AssembleTempTable  +  sysAssembleDb.getTableName() + Constant.UnderLine + suffix);
@@ -239,7 +302,7 @@
        }
        sysAssembleDb.setTempTableName(tempTableName);
        //创建汇集用到的临时表
        boolean created = dataSourceInfo.createTable(tempTableName, fieldStrList);
        if (!created) {
            return Result.error(new CodeMsg(6008,"创建表失败:" + tempTableName));