Commit 40183ee2 by yuwei

项目初始化

parent f2707f70
...@@ -24,5 +24,9 @@ ...@@ -24,5 +24,9 @@
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -12,7 +12,6 @@ public class ApiLogDto implements Serializable { ...@@ -12,7 +12,6 @@ public class ApiLogDto implements Serializable {
private String id; private String id;
private String apiId; private String apiId;
private String apiName;
private String callerId; private String callerId;
private String callerIp; private String callerIp;
private String callerUrl; private String callerUrl;
......
...@@ -28,8 +28,6 @@ public class ServiceLogDto implements Serializable { ...@@ -28,8 +28,6 @@ public class ServiceLogDto implements Serializable {
private String id; private String id;
@ApiModelProperty(value = "服务id") @ApiModelProperty(value = "服务id")
private String serviceId; private String serviceId;
@ApiModelProperty(value = "服务名称")
private String serviceName;
@ApiModelProperty(value = "调用者id") @ApiModelProperty(value = "调用者id")
private String callerId; private String callerId;
@ApiModelProperty(value = "调用者ip") @ApiModelProperty(value = "调用者ip")
......
...@@ -11,6 +11,10 @@ public class SqlParseDto implements Serializable { ...@@ -11,6 +11,10 @@ public class SqlParseDto implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID=1L;
@ApiModelProperty(value = "数据源")
@NotBlank(message = "数据源不能为空")
private String sourceId;
@ApiModelProperty(value = "SQL文本") @ApiModelProperty(value = "SQL文本")
@NotBlank(message = "SQL不能为空") @NotBlank(message = "SQL不能为空")
private String sqlText; private String sqlText;
......
...@@ -27,6 +27,7 @@ public class ApiLogEntity implements Serializable { ...@@ -27,6 +27,7 @@ public class ApiLogEntity implements Serializable {
/** /**
* api名称 * api名称
*/ */
@TableField(exist = false)
private String apiName; private String apiName;
/** /**
* 调用者id * 调用者id
......
package cn.datax.service.data.market.api.entity; package cn.datax.service.data.market.api.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.datax.common.base.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
...@@ -41,6 +40,7 @@ public class ServiceLogEntity implements Serializable { ...@@ -41,6 +40,7 @@ public class ServiceLogEntity implements Serializable {
/** /**
* 服务名称 * 服务名称
*/ */
@TableField(exist = false)
private String serviceName; private String serviceName;
/** /**
......
...@@ -2,7 +2,13 @@ package cn.datax.service.data.market.integration.dao; ...@@ -2,7 +2,13 @@ package cn.datax.service.data.market.integration.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.data.market.api.entity.ServiceLogEntity; import cn.datax.service.data.market.api.entity.ServiceLogEntity;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
/** /**
* <p> * <p>
...@@ -15,4 +21,9 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -15,4 +21,9 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface ServiceLogDao extends BaseDao<ServiceLogEntity> { public interface ServiceLogDao extends BaseDao<ServiceLogEntity> {
@Override
ServiceLogEntity selectById(Serializable id);
@Override
<E extends IPage<ServiceLogEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<ServiceLogEntity> queryWrapper);
} }
...@@ -22,7 +22,30 @@ ...@@ -22,7 +22,30 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, id,
status, status,
service_id, service_name, caller_id, caller_ip, caller_date, caller_header, caller_param, caller_soap, time, msg service_id, caller_id, caller_ip, caller_date, caller_header, caller_param, caller_soap, time, msg
</sql> </sql>
<sql id="Log_Column_List">
${alias}.id,
${alias}.status,
${alias}.service_id, ${alias}.caller_id, ${alias}.caller_ip, ${alias}.caller_date,
${alias}.caller_header, ${alias}.caller_param, ${alias}.caller_soap, ${alias}.time, ${alias}.msg
</sql>
<select id="selectById" resultMap="BaseResultMap">
SELECT service.service_name,
<include refid="Log_Column_List"><property name="alias" value="log"/></include>
FROM market_service_log log
LEFT JOIN market_service_integration service ON service.id = log.service_id
WHERE 1 = 1 AND log.id = #{id}
</select>
<select id="selectPage" resultMap="BaseResultMap">
SELECT service.service_name,
<include refid="Log_Column_List"><property name="alias" value="log"/></include>
FROM market_service_log log
LEFT JOIN market_service_integration service ON service.id = log.service_id
${ew.customSqlSegment}
</select>
</mapper> </mapper>
...@@ -72,7 +72,7 @@ public class ApiLogController extends BaseController { ...@@ -72,7 +72,7 @@ public class ApiLogController extends BaseController {
@GetMapping("/page") @GetMapping("/page")
public R getApiLogPage(ApiLogQuery apiLogQuery) { public R getApiLogPage(ApiLogQuery apiLogQuery) {
QueryWrapper<ApiLogEntity> queryWrapper = new QueryWrapper<>(); QueryWrapper<ApiLogEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(apiLogQuery.getApiName()), "api_name", apiLogQuery.getApiName()); queryWrapper.like(StrUtil.isNotBlank(apiLogQuery.getApiName()), "api.api_name", apiLogQuery.getApiName());
IPage<ApiLogEntity> page = apiLogService.page(new Page<>(apiLogQuery.getPageNum(), apiLogQuery.getPageSize()), queryWrapper); IPage<ApiLogEntity> page = apiLogService.page(new Page<>(apiLogQuery.getPageNum(), apiLogQuery.getPageSize()), queryWrapper);
List<ApiLogVo> collect = page.getRecords().stream().map(apiLogMapper::toVO).collect(Collectors.toList()); List<ApiLogVo> collect = page.getRecords().stream().map(apiLogMapper::toVO).collect(Collectors.toList());
JsonPage<ApiLogVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect); JsonPage<ApiLogVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
......
...@@ -2,8 +2,20 @@ package cn.datax.service.data.market.mapping.dao; ...@@ -2,8 +2,20 @@ package cn.datax.service.data.market.mapping.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.data.market.api.entity.ApiLogEntity; import cn.datax.service.data.market.api.entity.ApiLogEntity;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
@Mapper @Mapper
public interface ApiLogDao extends BaseDao<ApiLogEntity> { public interface ApiLogDao extends BaseDao<ApiLogEntity> {
@Override
ApiLogEntity selectById(Serializable id);
@Override
<E extends IPage<ApiLogEntity>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<ApiLogEntity> queryWrapper);
} }
...@@ -5,6 +5,7 @@ import cn.datax.common.exception.DataException; ...@@ -5,6 +5,7 @@ import cn.datax.common.exception.DataException;
import cn.datax.common.utils.IPUtil; import cn.datax.common.utils.IPUtil;
import cn.datax.common.utils.MD5Util; import cn.datax.common.utils.MD5Util;
import cn.datax.service.data.market.api.dto.ApiLogDto; import cn.datax.service.data.market.api.dto.ApiLogDto;
import cn.datax.service.data.market.api.dto.RateLimit;
import cn.datax.service.data.market.api.entity.DataApiEntity; import cn.datax.service.data.market.api.entity.DataApiEntity;
import cn.datax.service.data.market.api.enums.ParamType; import cn.datax.service.data.market.api.enums.ParamType;
import cn.datax.service.data.market.mapping.utils.ThreadUtil; import cn.datax.service.data.market.mapping.utils.ThreadUtil;
...@@ -80,11 +81,10 @@ public class RequestInterceptor { ...@@ -80,11 +81,10 @@ public class RequestInterceptor {
} }
// 限流校验 // 限流校验
String rateLimit = api.getRateLimit(); RateLimit rateLimit = api.getRateLimit();
rateLimit = Optional.ofNullable(rateLimit).orElse(DataConstant.TrueOrFalse.TRUE.getKey()); if (DataConstant.TrueOrFalse.TRUE.getKey().equals(rateLimit.getEnable())) {
if (DataConstant.TrueOrFalse.TRUE.getKey().equals(rateLimit)) { Integer times = rateLimit.getTimes();
Integer times = api.getTimes(); Integer seconds = rateLimit.getSeconds();
Integer seconds = api.getSeconds();
// 请求次数 // 请求次数
times = Optional.ofNullable(times).orElse(5); times = Optional.ofNullable(times).orElse(5);
// 请求时间范围60秒 // 请求时间范围60秒
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.datax.service.data.market.api.call.dao.ApiLogDao"> <mapper namespace="cn.datax.service.data.market.mapping.dao.ApiLogDao">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.data.market.api.entity.ApiLogEntity"> <resultMap id="BaseResultMap" type="cn.datax.service.data.market.api.entity.ApiLogEntity">
...@@ -22,7 +22,29 @@ ...@@ -22,7 +22,29 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, id,
status, status,
api_id, api_name, caller_id, caller_ip, caller_url, caller_params, caller_date, callerSize, time, msg api_id, caller_id, caller_ip, caller_url, caller_params, caller_date, caller_size, time, msg
</sql> </sql>
<sql id="Log_Column_List">
${alias}.id,
${alias}.status,
${alias}.api_id, ${alias}.caller_id, ${alias}.caller_ip, ${alias}.caller_url, ${alias}.caller_params,
${alias}.caller_date, ${alias}.caller_size, ${alias}.time, ${alias}.msg
</sql>
<select id="selectById" resultMap="BaseResultMap">
SELECT api.api_name,
<include refid="Log_Column_List"><property name="alias" value="log"/></include>
FROM market_api_log log
LEFT JOIN market_api api ON api.id = log.api_id
WHERE 1 = 1 AND log.id = #{id}
</select>
<select id="selectPage" resultMap="BaseResultMap">
SELECT api.api_name,
<include refid="Log_Column_List"><property name="alias" value="log"/></include>
FROM market_api_log log
LEFT JOIN market_api api ON api.id = log.api_id
${ew.customSqlSegment}
</select>
</mapper> </mapper>
...@@ -84,6 +84,11 @@ ...@@ -84,6 +84,11 @@
<artifactId>datax-common-rabbitmq</artifactId> <artifactId>datax-common-rabbitmq</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-metadata-service-api</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -3,8 +3,10 @@ package cn.datax.service.data.market.service.impl; ...@@ -3,8 +3,10 @@ package cn.datax.service.data.market.service.impl;
import cn.datax.commo.office.word.WordUtil; import cn.datax.commo.office.word.WordUtil;
import cn.datax.common.core.DataConstant; import cn.datax.common.core.DataConstant;
import cn.datax.common.core.R; import cn.datax.common.core.R;
import cn.datax.common.core.RedisConstant;
import cn.datax.common.exception.DataException; import cn.datax.common.exception.DataException;
import cn.datax.common.rabbitmq.config.RabbitMqConstant; import cn.datax.common.rabbitmq.config.RabbitMqConstant;
import cn.datax.common.redis.service.RedisService;
import cn.datax.common.utils.MD5Util; import cn.datax.common.utils.MD5Util;
import cn.datax.common.utils.SecurityUtil; import cn.datax.common.utils.SecurityUtil;
import cn.datax.common.utils.ThrowableUtil; import cn.datax.common.utils.ThrowableUtil;
...@@ -17,6 +19,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper; ...@@ -17,6 +19,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper;
import cn.datax.service.data.market.dao.DataApiDao; import cn.datax.service.data.market.dao.DataApiDao;
import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.base.BaseServiceImpl;
import cn.datax.service.data.market.utils.SqlBuilderUtil; import cn.datax.service.data.market.utils.SqlBuilderUtil;
import 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.hutool.core.util.StrUtil;
import com.aspose.words.Document; import com.aspose.words.Document;
import com.aspose.words.MailMerge; import com.aspose.words.MailMerge;
import com.aspose.words.net.System.Data.DataRow; import com.aspose.words.net.System.Data.DataRow;
...@@ -77,6 +83,9 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit ...@@ -77,6 +83,9 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Autowired @Autowired
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
@Autowired
private RedisService redisService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveDataApi(DataApiDto dataApiDto) { public void saveDataApi(DataApiDto dataApiDto) {
...@@ -125,6 +134,7 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit ...@@ -125,6 +134,7 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Override @Override
public SqlParseVo sqlParse(SqlParseDto sqlParseDto) { public SqlParseVo sqlParse(SqlParseDto sqlParseDto) {
String sourceId = sqlParseDto.getSourceId();
String sql = sqlParseDto.getSqlText(); String sql = sqlParseDto.getSqlText();
sql = sql.replace(SqlBuilderUtil.getInstance().MARK_KEY_START, ""); sql = sql.replace(SqlBuilderUtil.getInstance().MARK_KEY_START, "");
sql = sql.replace(SqlBuilderUtil.getInstance().MARK_KEY_END, ""); sql = sql.replace(SqlBuilderUtil.getInstance().MARK_KEY_END, "");
...@@ -157,21 +167,35 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit ...@@ -157,21 +167,35 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
return reqParam; return reqParam;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
sqlParseVo.setReqParams(reqParams); sqlParseVo.setReqParams(reqParams);
Map<String, List<Map<String, String>>> map = cols.stream().collect(Collectors.groupingBy(e -> e.get("tableName").toString())); List<ResParam> resParams = new ArrayList<>();
for (Map.Entry<String, List<Map<String, String>>> entry : map.entrySet()) { List<MetadataSourceEntity> sourceEntityList = (List<MetadataSourceEntity>) redisService.get(RedisConstant.METADATA_SOURCE_KEY);
String entryKey = entry.getKey().toLowerCase(); MetadataSourceEntity sourceEntity = sourceEntityList.stream().filter(s -> sourceId.equals(s.getId())).findFirst().orElse(null);
// 根据entryKey找到数据库表 if (sourceEntity != null) {
List<MetadataTableEntity> tableEntityList = (List<MetadataTableEntity>) redisService.hget(RedisConstant.METADATA_TABLE_KEY, sourceEntity.getId());
Map<String, List<Map<String, String>>> map = cols.stream().collect(Collectors.groupingBy(e -> e.get("tableName").toString()));
List<Map<String, String>> entryValue = entry.getValue(); for (Map.Entry<String, List<Map<String, String>>> entry : map.entrySet()) {
entryValue.stream().map(m -> m.get("columnName")); String entryKey = entry.getKey().toLowerCase();
List<Map<String, String>> entryValue = entry.getValue();
MetadataTableEntity tableEntity = tableEntityList.stream().filter(t -> entryKey.equals(t.getTableName().toLowerCase())).findFirst().orElse(null);
if (tableEntity != null) {
List<MetadataColumnEntity> columnEntityList = (List<MetadataColumnEntity>) redisService.hget(RedisConstant.METADATA_COLUMN_KEY, tableEntity.getId());
entryValue.stream().forEach(m -> {
String columnName = m.get("columnName").toLowerCase();
String columnAliasName = m.get("columnAliasName");
MetadataColumnEntity columnEntity = columnEntityList.stream().filter(c -> columnName.equals(c.getColumnName().toLowerCase())).findFirst().orElse(null);
if (columnEntity != null) {
ResParam resParam = new ResParam();
resParam.setFieldName(columnEntity.getColumnName());
resParam.setFieldComment(StrUtil.isNotBlank(columnEntity.getColumnComment()) ? columnEntity.getColumnComment() : "");
resParam.setDataType(StrUtil.isNotBlank(columnEntity.getDataType()) ? columnEntity.getDataType() : "");
resParam.setFieldAliasName(StrUtil.isNotBlank(columnAliasName) ? columnAliasName : "");
resParams.add(resParam);
}
});
}
}
} }
// List<ResParam> resParams = cols.stream().map(s -> { sqlParseVo.setResParams(resParams);
// ResParam resParam = new ResParam();
// resParam.setFieldName(s);
// return resParam;
// }).collect(Collectors.toList());
// sqlParseVo.setResParams(resParams);
return sqlParseVo; return sqlParseVo;
} }
......
package cn.datax.service.data.metadata.config; package cn.datax.service.data.metadata.config;
import cn.datax.common.core.RedisConstant;
import cn.datax.common.redis.service.RedisService;
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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -17,6 +31,21 @@ public class StartedUpRunner implements ApplicationRunner { ...@@ -17,6 +31,21 @@ public class StartedUpRunner implements ApplicationRunner {
private final ConfigurableApplicationContext context; private final ConfigurableApplicationContext context;
private final Environment environment; private final Environment environment;
@Autowired
private MetadataSourceDao metadataSourceDao;
@Autowired
private MetadataTableDao metadataTableDao;
@Autowired
private MetadataColumnDao metadataColumnDao;
@Autowired
private RedisService redisService;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override @Override
public void run(ApplicationArguments args) { public void run(ApplicationArguments args) {
if (context.isActive()) { if (context.isActive()) {
...@@ -26,6 +55,30 @@ public class StartedUpRunner implements ApplicationRunner { ...@@ -26,6 +55,30 @@ public class StartedUpRunner implements ApplicationRunner {
"端口号:" + environment.getProperty("server.port") + "\n" + "端口号:" + environment.getProperty("server.port") + "\n" +
"-----------------------------------------"; "-----------------------------------------";
System.out.println(banner); System.out.println(banner);
// 项目启动时,初始化缓存
String sourceKey = RedisConstant.METADATA_SOURCE_KEY;
Boolean hasSourceKey = redisService.hasKey(sourceKey);
if (!hasSourceKey) {
List<MetadataSourceEntity> sourceEntityList = metadataSourceDao.selectList(Wrappers.emptyWrapper());
redisService.set(sourceKey, sourceEntityList);
}
String tableKey = RedisConstant.METADATA_TABLE_KEY;
Boolean hasTableKey = redisService.hasKey(tableKey);
if (!hasTableKey) {
List<MetadataTableEntity> tableEntityList = metadataTableDao.selectList(Wrappers.emptyWrapper());
Map<String, List<MetadataTableEntity>> tableListMap = tableEntityList.stream().collect(Collectors.groupingBy(MetadataTableEntity::getSourceId));
redisTemplate.opsForHash().putAll(tableKey, tableListMap);
}
String columnKey = RedisConstant.METADATA_COLUMN_KEY;
Boolean hasColumnKey = redisService.hasKey(columnKey);
if (!hasColumnKey) {
List<MetadataColumnEntity> columnEntityList = metadataColumnDao.selectList(Wrappers.emptyWrapper());
Map<String, List<MetadataColumnEntity>> columnListMap = columnEntityList.stream().collect(Collectors.groupingBy(MetadataColumnEntity::getTableId));
redisTemplate.opsForHash().putAll(columnKey, columnListMap);
}
} }
} }
} }
...@@ -238,4 +238,15 @@ public class MetadataSourceController extends BaseController { ...@@ -238,4 +238,15 @@ public class MetadataSourceController extends BaseController {
out.flush(); out.flush();
out.close(); out.close();
} }
/**
* 刷新参数缓存
*
* @return
*/
@GetMapping("/refresh")
public R refreshMetadata() {
metadataSourceService.refreshMetadata();
return R.ok();
}
} }
...@@ -41,4 +41,6 @@ public interface MetadataSourceService extends BaseService<MetadataSourceEntity> ...@@ -41,4 +41,6 @@ public interface MetadataSourceService extends BaseService<MetadataSourceEntity>
void syncMetadata(String id); void syncMetadata(String id);
Document wordMetadata(String id) throws Exception; Document wordMetadata(String id) throws Exception;
void refreshMetadata();
} }
...@@ -3,12 +3,14 @@ package cn.datax.service.data.metadata.service.impl; ...@@ -3,12 +3,14 @@ package cn.datax.service.data.metadata.service.impl;
import cn.datax.commo.office.word.WordUtil; import cn.datax.commo.office.word.WordUtil;
import cn.datax.common.base.BaseServiceImpl; import cn.datax.common.base.BaseServiceImpl;
import cn.datax.common.core.DataConstant; import cn.datax.common.core.DataConstant;
import cn.datax.common.core.RedisConstant;
import cn.datax.common.database.DataSourceFactory; import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery; import cn.datax.common.database.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty; import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.database.core.DbColumn; import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable; import cn.datax.common.database.core.DbTable;
import cn.datax.common.exception.DataException; import cn.datax.common.exception.DataException;
import cn.datax.common.redis.service.RedisService;
import cn.datax.common.utils.SecurityUtil; import cn.datax.common.utils.SecurityUtil;
import cn.datax.service.data.metadata.api.dto.DbSchema; import cn.datax.service.data.metadata.api.dto.DbSchema;
import cn.datax.service.data.metadata.api.dto.MetadataSourceDto; import cn.datax.service.data.metadata.api.dto.MetadataSourceDto;
...@@ -29,14 +31,18 @@ import com.aspose.words.net.System.Data.DataRow; ...@@ -29,14 +31,18 @@ import com.aspose.words.net.System.Data.DataRow;
import com.aspose.words.net.System.Data.DataSet; import com.aspose.words.net.System.Data.DataSet;
import com.aspose.words.net.System.Data.DataTable; import com.aspose.words.net.System.Data.DataTable;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
...@@ -68,6 +74,12 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao ...@@ -68,6 +74,12 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao
@Autowired @Autowired
private MetadataColumnDao metadataColumnDao; private MetadataColumnDao metadataColumnDao;
@Autowired
private RedisService redisService;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveMetadataSource(MetadataSourceDto metadataSourceDto) { public void saveMetadataSource(MetadataSourceDto metadataSourceDto) {
...@@ -231,4 +243,33 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao ...@@ -231,4 +243,33 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao
WordUtil.getInstance().insertWatermarkText(doc, SecurityUtil.getUserName()); WordUtil.getInstance().insertWatermarkText(doc, SecurityUtil.getUserName());
return doc; return doc;
} }
@Override
public void refreshMetadata() {
String sourceKey = RedisConstant.METADATA_SOURCE_KEY;
Boolean hasSourceKey = redisService.hasKey(sourceKey);
if (hasSourceKey) {
redisService.del(sourceKey);
}
List<MetadataSourceEntity> sourceEntityList = metadataSourceDao.selectList(Wrappers.emptyWrapper());
redisService.set(sourceKey, sourceEntityList);
String tableKey = RedisConstant.METADATA_TABLE_KEY;
Boolean hasTableKey = redisService.hasKey(tableKey);
if (hasTableKey) {
redisService.del(tableKey);
}
List<MetadataTableEntity> tableEntityList = metadataTableDao.selectList(Wrappers.emptyWrapper());
Map<String, List<MetadataTableEntity>> tableListMap = tableEntityList.stream().collect(Collectors.groupingBy(MetadataTableEntity::getSourceId));
redisTemplate.opsForHash().putAll(tableKey, tableListMap);
String columnKey = RedisConstant.METADATA_COLUMN_KEY;
Boolean hasColumnKey = redisService.hasKey(columnKey);
if (hasColumnKey) {
redisService.del(columnKey);
}
List<MetadataColumnEntity> columnEntityList = metadataColumnDao.selectList(Wrappers.emptyWrapper());
Map<String, List<MetadataColumnEntity>> columnListMap = columnEntityList.stream().collect(Collectors.groupingBy(MetadataColumnEntity::getTableId));
redisTemplate.opsForHash().putAll(columnKey, columnListMap);
}
} }
...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao; ...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import cn.datax.service.system.api.entity.DeptRelationEntity; import cn.datax.service.system.api.entity.DeptRelationEntity;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
...@@ -20,6 +19,5 @@ public interface DeptRelationDao extends BaseDao<DeptRelationEntity> { ...@@ -20,6 +19,5 @@ public interface DeptRelationDao extends BaseDao<DeptRelationEntity> {
void insertBatch(List<DeptRelationEntity> list); void insertBatch(List<DeptRelationEntity> list);
@Delete("delete from sys_dept_relation where ancestor = #{id}")
void deleteByAncestor(String id); void deleteByAncestor(String id);
} }
...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao; ...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import cn.datax.service.system.api.entity.RoleDeptEntity; import cn.datax.service.system.api.entity.RoleDeptEntity;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
...@@ -20,11 +19,7 @@ public interface RoleDeptDao extends BaseDao<RoleDeptEntity> { ...@@ -20,11 +19,7 @@ public interface RoleDeptDao extends BaseDao<RoleDeptEntity> {
void insertBatch(List<RoleDeptEntity> list); void insertBatch(List<RoleDeptEntity> list);
@Delete("delete from sys_role_dept where role_id = #{id}")
void deleteByRoleId(String id); void deleteByRoleId(String id);
@Delete("<script>" +
"delete from sys_role_dept where role_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>" +
"</script>")
void deleteByRoleIds(List<String> ids); void deleteByRoleIds(List<String> ids);
} }
...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao; ...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import cn.datax.service.system.api.entity.RoleMenuEntity; import cn.datax.service.system.api.entity.RoleMenuEntity;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
...@@ -20,11 +19,7 @@ public interface RoleMenuDao extends BaseDao<RoleMenuEntity> { ...@@ -20,11 +19,7 @@ public interface RoleMenuDao extends BaseDao<RoleMenuEntity> {
void insertBatch(List<RoleMenuEntity> list); void insertBatch(List<RoleMenuEntity> list);
@Delete("delete from sys_role_menu where role_id = #{id}")
void deleteByRoleId(String id); void deleteByRoleId(String id);
@Delete("<script>" +
"delete from sys_role_menu where role_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>" +
"</script>")
void deleteByRoleIds(List<String> ids); void deleteByRoleIds(List<String> ids);
} }
...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao; ...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import cn.datax.service.system.api.entity.UserPostEntity; import cn.datax.service.system.api.entity.UserPostEntity;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
...@@ -20,11 +19,7 @@ public interface UserPostDao extends BaseDao<UserPostEntity> { ...@@ -20,11 +19,7 @@ public interface UserPostDao extends BaseDao<UserPostEntity> {
void insertBatch(List<UserPostEntity> list); void insertBatch(List<UserPostEntity> list);
@Delete("delete from sys_user_post where user_id = #{id}")
void deleteByUserId(String id); void deleteByUserId(String id);
@Delete("<script>" +
"delete from sys_user_post where user_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>" +
"</script>")
void deleteByUserIds(List<String> ids); void deleteByUserIds(List<String> ids);
} }
...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao; ...@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import cn.datax.common.base.BaseDao; import cn.datax.common.base.BaseDao;
import cn.datax.service.system.api.entity.UserRoleEntity; import cn.datax.service.system.api.entity.UserRoleEntity;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
...@@ -20,11 +19,7 @@ public interface UserRoleDao extends BaseDao<UserRoleEntity> { ...@@ -20,11 +19,7 @@ public interface UserRoleDao extends BaseDao<UserRoleEntity> {
void insertBatch(List<UserRoleEntity> list); void insertBatch(List<UserRoleEntity> list);
@Delete("delete from sys_user_role where user_id = #{id}")
void deleteByUserId(String id); void deleteByUserId(String id);
@Delete("<script>" +
"delete from sys_user_role where user_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>" +
"</script>")
void deleteByUserIds(List<String> ids); void deleteByUserIds(List<String> ids);
} }
...@@ -17,11 +17,15 @@ ...@@ -17,11 +17,15 @@
<insert id="insertBatch" parameterType="java.util.List"> <insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_dept_relation INSERT INTO sys_dept_relation
(id, ancestor, descendant) (id, ancestor, descendant)
VALUES VALUES
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.ancestor}, #{item.descendant}) (#{item.id}, #{item.ancestor}, #{item.descendant})
</foreach> </foreach>
</insert> </insert>
<delete id="deleteByAncestor">
DELETE FROM sys_dept_relation WHERE ancestor = #{id}
</delete>
</mapper> </mapper>
...@@ -17,11 +17,22 @@ ...@@ -17,11 +17,22 @@
<insert id="insertBatch" parameterType="java.util.List"> <insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_role_dept INSERT INTO sys_role_dept
(id, role_id, dept_id) (id, role_id, dept_id)
VALUES VALUES
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.roleId}, #{item.deptId}) (#{item.id}, #{item.roleId}, #{item.deptId})
</foreach> </foreach>
</insert> </insert>
<delete id="deleteByRoleId">
DELETE FROM sys_role_dept WHERE role_id = #{id}
</delete>
<delete id="deleteByRoleIds">
DELETE FROM sys_role_dept WHERE role_id IN
<foreach collection='list' item='id' open='(' separator=',' close=')'>
#{id}
</foreach>
</delete>
</mapper> </mapper>
...@@ -24,4 +24,15 @@ ...@@ -24,4 +24,15 @@
</foreach> </foreach>
</insert> </insert>
<delete id="deleteByRoleId">
DELETE FROM sys_role_menu WHERE role_id = #{id}
</delete>
<delete id="deleteByRoleIds">
DELETE FROM sys_role_menu WHERE role_id in
<foreach collection='list' item='id' open='(' separator=',' close=')'>
#{id}
</foreach>
</delete>
</mapper> </mapper>
...@@ -24,4 +24,15 @@ ...@@ -24,4 +24,15 @@
</foreach> </foreach>
</insert> </insert>
<delete id="deleteByUserId">
DELETE FROM sys_user_post WHERE user_id = #{id}
</delete>
<delete id="deleteByUserIds">
DELETE FROM sys_user_post WHERE user_id in
<foreach collection='list' item='id' open='(' separator=',' close=')'>
#{id}
</foreach>
</delete>
</mapper> </mapper>
...@@ -24,4 +24,15 @@ ...@@ -24,4 +24,15 @@
</foreach> </foreach>
</insert> </insert>
<delete id="deleteByUserId">
DELETE FROM sys_user_role WHERE user_id = #{id}
</delete>
<delete id="deleteByUserIds">
DELETE FROM sys_user_role WHERE user_id in
<foreach collection='list' item='id' open='(' separator=',' close=')'>
#{id}
</foreach>
</delete>
</mapper> </mapper>
...@@ -23,7 +23,9 @@ ...@@ -23,7 +23,9 @@
<div class="right-menu"> <div class="right-menu">
<screenfull id="screenfull" class="right-menu-btn" /> <screenfull id="screenfull" class="right-menu-btn" />
<span class="right-menu-btn"> <span class="right-menu-btn">
<i class="el-icon-bell"></i> <el-badge is-dot class="badge">
<i class="el-icon-bell"></i>
</el-badge>
</span> </span>
<el-dropdown> <el-dropdown>
<span class="right-menu-btn"> <span class="right-menu-btn">
......
...@@ -47,6 +47,11 @@ ...@@ -47,6 +47,11 @@
cursor: pointer; cursor: pointer;
padding: 0 14px; padding: 0 14px;
color: #fff; color: #fff;
.badge {
.el-badge__content {
margin-top: 10px;
}
}
&:hover { &:hover {
background-color: mix(#000, #0086f1, 10%); background-color: mix(#000, #0086f1, 10%);
} }
......
...@@ -48,6 +48,7 @@ service.interceptors.response.use( ...@@ -48,6 +48,7 @@ service.interceptors.response.use(
}, },
error => { error => {
loadingInstance.close() loadingInstance.close()
console.log(error.response)
if (error.response.status) { if (error.response.status) {
switch (error.response.status) { switch (error.response.status) {
// 401: 未登录 // 401: 未登录
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="IP黑名单" prop="deny"> <el-form-item label="IP黑名单" prop="deny">
<el-input v-model="form1.deny" type="textarea" placeholder="请输入IP黑名单多个用隔开" /> <el-input v-model="form1.deny" type="textarea" placeholder="请输入IP黑名单多个用英文,隔开" />
</el-form-item> </el-form-item>
<el-form-item label="是否限流" prop="rateLimit"> <el-form-item label="是否限流" prop="rateLimit">
<el-radio-group v-model="form1.rateLimit.enable"> <el-radio-group v-model="form1.rateLimit.enable">
...@@ -56,11 +56,9 @@ ...@@ -56,11 +56,9 @@
>{{ dict.itemValue }}</el-radio> >{{ dict.itemValue }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-if="form1.rateLimit.enable === '1'" label="请求次数" prop="times"> <el-form-item v-if="form1.rateLimit.enable === '1'" label="限流配置">
<el-input-number v-model="form1.rateLimit.times" controls-position="right" :min="1" /> <el-input-number v-model="form1.rateLimit.seconds" controls-position="right" :min="1" />秒内限制请求
</el-form-item> <el-input-number v-model="form1.rateLimit.times" controls-position="right" :min="1" />
<el-form-item v-if="form1.rateLimit.enable === '1'" label="请求时间范围" prop="seconds">
<el-input-number v-model="form1.rateLimit.seconds" controls-position="right" :min="1" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form1.status" disabled> <el-radio-group v-model="form1.status" disabled>
...@@ -500,23 +498,13 @@ export default { ...@@ -500,23 +498,13 @@ export default {
return return
} }
const data = {} const data = {}
data.sourceId = this.form2.sourceId
data.sqlText = this.form2.sqlText data.sqlText = this.form2.sqlText
sqlParse(data).then(response => { sqlParse(data).then(response => {
if (response.success) { if (response.success) {
const { data } = response const { data } = response
const reqParams = data.reqParams this.form3.reqParams = data.reqParams
const resParams = data.resParams this.form3.resParams = data.resParams
this.form3.reqParams = reqParams.map(function(item) {
const json = {}
json.paramName = item.paramName
json.nullable = '0'
return json
})
this.form3.resParams = resParams.map(function(item) {
const json = {}
json.fieldName = item.fieldName
return json
})
this.$message.success('解析成功,请进行下一步') this.$message.success('解析成功,请进行下一步')
} }
}) })
......
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