| | |
| | | * <p> |
| | | * 前端控制器 |
| | | * </p> |
| | | * |
| | | * @desctiption 汇集源表接口 |
| | | * @author kimi |
| | | * @since 2020-02-20 |
| | | */ |
| | |
| | | @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); |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 删除汇集任务用到的源表 |
| | | * @param id 源表id |
| | | * @return: 源表 |
| | | * |
| | | */ |
| | | @Transactional(rollbackFor=Exception.class) |
| | | @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) |
| | | public Result delete(@PathVariable String id) { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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)); |
| | |
| | | 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)) { |
| | |
| | | }else { |
| | | dataSourceInfo = unBigDataDataSourceInfo; |
| | | } |
| | | //获取字段列表 |
| | | List<String> fieldStrList = sysAssembleDb.getFieldList().stream().map(SysAssembleDbField::getField).collect(Collectors.toList()); |
| | | String suffix = null; |
| | | try { |
| | |
| | | e.printStackTrace(); |
| | | suffix = DbUtils.getUUID(16); |
| | | } |
| | | //生成临时表名 |
| | | String tempTableName = null; |
| | | if (sysAssembleDb.getType().equals(SysAssembleTableType.table)) { |
| | | tempTableName = (Constant.AssembleTempTable + sysAssembleDb.getTableName() + Constant.UnderLine + suffix); |
| | |
| | | } |
| | | |
| | | sysAssembleDb.setTempTableName(tempTableName); |
| | | |
| | | //创建汇集用到的临时表 |
| | | boolean created = dataSourceInfo.createTable(tempTableName, fieldStrList); |
| | | if (!created) { |
| | | return Result.error(new CodeMsg(6008,"创建表失败:" + tempTableName)); |