Commit 9579d532 by yuwei

项目初始化

parent 1891a5c0
......@@ -60,21 +60,21 @@ spring:
args:
name: fileHystrix
fallbackUri: forward:/fallback
# 数据工厂中心
- id: datax-service-data-factory
uri: lb://datax-service-data-factory
# 元数据管理
- id: datax-service-data-metadata
uri: lb://datax-service-data-metadata
predicates:
- Path=/data/factory/**
- Path=/data/metadata/**
filters:
- SwaggerHeaderFilter
- StripPrefix=2
- name: Hystrix
args:
name: dataFactoryHystrix
name: dataMetadataHystrix
fallbackUri: forward:/fallback
# 数据SQL工作台
- id: datax-service-data-sql-console
uri: lb://datax-service-data-sql-console
- id: datax-service-data-console
uri: lb://datax-service-data-console
predicates:
- Path=/data/console/**
filters:
......@@ -108,17 +108,17 @@ spring:
args:
name: dataApiMappingHystrix
fallbackUri: forward:/fallback
# 元数据管理
- id: datax-service-data-metadata
uri: lb://datax-service-data-metadata
# 数据可视化
- id: datax-service-data-visual
uri: lb://datax-service-data-visual
predicates:
- Path=/data/metadata/**
- Path=/data/visual/**
filters:
- SwaggerHeaderFilter
- StripPrefix=2
- name: Hystrix
args:
name: dataMetadataHystrix
name: dataVisualHystrix
fallbackUri: forward:/fallback
# 定时任务
- id: datax-service-quartz
......
......@@ -48,7 +48,7 @@ spring:
mybatis-plus:
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:
db-config:
id-type: ASSIGN_ID
......
......@@ -48,7 +48,7 @@ spring:
mybatis-plus:
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:
db-config:
id-type: ASSIGN_ID
......
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 @@
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId>
<artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
......@@ -84,11 +84,6 @@
<artifactId>datax-common-rabbitmq</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>${xstream.vsersion}</version>
</dependency>
</dependencies>
<build>
......
......@@ -6,14 +6,11 @@ import cn.datax.common.database.core.PageResult;
import cn.datax.common.utils.ThrowableUtil;
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.enums.ResType;
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.utils.ThreadUtil;
import cn.hutool.core.map.MapUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -86,13 +83,7 @@ public class RequestHandler {
requestInterceptor.postHandle(request, response, api, params, value);
ThreadUtil.getInstance().get().setCallerSize(value.getData().size());
ThreadUtil.getInstance().get().setTime(System.currentTimeMillis() - start);
R r = 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;
return R.ok().setData(value);
} catch (Exception e) {
log.error("全局异常信息ex={}, StackTrace={}", e.getMessage(), ThrowableUtil.getStackTrace(e));
ThreadUtil.getInstance().get().setStatus(DataConstant.EnableState.DISABLE.getKey());
......
......@@ -7,9 +7,6 @@ import cn.datax.common.database.core.PageResult;
import cn.datax.common.exception.DataException;
import cn.datax.common.utils.PageUtil;
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.entity.ApiMaskEntity;
import cn.datax.service.data.market.api.entity.DataApiEntity;
......@@ -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.crypto.Crypto;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -34,13 +34,13 @@ public class ApiMappingEngine {
private DataSourceFactory dataSourceFactory;
@Autowired
private DataSourceServiceFeign dataSourceServiceFeign;
private MetadataSourceServiceFeign metadataSourceServiceFeign;
@Autowired
private ApiMaskServiceFeign apiMaskServiceFeign;
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) {
throw new DataException("API调用查询数据源出错");
}
......
......@@ -76,7 +76,7 @@
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId>
<artifactId>datax-common-office</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
......
......@@ -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.service.DataApiService;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -25,6 +28,8 @@ import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;
import java.util.stream.Collectors;
......@@ -186,4 +191,21 @@ public class DataApiController extends BaseController {
dataApiService.cancelDataApi(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 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;
import cn.datax.service.data.market.api.dto.DataApiDto;
import cn.datax.common.base.BaseService;
import cn.datax.service.data.market.api.vo.SqlParseVo;
import com.aspose.words.Document;
import java.util.List;
......@@ -35,4 +36,6 @@ public interface DataApiService extends BaseService<DataApiEntity> {
void releaseDataApi(String id);
void cancelDataApi(String id);
Document wordDataApi(String id) throws Exception;
}
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.exception.DataException;
import cn.datax.common.rabbitmq.config.RabbitMqConstant;
......@@ -13,6 +14,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper;
import cn.datax.service.data.market.dao.DataApiDao;
import cn.datax.common.base.BaseServiceImpl;
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 net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
......@@ -30,10 +35,13 @@ import net.sf.jsqlparser.util.deparser.ExpressionDeParser;
import net.sf.jsqlparser.util.deparser.SelectDeParser;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -239,4 +247,55 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
dataApiEntity.setStatus(DataConstant.ApiState.CANCEL.getKey());
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;
}
}
......@@ -18,7 +18,7 @@ import java.io.Serializable;
*/
@ApiModel(value = "元数据信息表Model")
@Data
public class DataMetadataColumnDto implements Serializable {
public class MetadataColumnDto implements Serializable {
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 io.swagger.annotations.ApiModel;
......@@ -9,6 +9,7 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* <p>
* 数据源信息表 实体DTO
......@@ -19,7 +20,7 @@ import java.io.Serializable;
*/
@ApiModel(value = "数据源信息表Model")
@Data
public class DataSourceDto implements Serializable {
public class MetadataSourceDto implements Serializable {
private static final long serialVersionUID=1L;
......@@ -32,9 +33,6 @@ public class DataSourceDto implements Serializable {
@ApiModelProperty(value = "数据源名称")
@NotBlank(message = "数据源名称不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String sourceName;
@ApiModelProperty(value = "数据主题")
@NotBlank(message = "数据主题不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String themeId;
@ApiModelProperty(value = "数据源连接信息")
@Valid
private DbSchema dbSchema;
......
......@@ -18,7 +18,7 @@ import java.io.Serializable;
*/
@ApiModel(value = "数据库表信息表Model")
@Data
public class DataMetadataTableDto implements Serializable {
public class MetadataTableDto implements Serializable {
private static final long serialVersionUID=1L;
......
......@@ -19,7 +19,7 @@ import java.io.Serializable;
@Data
@Accessors(chain = true)
@TableName("metadata_column")
public class DataMetadataColumnEntity implements Serializable {
public class MetadataColumnEntity implements Serializable {
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.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.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
......@@ -20,8 +20,8 @@ import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "factory_source", autoResultMap = true)
public class DataSourceEntity extends DataScopeBaseEntity {
@TableName(value = "metadata_source", autoResultMap = true)
public class MetadataSourceEntity extends DataScopeBaseEntity {
private static final long serialVersionUID=1L;
......
......@@ -19,7 +19,7 @@ import java.io.Serializable;
@Data
@Accessors(chain = true)
@TableName("metadata_table")
public class DataMetadataTableEntity implements Serializable {
public class MetadataTableEntity implements Serializable {
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.factory.api.feign.DataSourceServiceFeign;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class DataSourceServiceFeignFallbackImpl implements DataSourceServiceFeign {
public class MetadataSourceServiceFeignFallbackImpl implements MetadataSourceServiceFeign {
@Setter
private Throwable cause;
@Override
public DataSourceEntity getDataSourceById(String id) {
public MetadataSourceEntity getMetadataSourceById(String id) {
log.error("feign 调用{}出错", id, cause);
return null;
}
@Override
public void updateDataSourceSyncById(String id) {
log.error("feign 调用{}出错", id, cause);
public List<MetadataSourceEntity> getMetadataSourceList() {
log.error("feign 调用出错", cause);
return null;
}
}
......@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataMetadataColumnQuery extends BaseQueryParams {
public class MetadataColumnQuery extends BaseQueryParams {
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 lombok.Data;
......@@ -14,11 +14,9 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataSourceQuery extends BaseQueryParams {
public class MetadataSourceQuery extends BaseQueryParams {
private static final long serialVersionUID=1L;
private String sourceName;
private String themeId;
}
......@@ -14,7 +14,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataMetadataTableQuery extends BaseQueryParams {
public class MetadataTableQuery extends BaseQueryParams {
private static final long serialVersionUID=1L;
......
......@@ -13,7 +13,7 @@ import java.io.Serializable;
* @since 2020-07-29
*/
@Data
public class DataMetadataColumnVo implements Serializable {
public class MetadataColumnVo implements Serializable {
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 lombok.Data;
......@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
* @since 2020-03-14
*/
@Data
public class DataSourceVo implements Serializable {
public class MetadataSourceVo implements Serializable {
private static final long serialVersionUID=1L;
......@@ -27,7 +27,6 @@ public class DataSourceVo implements Serializable {
private String remark;
private String dbType;
private String sourceName;
private String themeId;
private DbSchema dbSchema;
private Integer sync;
}
......@@ -13,7 +13,7 @@ import java.io.Serializable;
* @since 2020-07-29
*/
@Data
public class DataMetadataTableVo implements Serializable {
public class MetadataTableVo implements Serializable {
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 @@
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">
<parent>
<artifactId>data-factory-service-parent</artifactId>
<artifactId>data-metadata-service-parent</artifactId>
<groupId>cn.datax</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>2.0.0</version>
<artifactId>data-factory-service</artifactId>
<artifactId>data-metadata-service-console</artifactId>
<dependencies>
<!--web 模块-->
......@@ -71,7 +71,7 @@
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId>
<artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
......
package cn.datax.service.data.factory.sql.console;
package cn.datax.service.data.metadata.console;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
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
public class DataxSqlConsoleApplication {
public class DataxConsoleApplication {
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 java.sql.SQLException;
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 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.DataAuthExceptionEntryPoint;
......
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.boot.autoconfigure.condition.ConditionalOnProperty;
......
package cn.datax.service.data.factory.sql.console.controller;
package cn.datax.service.data.metadata.console.controller;
import cn.datax.common.base.BaseController;
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.core.R;
import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.factory.api.dto.SqlConsoleDto;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo;
import cn.datax.service.data.factory.sql.console.service.SqlConsoleService;
import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import cn.datax.service.data.metadata.console.service.SqlConsoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
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.factory.api.vo.SqlConsoleVo;
import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
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.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.exception.DataException;
import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.factory.api.dto.DbSchema;
import cn.datax.service.data.factory.api.dto.SqlConsoleDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.feign.DataSourceServiceFeign;
import cn.datax.service.data.factory.api.vo.SqlConsoleVo;
import cn.datax.service.data.factory.sql.console.concurrent.CallableTemplate;
import cn.datax.service.data.factory.sql.console.concurrent.DateHander;
import cn.datax.service.data.factory.sql.console.service.SqlConsoleService;
import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.metadata.api.dto.SqlConsoleDto;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.feign.MetadataSourceServiceFeign;
import cn.datax.service.data.metadata.api.vo.SqlConsoleVo;
import cn.datax.service.data.metadata.console.concurrent.CallableTemplate;
import cn.datax.service.data.metadata.console.concurrent.DateHander;
import cn.datax.service.data.metadata.console.service.SqlConsoleService;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
......@@ -37,7 +37,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService {
private DataSourceFactory dataSourceFactory;
@Autowired
private DataSourceServiceFeign dataSourceServiceFeign;
private MetadataSourceServiceFeign metadataSourceServiceFeign;
private static Map<String, List<Connection>> connectionMap = new ConcurrentHashMap<>();
......@@ -55,7 +55,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService {
if (CollUtil.isEmpty(sqls)) {
throw new DataException("未解析到SQL语句");
}
DataSourceEntity dataSource = dataSourceServiceFeign.getDataSourceById(sqlConsoleDto.getSourceId());
MetadataSourceEntity dataSource = metadataSourceServiceFeign.getMetadataSourceById(sqlConsoleDto.getSourceId());
if(dataSource == null){
throw new DataException("SQL工作台查询数据源出错");
}
......
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<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.totalSizeCap" value="500MB"/>
<property name="log.maxFileSize" value="10MB"/>
......
......@@ -71,12 +71,12 @@
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-metadata-service-api</artifactId>
<artifactId>datax-common-database</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId>
<artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
......
package cn.datax.service.data.metadata.async;
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.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.dao.DataMetadataColumnDao;
import cn.datax.service.data.metadata.dao.DataMetadataTableDao;
import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.dao.MetadataColumnDao;
import cn.datax.service.data.metadata.dao.MetadataSourceDao;
import cn.datax.service.data.metadata.dao.MetadataTableDao;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -32,16 +33,16 @@ public class AsyncTask {
private DataSourceFactory dataSourceFactory;
@Autowired
private DataSourceServiceFeign dataSourceServiceFeign;
private MetadataSourceDao metadataSourceDao;
@Autowired
private DataMetadataTableDao dataMetadataTableDao;
private MetadataTableDao metadataTableDao;
@Autowired
private DataMetadataColumnDao dataMetadataColumnDao;
private MetadataColumnDao metadataColumnDao;
@Async
public void doTask(DataSourceEntity dataSource) {
public void doTask(MetadataSourceEntity dataSource) {
long start = System.currentTimeMillis();
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
......@@ -49,8 +50,8 @@ public class AsyncTask {
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbTable> tables = dbQuery.getTables(dbSchema.getDbName());
if (CollUtil.isNotEmpty(tables)) {
List<DataMetadataTableEntity> metadataTableEntityList = tables.stream().map(table -> {
DataMetadataTableEntity metadataTable = new DataMetadataTableEntity();
List<MetadataTableEntity> metadataTableEntityList = tables.stream().map(table -> {
MetadataTableEntity metadataTable = new MetadataTableEntity();
metadataTable.setSourceId(dataSource.getId());
metadataTable.setTableName(table.getTableName());
metadataTable.setTableComment(table.getTableComment());
......@@ -58,11 +59,11 @@ public class AsyncTask {
}).collect(Collectors.toList());
if (CollUtil.isNotEmpty(metadataTableEntityList)) {
metadataTableEntityList.stream().forEach(table -> {
dataMetadataTableDao.insert(table);
metadataTableDao.insert(table);
List<DbColumn> columns = dbQuery.getTableColumns(dbSchema.getDbName(), table.getTableName());
if (CollUtil.isNotEmpty(columns)) {
List<DataMetadataColumnEntity> metadataColumnEntityList = columns.stream().map(column -> {
DataMetadataColumnEntity metadataColumn = new DataMetadataColumnEntity();
List<MetadataColumnEntity> metadataColumnEntityList = columns.stream().map(column -> {
MetadataColumnEntity metadataColumn = new MetadataColumnEntity();
metadataColumn.setSourceId(dataSource.getId());
metadataColumn.setTableId(table.getId());
metadataColumn.setColumnName(column.getColName());
......@@ -78,13 +79,14 @@ public class AsyncTask {
return metadataColumn;
}).collect(Collectors.toList());
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));
}
}
\ 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;
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.RestController;
import java.util.List;
@RestController
@RequestMapping("/inner")
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;
import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataColumnVo;
import cn.datax.service.data.metadata.api.query.DataMetadataColumnQuery;
import cn.datax.service.data.metadata.mapstruct.DataMetadataColumnMapper;
import cn.datax.service.data.metadata.service.DataMetadataColumnService;
import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.MetadataColumnVo;
import cn.datax.service.data.metadata.api.query.MetadataColumnQuery;
import cn.datax.service.data.metadata.mapstruct.MetadataColumnMapper;
import cn.datax.service.data.metadata.service.MetadataColumnService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -37,13 +37,13 @@ import java.util.stream.Collectors;
@Api(tags = {"元数据信息表"})
@RestController
@RequestMapping("/columns")
public class DataMetadataColumnController extends BaseController {
public class MetadataColumnController extends BaseController {
@Autowired
private DataMetadataColumnService dataMetadataColumnService;
private MetadataColumnService metadataColumnService;
@Autowired
private DataMetadataColumnMapper dataMetadataColumnMapper;
private MetadataColumnMapper metadataColumnMapper;
/**
* 通过ID查询信息
......@@ -55,41 +55,41 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}")
public R getDataMetadataColumnById(@PathVariable String id) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.getDataMetadataColumnById(id);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity));
MetadataColumnEntity metadataColumnEntity = metadataColumnService.getMetadataColumnById(id);
return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
}
@ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list")
public R getDataMetadataColumnList(DataMetadataColumnQuery dataMetadataColumnQuery) {
QueryWrapper<DataMetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataColumnQuery.getColumnName()), "column_name", dataMetadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getSourceId()), "source_id", dataMetadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getTableId()), "table_id", dataMetadataColumnQuery.getTableId());
List<DataMetadataColumnEntity> list = dataMetadataColumnService.list(queryWrapper);
List<DataMetadataColumnVo> collect = list.stream().map(dataMetadataColumnMapper::toVO).collect(Collectors.toList());
public R getDataMetadataColumnList(MetadataColumnQuery metadataColumnQuery) {
QueryWrapper<MetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(metadataColumnQuery.getColumnName()), "column_name", metadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getSourceId()), "source_id", metadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getTableId()), "table_id", metadataColumnQuery.getTableId());
List<MetadataColumnEntity> list = metadataColumnService.list(queryWrapper);
List<MetadataColumnVo> collect = list.stream().map(metadataColumnMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect);
}
/**
* 分页查询信息
*
* @param dataMetadataColumnQuery
* @param metadataColumnQuery
* @return
*/
@ApiOperation(value = "分页查询", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "dataMetadataColumnQuery", value = "查询实体dataMetadataColumnQuery", required = true, dataTypeClass = DataMetadataColumnQuery.class)
@ApiImplicitParam(name = "dataMetadataColumnQuery", value = "查询实体dataMetadataColumnQuery", required = true, dataTypeClass = MetadataColumnQuery.class)
})
@GetMapping("/page")
public R getDataMetadataColumnPage(DataMetadataColumnQuery dataMetadataColumnQuery) {
QueryWrapper<DataMetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataColumnQuery.getColumnName()), "column_name", dataMetadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getSourceId()), "source_id", dataMetadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataColumnQuery.getTableId()), "table_id", dataMetadataColumnQuery.getTableId());
IPage<DataMetadataColumnEntity> page = dataMetadataColumnService.page(new Page<>(dataMetadataColumnQuery.getPageNum(), dataMetadataColumnQuery.getPageSize()), queryWrapper);
List<DataMetadataColumnVo> collect = page.getRecords().stream().map(dataMetadataColumnMapper::toVO).collect(Collectors.toList());
JsonPage<DataMetadataColumnVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
public R getDataMetadataColumnPage(MetadataColumnQuery metadataColumnQuery) {
QueryWrapper<MetadataColumnEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(metadataColumnQuery.getColumnName()), "column_name", metadataColumnQuery.getColumnName());
queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getSourceId()), "source_id", metadataColumnQuery.getSourceId());
queryWrapper.eq(StrUtil.isNotBlank(metadataColumnQuery.getTableId()), "table_id", metadataColumnQuery.getTableId());
IPage<MetadataColumnEntity> page = metadataColumnService.page(new Page<>(metadataColumnQuery.getPageNum(), metadataColumnQuery.getPageSize()), queryWrapper);
List<MetadataColumnVo> collect = page.getRecords().stream().map(metadataColumnMapper::toVO).collect(Collectors.toList());
JsonPage<MetadataColumnVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
return R.ok().setData(jsonPage);
}
......@@ -101,9 +101,9 @@ public class DataMetadataColumnController extends BaseController {
@ApiOperation(value = "添加信息", notes = "根据dataMetadataColumn对象添加信息")
@ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto")
@PostMapping()
public R saveDataMetadataColumn(@RequestBody @Validated({ValidationGroups.Insert.class}) DataMetadataColumnDto dataMetadataColumn) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.saveDataMetadataColumn(dataMetadataColumn);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity));
public R saveDataMetadataColumn(@RequestBody @Validated({ValidationGroups.Insert.class}) MetadataColumnDto dataMetadataColumn) {
MetadataColumnEntity metadataColumnEntity = metadataColumnService.saveMetadataColumn(dataMetadataColumn);
return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
}
/**
......@@ -117,9 +117,9 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "dataMetadataColumn", value = "详细实体dataMetadataColumn", required = true, dataType = "DataMetadataColumnDto")
})
@PutMapping("/{id}")
public R updateDataMetadataColumn(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) DataMetadataColumnDto dataMetadataColumn) {
DataMetadataColumnEntity dataMetadataColumnEntity = dataMetadataColumnService.updateDataMetadataColumn(dataMetadataColumn);
return R.ok().setData(dataMetadataColumnMapper.toVO(dataMetadataColumnEntity));
public R updateDataMetadataColumn(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) MetadataColumnDto dataMetadataColumn) {
MetadataColumnEntity metadataColumnEntity = metadataColumnService.updateMetadataColumn(dataMetadataColumn);
return R.ok().setData(metadataColumnMapper.toVO(metadataColumnEntity));
}
/**
......@@ -131,7 +131,7 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}")
public R deleteDataMetadataColumnById(@PathVariable String id) {
dataMetadataColumnService.deleteDataMetadataColumnById(id);
metadataColumnService.deleteMetadataColumnById(id);
return R.ok();
}
......@@ -144,7 +144,7 @@ public class DataMetadataColumnController extends BaseController {
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}")
public R deleteDataMetadataColumnBatch(@PathVariable List<String> ids) {
dataMetadataColumnService.deleteDataMetadataColumnBatch(ids);
metadataColumnService.deleteMetadataColumnBatch(ids);
return R.ok();
}
}
......@@ -3,12 +3,12 @@ package cn.datax.service.data.metadata.controller;
import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataTableVo;
import cn.datax.service.data.metadata.api.query.DataMetadataTableQuery;
import cn.datax.service.data.metadata.mapstruct.DataMetadataTableMapper;
import cn.datax.service.data.metadata.service.DataMetadataTableService;
import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.MetadataTableVo;
import cn.datax.service.data.metadata.api.query.MetadataTableQuery;
import cn.datax.service.data.metadata.mapstruct.MetadataTableMapper;
import cn.datax.service.data.metadata.service.MetadataTableService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -37,13 +37,13 @@ import java.util.stream.Collectors;
@Api(tags = {"数据库表信息表"})
@RestController
@RequestMapping("/tables")
public class DataMetadataTableController extends BaseController {
public class MetadataTableController extends BaseController {
@Autowired
private DataMetadataTableService dataMetadataTableService;
private MetadataTableService metadataTableService;
@Autowired
private DataMetadataTableMapper dataMetadataTableMapper;
private MetadataTableMapper metadataTableMapper;
/**
* 通过ID查询信息
......@@ -55,39 +55,39 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}")
public R getDataMetadataTableById(@PathVariable String id) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.getDataMetadataTableById(id);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity));
MetadataTableEntity metadataTableEntity = metadataTableService.getMetadataTableById(id);
return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
}
@ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list")
public R getDataMetadataTableList(DataMetadataTableQuery dataMetadataTableQuery) {
QueryWrapper<DataMetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataTableQuery.getTableName()), "table_name", dataMetadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataTableQuery.getSourceId()), "source_id", dataMetadataTableQuery.getSourceId());
List<DataMetadataTableEntity> list = dataMetadataTableService.list(queryWrapper);
List<DataMetadataTableVo> collect = list.stream().map(dataMetadataTableMapper::toVO).collect(Collectors.toList());
public R getDataMetadataTableList(MetadataTableQuery metadataTableQuery) {
QueryWrapper<MetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(metadataTableQuery.getTableName()), "table_name", metadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(metadataTableQuery.getSourceId()), "source_id", metadataTableQuery.getSourceId());
List<MetadataTableEntity> list = metadataTableService.list(queryWrapper);
List<MetadataTableVo> collect = list.stream().map(metadataTableMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect);
}
/**
* 分页查询信息
*
* @param dataMetadataTableQuery
* @param metadataTableQuery
* @return
*/
@ApiOperation(value = "分页查询", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "dataMetadataTableQuery", value = "查询实体dataMetadataTableQuery", required = true, dataTypeClass = DataMetadataTableQuery.class)
@ApiImplicitParam(name = "dataMetadataTableQuery", value = "查询实体dataMetadataTableQuery", required = true, dataTypeClass = MetadataTableQuery.class)
})
@GetMapping("/page")
public R getDataMetadataTablePage(DataMetadataTableQuery dataMetadataTableQuery) {
QueryWrapper<DataMetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataMetadataTableQuery.getTableName()), "table_name", dataMetadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(dataMetadataTableQuery.getSourceId()), "source_id", dataMetadataTableQuery.getSourceId());
IPage<DataMetadataTableEntity> page = dataMetadataTableService.page(new Page<>(dataMetadataTableQuery.getPageNum(), dataMetadataTableQuery.getPageSize()), queryWrapper);
List<DataMetadataTableVo> collect = page.getRecords().stream().map(dataMetadataTableMapper::toVO).collect(Collectors.toList());
JsonPage<DataMetadataTableVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
public R getDataMetadataTablePage(MetadataTableQuery metadataTableQuery) {
QueryWrapper<MetadataTableEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(metadataTableQuery.getTableName()), "table_name", metadataTableQuery.getTableName());
queryWrapper.eq(StrUtil.isNotBlank(metadataTableQuery.getSourceId()), "source_id", metadataTableQuery.getSourceId());
IPage<MetadataTableEntity> page = metadataTableService.page(new Page<>(metadataTableQuery.getPageNum(), metadataTableQuery.getPageSize()), queryWrapper);
List<MetadataTableVo> collect = page.getRecords().stream().map(metadataTableMapper::toVO).collect(Collectors.toList());
JsonPage<MetadataTableVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
return R.ok().setData(jsonPage);
}
......@@ -99,9 +99,9 @@ public class DataMetadataTableController extends BaseController {
@ApiOperation(value = "添加信息", notes = "根据dataMetadataTable对象添加信息")
@ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto")
@PostMapping()
public R saveDataMetadataTable(@RequestBody @Validated({ValidationGroups.Insert.class}) DataMetadataTableDto dataMetadataTable) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.saveDataMetadataTable(dataMetadataTable);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity));
public R saveDataMetadataTable(@RequestBody @Validated({ValidationGroups.Insert.class}) MetadataTableDto dataMetadataTable) {
MetadataTableEntity metadataTableEntity = metadataTableService.saveMetadataTable(dataMetadataTable);
return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
}
/**
......@@ -115,9 +115,9 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "dataMetadataTable", value = "详细实体dataMetadataTable", required = true, dataType = "DataMetadataTableDto")
})
@PutMapping("/{id}")
public R updateDataMetadataTable(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) DataMetadataTableDto dataMetadataTable) {
DataMetadataTableEntity dataMetadataTableEntity = dataMetadataTableService.updateDataMetadataTable(dataMetadataTable);
return R.ok().setData(dataMetadataTableMapper.toVO(dataMetadataTableEntity));
public R updateDataMetadataTable(@PathVariable String id, @RequestBody @Validated({ValidationGroups.Update.class}) MetadataTableDto dataMetadataTable) {
MetadataTableEntity metadataTableEntity = metadataTableService.updateMetadataTable(dataMetadataTable);
return R.ok().setData(metadataTableMapper.toVO(metadataTableEntity));
}
/**
......@@ -129,7 +129,7 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}")
public R deleteDataMetadataTableById(@PathVariable String id) {
dataMetadataTableService.deleteDataMetadataTableById(id);
metadataTableService.deleteMetadataTableById(id);
return R.ok();
}
......@@ -142,7 +142,7 @@ public class DataMetadataTableController extends BaseController {
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}")
public R deleteDataMetadataTableBatch(@PathVariable List<String> ids) {
dataMetadataTableService.deleteDataMetadataTableBatch(ids);
metadataTableService.deleteMetadataTableBatch(ids);
return R.ok();
}
}
package cn.datax.service.data.metadata.dao;
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;
/**
......@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-07-29
*/
@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.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import org.apache.ibatis.annotations.Mapper;
/**
......@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-03-14
*/
@Mapper
public interface DataSourceDao extends BaseDao<DataSourceEntity> {
public interface MetadataSourceDao extends BaseDao<MetadataSourceEntity> {
}
package cn.datax.service.data.metadata.dao;
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;
/**
......@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2020-07-29
*/
@Mapper
public interface DataMetadataTableDao extends BaseDao<DataMetadataTableEntity> {
public interface MetadataTableDao extends BaseDao<MetadataTableEntity> {
}
package cn.datax.service.data.metadata.mapstruct;
import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataColumnVo;
import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.api.vo.MetadataColumnVo;
import org.mapstruct.Mapper;
/**
......@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-07-29
*/
@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.service.data.factory.api.dto.DataSourceDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.service.data.factory.api.vo.DataSourceVo;
import cn.datax.service.data.metadata.api.dto.MetadataSourceDto;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import cn.datax.service.data.metadata.api.vo.MetadataSourceVo;
import org.mapstruct.Mapper;
/**
......@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-03-14
*/
@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;
import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.DataMetadataTableVo;
import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.vo.MetadataTableVo;
import org.mapstruct.Mapper;
/**
......@@ -15,6 +15,6 @@ import org.mapstruct.Mapper;
* @since 2020-07-29
*/
@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;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto;
import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.common.base.BaseService;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import java.util.List;
......@@ -14,15 +14,15 @@ import java.util.List;
* @author yuwei
* @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.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.entity.DataSourceEntity;
import cn.datax.common.base.BaseService;
import cn.datax.service.data.metadata.api.dto.MetadataSourceDto;
import cn.datax.service.data.metadata.api.entity.MetadataSourceEntity;
import com.aspose.words.Document;
import java.util.List;
......@@ -17,19 +18,19 @@ import java.util.List;
* @author yuwei
* @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);
......@@ -37,5 +38,7 @@ public interface DataSourceService extends BaseService<DataSourceEntity> {
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;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto;
import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.common.base.BaseService;
import java.util.List;
......@@ -14,15 +14,15 @@ import java.util.List;
* @author yuwei
* @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;
import cn.datax.service.data.metadata.api.entity.DataMetadataColumnEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataColumnDto;
import cn.datax.service.data.metadata.service.DataMetadataColumnService;
import cn.datax.service.data.metadata.mapstruct.DataMetadataColumnMapper;
import cn.datax.service.data.metadata.dao.DataMetadataColumnDao;
import cn.datax.service.data.metadata.api.dto.MetadataColumnDto;
import cn.datax.service.data.metadata.api.entity.MetadataColumnEntity;
import cn.datax.service.data.metadata.service.MetadataColumnService;
import cn.datax.service.data.metadata.mapstruct.MetadataColumnMapper;
import cn.datax.service.data.metadata.dao.MetadataColumnDao;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,45 +23,45 @@ import java.util.List;
*/
@Service
@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
private DataMetadataColumnDao dataMetadataColumnDao;
private MetadataColumnDao metadataColumnDao;
@Autowired
private DataMetadataColumnMapper dataMetadataColumnMapper;
private MetadataColumnMapper metadataColumnMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public DataMetadataColumnEntity saveDataMetadataColumn(DataMetadataColumnDto dataMetadataColumnDto) {
DataMetadataColumnEntity dataMetadataColumn = dataMetadataColumnMapper.toEntity(dataMetadataColumnDto);
dataMetadataColumnDao.insert(dataMetadataColumn);
return dataMetadataColumn;
public MetadataColumnEntity saveMetadataColumn(MetadataColumnDto metadataColumnDto) {
MetadataColumnEntity metadataColumn = metadataColumnMapper.toEntity(metadataColumnDto);
metadataColumnDao.insert(metadataColumn);
return metadataColumn;
}
@Override
@Transactional(rollbackFor = Exception.class)
public DataMetadataColumnEntity updateDataMetadataColumn(DataMetadataColumnDto dataMetadataColumnDto) {
DataMetadataColumnEntity dataMetadataColumn = dataMetadataColumnMapper.toEntity(dataMetadataColumnDto);
dataMetadataColumnDao.updateById(dataMetadataColumn);
return dataMetadataColumn;
public MetadataColumnEntity updateMetadataColumn(MetadataColumnDto metadataColumnDto) {
MetadataColumnEntity metadataColumn = metadataColumnMapper.toEntity(metadataColumnDto);
metadataColumnDao.updateById(metadataColumn);
return metadataColumn;
}
@Override
public DataMetadataColumnEntity getDataMetadataColumnById(String id) {
DataMetadataColumnEntity dataMetadataColumnEntity = super.getById(id);
return dataMetadataColumnEntity;
public MetadataColumnEntity getMetadataColumnById(String id) {
MetadataColumnEntity metadataColumnEntity = super.getById(id);
return metadataColumnEntity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataColumnById(String id) {
dataMetadataColumnDao.deleteById(id);
public void deleteMetadataColumnById(String id) {
metadataColumnDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataColumnBatch(List<String> ids) {
dataMetadataColumnDao.deleteBatchIds(ids);
public void deleteMetadataColumnBatch(List<String> ids) {
metadataColumnDao.deleteBatchIds(ids);
}
}
package cn.datax.service.data.metadata.service.impl;
import cn.datax.service.data.metadata.api.entity.DataMetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.DataMetadataTableDto;
import cn.datax.service.data.metadata.service.DataMetadataTableService;
import cn.datax.service.data.metadata.mapstruct.DataMetadataTableMapper;
import cn.datax.service.data.metadata.dao.DataMetadataTableDao;
import cn.datax.service.data.metadata.api.entity.MetadataTableEntity;
import cn.datax.service.data.metadata.api.dto.MetadataTableDto;
import cn.datax.service.data.metadata.service.MetadataTableService;
import cn.datax.service.data.metadata.mapstruct.MetadataTableMapper;
import cn.datax.service.data.metadata.dao.MetadataTableDao;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,45 +23,45 @@ import java.util.List;
*/
@Service
@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
private DataMetadataTableDao dataMetadataTableDao;
private MetadataTableDao metadataTableDao;
@Autowired
private DataMetadataTableMapper dataMetadataTableMapper;
private MetadataTableMapper metadataTableMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public DataMetadataTableEntity saveDataMetadataTable(DataMetadataTableDto dataMetadataTableDto) {
DataMetadataTableEntity dataMetadataTable = dataMetadataTableMapper.toEntity(dataMetadataTableDto);
dataMetadataTableDao.insert(dataMetadataTable);
return dataMetadataTable;
public MetadataTableEntity saveMetadataTable(MetadataTableDto metadataTableDto) {
MetadataTableEntity metadataTableEntity = metadataTableMapper.toEntity(metadataTableDto);
metadataTableDao.insert(metadataTableEntity);
return metadataTableEntity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public DataMetadataTableEntity updateDataMetadataTable(DataMetadataTableDto dataMetadataTableDto) {
DataMetadataTableEntity dataMetadataTable = dataMetadataTableMapper.toEntity(dataMetadataTableDto);
dataMetadataTableDao.updateById(dataMetadataTable);
return dataMetadataTable;
public MetadataTableEntity updateMetadataTable(MetadataTableDto metadataTableDto) {
MetadataTableEntity metadataTableEntity = metadataTableMapper.toEntity(metadataTableDto);
metadataTableDao.updateById(metadataTableEntity);
return metadataTableEntity;
}
@Override
public DataMetadataTableEntity getDataMetadataTableById(String id) {
DataMetadataTableEntity dataMetadataTableEntity = super.getById(id);
return dataMetadataTableEntity;
public MetadataTableEntity getMetadataTableById(String id) {
MetadataTableEntity metadataTableEntity = super.getById(id);
return metadataTableEntity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataTableById(String id) {
dataMetadataTableDao.deleteById(id);
public void deleteMetadataTableById(String id) {
metadataTableDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataMetadataTableBatch(List<String> ids) {
dataMetadataTableDao.deleteBatchIds(ids);
public void deleteMetadataTableBatch(List<String> ids) {
metadataTableDao.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.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="source_id" property="sourceId" />
<result column="table_id" property="tableId" />
......
<?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.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="status" property="status" />
<result column="create_by" property="createBy" />
......@@ -14,7 +14,6 @@
<result column="remark" property="remark" />
<result column="db_type" property="dbType" />
<result column="source_name" property="sourceName" />
<result column="theme_id" property="themeId" />
<result column="source_sync" property="sourceSync" />
<result column="db_schema" property="dbSchema" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
</resultMap>
......@@ -29,7 +28,7 @@
update_by,
update_time,
remark,
db_type, source_name, theme_id, source_sync, db_schema
db_type, source_name, source_sync, db_schema
</sql>
</mapper>
<?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.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="source_id" property="sourceId" />
<result column="table_name" property="tableName" />
......
......@@ -16,5 +16,6 @@
<modules>
<module>data-metadata-service</module>
<module>data-metadata-service-api</module>
<module>data-metadata-service-console</module>
</modules>
</project>
\ No newline at end of file
......@@ -3,13 +3,13 @@
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">
<parent>
<artifactId>data-factory-service-parent</artifactId>
<artifactId>data-visual-service-parent</artifactId>
<groupId>cn.datax</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>2.0.0</version>
<artifactId>data-factory-service-api</artifactId>
<artifactId>data-visual-service-api</artifactId>
<dependencies>
<dependency>
......
package cn.datax.service.data.factory.api.dto;
package cn.datax.service.data.visual.api.dto;
import cn.datax.common.validate.ValidationGroups;
import io.swagger.annotations.ApiModel;
......@@ -9,17 +9,18 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* <p>
* 数据集信息表 实体DTO
* </p>
*
* @author yuwei
* @since 2020-03-20
* @since 2020-07-31
*/
@ApiModel(value = "数据集信息表Model")
@Data
public class DataSetDto implements Serializable {
public class VisualDataSetDto implements Serializable {
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.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.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 lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -15,13 +18,13 @@ import lombok.experimental.Accessors;
* </p>
*
* @author yuwei
* @since 2020-03-20
* @since 2020-07-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "factory_set", autoResultMap = true)
public class DataSetEntity extends DataScopeBaseEntity {
@TableName(value = "visual_data_set", autoResultMap = true)
public class VisualDataSetEntity extends DataScopeBaseEntity {
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 lombok.Data;
......@@ -10,11 +10,11 @@ import lombok.EqualsAndHashCode;
* </p>
*
* @author yuwei
* @since 2020-03-20
* @since 2020-07-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataSetQuery extends BaseQueryParams {
public class VisualDataSetQuery extends BaseQueryParams {
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 lombok.Data;
......@@ -13,10 +13,10 @@ import java.time.LocalDateTime;
* </p>
*
* @author yuwei
* @since 2020-03-20
* @since 2020-07-31
*/
@Data
public class DataSetVo implements Serializable {
public class VisualDataSetVo implements Serializable {
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