Commit 9579d532 by yuwei

项目初始化

parent 1891a5c0
...@@ -60,21 +60,21 @@ spring: ...@@ -60,21 +60,21 @@ spring:
args: args:
name: fileHystrix name: fileHystrix
fallbackUri: forward:/fallback fallbackUri: forward:/fallback
# 数据工厂中心 # 元数据管理
- id: datax-service-data-factory - id: datax-service-data-metadata
uri: lb://datax-service-data-factory uri: lb://datax-service-data-metadata
predicates: predicates:
- Path=/data/factory/** - Path=/data/metadata/**
filters: filters:
- SwaggerHeaderFilter - SwaggerHeaderFilter
- StripPrefix=2 - StripPrefix=2
- name: Hystrix - name: Hystrix
args: args:
name: dataFactoryHystrix name: dataMetadataHystrix
fallbackUri: forward:/fallback fallbackUri: forward:/fallback
# 数据SQL工作台 # 数据SQL工作台
- id: datax-service-data-sql-console - id: datax-service-data-console
uri: lb://datax-service-data-sql-console uri: lb://datax-service-data-console
predicates: predicates:
- Path=/data/console/** - Path=/data/console/**
filters: filters:
...@@ -108,17 +108,17 @@ spring: ...@@ -108,17 +108,17 @@ spring:
args: args:
name: dataApiMappingHystrix name: dataApiMappingHystrix
fallbackUri: forward:/fallback fallbackUri: forward:/fallback
# 元数据管理 # 数据可视化
- id: datax-service-data-metadata - id: datax-service-data-visual
uri: lb://datax-service-data-metadata uri: lb://datax-service-data-visual
predicates: predicates:
- Path=/data/metadata/** - Path=/data/visual/**
filters: filters:
- SwaggerHeaderFilter - SwaggerHeaderFilter
- StripPrefix=2 - StripPrefix=2
- name: Hystrix - name: Hystrix
args: args:
name: dataMetadataHystrix name: dataVisualHystrix
fallbackUri: forward:/fallback fallbackUri: forward:/fallback
# 定时任务 # 定时任务
- id: datax-service-quartz - id: datax-service-quartz
......
...@@ -48,7 +48,7 @@ spring: ...@@ -48,7 +48,7 @@ spring:
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: cn.datax.service.data.factory.api.entity type-aliases-package: cn.datax.service.data.metadata.api.entity
global-config: global-config:
db-config: db-config:
id-type: ASSIGN_ID id-type: ASSIGN_ID
......
...@@ -48,7 +48,7 @@ spring: ...@@ -48,7 +48,7 @@ spring:
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: cn.datax.service.data.factory.api.entity type-aliases-package: cn.datax.service.data.visual.api.entity
global-config: global-config:
db-config: db-config:
id-type: ASSIGN_ID id-type: ASSIGN_ID
......
server: server:
port: 8710 port: 8830
spring: spring:
application: application:
......
package cn.datax.service.data.factory.api.dto;
import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* <p>
* 数据主题信息表 实体DTO
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@ApiModel(value = "数据主题信息表Model")
@Data
public class DataThemeDto implements Serializable {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "主键ID")
@NotBlank(message = "主键ID不能为空", groups = {ValidationGroups.Update.class})
private String id;
@ApiModelProperty(value = "主题名称")
@NotBlank(message = "主题名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String themeName;
}
package cn.datax.service.data.factory.api.entity;
import cn.datax.common.base.DataScopeBaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 数据主题信息表
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("factory_theme")
public class DataThemeEntity extends DataScopeBaseEntity {
private static final long serialVersionUID=1L;
/**
* 数据主题
*/
private String themeName;
}
package cn.datax.service.data.factory.api.feign;
import cn.datax.service.data.factory.api.entity.DataSetEntity;
import cn.datax.service.data.factory.api.feign.factory.DataSetServiceFeignFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(contextId = "dataSetServiceFeign", value = "datax-service-data-factory", fallbackFactory = DataSetServiceFeignFallbackFactory.class)
public interface DataSetServiceFeign {
@GetMapping("/inner/sets/{id}")
DataSetEntity getDataSetById(@PathVariable("id") String id);
}
package cn.datax.service.data.factory.api.feign;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.feign.factory.DataSourceServiceFeignFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
@FeignClient(contextId = "dataSourceServiceFeign", value = "datax-service-data-factory", fallbackFactory = DataSourceServiceFeignFallbackFactory.class)
public interface DataSourceServiceFeign {
@GetMapping("/inner/sources/{id}")
DataSourceEntity getDataSourceById(@PathVariable("id") String id);
@PutMapping("/inner/sources/sync/{id}")
void updateDataSourceSyncById(@PathVariable("id") String id);
}
package cn.datax.service.data.factory.api.feign.factory;
import cn.datax.service.data.factory.api.feign.DataSetServiceFeign;
import cn.datax.service.data.factory.api.feign.fallback.DataSetServiceFeignFallbackImpl;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
@Component
public class DataSetServiceFeignFallbackFactory implements FallbackFactory<DataSetServiceFeign> {
@Override
public DataSetServiceFeign create(Throwable throwable) {
DataSetServiceFeignFallbackImpl dataSetServiceFeignFallback = new DataSetServiceFeignFallbackImpl();
dataSetServiceFeignFallback.setCause(throwable);
return dataSetServiceFeignFallback;
}
}
package cn.datax.service.data.factory.api.feign.factory;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign;
import cn.datax.service.data.factory.api.feign.fallback.DataSourceServiceFeignFallbackImpl;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
@Component
public class DataSourceServiceFeignFallbackFactory implements FallbackFactory<DataSourceServiceFeign> {
@Override
public DataSourceServiceFeign create(Throwable throwable) {
DataSourceServiceFeignFallbackImpl dataSourceServiceFeignFallback = new DataSourceServiceFeignFallbackImpl();
dataSourceServiceFeignFallback.setCause(throwable);
return dataSourceServiceFeignFallback;
}
}
package cn.datax.service.data.factory.api.feign.fallback;
import cn.datax.service.data.factory.api.entity.DataSetEntity;
import cn.datax.service.data.factory.api.feign.DataSetServiceFeign;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class DataSetServiceFeignFallbackImpl implements DataSetServiceFeign {
@Setter
private Throwable cause;
@Override
public DataSetEntity getDataSetById(String id) {
log.error("feign 调用{}出错", id, cause);
return null;
}
}
package cn.datax.service.data.factory.api.query;
import cn.datax.common.base.BaseQueryParams;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 数据主题信息表 查询实体
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataThemeQuery extends BaseQueryParams {
private static final long serialVersionUID=1L;
private String themeName;
}
package cn.datax.service.data.factory.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 数据主题信息表 实体VO
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
public class DataThemeVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
private String remark;
private String themeName;
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.datax.service.data.factory.api.feign.factory.DataSourceServiceFeignFallbackFactory,\
cn.datax.service.data.factory.api.feign.fallback.DataSourceServiceFeignFallbackImpl,\
cn.datax.service.data.factory.api.feign.factory.DataSetServiceFeignFallbackFactory,\
cn.datax.service.data.factory.api.feign.fallback.DataSetServiceFeignFallbackImpl
package cn.datax.service.data.factory.controller;
import cn.datax.common.core.DataConstant;
import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.factory.api.dto.DataSetDto;
import cn.datax.service.data.factory.api.dto.SqlParseDto;
import cn.datax.service.data.factory.api.entity.DataSetEntity;
import cn.datax.service.data.factory.api.vo.DataSetVo;
import cn.datax.service.data.factory.api.query.DataSetQuery;
import cn.datax.service.data.factory.mapstruct.DataSetMapper;
import cn.datax.service.data.factory.service.DataSetService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 数据集信息表 前端控制器
* </p>
*
* @author yuwei
* @since 2020-03-20
*/
@Api(tags = {"数据集信息表"})
@RestController
@RequestMapping("/dataSets")
public class DataSetController extends BaseController {
@Autowired
private DataSetService dataSetService;
@Autowired
private DataSetMapper dataSetMapper;
/**
* 通过ID查询信息
*
* @param id
* @return
*/
@ApiOperation(value = "获取详细信息", notes = "根据url的id来获取详细信息")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}")
public R getDataSetById(@PathVariable String id) {
DataSetEntity dataSetEntity = dataSetService.getDataSetById(id);
return R.ok().setData(dataSetMapper.toVO(dataSetEntity));
}
@ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list")
public R getDataSetList() {
QueryWrapper<DataSetEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", DataConstant.EnableState.ENABLE.getKey());
List<DataSetEntity> list = dataSetService.list(queryWrapper);
List<DataSetVo> collect = list.stream().map(dataSetMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect);
}
/**
* 分页查询信息
*
* @param dataSetQuery
* @return
*/
@ApiOperation(value = "分页查询", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "dataSetQuery", value = "查询实体dataSetQuery", required = true, dataTypeClass = DataSetQuery.class)
})
@GetMapping("/page")
public R getDataSetPage(DataSetQuery dataSetQuery) {
QueryWrapper<DataSetEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataSetQuery.getSetName()), "set_name", dataSetQuery.getSetName());
IPage<DataSetEntity> page = dataSetService.page(new Page<>(dataSetQuery.getPageNum(), dataSetQuery.getPageSize()), queryWrapper);
List<DataSetVo> collect = page.getRecords().stream().map(dataSetMapper::toVO).collect(Collectors.toList());
JsonPage<DataSetVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
return R.ok().setData(jsonPage);
}
/**
* 添加
* @param dataSet
* @return
*/
@ApiOperation(value = "添加信息", notes = "根据dataSet对象添加信息")
@ApiImplicitParam(name = "dataSet", value = "详细实体dataSet", required = true, dataType = "DataSetDto")
@PostMapping()
public R saveDataSet(@RequestBody @Validated({ValidationGroups.Insert.class}) DataSetDto dataSet) {
dataSetService.saveDataSet(dataSet);
return R.ok();
}
/**
* 修改
* @param dataSet
* @return
*/
@ApiOperation(value = "修改信息", notes = "根据url的id来指定修改对象,并根据传过来的信息来修改详细信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "dataSet", value = "详细实体dataSet", required = true, dataType = "DataSetDto")
})
@PutMapping("/{id}")
public R updateDataSet(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) DataSetDto dataSet) {
dataSetService.updateDataSet(dataSet);
return R.ok();
}
/**
* 删除
* @param id
* @return
*/
@ApiOperation(value = "删除", notes = "根据url的id来指定删除对象")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}")
public R deleteDataSetById(@PathVariable String id) {
dataSetService.deleteDataSetById(id);
return R.ok();
}
@ApiOperation(value = "批量删除", notes = "根据url的ids来批量删除对象")
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}")
public R deleteDataSetBatch(@PathVariable List<String> ids) {
dataSetService.deleteDataSetBatch(ids);
return R.ok();
}
/**
* SQL解析
* @param sqlParseDto
* @return
*/
@ApiOperation(value = "SQL解析")
@ApiImplicitParam(name = "sqlParseDto", value = "SQL解析实体sqlParseDto", required = true, dataType = "SqlParseDto")
@PostMapping("/sql/analyse")
public R sqlAnalyse(@RequestBody @Validated SqlParseDto sqlParseDto) {
List<String> list = dataSetService.sqlAnalyse(sqlParseDto);
return R.ok().setData(list);
}
}
package cn.datax.service.data.factory.controller;
import cn.datax.common.base.BaseController;
import cn.datax.service.data.factory.api.entity.DataSetEntity;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.service.DataSetService;
import cn.datax.service.data.factory.service.DataSourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/inner")
public class InnerController extends BaseController {
@Autowired
private DataSourceService dataSourceService;
@Autowired
private DataSetService dataSetService;
@GetMapping("/sources/{id}")
public DataSourceEntity getDataSourceById(@PathVariable("id") String id) {
DataSourceEntity dataSourceEntity = dataSourceService.getDataSourceById(id);
return dataSourceEntity;
}
@PutMapping("/sources/sync/{id}")
public void updateDataSourceSyncById(@PathVariable("id") String id) {
dataSourceService.updateDataSourceSyncById(id);
}
@GetMapping("/sets/{id}")
public DataSetEntity getDataSetById(@PathVariable("id") String id) {
DataSetEntity dataSetEntity = dataSetService.getDataSetById(id);
return dataSetEntity;
}
}
package cn.datax.service.data.factory.dao;
import cn.datax.common.base.BaseDao;
import cn.datax.service.data.factory.api.entity.DataThemeEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 数据主题信息表 Mapper 接口
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Mapper
public interface DataThemeDao extends BaseDao<DataThemeEntity> {
}
package cn.datax.service.data.factory.mapstruct;
import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.factory.api.dto.DataThemeDto;
import cn.datax.service.data.factory.api.entity.DataThemeEntity;
import cn.datax.service.data.factory.api.vo.DataThemeVo;
import org.mapstruct.Mapper;
/**
* <p>
* 数据主题信息表 Mapper 实体映射
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Mapper(componentModel = "spring")
public interface DataThemeMapper extends EntityMapper<DataThemeDto, DataThemeEntity, DataThemeVo> {
}
package cn.datax.service.data.factory.service;
import cn.datax.service.data.factory.api.entity.DataThemeEntity;
import cn.datax.service.data.factory.api.dto.DataThemeDto;
import cn.datax.common.base.BaseService;
import java.util.List;
/**
* <p>
* 数据主题信息表 服务类
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
public interface DataThemeService extends BaseService<DataThemeEntity> {
DataThemeEntity saveDataTheme(DataThemeDto dataTheme);
DataThemeEntity updateDataTheme(DataThemeDto dataTheme);
DataThemeEntity getDataThemeById(String id);
void deleteDataThemeById(String id);
void deleteDataThemeBatch(List<String> ids);
}
package cn.datax.service.data.factory.service.impl;
import cn.datax.common.core.DataConstant;
import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.service.data.factory.api.dto.DataSourceDto;
import cn.datax.service.data.factory.api.dto.DbSchema;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.dao.DataSourceDao;
import cn.datax.service.data.factory.service.DataSourceService;
import cn.datax.service.data.factory.mapstruct.DataSourceMapper;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 数据源信息表 服务实现类
* </p>
*
* @author yuwei
* @since 2020-03-14
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DataSourceServiceImpl extends BaseServiceImpl<DataSourceDao, DataSourceEntity> implements DataSourceService {
@Autowired
private DataSourceDao dataSourceDao;
@Autowired
private DataSourceMapper dataSourceMapper;
@Autowired
private DataSourceFactory dataSourceFactory;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveDataSource(DataSourceDto dataSourceDto) {
DataSourceEntity dataSource = dataSourceMapper.toEntity(dataSourceDto);
dataSource.setSourceSync(Integer.valueOf(DataConstant.TrueOrFalse.FALSE.getKey()));
dataSourceDao.insert(dataSource);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDataSource(DataSourceDto dataSourceDto) {
DataSourceEntity dataSource = dataSourceMapper.toEntity(dataSourceDto);
dataSourceDao.updateById(dataSource);
}
@Override
public DataSourceEntity getDataSourceById(String id) {
DataSourceEntity dataSourceEntity = super.getById(id);
return dataSourceEntity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataSourceById(String id) {
dataSourceDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataSourceBatch(List<String> ids) {
dataSourceDao.deleteBatchIds(ids);
}
@Override
public DbQuery checkConnection(DataSourceDto dataSourceDto) {
DataSourceEntity dataSource = dataSourceMapper.toEntity(dataSourceDto);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
return dbQuery;
}
@Override
public DbQuery getDbQuery(String id) {
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
return dbQuery;
}
@Override
public List<DbTable> getDbTables(String id) {
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbTable> tables = dbQuery.getTables(dbSchema.getDbName());
return tables;
}
@Override
public List<DbColumn> getDbTableColumns(String id, String tableName) {
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbColumn> columns = dbQuery.getTableColumns(dbSchema.getDbName(), tableName);
return columns;
}
@Override
public void updateDataSourceSyncById(String id) {
DataSourceEntity dataSource = new DataSourceEntity();
dataSource.setId(id);
dataSource.setSourceSync(Integer.valueOf(DataConstant.TrueOrFalse.TRUE.getKey()));
dataSourceDao.updateById(dataSource);
}
}
package cn.datax.service.data.factory.service.impl;
import cn.datax.service.data.factory.api.entity.DataThemeEntity;
import cn.datax.service.data.factory.api.dto.DataThemeDto;
import cn.datax.service.data.factory.service.DataThemeService;
import cn.datax.service.data.factory.mapstruct.DataThemeMapper;
import cn.datax.service.data.factory.dao.DataThemeDao;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 数据主题信息表 服务实现类
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DataThemeServiceImpl extends BaseServiceImpl<DataThemeDao, DataThemeEntity> implements DataThemeService {
@Autowired
private DataThemeDao dataThemeDao;
@Autowired
private DataThemeMapper dataThemeMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public DataThemeEntity saveDataTheme(DataThemeDto dataThemeDto) {
DataThemeEntity dataTheme = dataThemeMapper.toEntity(dataThemeDto);
dataThemeDao.insert(dataTheme);
return dataTheme;
}
@Override
@Transactional(rollbackFor = Exception.class)
public DataThemeEntity updateDataTheme(DataThemeDto dataThemeDto) {
DataThemeEntity dataTheme = dataThemeMapper.toEntity(dataThemeDto);
dataThemeDao.updateById(dataTheme);
return dataTheme;
}
@Override
public DataThemeEntity getDataThemeById(String id) {
DataThemeEntity dataThemeEntity = super.getById(id);
return dataThemeEntity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataThemeById(String id) {
dataThemeDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataThemeBatch(List<String> ids) {
dataThemeDao.deleteBatchIds(ids);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.datax.service.data.factory.dao.DataThemeDao">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.data.factory.api.entity.DataThemeEntity">
<result column="id" property="id" />
<result column="status" property="status" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="create_dept" property="createDept" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="remark" property="remark" />
<result column="theme_name" property="themeName" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
status,
create_by,
create_time,
create_dept,
update_by,
update_time,
remark,
theme_name
</sql>
</mapper>
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId> <artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
...@@ -84,11 +84,6 @@ ...@@ -84,11 +84,6 @@
<artifactId>datax-common-rabbitmq</artifactId> <artifactId>datax-common-rabbitmq</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>${xstream.vsersion}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -6,14 +6,11 @@ import cn.datax.common.database.core.PageResult; ...@@ -6,14 +6,11 @@ import cn.datax.common.database.core.PageResult;
import cn.datax.common.utils.ThrowableUtil; import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.market.api.dto.ApiLogDto; import cn.datax.service.data.market.api.dto.ApiLogDto;
import cn.datax.service.data.market.api.entity.DataApiEntity; import cn.datax.service.data.market.api.entity.DataApiEntity;
import cn.datax.service.data.market.api.enums.ResType;
import cn.datax.service.data.market.api.mapping.service.ApiLogService; import cn.datax.service.data.market.api.mapping.service.ApiLogService;
import cn.datax.service.data.market.api.mapping.service.impl.ApiMappingEngine; import cn.datax.service.data.market.api.mapping.service.impl.ApiMappingEngine;
import cn.datax.service.data.market.api.mapping.utils.ThreadUtil; import cn.datax.service.data.market.api.mapping.utils.ThreadUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -86,13 +83,7 @@ public class RequestHandler { ...@@ -86,13 +83,7 @@ public class RequestHandler {
requestInterceptor.postHandle(request, response, api, params, value); requestInterceptor.postHandle(request, response, api, params, value);
ThreadUtil.getInstance().get().setCallerSize(value.getData().size()); ThreadUtil.getInstance().get().setCallerSize(value.getData().size());
ThreadUtil.getInstance().get().setTime(System.currentTimeMillis() - start); ThreadUtil.getInstance().get().setTime(System.currentTimeMillis() - start);
R r = R.ok().setData(value); return R.ok().setData(value);
if (ResType.XML.getDesc().equals(api.getResType())) {
XStream xstream = new XStream(new StaxDriver());
xstream.alias("R", R.class);
return xstream.toXML(r);
}
return r;
} catch (Exception e) { } catch (Exception e) {
log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e)); log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e));
ThreadUtil.getInstance().get().setStatus(DataConstant.EnableState.DISABLE.getKey()); ThreadUtil.getInstance().get().setStatus(DataConstant.EnableState.DISABLE.getKey());
......
...@@ -7,9 +7,6 @@ import cn.datax.common.database.core.PageResult; ...@@ -7,9 +7,6 @@ import cn.datax.common.database.core.PageResult;
import cn.datax.common.exception.DataException; import cn.datax.common.exception.DataException;
import cn.datax.common.utils.PageUtil; import cn.datax.common.utils.PageUtil;
import cn.datax.common.utils.ThrowableUtil; import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.factory.api.dto.DbSchema;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign;
import cn.datax.service.data.market.api.dto.FieldRule; import cn.datax.service.data.market.api.dto.FieldRule;
import cn.datax.service.data.market.api.entity.ApiMaskEntity; import cn.datax.service.data.market.api.entity.ApiMaskEntity;
import cn.datax.service.data.market.api.entity.DataApiEntity; import cn.datax.service.data.market.api.entity.DataApiEntity;
...@@ -18,6 +15,9 @@ import cn.datax.service.data.market.api.mapping.factory.AbstractFactory; ...@@ -18,6 +15,9 @@ import cn.datax.service.data.market.api.mapping.factory.AbstractFactory;
import cn.datax.service.data.market.api.mapping.factory.FactoryProducer; import cn.datax.service.data.market.api.mapping.factory.FactoryProducer;
import cn.datax.service.data.market.api.mapping.factory.crypto.Crypto; import cn.datax.service.data.market.api.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.api.mapping.utils.SqlBuilderUtil; import cn.datax.service.data.market.api.mapping.utils.SqlBuilderUtil;
import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -34,13 +34,13 @@ public class ApiMappingEngine { ...@@ -34,13 +34,13 @@ public class ApiMappingEngine {
private DataSourceFactory dataSourceFactory; private DataSourceFactory dataSourceFactory;
@Autowired @Autowired
private DataSourceServiceFeign dataSourceServiceFeign; private MetadataSourceServiceFeign metadataSourceServiceFeign;
@Autowired @Autowired
private ApiMaskServiceFeign apiMaskServiceFeign; private ApiMaskServiceFeign apiMaskServiceFeign;
public PageResult<Map<String, Object>> execute(DataApiEntity dataApi, Map<String, Object> params) { public PageResult<Map<String, Object>> execute(DataApiEntity dataApi, Map<String, Object> params) {
DataSourceEntity dataSource = dataSourceServiceFeign.getDataSourceById(dataApi.getExecuteConfig().getSourceId()); MetadataSourceEntity dataSource = metadataSourceServiceFeign.getMetadataSourceById(dataApi.getExecuteConfig().getSourceId());
if (dataSource == null) { if (dataSource == null) {
throw new DataException("API调用查询数据源出错"); throw new DataException("API调用查询数据源出错");
} }
......
server: server:
port: 8819 port: 8823
spring: spring:
application: application:
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId> <artifactId>datax-common-office</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -12,6 +12,9 @@ import cn.datax.service.data.market.api.vo.SqlParseVo; ...@@ -12,6 +12,9 @@ import cn.datax.service.data.market.api.vo.SqlParseVo;
import cn.datax.service.data.market.mapstruct.DataApiMapper; import cn.datax.service.data.market.mapstruct.DataApiMapper;
import cn.datax.service.data.market.service.DataApiService; import cn.datax.service.data.market.service.DataApiService;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import com.aspose.words.SaveOptions;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -25,6 +28,8 @@ import org.springframework.web.bind.annotation.*; ...@@ -25,6 +28,8 @@ import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController; import cn.datax.common.base.BaseController;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -186,4 +191,21 @@ public class DataApiController extends BaseController { ...@@ -186,4 +191,21 @@ public class DataApiController extends BaseController {
dataApiService.cancelDataApi(id); dataApiService.cancelDataApi(id);
return R.ok(); return R.ok();
} }
@ApiOperation(value = "接口文档", notes = "根据url的id来指定生成接口文档对象")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@PostMapping("/word/{id}")
public void wordDataApi(@PathVariable String id, HttpServletResponse response) throws Exception {
// 清空response
response.reset();
// 设置response的Header
response.setContentType("application/octet-stream;charset=utf-8");
// 设置content-disposition响应头控制浏览器以下载的形式打开文件
response.addHeader("Content-Disposition", "attachment;filename=" + new String("接口文档.docx".getBytes()));
Document doc = dataApiService.wordDataApi(id);
OutputStream out = response.getOutputStream();
doc.save(out, SaveOptions.createSaveOptions(SaveFormat.DOCX));
out.flush();
out.close();
}
} }
...@@ -5,6 +5,7 @@ import cn.datax.service.data.market.api.entity.DataApiEntity; ...@@ -5,6 +5,7 @@ import cn.datax.service.data.market.api.entity.DataApiEntity;
import cn.datax.service.data.market.api.dto.DataApiDto; import cn.datax.service.data.market.api.dto.DataApiDto;
import cn.datax.common.base.BaseService; import cn.datax.common.base.BaseService;
import cn.datax.service.data.market.api.vo.SqlParseVo; import cn.datax.service.data.market.api.vo.SqlParseVo;
import com.aspose.words.Document;
import java.util.List; import java.util.List;
...@@ -35,4 +36,6 @@ public interface DataApiService extends BaseService<DataApiEntity> { ...@@ -35,4 +36,6 @@ public interface DataApiService extends BaseService<DataApiEntity> {
void releaseDataApi(String id); void releaseDataApi(String id);
void cancelDataApi(String id); void cancelDataApi(String id);
Document wordDataApi(String id) throws Exception;
} }
package cn.datax.service.data.market.service.impl; package cn.datax.service.data.market.service.impl;
import cn.datax.commo.office.word.WordUtil;
import cn.datax.common.core.DataConstant; import cn.datax.common.core.DataConstant;
import cn.datax.common.exception.DataException; import cn.datax.common.exception.DataException;
import cn.datax.common.rabbitmq.config.RabbitMqConstant; import cn.datax.common.rabbitmq.config.RabbitMqConstant;
...@@ -13,6 +14,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper; ...@@ -13,6 +14,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper;
import cn.datax.service.data.market.dao.DataApiDao; import cn.datax.service.data.market.dao.DataApiDao;
import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.base.BaseServiceImpl;
import cn.datax.service.data.market.utils.SqlBuilderUtil; import cn.datax.service.data.market.utils.SqlBuilderUtil;
import com.aspose.words.Document;
import com.aspose.words.MailMerge;
import com.aspose.words.net.System.Data.DataRow;
import com.aspose.words.net.System.Data.DataTable;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
...@@ -30,10 +35,13 @@ import net.sf.jsqlparser.util.deparser.ExpressionDeParser; ...@@ -30,10 +35,13 @@ import net.sf.jsqlparser.util.deparser.ExpressionDeParser;
import net.sf.jsqlparser.util.deparser.SelectDeParser; import net.sf.jsqlparser.util.deparser.SelectDeParser;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -239,4 +247,55 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit ...@@ -239,4 +247,55 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
dataApiEntity.setStatus(DataConstant.ApiState.CANCEL.getKey()); dataApiEntity.setStatus(DataConstant.ApiState.CANCEL.getKey());
dataApiDao.updateById(dataApiEntity); dataApiDao.updateById(dataApiEntity);
} }
@Override
public Document wordDataApi(String id) throws Exception {
DataApiEntity dataApiEntity = super.getById(id);
// 合并模版
ClassPathResource classPathResource = new ClassPathResource("templates/api_1.0.0.docx");
InputStream inputStream =classPathResource.getInputStream();
Document doc = WordUtil.getInstance().getDocument(inputStream);
// 提供字段
String[] fieldNames = new String[] {"apiName", "apiVersion", "reqMethod", "resType", "apiUrl", "remark"};
Object[] fieldValues = new Object[] {dataApiEntity.getApiName(), dataApiEntity.getApiVersion(), dataApiEntity.getReqMethod(), dataApiEntity.getResType(), "/services/"+dataApiEntity.getApiVersion()+dataApiEntity.getApiUrl(), dataApiEntity.getRemark()};
MailMerge mailMerge = doc.getMailMerge();
mailMerge.execute(fieldNames, fieldValues);
// 请求参数 TableStart:ReqParamList TableEnd:ReqParamList
DataTable reqParamTable = new DataTable("ReqParamList");
reqParamTable.getColumns().add("paramName");
reqParamTable.getColumns().add("remark");
reqParamTable.getColumns().add("paramType");
reqParamTable.getColumns().add("nullable");
reqParamTable.getColumns().add("exampleValue");
List<ReqParam> reqParamList = dataApiEntity.getReqParams();
for (int i = 0; i < reqParamList.size(); i++) {
DataRow row = reqParamTable.newRow();
ReqParam param = reqParamList.get(i);
row.set(0, param.getParamName());
row.set(1, param.getRemark());
row.set(2, param.getParamType());
row.set(3, "1".equals(param.getNullable()) ? "Y" : "N");
row.set(4, param.getExampleValue());
reqParamTable.getRows().add(row);
}
mailMerge.executeWithRegions(reqParamTable);
// 返回字段 TableStart:ResParamList TableEnd:ResParamList
DataTable resParamTable = new DataTable("ResParamList");
resParamTable.getColumns().add("fieldName");
resParamTable.getColumns().add("dataType");
resParamTable.getColumns().add("remark");
resParamTable.getColumns().add("exampleValue");
List<ResParam> resParamList = dataApiEntity.getResParams();
for (int i = 0; i < resParamList.size(); i++) {
DataRow row = resParamTable.newRow();
ResParam param = resParamList.get(i);
row.set(0, param.getFieldName());
row.set(1, param.getDataType());
row.set(2, param.getRemark());
row.set(3, param.getExampleValue());
resParamTable.getRows().add(row);
}
mailMerge.executeWithRegions(resParamTable);
return doc;
}
} }
server: server:
port: 8818 port: 8822
spring: spring:
application: application:
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.metadata.api.dto;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
......
...@@ -18,7 +18,7 @@ import java.io.Serializable; ...@@ -18,7 +18,7 @@ import java.io.Serializable;
*/ */
@ApiModel(value = "元数据信息表Model") @ApiModel(value = "元数据信息表Model")
@Data @Data
public class DataMetadataColumnDto implements Serializable { public class MetadataColumnDto implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.metadata.api.dto;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
...@@ -9,6 +9,7 @@ import javax.validation.Valid; ...@@ -9,6 +9,7 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
/** /**
* <p> * <p>
* 数据源信息表 实体DTO * 数据源信息表 实体DTO
...@@ -19,7 +20,7 @@ import java.io.Serializable; ...@@ -19,7 +20,7 @@ import java.io.Serializable;
*/ */
@ApiModel(value = "数据源信息表Model") @ApiModel(value = "数据源信息表Model")
@Data @Data
public class DataSourceDto implements Serializable { public class MetadataSourceDto implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
...@@ -32,9 +33,6 @@ public class DataSourceDto implements Serializable { ...@@ -32,9 +33,6 @@ public class DataSourceDto implements Serializable {
@ApiModelProperty(value = "数据源名称") @ApiModelProperty(value = "数据源名称")
@NotBlank(message = "数据源名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class}) @NotBlank(message = "数据源名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String sourceName; private String sourceName;
@ApiModelProperty(value = "数据主题")
@NotBlank(message = "数据主题不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String themeId;
@ApiModelProperty(value = "数据源连接信息") @ApiModelProperty(value = "数据源连接信息")
@Valid @Valid
private DbSchema dbSchema; private DbSchema dbSchema;
......
...@@ -18,7 +18,7 @@ import java.io.Serializable; ...@@ -18,7 +18,7 @@ import java.io.Serializable;
*/ */
@ApiModel(value = "数据库表信息表Model") @ApiModel(value = "数据库表信息表Model")
@Data @Data
public class DataMetadataTableDto implements Serializable { public class MetadataTableDto implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.metadata.api.dto;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
...@@ -19,7 +19,7 @@ import java.io.Serializable; ...@@ -19,7 +19,7 @@ import java.io.Serializable;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("metadata_column") @TableName("metadata_column")
public class DataMetadataColumnEntity implements Serializable { public class MetadataColumnEntity implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.entity; package cn.datax.service.data.metadata.api.entity;
import cn.datax.common.base.DataScopeBaseEntity; import cn.datax.common.base.DataScopeBaseEntity;
import cn.datax.service.data.factory.api.dto.DbSchema; import cn.datax.service.data.metadata.api.dto.DbSchema;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
...@@ -20,8 +20,8 @@ import lombok.experimental.Accessors; ...@@ -20,8 +20,8 @@ import lombok.experimental.Accessors;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)
@TableName(value = "factory_source", autoResultMap = true) @TableName(value = "metadata_source", autoResultMap = true)
public class DataSourceEntity extends DataScopeBaseEntity { public class MetadataSourceEntity extends DataScopeBaseEntity {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
...@@ -19,7 +19,7 @@ import java.io.Serializable; ...@@ -19,7 +19,7 @@ import java.io.Serializable;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("metadata_table") @TableName("metadata_table")
public class DataMetadataTableEntity implements Serializable { public class MetadataTableEntity implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.metadata.api.feign;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.feign.factory.MetadataSourceServiceFeignFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@FeignClient(contextId = "metadataSourceServiceFeign", value = "datax-service-data-metadata", fallbackFactory = MetadataSourceServiceFeignFallbackFactory.class)
public interface MetadataSourceServiceFeign {
@GetMapping("/inner/sources/{id}")
MetadataSourceEntity getMetadataSourceById(@PathVariable("id") String id);
@GetMapping("/inner/sources/list")
List<MetadataSourceEntity> getMetadataSourceList();
}
package cn.datax.service.data.metadata.api.feign.factory;
import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import cn.datax.service.data.metadata.api.feign.fallback.MetadataSourceServiceFeignFallbackImpl;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
@Component
public class MetadataSourceServiceFeignFallbackFactory implements FallbackFactory<MetadataSourceServiceFeign> {
@Override
public MetadataSourceServiceFeign create(Throwable throwable) {
MetadataSourceServiceFeignFallbackImpl metadataSourceServiceFeignFallback = new MetadataSourceServiceFeignFallbackImpl();
metadataSourceServiceFeignFallback.setCause(throwable);
return metadataSourceServiceFeignFallback;
}
}
package cn.datax.service.data.factory.api.feign.fallback; package cn.datax.service.data.metadata.api.feign.fallback;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign; import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j @Slf4j
@Component @Component
public class DataSourceServiceFeignFallbackImpl implements DataSourceServiceFeign { public class MetadataSourceServiceFeignFallbackImpl implements MetadataSourceServiceFeign {
@Setter @Setter
private Throwable cause; private Throwable cause;
@Override @Override
public DataSourceEntity getDataSourceById(String id) { public MetadataSourceEntity getMetadataSourceById(String id) {
log.error("feign 调用{}出错", id, cause); log.error("feign 调用{}出错", id, cause);
return null; return null;
} }
@Override @Override
public void updateDataSourceSyncById(String id) { public List<MetadataSourceEntity> getMetadataSourceList() {
log.error("feign 调用{}出错", id, cause); log.error("feign 调用出错", cause);
return null;
} }
} }
...@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode; ...@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DataMetadataColumnQuery extends BaseQueryParams { public class MetadataColumnQuery extends BaseQueryParams {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.query; package cn.datax.service.data.metadata.api.query;
import cn.datax.common.base.BaseQueryParams; import cn.datax.common.base.BaseQueryParams;
import lombok.Data; import lombok.Data;
...@@ -14,11 +14,9 @@ import lombok.EqualsAndHashCode; ...@@ -14,11 +14,9 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DataSourceQuery extends BaseQueryParams { public class MetadataSourceQuery extends BaseQueryParams {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
private String sourceName; private String sourceName;
private String themeId;
} }
...@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode; ...@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DataMetadataTableQuery extends BaseQueryParams { public class MetadataTableQuery extends BaseQueryParams {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
...@@ -13,7 +13,7 @@ import java.io.Serializable; ...@@ -13,7 +13,7 @@ import java.io.Serializable;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Data @Data
public class DataMetadataColumnVo implements Serializable { public class MetadataColumnVo implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.metadata.api.vo;
import java.io.Serializable;
import java.util.List;
public class MetadataDatabase implements Serializable {
private static final long serialVersionUID=1L;
private String database;
private List<MetadataTable> tables;
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public List<MetadataTable> getTables() {
return tables;
}
public void setTables(List<MetadataTable> tables) {
this.tables = tables;
}
@Override
public String toString() {
return "MetadataDatabase{" +
"database='" + database + '\'' +
", tables=" + tables +
'}';
}
public class MetadataTable implements Serializable {
private static final long serialVersionUID=1L;
private String tableName;
private String tableComment;
private List<MetadataColumn> columns;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableComment() {
return tableComment;
}
public void setTableComment(String tableComment) {
this.tableComment = tableComment;
}
public List<MetadataColumn> getColumns() {
return columns;
}
public void setColumns(List<MetadataColumn> columns) {
this.columns = columns;
}
@Override
public String toString() {
return "MetadataTable{" +
"tableName='" + tableName + '\'' +
", tableComment='" + tableComment + '\'' +
", columns=" + columns +
'}';
}
}
public class MetadataColumn implements Serializable {
private static final long serialVersionUID=1L;
private String columnPosition;
private String columnName;
private String dataType;
private String dataLength;
private String dataPrecision;
private String dataScale;
private String columnNullable;
private String columnKey;
private String dataDefault;
private String columnComment;
public String getColumnPosition() {
return columnPosition;
}
public void setColumnPosition(String columnPosition) {
this.columnPosition = columnPosition;
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getDataLength() {
return dataLength;
}
public void setDataLength(String dataLength) {
this.dataLength = dataLength;
}
public String getDataPrecision() {
return dataPrecision;
}
public void setDataPrecision(String dataPrecision) {
this.dataPrecision = dataPrecision;
}
public String getDataScale() {
return dataScale;
}
public void setDataScale(String dataScale) {
this.dataScale = dataScale;
}
public String getColumnNullable() {
return columnNullable;
}
public void setColumnNullable(String columnNullable) {
this.columnNullable = columnNullable;
}
public String getColumnKey() {
return columnKey;
}
public void setColumnKey(String columnKey) {
this.columnKey = columnKey;
}
public String getDataDefault() {
return dataDefault;
}
public void setDataDefault(String dataDefault) {
this.dataDefault = dataDefault;
}
public String getColumnComment() {
return columnComment;
}
public void setColumnComment(String columnComment) {
this.columnComment = columnComment;
}
@Override
public String toString() {
return "MetadataColumn{" +
"columnPosition='" + columnPosition + '\'' +
", columnName='" + columnName + '\'' +
", dataType='" + dataType + '\'' +
", dataLength='" + dataLength + '\'' +
", dataPrecision='" + dataPrecision + '\'' +
", dataScale='" + dataScale + '\'' +
", columnNullable='" + columnNullable + '\'' +
", columnKey='" + columnKey + '\'' +
", dataDefault='" + dataDefault + '\'' +
", columnComment='" + columnComment + '\'' +
'}';
}
}
}
package cn.datax.service.data.factory.api.vo; package cn.datax.service.data.metadata.api.vo;
import cn.datax.service.data.factory.api.dto.DbSchema; import cn.datax.service.data.metadata.api.dto.DbSchema;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
...@@ -16,7 +16,7 @@ import java.time.LocalDateTime; ...@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
* @since 2020-03-14 * @since 2020-03-14
*/ */
@Data @Data
public class DataSourceVo implements Serializable { public class MetadataSourceVo implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
...@@ -27,7 +27,6 @@ public class DataSourceVo implements Serializable { ...@@ -27,7 +27,6 @@ public class DataSourceVo implements Serializable {
private String remark; private String remark;
private String dbType; private String dbType;
private String sourceName; private String sourceName;
private String themeId;
private DbSchema dbSchema; private DbSchema dbSchema;
private Integer sync; private Integer sync;
} }
...@@ -13,7 +13,7 @@ import java.io.Serializable; ...@@ -13,7 +13,7 @@ import java.io.Serializable;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Data @Data
public class DataMetadataTableVo implements Serializable { public class MetadataTableVo implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
org.springframework.boot.autoconfigure.EnableAutoConfiguration= org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.datax.service.data.metadata.api.feign.factory.MetadataSourceServiceFeignFallbackFactory,\
cn.datax.service.data.metadata.api.feign.fallback.MetadataSourceServiceFeignFallbackImpl
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>data-factory-service-parent</artifactId> <artifactId>data-metadata-service-parent</artifactId>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<version>2.0.0</version> <version>2.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>2.0.0</version> <version>2.0.0</version>
<artifactId>data-factory-service</artifactId> <artifactId>data-metadata-service-console</artifactId>
<dependencies> <dependencies>
<!--web 模块--> <!--web 模块-->
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId> <artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
......
package cn.datax.service.data.factory.sql.console; package cn.datax.service.data.metadata.console;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients(basePackages = {"cn.datax.service.system.api.feign", "cn.datax.service.data.factory.api.feign"}) @EnableFeignClients(basePackages = {"cn.datax.service.system.api.feign"})
@SpringCloudApplication @SpringCloudApplication
public class DataxSqlConsoleApplication { public class DataxConsoleApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(DataxSqlConsoleApplication.class); SpringApplication.run(DataxConsoleApplication.class);
} }
} }
package cn.datax.service.data.factory.sql.console.concurrent; package cn.datax.service.data.metadata.console.concurrent;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.sql.SQLException;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
/** /**
......
package cn.datax.service.data.factory.sql.console.concurrent; package cn.datax.service.data.metadata.console.concurrent;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo; import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.sql.*; import java.sql.*;
......
package cn.datax.service.data.factory.sql.console.config; package cn.datax.service.data.metadata.console.config;
import cn.datax.common.security.handler.DataAccessDeniedHandler; import cn.datax.common.security.handler.DataAccessDeniedHandler;
import cn.datax.common.security.handler.DataAuthExceptionEntryPoint; import cn.datax.common.security.handler.DataAuthExceptionEntryPoint;
......
package cn.datax.service.data.factory.sql.console.config; package cn.datax.service.data.metadata.console.config;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
......
package cn.datax.service.data.factory.sql.console.config; package cn.datax.service.data.metadata.console.config;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
......
package cn.datax.service.data.factory.sql.console.config; package cn.datax.service.data.metadata.console.config;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
......
package cn.datax.service.data.factory.sql.console.controller; package cn.datax.service.data.metadata.console.controller;
import cn.datax.common.base.BaseController; import cn.datax.common.base.BaseController;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
......
package cn.datax.service.data.factory.sql.console.controller; package cn.datax.service.data.metadata.console.controller;
import cn.datax.common.base.BaseController; import cn.datax.common.base.BaseController;
import cn.datax.common.core.R; import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.factory.api.dto.SqlConsoleDto; import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo; import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import cn.datax.service.data.factory.sql.console.service.SqlConsoleService; import cn.datax.service.data.metadata.console.service.SqlConsoleService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
......
package cn.datax.service.data.factory.sql.console.service; package cn.datax.service.data.metadata.console.service;
import cn.datax.service.data.factory.api.dto.SqlConsoleDto; import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo; import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import java.util.List; import java.util.List;
......
package cn.datax.service.data.factory.sql.console.service.impl; package cn.datax.service.data.metadata.console.service.impl;
import cn.datax.common.database.DataSourceFactory; import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty; import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.exception.DataException; import cn.datax.common.exception.DataException;
import cn.datax.common.utils.ThrowableUtil; import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.factory.api.dto.DbSchema; import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.factory.api.dto.SqlConsoleDto; import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign; import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo; import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import cn.datax.service.data.factory.sql.console.concurrent.CallableTemplate; import cn.datax.service.data.metadata.console.concurrent.CallableTemplate;
import cn.datax.service.data.factory.sql.console.concurrent.DateHander; import cn.datax.service.data.metadata.console.concurrent.DateHander;
import cn.datax.service.data.factory.sql.console.service.SqlConsoleService; import cn.datax.service.data.metadata.console.service.SqlConsoleService;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.JSQLParserException;
...@@ -37,7 +37,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService { ...@@ -37,7 +37,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService {
private DataSourceFactory dataSourceFactory; private DataSourceFactory dataSourceFactory;
@Autowired @Autowired
private DataSourceServiceFeign dataSourceServiceFeign; private MetadataSourceServiceFeign metadataSourceServiceFeign;
private static Map<String, List<Connection>> connectionMap = new ConcurrentHashMap<>(); private static Map<String, List<Connection>> connectionMap = new ConcurrentHashMap<>();
...@@ -55,7 +55,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService { ...@@ -55,7 +55,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService {
if (CollUtil.isEmpty(sqls)) { if (CollUtil.isEmpty(sqls)) {
throw new DataException("未解析到SQL语句"); throw new DataException("未解析到SQL语句");
} }
DataSourceEntity dataSource = dataSourceServiceFeign.getDataSourceById(sqlConsoleDto.getSourceId()); MetadataSourceEntity dataSource = metadataSourceServiceFeign.getMetadataSourceById(sqlConsoleDto.getSourceId());
if(dataSource == null){ if(dataSource == null){
throw new DataException("SQL工作台查询数据源出错"); throw new DataException("SQL工作台查询数据源出错");
} }
......
server: server:
port: 8817 port: 8821
spring: spring:
application: application:
name: datax-service-data-sql-console name: datax-service-data-console
profiles: profiles:
active: dev active: dev
cloud: cloud:
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="springAppName" source="spring.application.name"/> <springProperty scope="context" name="springAppName" source="spring.application.name"/>
<property name="log.path" value="logs/datax-service-data-sql-console"/> <property name="log.path" value="logs/datax-service-data-console"/>
<property name="log.maxHistory" value="15"/> <property name="log.maxHistory" value="15"/>
<property name="log.totalSizeCap" value="500MB"/> <property name="log.totalSizeCap" value="500MB"/>
<property name="log.maxFileSize" value="10MB"/> <property name="log.maxFileSize" value="10MB"/>
......
...@@ -71,12 +71,12 @@ ...@@ -71,12 +71,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<artifactId>data-metadata-service-api</artifactId> <artifactId>datax-common-database</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId> <artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
......
package cn.datax.service.data.metadata.async; package cn.datax.service.data.metadata.async;
import cn.datax.common.core.DataConstant;
import cn.datax.common.database.DataSourceFactory; import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty; import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable; import cn.datax.common.database.core.DbTable;
import cn.datax.service.data.factory.api.dto.DbSchema; import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.dao.MetadataColumnDao;
import cn.datax.service.data.metadata.dao.DataMetadataColumnDao; import cn.datax.service.data.metadata.dao.MetadataSourceDao;
import cn.datax.service.data.metadata.dao.DataMetadataTableDao; import cn.datax.service.data.metadata.dao.MetadataTableDao;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -32,16 +33,16 @@ public class AsyncTask { ...@@ -32,16 +33,16 @@ public class AsyncTask {
private DataSourceFactory dataSourceFactory; private DataSourceFactory dataSourceFactory;
@Autowired @Autowired
private DataSourceServiceFeign dataSourceServiceFeign; private MetadataSourceDao metadataSourceDao;
@Autowired @Autowired
private DataMetadataTableDao dataMetadataTableDao; private MetadataTableDao metadataTableDao;
@Autowired @Autowired
private DataMetadataColumnDao dataMetadataColumnDao; private MetadataColumnDao metadataColumnDao;
@Async @Async
public void doTask(DataSourceEntity dataSource) { public void doTask(MetadataSourceEntity dataSource) {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
DbSchema dbSchema = dataSource.getDbSchema(); DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(), DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
...@@ -49,8 +50,8 @@ public class AsyncTask { ...@@ -49,8 +50,8 @@ public class AsyncTask {
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty); DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbTable> tables = dbQuery.getTables(dbSchema.getDbName()); List<DbTable> tables = dbQuery.getTables(dbSchema.getDbName());
if (CollUtil.isNotEmpty(tables)) { if (CollUtil.isNotEmpty(tables)) {
List<DataMetadataTableEntity> metadataTableEntityList = tables.stream().map(table -> { List<MetadataTableEntity> metadataTableEntityList = tables.stream().map(table -> {
DataMetadataTableEntity metadataTable = new DataMetadataTableEntity(); MetadataTableEntity metadataTable = new MetadataTableEntity();
metadataTable.setSourceId(dataSource.getId()); metadataTable.setSourceId(dataSource.getId());
metadataTable.setTableName(table.getTableName()); metadataTable.setTableName(table.getTableName());
metadataTable.setTableComment(table.getTableComment()); metadataTable.setTableComment(table.getTableComment());
...@@ -58,11 +59,11 @@ public class AsyncTask { ...@@ -58,11 +59,11 @@ public class AsyncTask {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (CollUtil.isNotEmpty(metadataTableEntityList)) { if (CollUtil.isNotEmpty(metadataTableEntityList)) {
metadataTableEntityList.stream().forEach(table -> { metadataTableEntityList.stream().forEach(table -> {
dataMetadataTableDao.insert(table); metadataTableDao.insert(table);
List<DbColumn> columns = dbQuery.getTableColumns(dbSchema.getDbName(), table.getTableName()); List<DbColumn> columns = dbQuery.getTableColumns(dbSchema.getDbName(), table.getTableName());
if (CollUtil.isNotEmpty(columns)) { if (CollUtil.isNotEmpty(columns)) {
List<DataMetadataColumnEntity> metadataColumnEntityList = columns.stream().map(column -> { List<MetadataColumnEntity> metadataColumnEntityList = columns.stream().map(column -> {
DataMetadataColumnEntity metadataColumn = new DataMetadataColumnEntity(); MetadataColumnEntity metadataColumn = new MetadataColumnEntity();
metadataColumn.setSourceId(dataSource.getId()); metadataColumn.setSourceId(dataSource.getId());
metadataColumn.setTableId(table.getId()); metadataColumn.setTableId(table.getId());
metadataColumn.setColumnName(column.getColName()); metadataColumn.setColumnName(column.getColName());
...@@ -78,13 +79,14 @@ public class AsyncTask { ...@@ -78,13 +79,14 @@ public class AsyncTask {
return metadataColumn; return metadataColumn;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (CollUtil.isNotEmpty(metadataColumnEntityList)) { if (CollUtil.isNotEmpty(metadataColumnEntityList)) {
metadataColumnEntityList.stream().forEach(column -> dataMetadataColumnDao.insert(column)); metadataColumnEntityList.stream().forEach(column -> metadataColumnDao.insert(column));
} }
} }
}); });
} }
} }
dataSourceServiceFeign.updateDataSourceSyncById(dataSource.getId()); dataSource.setSourceSync(Integer.valueOf(DataConstant.TrueOrFalse.TRUE.getKey()));
metadataSourceDao.updateById(dataSource);
log.info("异步任务执行完成!耗时{}秒", (System.currentTimeMillis() - start / 1000)); log.info("异步任务执行完成!耗时{}秒", (System.currentTimeMillis() - start / 1000));
} }
} }
\ No newline at end of file
package cn.datax.service.data.metadata.controller;
import cn.datax.common.core.R;
import cn.datax.service.data.metadata.service.DataMetadataService;
import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import com.aspose.words.SaveOptions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
@Api(tags = {"元数据"})
@RestController
@RequestMapping("/databases")
public class DataMetadataController {
@Autowired
private DataMetadataService dataMetadataService;
@ApiOperation(value = "同步", notes = "根据url的id来指定同步对象")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@PostMapping("/sync/{id}")
public R syncMetadata(@PathVariable String id) {
dataMetadataService.syncMetadata(id);
return R.ok();
}
@ApiOperation(value = "数据库设计文档", notes = "根据url的id来指定生成数据库设计文档对象")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@PostMapping("/word/{id}")
public void wordMetadata(@PathVariable String id, HttpServletResponse response) throws Exception {
// 清空response
response.reset();
// 设置response的Header
response.setContentType("application/octet-stream;charset=utf-8");
// 设置content-disposition响应头控制浏览器以下载的形式打开文件
response.addHeader("Content-Disposition", "attachment;filename=" + new String("数据库设计文档.doc".getBytes()));
Document doc = dataMetadataService.wordMetadata(id);
OutputStream out = response.getOutputStream();
doc.save(out, SaveOptions.createSaveOptions(SaveFormat.DOC));
out.flush();
out.close();
}
}
package cn.datax.service.data.metadata.controller; package cn.datax.service.data.metadata.controller;
import cn.datax.common.base.BaseController; import cn.datax.common.base.BaseController;
import cn.datax.common.core.DataConstant;
import cn.datax.common.security.annotation.DataInner;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.service.MetadataSourceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController @RestController
@RequestMapping("/inner") @RequestMapping("/inner")
public class InnerController extends BaseController { public class InnerController extends BaseController {
@Autowired
private MetadataSourceService metadataSourceService;
@DataInner
@GetMapping("/sources/{id}")
public MetadataSourceEntity getMetadataSourceById(@PathVariable("id") String id) {
MetadataSourceEntity metadataSourceEntity = metadataSourceService.getMetadataSourceById(id);
return metadataSourceEntity;
}
@DataInner
@GetMapping("/sources/list")
public List<MetadataSourceEntity> getMetadataSourceList() {
QueryWrapper<MetadataSourceEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", DataConstant.EnableState.ENABLE.getKey());
List<MetadataSourceEntity> list = metadataSourceService.list(queryWrapper);
return list;
}
} }
...@@ -3,12 +3,12 @@ package cn.datax.service.data.metadata.controller; ...@@ -3,12 +3,12 @@ package cn.datax.service.data.metadata.controller;
import cn.datax.common.core.JsonPage; import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R; import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto; import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataColumnVo; import cn.datax.service.data.metadata.api.vo.MetadataColumnVo;
import cn.datax.service.data.metadata.api.query.DataMetadataColumnQuery; import cn.datax.service.data.metadata.api.query.MetadataColumnQuery;
import cn.datax.service.data.metadata.mapstruct.DataMetadataColumnMapper; import cn.datax.service.data.metadata.mapstruct.MetadataColumnMapper;
import cn.datax.service.data.metadata.service.DataMetadataColumnService; import cn.datax.service.data.metadata.service.MetadataColumnService;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
...@@ -37,13 +37,13 @@ import java.util.stream.Collectors; ...@@ -37,13 +37,13 @@ import java.util.stream.Collectors;
@Api(tags = {"元数据信息表"}) @Api(tags = {"元数据信息表"})
@RestController @RestController
@RequestMapping("/columns") @RequestMapping("/columns")
public class DataMetadataColumnController extends BaseController { public class MetadataColumnController extends BaseController {
@Autowired @Autowired
private DataMetadataColumnService dataMetadataColumnService; private MetadataColumnService metadataColumnService;
@Autowired @Autowired
private DataMetadataColumnMapper dataMetadataColumnMapper; private MetadataColumnMapper metadataColumnMapper;
/** /**
* 通过ID查询信息 * 通过ID查询信息
...@@ -55,41 +55,41 @@ public class DataMetadataColumnController extends BaseController { ...@@ -55,41 +55,41 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}") @GetMapping("/{id}")
public R getDataMetadataColumnById(@PathVariable String id) { public R getDataMetadataColumnById(@PathVariable String id) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.getDataMetadataColumnById(id); MetadataColumnEntity metadataColumnEntity = metadataColumnService.getMetadataColumnById(id);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity)); return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
} }
@ApiOperation(value = "获取列表", notes = "") @ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list") @GetMapping("/list")
public R getDataMetadataColumnList(DataMetadataColumnQuery dataMetadataColumnQuery) { public R getDataMetadataColumnList(MetadataColumnQuery metadataColumnQuery) {
QueryWrapper<DataMetadataColumnEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<MetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataColumnQuery.getColumnName()), "column_name", dataMetadataColumnQuery.getColumnName()); queryWrapper.like(StrUtil.isNotBlank(metadataColumnQuery.getColumnName()), "column_name", metadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getSourceId()), "source_id", dataMetadataColumnQuery.getSourceId()); queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getSourceId()), "source_id", metadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getTableId()), "table_id", dataMetadataColumnQuery.getTableId()); queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getTableId()), "table_id", metadataColumnQuery.getTableId());
List<DataMetadataColumnEntity> list = dataMetadataColumnService.list(queryWrapper); List<MetadataColumnEntity> list = metadataColumnService.list(queryWrapper);
List<DataMetadataColumnVo> collect = list.stream().map(dataMetadataColumnMapper::toVO).collect(Collectors.toList()); List<MetadataColumnVo> collect = list.stream().map(metadataColumnMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect); return R.ok().setData(collect);
} }
/** /**
* 分页查询信息 * 分页查询信息
* *
* @param dataMetadataColumnQuery * @param metadataColumnQuery
* @return * @return
*/ */
@ApiOperation(value = "分页查询", notes = "") @ApiOperation(value = "分页查询", notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "dataMetadataColumnQuery", value = "查询实体dataMetadataColumnQuery", required = true, dataTypeClass = DataMetadataColumnQuery.class) @ApiImplicitParam(name = "dataMetadataColumnQuery", value = "查询实体dataMetadataColumnQuery", required = true, dataTypeClass = MetadataColumnQuery.class)
}) })
@GetMapping("/page") @GetMapping("/page")
public R getDataMetadataColumnPage(DataMetadataColumnQuery dataMetadataColumnQuery) { public R getDataMetadataColumnPage(MetadataColumnQuery metadataColumnQuery) {
QueryWrapper<DataMetadataColumnEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<MetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataColumnQuery.getColumnName()), "column_name", dataMetadataColumnQuery.getColumnName()); queryWrapper.like(StrUtil.isNotBlank(metadataColumnQuery.getColumnName()), "column_name", metadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getSourceId()), "source_id", dataMetadataColumnQuery.getSourceId()); queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getSourceId()), "source_id", metadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getTableId()), "table_id", dataMetadataColumnQuery.getTableId()); queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getTableId()), "table_id", metadataColumnQuery.getTableId());
IPage<DataMetadataColumnEntity> page = dataMetadataColumnService.page(new Page<>(dataMetadataColumnQuery.getPageNum(), dataMetadataColumnQuery.getPageSize()), queryWrapper); IPage<MetadataColumnEntity> page = metadataColumnService.page(new Page<>(metadataColumnQuery.getPageNum(), metadataColumnQuery.getPageSize()), queryWrapper);
List<DataMetadataColumnVo> collect = page.getRecords().stream().map(dataMetadataColumnMapper::toVO).collect(Collectors.toList()); List<MetadataColumnVo> collect = page.getRecords().stream().map(metadataColumnMapper::toVO).collect(Collectors.toList());
JsonPage<DataMetadataColumnVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect); JsonPage<MetadataColumnVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
return R.ok().setData(jsonPage); return R.ok().setData(jsonPage);
} }
...@@ -101,9 +101,9 @@ public class DataMetadataColumnController extends BaseController { ...@@ -101,9 +101,9 @@ public class DataMetadataColumnController extends BaseController {
@ApiOperation(value = "添加信息", notes = "根据dataMetadataColumn对象添加信息") @ApiOperation(value = "添加信息", notes = "根据dataMetadataColumn对象添加信息")
@ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto") @ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto")
@PostMapping() @PostMapping()
public R saveDataMetadataColumn(@RequestBody @Validated({ValidationGroups.Insert.class}) DataMetadataColumnDto dataMetadataColumn) { public R saveDataMetadataColumn(@RequestBody @Validated({ValidationGroups.Insert.class}) MetadataColumnDto dataMetadataColumn) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.saveDataMetadataColumn(dataMetadataColumn); MetadataColumnEntity metadataColumnEntity = metadataColumnService.saveMetadataColumn(dataMetadataColumn);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity)); return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
} }
/** /**
...@@ -117,9 +117,9 @@ public class DataMetadataColumnController extends BaseController { ...@@ -117,9 +117,9 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto") @ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto")
}) })
@PutMapping("/{id}") @PutMapping("/{id}")
public R updateDataMetadataColumn(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) DataMetadataColumnDto dataMetadataColumn) { public R updateDataMetadataColumn(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) MetadataColumnDto dataMetadataColumn) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.updateDataMetadataColumn(dataMetadataColumn); MetadataColumnEntity metadataColumnEntity = metadataColumnService.updateMetadataColumn(dataMetadataColumn);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity)); return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
} }
/** /**
...@@ -131,7 +131,7 @@ public class DataMetadataColumnController extends BaseController { ...@@ -131,7 +131,7 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public R deleteDataMetadataColumnById(@PathVariable String id) { public R deleteDataMetadataColumnById(@PathVariable String id) {
dataMetadataColumnService.deleteDataMetadataColumnById(id); metadataColumnService.deleteMetadataColumnById(id);
return R.ok(); return R.ok();
} }
...@@ -144,7 +144,7 @@ public class DataMetadataColumnController extends BaseController { ...@@ -144,7 +144,7 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path") @ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}") @DeleteMapping("/batch/{ids}")
public R deleteDataMetadataColumnBatch(@PathVariable List<String> ids) { public R deleteDataMetadataColumnBatch(@PathVariable List<String> ids) {
dataMetadataColumnService.deleteDataMetadataColumnBatch(ids); metadataColumnService.deleteMetadataColumnBatch(ids);
return R.ok(); return R.ok();
} }
} }
...@@ -3,12 +3,12 @@ package cn.datax.service.data.metadata.controller; ...@@ -3,12 +3,12 @@ package cn.datax.service.data.metadata.controller;
import cn.datax.common.core.JsonPage; import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R; import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto; import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataTableVo; import cn.datax.service.data.metadata.api.vo.MetadataTableVo;
import cn.datax.service.data.metadata.api.query.DataMetadataTableQuery; import cn.datax.service.data.metadata.api.query.MetadataTableQuery;
import cn.datax.service.data.metadata.mapstruct.DataMetadataTableMapper; import cn.datax.service.data.metadata.mapstruct.MetadataTableMapper;
import cn.datax.service.data.metadata.service.DataMetadataTableService; import cn.datax.service.data.metadata.service.MetadataTableService;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
...@@ -37,13 +37,13 @@ import java.util.stream.Collectors; ...@@ -37,13 +37,13 @@ import java.util.stream.Collectors;
@Api(tags = {"数据库表信息表"}) @Api(tags = {"数据库表信息表"})
@RestController @RestController
@RequestMapping("/tables") @RequestMapping("/tables")
public class DataMetadataTableController extends BaseController { public class MetadataTableController extends BaseController {
@Autowired @Autowired
private DataMetadataTableService dataMetadataTableService; private MetadataTableService metadataTableService;
@Autowired @Autowired
private DataMetadataTableMapper dataMetadataTableMapper; private MetadataTableMapper metadataTableMapper;
/** /**
* 通过ID查询信息 * 通过ID查询信息
...@@ -55,39 +55,39 @@ public class DataMetadataTableController extends BaseController { ...@@ -55,39 +55,39 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}") @GetMapping("/{id}")
public R getDataMetadataTableById(@PathVariable String id) { public R getDataMetadataTableById(@PathVariable String id) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.getDataMetadataTableById(id); MetadataTableEntity metadataTableEntity = metadataTableService.getMetadataTableById(id);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity)); return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
} }
@ApiOperation(value = "获取列表", notes = "") @ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list") @GetMapping("/list")
public R getDataMetadataTableList(DataMetadataTableQuery dataMetadataTableQuery) { public R getDataMetadataTableList(MetadataTableQuery metadataTableQuery) {
QueryWrapper<DataMetadataTableEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<MetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataTableQuery.getTableName()), "table_name", dataMetadataTableQuery.getTableName()); queryWrapper.like(StrUtil.isNotBlank(metadataTableQuery.getTableName()), "table_name", metadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataTableQuery.getSourceId()), "source_id", dataMetadataTableQuery.getSourceId()); queryWrapper.eq(StrUtil.isNotBlank(metadataTableQuery.getSourceId()), "source_id", metadataTableQuery.getSourceId());
List<DataMetadataTableEntity> list = dataMetadataTableService.list(queryWrapper); List<MetadataTableEntity> list = metadataTableService.list(queryWrapper);
List<DataMetadataTableVo> collect = list.stream().map(dataMetadataTableMapper::toVO).collect(Collectors.toList()); List<MetadataTableVo> collect = list.stream().map(metadataTableMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect); return R.ok().setData(collect);
} }
/** /**
* 分页查询信息 * 分页查询信息
* *
* @param dataMetadataTableQuery * @param metadataTableQuery
* @return * @return
*/ */
@ApiOperation(value = "分页查询", notes = "") @ApiOperation(value = "分页查询", notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "dataMetadataTableQuery", value = "查询实体dataMetadataTableQuery", required = true, dataTypeClass = DataMetadataTableQuery.class) @ApiImplicitParam(name = "dataMetadataTableQuery", value = "查询实体dataMetadataTableQuery", required = true, dataTypeClass = MetadataTableQuery.class)
}) })
@GetMapping("/page") @GetMapping("/page")
public R getDataMetadataTablePage(DataMetadataTableQuery dataMetadataTableQuery) { public R getDataMetadataTablePage(MetadataTableQuery metadataTableQuery) {
QueryWrapper<DataMetadataTableEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<MetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataTableQuery.getTableName()), "table_name", dataMetadataTableQuery.getTableName()); queryWrapper.like(StrUtil.isNotBlank(metadataTableQuery.getTableName()), "table_name", metadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataTableQuery.getSourceId()), "source_id", dataMetadataTableQuery.getSourceId()); queryWrapper.eq(StrUtil.isNotBlank(metadataTableQuery.getSourceId()), "source_id", metadataTableQuery.getSourceId());
IPage<DataMetadataTableEntity> page = dataMetadataTableService.page(new Page<>(dataMetadataTableQuery.getPageNum(), dataMetadataTableQuery.getPageSize()), queryWrapper); IPage<MetadataTableEntity> page = metadataTableService.page(new Page<>(metadataTableQuery.getPageNum(), metadataTableQuery.getPageSize()), queryWrapper);
List<DataMetadataTableVo> collect = page.getRecords().stream().map(dataMetadataTableMapper::toVO).collect(Collectors.toList()); List<MetadataTableVo> collect = page.getRecords().stream().map(metadataTableMapper::toVO).collect(Collectors.toList());
JsonPage<DataMetadataTableVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect); JsonPage<MetadataTableVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
return R.ok().setData(jsonPage); return R.ok().setData(jsonPage);
} }
...@@ -99,9 +99,9 @@ public class DataMetadataTableController extends BaseController { ...@@ -99,9 +99,9 @@ public class DataMetadataTableController extends BaseController {
@ApiOperation(value = "添加信息", notes = "根据dataMetadataTable对象添加信息") @ApiOperation(value = "添加信息", notes = "根据dataMetadataTable对象添加信息")
@ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto") @ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto")
@PostMapping() @PostMapping()
public R saveDataMetadataTable(@RequestBody @Validated({ValidationGroups.Insert.class}) DataMetadataTableDto dataMetadataTable) { public R saveDataMetadataTable(@RequestBody @Validated({ValidationGroups.Insert.class}) MetadataTableDto dataMetadataTable) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.saveDataMetadataTable(dataMetadataTable); MetadataTableEntity metadataTableEntity = metadataTableService.saveMetadataTable(dataMetadataTable);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity)); return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
} }
/** /**
...@@ -115,9 +115,9 @@ public class DataMetadataTableController extends BaseController { ...@@ -115,9 +115,9 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto") @ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto")
}) })
@PutMapping("/{id}") @PutMapping("/{id}")
public R updateDataMetadataTable(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) DataMetadataTableDto dataMetadataTable) { public R updateDataMetadataTable(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) MetadataTableDto dataMetadataTable) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.updateDataMetadataTable(dataMetadataTable); MetadataTableEntity metadataTableEntity = metadataTableService.updateMetadataTable(dataMetadataTable);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity)); return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
} }
/** /**
...@@ -129,7 +129,7 @@ public class DataMetadataTableController extends BaseController { ...@@ -129,7 +129,7 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public R deleteDataMetadataTableById(@PathVariable String id) { public R deleteDataMetadataTableById(@PathVariable String id) {
dataMetadataTableService.deleteDataMetadataTableById(id); metadataTableService.deleteMetadataTableById(id);
return R.ok(); return R.ok();
} }
...@@ -142,7 +142,7 @@ public class DataMetadataTableController extends BaseController { ...@@ -142,7 +142,7 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path") @ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}") @DeleteMapping("/batch/{ids}")
public R deleteDataMetadataTableBatch(@PathVariable List<String> ids) { public R deleteDataMetadataTableBatch(@PathVariable List<String> ids) {
dataMetadataTableService.deleteDataMetadataTableBatch(ids); metadataTableService.deleteMetadataTableBatch(ids);
return R.ok(); return R.ok();
} }
} }
package cn.datax.service.data.metadata.dao; package cn.datax.service.data.metadata.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Mapper @Mapper
public interface DataMetadataColumnDao extends BaseDao<DataMetadataColumnEntity> { public interface MetadataColumnDao extends BaseDao<MetadataColumnEntity> {
} }
package cn.datax.service.data.factory.dao; package cn.datax.service.data.metadata.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-03-14 * @since 2020-03-14
*/ */
@Mapper @Mapper
public interface DataSourceDao extends BaseDao<DataSourceEntity> { public interface MetadataSourceDao extends BaseDao<MetadataSourceEntity> {
} }
package cn.datax.service.data.metadata.dao; package cn.datax.service.data.metadata.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Mapper @Mapper
public interface DataMetadataTableDao extends BaseDao<DataMetadataTableEntity> { public interface MetadataTableDao extends BaseDao<MetadataTableEntity> {
} }
package cn.datax.service.data.metadata.mapstruct; package cn.datax.service.data.metadata.mapstruct;
import cn.datax.common.mapstruct.EntityMapper; import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto; import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataColumnVo; import cn.datax.service.data.metadata.api.vo.MetadataColumnVo;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper; ...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DataMetadataColumnMapper extends EntityMapper<DataMetadataColumnDto, DataMetadataColumnEntity, DataMetadataColumnVo> { public interface MetadataColumnMapper extends EntityMapper<MetadataColumnDto, MetadataColumnEntity, MetadataColumnVo> {
} }
package cn.datax.service.data.factory.mapstruct; package cn.datax.service.data.metadata.mapstruct;
import cn.datax.common.mapstruct.EntityMapper; import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.factory.api.dto.DataSourceDto; import cn.datax.service.data.metadata.api.dto.MetadataSourceDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.factory.api.vo.DataSourceVo; import cn.datax.service.data.metadata.api.vo.MetadataSourceVo;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper; ...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-03-14 * @since 2020-03-14
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DataSourceMapper extends EntityMapper<DataSourceDto, DataSourceEntity, DataSourceVo> { public interface MetadataSourceMapper extends EntityMapper<MetadataSourceDto, MetadataSourceEntity, MetadataSourceVo> {
} }
package cn.datax.service.data.metadata.mapstruct; package cn.datax.service.data.metadata.mapstruct;
import cn.datax.common.mapstruct.EntityMapper; import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto; import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataTableVo; import cn.datax.service.data.metadata.api.vo.MetadataTableVo;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper; ...@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-07-29 * @since 2020-07-29
*/ */
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DataMetadataTableMapper extends EntityMapper<DataMetadataTableDto, DataMetadataTableEntity, DataMetadataTableVo> { public interface MetadataTableMapper extends EntityMapper<MetadataTableDto, MetadataTableEntity, MetadataTableVo> {
} }
package cn.datax.service.data.metadata.service;
import com.aspose.words.Document;
public interface DataMetadataService {
void syncMetadata(String id);
Document wordMetadata(String id) throws Exception;
}
package cn.datax.service.data.metadata.service; package cn.datax.service.data.metadata.service;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto;
import cn.datax.common.base.BaseService; import cn.datax.common.base.BaseService;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import java.util.List; import java.util.List;
...@@ -14,15 +14,15 @@ import java.util.List; ...@@ -14,15 +14,15 @@ import java.util.List;
* @author yuwei * @author yuwei
* @since 2020-07-29 * @since 2020-07-29
*/ */
public interface DataMetadataColumnService extends BaseService<DataMetadataColumnEntity> { public interface MetadataColumnService extends BaseService<MetadataColumnEntity> {
DataMetadataColumnEntity saveDataMetadataColumn(DataMetadataColumnDto dataMetadataColumn); MetadataColumnEntity saveMetadataColumn(MetadataColumnDto metadataColumn);
DataMetadataColumnEntity updateDataMetadataColumn(DataMetadataColumnDto dataMetadataColumn); MetadataColumnEntity updateMetadataColumn(MetadataColumnDto metadataColumn);
DataMetadataColumnEntity getDataMetadataColumnById(String id); MetadataColumnEntity getMetadataColumnById(String id);
void deleteDataMetadataColumnById(String id); void deleteMetadataColumnById(String id);
void deleteDataMetadataColumnBatch(List<String> ids); void deleteMetadataColumnBatch(List<String> ids);
} }
package cn.datax.service.data.factory.service; package cn.datax.service.data.metadata.service;
import cn.datax.common.base.BaseService;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable; import cn.datax.common.database.core.DbTable;
import cn.datax.service.data.factory.api.dto.DataSourceDto; import cn.datax.service.data.metadata.api.dto.MetadataSourceDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity; import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.common.base.BaseService; import com.aspose.words.Document;
import java.util.List; import java.util.List;
...@@ -17,19 +18,19 @@ import java.util.List; ...@@ -17,19 +18,19 @@ import java.util.List;
* @author yuwei * @author yuwei
* @since 2020-03-14 * @since 2020-03-14
*/ */
public interface DataSourceService extends BaseService<DataSourceEntity> { public interface MetadataSourceService extends BaseService<MetadataSourceEntity> {
void saveDataSource(DataSourceDto dataSource); void saveMetadataSource(MetadataSourceDto metadataSourceDto);
void updateDataSource(DataSourceDto dataSource); void updateMetadataSource(MetadataSourceDto metadataSourceDto);
DataSourceEntity getDataSourceById(String id); MetadataSourceEntity getMetadataSourceById(String id);
void deleteDataSourceById(String id); void deleteMetadataSourceById(String id);
void deleteDataSourceBatch(List<String> ids); void deleteMetadataSourceBatch(List<String> ids);
DbQuery checkConnection(DataSourceDto dataSource); DbQuery checkConnection(MetadataSourceDto metadataSourceDto);
DbQuery getDbQuery(String id); DbQuery getDbQuery(String id);
...@@ -37,5 +38,7 @@ public interface DataSourceService extends BaseService<DataSourceEntity> { ...@@ -37,5 +38,7 @@ public interface DataSourceService extends BaseService<DataSourceEntity> {
List<DbColumn> getDbTableColumns(String id, String tableName); List<DbColumn> getDbTableColumns(String id, String tableName);
void updateDataSourceSyncById(String id); void syncMetadata(String id);
Document wordMetadata(String id) throws Exception;
} }
package cn.datax.service.data.metadata.service; package cn.datax.service.data.metadata.service;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto; import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.common.base.BaseService; import cn.datax.common.base.BaseService;
import java.util.List; import java.util.List;
...@@ -14,15 +14,15 @@ import java.util.List; ...@@ -14,15 +14,15 @@ import java.util.List;
* @author yuwei * @author yuwei
* @since 2020-07-29 * @since 2020-07-29
*/ */
public interface DataMetadataTableService extends BaseService<DataMetadataTableEntity> { public interface MetadataTableService extends BaseService<MetadataTableEntity> {
DataMetadataTableEntity saveDataMetadataTable(DataMetadataTableDto dataMetadataTable); MetadataTableEntity saveMetadataTable(MetadataTableDto metadataTable);
DataMetadataTableEntity updateDataMetadataTable(DataMetadataTableDto dataMetadataTable); MetadataTableEntity updateMetadataTable(MetadataTableDto metadataTable);
DataMetadataTableEntity getDataMetadataTableById(String id); MetadataTableEntity getMetadataTableById(String id);
void deleteDataMetadataTableById(String id); void deleteMetadataTableById(String id);
void deleteDataMetadataTableBatch(List<String> ids); void deleteMetadataTableBatch(List<String> ids);
} }
package cn.datax.service.data.metadata.service.impl;
import cn.datax.commo.office.word.WordUtil;
import cn.datax.common.core.DataConstant;
import cn.datax.common.exception.DataException;
import cn.datax.service.data.factory.api.dto.DbSchema;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity;
import cn.datax.service.data.metadata.async.AsyncTask;
import cn.datax.service.data.metadata.dao.DataMetadataColumnDao;
import cn.datax.service.data.metadata.dao.DataMetadataTableDao;
import cn.datax.service.data.metadata.service.DataMetadataService;
import cn.hutool.core.util.StrUtil;
import com.aspose.words.Document;
import com.aspose.words.MailMerge;
import com.aspose.words.net.System.Data.DataRelation;
import com.aspose.words.net.System.Data.DataRow;
import com.aspose.words.net.System.Data.DataSet;
import com.aspose.words.net.System.Data.DataTable;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.List;
@Slf4j
@Service
public class DataMetadataServiceImpl implements DataMetadataService {
@Autowired
private DataSourceServiceFeign dataSourceServiceFeign;
@Autowired
private AsyncTask asyncTask;
@Autowired
private DataMetadataTableDao dataMetadataTableDao;
@Autowired
private DataMetadataColumnDao dataMetadataColumnDao;
@Override
public void syncMetadata(String id) {
DataSourceEntity dataSourceEntity = dataSourceServiceFeign.getDataSourceById(id);
if (dataSourceServiceFeign == null) {
throw new DataException("未找到数据源");
}
if (Integer.valueOf(DataConstant.TrueOrFalse.TRUE.getKey()).equals(dataSourceEntity.getSourceSync())) {
throw new DataException("元数据已同步");
}
// 异步执行同步任务
asyncTask.doTask(dataSourceEntity);
}
@Override
public Document wordMetadata(String id) throws Exception {
DataSourceEntity dataSourceEntity = dataSourceServiceFeign.getDataSourceById(id);
if (dataSourceServiceFeign == null) {
throw new DataException("未找到数据源");
}
DbSchema dbSchema = dataSourceEntity.getDbSchema();
String dbName = dbSchema.getDbName();
if (StrUtil.isBlank(dbName)) {
dbName = dbSchema.getUsername();
}
QueryWrapper<DataMetadataTableEntity> tableQueryWrapper = new QueryWrapper<>();
tableQueryWrapper.eq("source_id", id);
List<DataMetadataTableEntity> tableEntityList = dataMetadataTableDao.selectList(tableQueryWrapper);
// 数据表(主表) TableStart:TableList TableEnd:TableList
DataTable tableTable = new DataTable("TableList");
tableTable.getColumns().add("id");
tableTable.getColumns().add("tableName");
tableTable.getColumns().add("tableComment");
for (int i = 0; i < tableEntityList.size(); i++) {
DataRow row = tableTable.newRow();
DataMetadataTableEntity table = tableEntityList.get(i);
row.set(0, table.getId());
row.set(1, table.getTableName());
row.set(2, table.getTableComment());
tableTable.getRows().add(row);
}
QueryWrapper<DataMetadataColumnEntity> columnQueryWrapper = new QueryWrapper<>();
columnQueryWrapper.eq("source_id", id);
columnQueryWrapper.orderByAsc("column_position");
List<DataMetadataColumnEntity> columnEntityList = dataMetadataColumnDao.selectList(columnQueryWrapper);
// 元数据(子表) TableStart:ColumnList TableEnd:ColumnList
DataTable columnTable = new DataTable("ColumnList");
columnTable.getColumns().add("id");
columnTable.getColumns().add("tid");
columnTable.getColumns().add("columnPosition");
columnTable.getColumns().add("columnName");
columnTable.getColumns().add("dataType");
columnTable.getColumns().add("dataLength");
columnTable.getColumns().add("dataPrecision");
columnTable.getColumns().add("dataScale");
columnTable.getColumns().add("columnNullable");
columnTable.getColumns().add("columnKey");
columnTable.getColumns().add("dataDefault");
columnTable.getColumns().add("columnComment");
for (int i = 0; i < columnEntityList.size(); i++) {
DataRow row = columnTable.newRow();
DataMetadataColumnEntity column = columnEntityList.get(i);
row.set(0, column.getId());
row.set(1, column.getTableId());
row.set(2, column.getColumnPosition());
row.set(3, column.getColumnName());
row.set(4, column.getDataType());
row.set(5, column.getDataLength());
row.set(6, column.getDataPrecision());
row.set(7, column.getDataScale());
row.set(8, "1".equals(column.getColumnNullable()) ? "Y" : "N");
row.set(9, "1".equals(column.getColumnKey()) ? "Y" : "N");
row.set(10, column.getDataDefault());
row.set(11, column.getColumnComment());
columnTable.getRows().add(row);
}
// 提供数据源
DataSet dataSet = new DataSet();
dataSet.getTables().add(tableTable);
dataSet.getTables().add(columnTable);
DataRelation dataRelation = new DataRelation("TableColumnRelation", tableTable.getColumns().get("id"), columnTable.getColumns().get("tid"));
dataSet.getRelations().add(dataRelation);
// 合并模版
ClassPathResource classPathResource = new ClassPathResource("templates/metadata_1.0.0.doc");
InputStream inputStream =classPathResource.getInputStream();
Document doc = WordUtil.getInstance().getDocument(inputStream);
// 提供数据源
String[] fieldNames = new String[] {"database"};
Object[] fieldValues = new Object[] {dbName.toUpperCase()};
MailMerge mailMerge = doc.getMailMerge();
mailMerge.execute(fieldNames, fieldValues);
mailMerge.executeWithRegions(dataSet);
return doc;
}
}
package cn.datax.service.data.metadata.service.impl; package cn.datax.service.data.metadata.service.impl;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity; import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto; import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.service.DataMetadataColumnService; import cn.datax.service.data.metadata.service.MetadataColumnService;
import cn.datax.service.data.metadata.mapstruct.DataMetadataColumnMapper; import cn.datax.service.data.metadata.mapstruct.MetadataColumnMapper;
import cn.datax.service.data.metadata.dao.DataMetadataColumnDao; import cn.datax.service.data.metadata.dao.MetadataColumnDao;
import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -23,45 +23,45 @@ import java.util.List; ...@@ -23,45 +23,45 @@ import java.util.List;
*/ */
@Service @Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DataMetadataColumnServiceImpl extends BaseServiceImpl<DataMetadataColumnDao, DataMetadataColumnEntity> implements DataMetadataColumnService { public class MetadataColumnServiceImpl extends BaseServiceImpl<MetadataColumnDao, MetadataColumnEntity> implements MetadataColumnService {
@Autowired @Autowired
private DataMetadataColumnDao dataMetadataColumnDao; private MetadataColumnDao metadataColumnDao;
@Autowired @Autowired
private DataMetadataColumnMapper dataMetadataColumnMapper; private MetadataColumnMapper metadataColumnMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DataMetadataColumnEntity saveDataMetadataColumn(DataMetadataColumnDto dataMetadataColumnDto) { public MetadataColumnEntity saveMetadataColumn(MetadataColumnDto metadataColumnDto) {
DataMetadataColumnEntity dataMetadataColumn = dataMetadataColumnMapper.toEntity(dataMetadataColumnDto); MetadataColumnEntity metadataColumn = metadataColumnMapper.toEntity(metadataColumnDto);
dataMetadataColumnDao.insert(dataMetadataColumn); metadataColumnDao.insert(metadataColumn);
return dataMetadataColumn; return metadataColumn;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DataMetadataColumnEntity updateDataMetadataColumn(DataMetadataColumnDto dataMetadataColumnDto) { public MetadataColumnEntity updateMetadataColumn(MetadataColumnDto metadataColumnDto) {
DataMetadataColumnEntity dataMetadataColumn = dataMetadataColumnMapper.toEntity(dataMetadataColumnDto); MetadataColumnEntity metadataColumn = metadataColumnMapper.toEntity(metadataColumnDto);
dataMetadataColumnDao.updateById(dataMetadataColumn); metadataColumnDao.updateById(metadataColumn);
return dataMetadataColumn; return metadataColumn;
} }
@Override @Override
public DataMetadataColumnEntity getDataMetadataColumnById(String id) { public MetadataColumnEntity getMetadataColumnById(String id) {
DataMetadataColumnEntity dataMetadataColumnEntity = super.getById(id); MetadataColumnEntity metadataColumnEntity = super.getById(id);
return dataMetadataColumnEntity; return metadataColumnEntity;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataColumnById(String id) { public void deleteMetadataColumnById(String id) {
dataMetadataColumnDao.deleteById(id); metadataColumnDao.deleteById(id);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataColumnBatch(List<String> ids) { public void deleteMetadataColumnBatch(List<String> ids) {
dataMetadataColumnDao.deleteBatchIds(ids); metadataColumnDao.deleteBatchIds(ids);
} }
} }
package cn.datax.service.data.metadata.service.impl; package cn.datax.service.data.metadata.service.impl;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity; import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto; import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.service.DataMetadataTableService; import cn.datax.service.data.metadata.service.MetadataTableService;
import cn.datax.service.data.metadata.mapstruct.DataMetadataTableMapper; import cn.datax.service.data.metadata.mapstruct.MetadataTableMapper;
import cn.datax.service.data.metadata.dao.DataMetadataTableDao; import cn.datax.service.data.metadata.dao.MetadataTableDao;
import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -23,45 +23,45 @@ import java.util.List; ...@@ -23,45 +23,45 @@ import java.util.List;
*/ */
@Service @Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DataMetadataTableServiceImpl extends BaseServiceImpl<DataMetadataTableDao, DataMetadataTableEntity> implements DataMetadataTableService { public class MetadataTableServiceImpl extends BaseServiceImpl<MetadataTableDao, MetadataTableEntity> implements MetadataTableService {
@Autowired @Autowired
private DataMetadataTableDao dataMetadataTableDao; private MetadataTableDao metadataTableDao;
@Autowired @Autowired
private DataMetadataTableMapper dataMetadataTableMapper; private MetadataTableMapper metadataTableMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DataMetadataTableEntity saveDataMetadataTable(DataMetadataTableDto dataMetadataTableDto) { public MetadataTableEntity saveMetadataTable(MetadataTableDto metadataTableDto) {
DataMetadataTableEntity dataMetadataTable = dataMetadataTableMapper.toEntity(dataMetadataTableDto); MetadataTableEntity metadataTableEntity = metadataTableMapper.toEntity(metadataTableDto);
dataMetadataTableDao.insert(dataMetadataTable); metadataTableDao.insert(metadataTableEntity);
return dataMetadataTable; return metadataTableEntity;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public DataMetadataTableEntity updateDataMetadataTable(DataMetadataTableDto dataMetadataTableDto) { public MetadataTableEntity updateMetadataTable(MetadataTableDto metadataTableDto) {
DataMetadataTableEntity dataMetadataTable = dataMetadataTableMapper.toEntity(dataMetadataTableDto); MetadataTableEntity metadataTableEntity = metadataTableMapper.toEntity(metadataTableDto);
dataMetadataTableDao.updateById(dataMetadataTable); metadataTableDao.updateById(metadataTableEntity);
return dataMetadataTable; return metadataTableEntity;
} }
@Override @Override
public DataMetadataTableEntity getDataMetadataTableById(String id) { public MetadataTableEntity getMetadataTableById(String id) {
DataMetadataTableEntity dataMetadataTableEntity = super.getById(id); MetadataTableEntity metadataTableEntity = super.getById(id);
return dataMetadataTableEntity; return metadataTableEntity;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataTableById(String id) { public void deleteMetadataTableById(String id) {
dataMetadataTableDao.deleteById(id); metadataTableDao.deleteById(id);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataTableBatch(List<String> ids) { public void deleteMetadataTableBatch(List<String> ids) {
dataMetadataTableDao.deleteBatchIds(ids); metadataTableDao.deleteBatchIds(ids);
} }
} }
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.datax.service.data.metadata.dao.DataMetadataColumnDao"> <mapper namespace="cn.datax.service.data.metadata.dao.MetadataColumnDao">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity"> <resultMap id="BaseResultMap" type="cn.datax.service.data.metadata.api.entity.MetadataColumnEntity">
<result column="id" property="id" /> <result column="id" property="id" />
<result column="source_id" property="sourceId" /> <result column="source_id" property="sourceId" />
<result column="table_id" property="tableId" /> <result column="table_id" property="tableId" />
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.datax.service.data.factory.dao.DataSourceDao"> <mapper namespace="cn.datax.service.data.metadata.dao.MetadataSourceDao">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.data.factory.api.entity.DataSourceEntity"> <resultMap id="BaseResultMap" type="cn.datax.service.data.metadata.api.entity.MetadataSourceEntity">
<result column="id" property="id" /> <result column="id" property="id" />
<result column="status" property="status" /> <result column="status" property="status" />
<result column="create_by" property="createBy" /> <result column="create_by" property="createBy" />
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
<result column="remark" property="remark" /> <result column="remark" property="remark" />
<result column="db_type" property="dbType" /> <result column="db_type" property="dbType" />
<result column="source_name" property="sourceName" /> <result column="source_name" property="sourceName" />
<result column="theme_id" property="themeId" />
<result column="source_sync" property="sourceSync" /> <result column="source_sync" property="sourceSync" />
<result column="db_schema" property="dbSchema" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" /> <result column="db_schema" property="dbSchema" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
</resultMap> </resultMap>
...@@ -29,7 +28,7 @@ ...@@ -29,7 +28,7 @@
update_by, update_by,
update_time, update_time,
remark, remark,
db_type, source_name, theme_id, source_sync, db_schema db_type, source_name, source_sync, db_schema
</sql> </sql>
</mapper> </mapper>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.datax.service.data.metadata.dao.DataMetadataTableDao"> <mapper namespace="cn.datax.service.data.metadata.dao.MetadataTableDao">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity"> <resultMap id="BaseResultMap" type="cn.datax.service.data.metadata.api.entity.MetadataTableEntity">
<result column="id" property="id" /> <result column="id" property="id" />
<result column="source_id" property="sourceId" /> <result column="source_id" property="sourceId" />
<result column="table_name" property="tableName" /> <result column="table_name" property="tableName" />
......
...@@ -16,5 +16,6 @@ ...@@ -16,5 +16,6 @@
<modules> <modules>
<module>data-metadata-service</module> <module>data-metadata-service</module>
<module>data-metadata-service-api</module> <module>data-metadata-service-api</module>
<module>data-metadata-service-console</module>
</modules> </modules>
</project> </project>
\ No newline at end of file
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <parent>
<artifactId>data-factory-service-parent</artifactId> <artifactId>data-visual-service-parent</artifactId>
<groupId>cn.datax</groupId> <groupId>cn.datax</groupId>
<version>2.0.0</version> <version>2.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>2.0.0</version> <version>2.0.0</version>
<artifactId>data-factory-service-api</artifactId> <artifactId>data-visual-service-api</artifactId>
<dependencies> <dependencies>
<dependency> <dependency>
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.visual.api.dto;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.visual.api.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package cn.datax.service.data.factory.api.dto; package cn.datax.service.data.visual.api.dto;
import cn.datax.common.validate.ValidationGroups; import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
...@@ -9,17 +9,18 @@ import javax.validation.Valid; ...@@ -9,17 +9,18 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
/** /**
* <p> * <p>
* 数据集信息表 实体DTO * 数据集信息表 实体DTO
* </p> * </p>
* *
* @author yuwei * @author yuwei
* @since 2020-03-20 * @since 2020-07-31
*/ */
@ApiModel(value = "数据集信息表Model") @ApiModel(value = "数据集信息表Model")
@Data @Data
public class DataSetDto implements Serializable { public class VisualDataSetDto implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.entity; package cn.datax.service.data.visual.api.entity;
import cn.datax.common.base.DataScopeBaseEntity; import cn.datax.common.base.DataScopeBaseEntity;
import cn.datax.service.data.factory.api.dto.SchemaConfig; import cn.datax.service.data.visual.api.dto.SchemaConfig;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -15,13 +18,13 @@ import lombok.experimental.Accessors; ...@@ -15,13 +18,13 @@ import lombok.experimental.Accessors;
* </p> * </p>
* *
* @author yuwei * @author yuwei
* @since 2020-03-20 * @since 2020-07-31
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) @Accessors(chain = true)
@TableName(value = "factory_set", autoResultMap = true) @TableName(value = "visual_data_set", autoResultMap = true)
public class DataSetEntity extends DataScopeBaseEntity { public class VisualDataSetEntity extends DataScopeBaseEntity {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.query; package cn.datax.service.data.visual.api.query;
import cn.datax.common.base.BaseQueryParams; import cn.datax.common.base.BaseQueryParams;
import lombok.Data; import lombok.Data;
...@@ -10,11 +10,11 @@ import lombok.EqualsAndHashCode; ...@@ -10,11 +10,11 @@ import lombok.EqualsAndHashCode;
* </p> * </p>
* *
* @author yuwei * @author yuwei
* @since 2020-03-20 * @since 2020-07-31
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DataSetQuery extends BaseQueryParams { public class VisualDataSetQuery extends BaseQueryParams {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
package cn.datax.service.data.factory.api.vo; package cn.datax.service.data.visual.api.vo;
import cn.datax.service.data.factory.api.dto.SchemaConfig; import cn.datax.service.data.visual.api.dto.SchemaConfig;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
...@@ -13,10 +13,10 @@ import java.time.LocalDateTime; ...@@ -13,10 +13,10 @@ import java.time.LocalDateTime;
* </p> * </p>
* *
* @author yuwei * @author yuwei
* @since 2020-03-20 * @since 2020-07-31
*/ */
@Data @Data
public class DataSetVo implements Serializable { public class VisualDataSetVo implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment