Commit f0bf478e by yuwei

项目初始化

parent 16b0c3d0
......@@ -97,8 +97,8 @@ spring:
name: dataMarketHystrix
fallbackUri: forward:/fallback
# 数据API注册
- id: datax-service-data-api-mapping
uri: lb://datax-service-data-api-mapping
- id: datax-service-data-mapping
uri: lb://datax-service-data-mapping
predicates:
- Path=/data/api/**
filters:
......
......@@ -54,7 +54,7 @@ swagger:
title: API接口文档
description: Api Documentation
version: 1.0.0
basePackage: cn.datax.service.data.factory.sql.console.controller
basePackage: cn.datax.service.data.metadata.console.controller
termsOfServiceUrl: http://www.baidu.com
contact:
name: yuwei
......
......@@ -29,7 +29,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.market.api.entity
global-config:
db-config:
id-type: ASSIGN_ID
......@@ -59,7 +59,7 @@ swagger:
title: API接口文档
description: Api Documentation
version: 1.0.0
basePackage: cn.datax.service.data.market.api.mapping.controller
basePackage: cn.datax.service.data.market.mapping.controller
termsOfServiceUrl: http://www.baidu.com
contact:
name: yuwei
......
......@@ -13,25 +13,18 @@ spring:
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
datasource:
dynamic:
primary: mysql
datasource:
mysql:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://localhost:3306/data_cloud?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
primary:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 1234@abcd
url: jdbc:mysql://localhost:3306/data_cloud?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
quartz:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/data_cloud_quartz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 1234@abcd
url: jdbc:mysql://localhost:3306/data_cloud_quartz?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
quartz:
job-store-type: jdbc
auto-startup: true
startup-delay: 0
wait-for-jobs-to-complete-on-shutdown: true
overwrite-existing-jobs: false
jdbc:
initialize-schema: never
properties:
......@@ -47,10 +40,9 @@ spring:
isClustered: true
clusterCheckinInterval: 1000
useProperties: false
misfireThreshold: 5000
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 20
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -25,6 +25,9 @@ public class ExecuteConfig implements Serializable {
@NotNull(message = "配置方式不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String configType;
@ApiModelProperty(value = "数据库表主键")
private String tableId;
@ApiModelProperty(value = "数据库表")
private String tableName;
......
......@@ -14,7 +14,7 @@ public class FieldParam implements Serializable {
/**
* 列名
*/
private String colName;
private String columnName;
/**
* 数据类型
......@@ -39,17 +39,17 @@ public class FieldParam implements Serializable {
/**
* 是否主键
*/
private Boolean colKey;
private String columnKey;
/**
* 是否允许为空
*/
private Boolean nullable;
private String columnNullable;
/**
* 列的序号
*/
private Integer colPosition;
private Integer columnPosition;
/**
* 列默认值
......@@ -59,15 +59,15 @@ public class FieldParam implements Serializable {
/**
* 列注释
*/
private String colComment;
private String columnComment;
/**
* 作为请求参数
*/
private Boolean reqable;
private String reqable;
/**
* 作为返回参数
*/
private Boolean resable;
private String resable;
}
......@@ -25,7 +25,7 @@ public class ReqParam implements Serializable {
@ApiModelProperty(value = "描述")
@NotBlank(message = "描述不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String remark;
private String paramComment;
@ApiModelProperty(value = "操作符")
@NotNull(message = "操作符不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
......
......@@ -21,7 +21,7 @@ public class ResParam implements Serializable {
@ApiModelProperty(value = "描述")
@NotBlank(message = "描述不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String remark;
private String fieldComment;
@ApiModelProperty(value = "数据类型")
@NotNull(message = "数据类型不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
......
......@@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<version>2.0.0</version>
<artifactId>data-market-service-api-mapping</artifactId>
<artifactId>data-market-service-mapping</artifactId>
<dependencies>
<!--web 模块-->
......
package cn.datax.service.data.market.api.mapping;
package cn.datax.service.data.market.mapping;
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", "cn.datax.service.data.market.api.feign"})
@EnableFeignClients(basePackages = {"cn.datax.service.system.api.feign", "cn.datax.service.data.metadata.api.feign", "cn.datax.service.data.market.api.feign"})
@SpringCloudApplication
public class DataxApiMappingApplication {
public class DataxMappingApplication {
public static void main(String[] args) {
SpringApplication.run(DataxApiMappingApplication.class);
SpringApplication.run(DataxMappingApplication.class);
}
}
package cn.datax.service.data.market.api.mapping.config;
package cn.datax.service.data.market.mapping.config;
import cn.datax.service.data.market.api.mapping.handler.MappingHandlerMapping;
import cn.datax.service.data.market.api.mapping.handler.RequestHandler;
import cn.datax.service.data.market.api.mapping.handler.RequestInterceptor;
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.mapping.handler.MappingHandlerMapping;
import cn.datax.service.data.market.mapping.handler.RequestHandler;
import cn.datax.service.data.market.mapping.handler.RequestInterceptor;
import cn.datax.service.data.market.mapping.service.ApiLogService;
import cn.datax.service.data.market.mapping.service.impl.ApiMappingEngine;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
......
package cn.datax.service.data.market.api.mapping.config;
package cn.datax.service.data.market.mapping.config;
import cn.datax.common.security.handler.DataAccessDeniedHandler;
import cn.datax.common.security.handler.DataAuthExceptionEntryPoint;
......
package cn.datax.service.data.market.api.mapping.config;
package cn.datax.service.data.market.mapping.config;
import cn.datax.common.rabbitmq.config.RabbitMqConstant;
import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.market.api.mapping.service.QueueHandlerService;
import cn.datax.service.data.market.mapping.service.QueueHandlerService;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
......
package cn.datax.service.data.market.api.mapping.config;
package cn.datax.service.data.market.mapping.config;
import cn.datax.service.data.market.api.entity.DataApiEntity;
import cn.datax.service.data.market.api.feign.DataApiServiceFeign;
import cn.datax.service.data.market.api.mapping.handler.MappingHandlerMapping;
import cn.datax.service.data.market.mapping.handler.MappingHandlerMapping;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
......
package cn.datax.service.data.market.api.mapping.config;
package cn.datax.service.data.market.mapping.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.beans.factory.annotation.Autowired;
......
package cn.datax.service.data.market.api.mapping.controller;
package cn.datax.service.data.market.mapping.controller;
import cn.datax.common.base.BaseController;
import cn.datax.common.core.R;
import cn.datax.service.data.market.api.mapping.service.ApiExecuteService;
import cn.datax.service.data.market.mapping.service.ApiExecuteService;
import cn.datax.service.data.market.api.vo.ApiHeader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
......
package cn.datax.service.data.market.api.mapping.controller;
package cn.datax.service.data.market.mapping.controller;
import cn.datax.common.base.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
......
package cn.datax.service.data.market.api.mapping.dao;
package cn.datax.service.data.market.mapping.dao;
import cn.datax.common.base.BaseDao;
import cn.datax.service.data.market.api.entity.ApiLogEntity;
......
package cn.datax.service.data.market.api.mapping.factory;
package cn.datax.service.data.market.mapping.factory;
import cn.datax.service.data.market.api.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.mapping.factory.crypto.Crypto;
public abstract class AbstractFactory {
......
package cn.datax.service.data.market.api.mapping.factory;
package cn.datax.service.data.market.mapping.factory;
import cn.datax.service.data.market.api.enums.AlgorithmCrypto;
import cn.datax.service.data.market.api.mapping.factory.crypto.AlgorithmRegistry;
import cn.datax.service.data.market.api.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.mapping.factory.crypto.AlgorithmRegistry;
import cn.datax.service.data.market.mapping.factory.crypto.Crypto;
public class AlgorithmFactory extends AbstractFactory {
......
package cn.datax.service.data.market.api.mapping.factory;
package cn.datax.service.data.market.mapping.factory;
import cn.datax.service.data.market.api.enums.RegexCrypto;
import cn.datax.service.data.market.api.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.api.mapping.factory.crypto.RegexRegistry;
import cn.datax.service.data.market.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.mapping.factory.crypto.RegexRegistry;
public class RegexFactory extends AbstractFactory {
......
package cn.datax.service.data.market.api.mapping.handler;
package cn.datax.service.data.market.mapping.handler;
import cn.datax.common.core.DataConstant;
import cn.datax.common.core.R;
......@@ -6,9 +6,9 @@ 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.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.datax.service.data.market.mapping.service.ApiLogService;
import cn.datax.service.data.market.mapping.service.impl.ApiMappingEngine;
import cn.datax.service.data.market.mapping.utils.ThreadUtil;
import cn.hutool.core.map.MapUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
......
package cn.datax.service.data.market.api.mapping.handler;
package cn.datax.service.data.market.mapping.handler;
import cn.datax.common.core.DataConstant;
import cn.datax.common.core.R;
......@@ -7,7 +7,7 @@ import cn.datax.common.utils.MD5Util;
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.ParamType;
import cn.datax.service.data.market.api.mapping.utils.ThreadUtil;
import cn.datax.service.data.market.mapping.utils.ThreadUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
......
package cn.datax.service.data.market.api.mapping.mapstruct;
package cn.datax.service.data.market.mapping.mapstruct;
import cn.datax.common.mapstruct.EntityMapper;
import cn.datax.service.data.market.api.dto.ApiLogDto;
......
package cn.datax.service.data.market.api.mapping.service.impl;
package cn.datax.service.data.market.mapping.service.impl;
import cn.datax.common.utils.MD5Util;
import cn.datax.common.utils.SecurityUtil;
import cn.datax.common.utils.ThrowableUtil;
import cn.datax.service.data.market.api.mapping.service.ApiExecuteService;
import cn.datax.service.data.market.mapping.service.ApiExecuteService;
import cn.datax.service.data.market.api.vo.ApiHeader;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......
package cn.datax.service.data.market.api.mapping.service.impl;
package cn.datax.service.data.market.mapping.service.impl;
import cn.datax.common.base.BaseServiceImpl;
import cn.datax.service.data.market.api.dto.ApiLogDto;
import cn.datax.service.data.market.api.entity.ApiLogEntity;
import cn.datax.service.data.market.api.mapping.dao.ApiLogDao;
import cn.datax.service.data.market.api.mapping.mapstruct.ApiLogMapper;
import cn.datax.service.data.market.api.mapping.service.ApiLogService;
import cn.datax.service.data.market.mapping.dao.ApiLogDao;
import cn.datax.service.data.market.mapping.mapstruct.ApiLogMapper;
import cn.datax.service.data.market.mapping.service.ApiLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
......
package cn.datax.service.data.market.api.mapping.service.impl;
package cn.datax.service.data.market.mapping.service.impl;
import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery;
......@@ -11,10 +11,10 @@ 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;
import cn.datax.service.data.market.api.feign.ApiMaskServiceFeign;
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.market.mapping.factory.AbstractFactory;
import cn.datax.service.data.market.mapping.factory.FactoryProducer;
import cn.datax.service.data.market.mapping.factory.crypto.Crypto;
import cn.datax.service.data.market.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;
......
package cn.datax.service.data.market.api.mapping.service.impl;
package cn.datax.service.data.market.mapping.service.impl;
import cn.datax.service.data.market.api.entity.DataApiEntity;
import cn.datax.service.data.market.api.feign.DataApiServiceFeign;
import cn.datax.service.data.market.api.mapping.handler.MappingHandlerMapping;
import cn.datax.service.data.market.api.mapping.service.QueueHandlerService;
import cn.datax.service.data.market.mapping.handler.MappingHandlerMapping;
import cn.datax.service.data.market.mapping.service.QueueHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......
package cn.datax.service.data.market.api.mapping.utils;
package cn.datax.service.data.market.mapping.utils;
import cn.datax.service.data.market.api.dto.ReqParam;
import cn.datax.service.data.market.api.enums.WhereType;
......
......@@ -3,7 +3,7 @@ server:
spring:
application:
name: datax-service-data-api-mapping
name: datax-service-data-mapping
profiles:
active: dev
cloud:
......
......@@ -2,6 +2,7 @@ package cn.datax.service.data.market.service.impl;
import cn.datax.commo.office.word.WordUtil;
import cn.datax.common.core.DataConstant;
import cn.datax.common.core.R;
import cn.datax.common.exception.DataException;
import cn.datax.common.rabbitmq.config.RabbitMqConstant;
import cn.datax.common.utils.MD5Util;
......@@ -20,6 +21,9 @@ 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 com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
......@@ -46,6 +50,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
......@@ -71,6 +76,9 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private ObjectMapper objectMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveDataApi(DataApiDto dataApiDto) {
......@@ -268,16 +276,16 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
// 请求参数 TableStart:ReqParamList TableEnd:ReqParamList
DataTable reqParamTable = new DataTable("ReqParamList");
reqParamTable.getColumns().add("paramName");
reqParamTable.getColumns().add("remark");
reqParamTable.getColumns().add("paramComment");
reqParamTable.getColumns().add("paramType");
reqParamTable.getColumns().add("nullable");
reqParamTable.getColumns().add("exampleValue");
List<ReqParam> reqParamList = dataApiEntity.getReqParams();
List<ReqParam> reqParamList = objectMapper.convertValue(dataApiEntity.getReqParams(), new TypeReference<List<ReqParam>>() {});
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(1, param.getParamComment());
row.set(2, param.getParamType());
row.set(3, "1".equals(param.getNullable()) ? "Y" : "N");
row.set(4, param.getExampleValue());
......@@ -288,19 +296,26 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
DataTable resParamTable = new DataTable("ResParamList");
resParamTable.getColumns().add("fieldName");
resParamTable.getColumns().add("dataType");
resParamTable.getColumns().add("remark");
resParamTable.getColumns().add("fieldComment");
resParamTable.getColumns().add("exampleValue");
List<ResParam> resParamList = dataApiEntity.getResParams();
List<ResParam> resParamList = objectMapper.convertValue(dataApiEntity.getResParams(), new TypeReference<List<ResParam>>() {});
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(2, param.getFieldComment());
row.set(3, param.getExampleValue());
resParamTable.getRows().add(row);
}
mailMerge.executeWithRegions(resParamTable);
// 返回示例 reqExample resExample
ObjectNode objectNode = objectMapper.createObjectNode();
for (int i = 0; i < resParamList.size(); i++) {
ResParam param = resParamList.get(i);
objectNode.put(param.getFieldName(), param.getExampleValue());
}
mailMerge.execute(new String[] {"reqExample", "resExample"}, new Object[] {objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(R.ok().setData(new LinkedList<ObjectNode>(){{add(objectNode);}})), objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(R.error("返回失败"))});
WordUtil.getInstance().insertWatermarkText(doc, SecurityUtil.getUserName());
return doc;
}
......
......@@ -16,6 +16,6 @@
<modules>
<module>data-market-service</module>
<module>data-market-service-api</module>
<module>data-market-service-api-mapping</module>
<module>data-market-service-mapping</module>
</modules>
</project>
\ No newline at end of file
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -53,6 +53,12 @@
<groupId>cn.datax</groupId>
<artifactId>datax-common-mybatis</artifactId>
<version>2.0.0</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
......
package cn.datax.service.quartz.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
/**
* 定时任务数据源配置
*/
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties("spring.datasource.primary")
public DataSourceProperties primaryDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("spring.datasource.primary.configuration")
public HikariDataSource firstDataSource() {
return primaryDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
@Bean
@ConfigurationProperties("spring.datasource.quartz")
public DataSourceProperties quartzDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@QuartzDataSource
@ConfigurationProperties("spring.datasource.quartz.configuration")
public HikariDataSource quartzDataSource() {
return quartzDataSourceProperties().initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
}
}
package cn.datax.service.quartz.config;
import cn.datax.service.quartz.quartz.utils.ScheduleUtil;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import lombok.AllArgsConstructor;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Configuration
@AllArgsConstructor
public class SchedulerConfig {
private final DataSource dataSource;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
// 手动从多数据源中获取 quartz数据源
DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
DataSource quartz = ds.getDataSource("quartz");
factory.setDataSource(quartz);
return factory;
}
// /**
// * 该类主要是为了把 job 对象的注入到 spring 中
// */
// @Component("quartzJobFactory")
// public static class QuartzJobFactory extends AdaptableJobFactory {
// //这个对象可以通过 ApplicationContext.getAutowireCapableBeanFactory()获取
// private final AutowireCapableBeanFactory capableBeanFactory;
//
// public QuartzJobFactory(AutowireCapableBeanFactory capableBeanFactory) {
// this.capableBeanFactory = capableBeanFactory;
// }
// /**
// * Job 对象的实例化过程是在Quartz中进行的,通过重写此方法 把job 实例注入到spring容器中
// */
// @Override
// protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// //调用父类的方法
// Object jobInstance = super.createJobInstance(bundle);
// //注入到spring容器
// capableBeanFactory.autowireBean(jobInstance);
// return jobInstance;
// }
// }
// /**
// * 注入scheduler到spring
// * @param quartzJobFactory
// * @return Scheduler
// * @throws Exception
// */
// @Bean(name = "scheduler")
// public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception {
// SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
// factoryBean.setJobFactory(quartzJobFactory);
// factoryBean.setDataSource(quartzDataSource());
// factoryBean.afterPropertiesSet();
// Scheduler scheduler = factoryBean.getScheduler();
// scheduler.start();
// // 设置ScheduleUtil的定时处理对象
// ScheduleUtil.setScheduler(scheduler);
// return scheduler;
// }
/**
* 注入scheduler到spring
* @param factoryBean
* @return Scheduler
* @throws Exception
*/
@Bean(name = "scheduler")
public Scheduler scheduler() throws SchedulerException {
Scheduler scheduler = schedulerFactoryBean().getScheduler();
public Scheduler scheduler(SchedulerFactoryBean factoryBean) throws Exception {
Scheduler scheduler = factoryBean.getScheduler();
scheduler.start();
// 设置ScheduleUtil的定时处理对象
ScheduleUtil.setScheduler(scheduler);
......
#
# Quartz seems to work best with the driver mm.mysql-2.0.7-bin.jar
#
# PLEASE consider using mysql with innodb tables to avoid locking issues
#
# In your Quartz properties file, you'll need to set
# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;
CREATE TABLE QRTZ_JOB_DETAILS
(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_NONCONCURRENT VARCHAR(1) NOT NULL,
IS_UPDATE_DATA VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
NEXT_FIRE_TIME BIGINT(13) NULL,
PREV_FIRE_TIME BIGINT(13) NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(16) NOT NULL,
TRIGGER_TYPE VARCHAR(8) NOT NULL,
START_TIME BIGINT(13) NOT NULL,
END_TIME BIGINT(13) NULL,
CALENDAR_NAME VARCHAR(200) NULL,
MISFIRE_INSTR SMALLINT(2) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_SIMPLE_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
REPEAT_COUNT BIGINT(7) NOT NULL,
REPEAT_INTERVAL BIGINT(12) NOT NULL,
TIMES_TRIGGERED BIGINT(10) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CRON_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
CRON_EXPRESSION VARCHAR(200) NOT NULL,
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512) NULL,
STR_PROP_2 VARCHAR(512) NULL,
STR_PROP_3 VARCHAR(512) NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 VARCHAR(1) NULL,
BOOL_PROP_2 VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_BLOB_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CALENDARS
(
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_FIRED_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
FIRED_TIME BIGINT(13) NOT NULL,
SCHED_TIME BIGINT(13) NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(16) NOT NULL,
JOB_NAME VARCHAR(200) NULL,
JOB_GROUP VARCHAR(200) NULL,
IS_NONCONCURRENT VARCHAR(1) NULL,
REQUESTS_RECOVERY VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);
CREATE TABLE QRTZ_SCHEDULER_STATE
(
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
CHECKIN_INTERVAL BIGINT(13) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);
CREATE TABLE QRTZ_LOCKS
(
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);
commit;
......@@ -17,21 +17,6 @@
<artifactId>knife4j-micro-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger2</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-bean-validators</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-swagger-ui</artifactId>-->
<!-- <version>${swagger2.version}</version>-->
<!-- </dependency>-->
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
......
......@@ -98,12 +98,12 @@
</el-select>
</el-form-item>
<el-form-item label="数据库表" prop="tableName" v-if="form2.configType === '1'">
<el-select v-model="form2.tableName" placeholder="请选择数据库表" @change="tableNameSelectChanged">
<el-select v-model="form2.table" value-key="id" placeholder="请选择数据库表" @change="tableSelectChanged">
<el-option
v-for="item in tableNameOptions"
:key="item.tableName"
:label="item.tableComment"
:value="item.tableName">
v-for="item in tableOptions"
:key="item.id"
:label="item.tableComment ? item.tableComment : item.tableName"
:value="item">
</el-option>
</el-select>
</el-form-item>
......@@ -111,9 +111,9 @@
<el-table :data="form2.fieldParams" stripe border
:max-height="300"
style="width: 100%; margin: 15px 0;">
<el-table-column prop="colPosition" label="序号" width="55" align="center" >
<el-table-column prop="columnPosition" label="序号" width="55" align="center" >
</el-table-column>
<el-table-column prop="colName" label="列名" align="center" show-overflow-tooltip >
<el-table-column prop="columnName" label="列名" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" show-overflow-tooltip >
</el-table-column>
......@@ -123,30 +123,30 @@
</el-table-column>
<el-table-column prop="dataScale" label="数据小数位" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colKey" label="是否主键" align="center" show-overflow-tooltip >
<el-table-column prop="columnKey" label="是否主键" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.colKey === true"></span>
<span v-if="scope.row.colKey === false"></span>
<span v-if="scope.row.columnKey === '1'">Y</span>
<span v-if="scope.row.columnKey === '0'">N</span>
</template>
</el-table-column>
<el-table-column prop="nullable" label="是否允许为空" align="center" show-overflow-tooltip >
<el-table-column prop="columnNullable" label="是否允许为空" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.nullable === true"></span>
<span v-if="scope.row.nullable === false"></span>
<span v-if="scope.row.columnNullable === '1'">Y</span>
<span v-if="scope.row.columnNullable === '0'">N</span>
</template>
</el-table-column>
<el-table-column prop="dataDefault" label="列默认值" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colComment" label="列注释" align="center" show-overflow-tooltip >
<el-table-column prop="columnComment" label="列注释" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="reqable" label="是否作为请求参数" align="center" width="50" >
<template slot-scope="scope">
<el-checkbox v-model="scope.row.reqable" @change="checked=>reqCheckChange(scope.row, checked)"></el-checkbox>
<el-checkbox v-model="scope.row.reqable" true-label="1" false-label="0" @change="checked=>reqCheckChange(scope.row, checked)"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="resable" label="是否作为返回参数" align="center" width="50" >
<template slot-scope="scope">
<el-checkbox v-model="scope.row.resable" @change="checked=>resCheckChange(scope.row, checked)"></el-checkbox>
<el-checkbox v-model="scope.row.resable" true-label="1" false-label="0" @change="checked=>resCheckChange(scope.row, checked)"></el-checkbox>
</template>
</el-table-column>
</el-table>
......@@ -182,7 +182,7 @@
<el-checkbox v-model="scope.row.nullable" true-label="1" false-label="0"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="remark" label="描述" align="center" show-overflow-tooltip >
<el-table-column prop="paramComment" label="描述" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip >
<template slot-scope="scope">
......@@ -230,7 +230,7 @@
</el-table-column>
<el-table-column prop="fieldName" label="字段名称" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="remark" label="描述" align="center" show-overflow-tooltip >
<el-table-column prop="fieldComment" label="描述" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" show-overflow-tooltip >
</el-table-column>
......@@ -250,7 +250,9 @@
<script>
import { addDataApi, sqlParse } from '@/api/market/dataapi'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/metadata/datasource'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn'
import SqlEditor from '@/components/SqlEditor'
export default {
......@@ -328,6 +330,7 @@ export default {
form2: {
configType: undefined,
sourceId: undefined,
tableId: undefined,
tableName: undefined,
fieldParams: [],
sqlText: undefined
......@@ -355,7 +358,7 @@ export default {
// 数据源数据字典
sourceOptions: [],
// 数据库表数据字典
tableNameOptions: [],
tableOptions: [],
// 配置方式数据字典
configTypeOptions: [],
// 操作符数据字典
......@@ -437,10 +440,12 @@ export default {
this.form2.sqlText = val
},
configTypeSelectChanged (val) {
if (this.form2.configType === '1' && this.form2.sourceId && this.tableNameOptions.length <= 0) {
getDbTables(this.form2.sourceId).then(response => {
if (this.form2.configType === '1' && this.form2.sourceId && this.tableOptions.length <= 0) {
let data = {}
data.sourceId = this.form2.sourceId
listDataTable(data).then(response => {
if (response.success) {
this.tableNameOptions = response.data
this.tableOptions = response.data
this.form2.fieldParams = []
}
})
......@@ -448,16 +453,23 @@ export default {
},
sourceSelectChanged (val) {
if (this.form2.configType && this.form2.configType === '1') {
getDbTables(val).then(response => {
let data = {}
data.sourceId = val
listDataTable(data).then(response => {
if (response.success) {
this.tableNameOptions = response.data
this.tableOptions = response.data
this.form2.fieldParams = []
}
})
}
},
tableNameSelectChanged (val) {
getDbTableColumns(this.form2.sourceId, val).then(response => {
tableSelectChanged (item) {
let data = {}
data.sourceId = item.sourceId
data.tableId = item.id
this.form2.tableId = item.id
this.form2.tableName = item.tableName
listDataColumn(data).then(response => {
if (response.success) {
this.form2.fieldParams = response.data
this.form3.reqParams = []
......@@ -497,25 +509,25 @@ export default {
})
},
reqCheckChange (row, checked) {
if (checked) {
if (checked === '1') {
let json = {}
json.paramName = row.colName
json.remark = row.colComment || undefined
json.paramName = row.columnName
json.paramComment = row.columnComment || undefined
json.nullable = '0'
this.form3.reqParams.push(json)
} else {
this.form3.reqParams.splice(this.form3.reqParams.findIndex(item => item.paramName === row.colName), 1)
this.form3.reqParams.splice(this.form3.reqParams.findIndex(item => item.paramName === row.columnName), 1)
}
},
resCheckChange (row, checked) {
if (checked) {
if (checked === '1') {
let json = {}
json.fieldName = row.colName
json.remark = row.colComment || undefined
json.fieldName = row.columnName
json.fieldComment = row.columnComment || undefined
json.dataType = row.dataType || undefined
this.form3.resParams.push(json)
} else {
this.form3.resParams.splice(this.form3.resParams.findIndex(item => item.fieldName === row.colName), 1)
this.form3.resParams.splice(this.form3.resParams.findIndex(item => item.fieldName === row.columnName), 1)
}
},
/** 提交按钮 */
......@@ -550,7 +562,7 @@ export default {
this.loadingOptions.isDisabled = false
}
}).catch(error => {
this.$message.error(error.data.msg || '保存失败')
this.$message.error(error || '保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
......
......@@ -99,12 +99,12 @@
</el-select>
</el-form-item>
<el-form-item label="数据库表" prop="tableName" v-if="form2.configType === '1'">
<el-select v-model="form2.tableName" placeholder="请选择数据库表">
<el-select v-model="form2.table" value-key="id" placeholder="请选择数据库表">
<el-option
v-for="item in tableNameOptions"
:key="item.tableName"
:label="item.tableComment"
:value="item.tableName">
v-for="item in tableOptions"
:key="item.id"
:label="item.tableComment ? item.tableComment : item.tableName"
:value="item">
</el-option>
</el-select>
</el-form-item>
......@@ -112,9 +112,9 @@
<el-table :data="form2.fieldParams" stripe border
:max-height="300"
style="width: 100%; margin: 15px 0;">
<el-table-column prop="colPosition" label="序号" width="55" align="center" >
<el-table-column prop="columnPosition" label="序号" width="55" align="center" >
</el-table-column>
<el-table-column prop="colName" label="列名" align="center" show-overflow-tooltip >
<el-table-column prop="columnName" label="列名" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" show-overflow-tooltip >
</el-table-column>
......@@ -124,30 +124,30 @@
</el-table-column>
<el-table-column prop="dataScale" label="数据小数位" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colKey" label="是否主键" align="center" show-overflow-tooltip >
<el-table-column prop="columnKey" label="是否主键" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.colKey === true"></span>
<span v-if="scope.row.colKey === false"></span>
<span v-if="scope.row.columnKey === '1'">Y</span>
<span v-if="scope.row.columnKey === '0'">N</span>
</template>
</el-table-column>
<el-table-column prop="nullable" label="是否允许为空" align="center" show-overflow-tooltip >
<el-table-column prop="columnNullable" label="是否允许为空" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.nullable === true"></span>
<span v-if="scope.row.nullable === false"></span>
<span v-if="scope.row.columnNullable === '1'">Y</span>
<span v-if="scope.row.columnNullable === '0'">N</span>
</template>
</el-table-column>
<el-table-column prop="dataDefault" label="列默认值" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colComment" label="列注释" align="center" show-overflow-tooltip >
<el-table-column prop="columnComment" label="列注释" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="reqable" label="是否作为请求参数" align="center" width="50" >
<template slot-scope="scope">
<el-checkbox v-model="scope.row.reqable"></el-checkbox>
<el-checkbox v-model="scope.row.reqable" true-label="1" false-label="0"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="resable" label="是否作为返回参数" align="center" width="50" >
<template slot-scope="scope">
<el-checkbox v-model="scope.row.resable"></el-checkbox>
<el-checkbox v-model="scope.row.resable" true-label="1" false-label="0"></el-checkbox>
</template>
</el-table-column>
</el-table>
......@@ -180,7 +180,7 @@
<el-checkbox v-model="scope.row.nullable" true-label="1" false-label="0"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="remark" label="描述" align="center" show-overflow-tooltip >
<el-table-column prop="paramComment" label="描述" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip >
<template slot-scope="scope">
......@@ -222,7 +222,7 @@
</el-table-column>
<el-table-column prop="fieldName" label="字段名称" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="remark" label="描述" align="center" show-overflow-tooltip >
<el-table-column prop="fieldComment" label="描述" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" show-overflow-tooltip >
</el-table-column>
......@@ -239,7 +239,9 @@
<script>
import { getDataApi, word } from '@/api/market/dataapi'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/metadata/datasource'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn'
import SqlEditor from '@/components/SqlEditor'
export default {
......@@ -311,6 +313,7 @@ export default {
form2: {
configType: undefined,
sourceId: undefined,
tableId: undefined,
tableName: undefined,
fieldParams: [],
sqlText: undefined
......@@ -338,7 +341,7 @@ export default {
// 数据源数据字典
sourceOptions: [],
// 数据库表数据字典
tableNameOptions: [],
tableOptions: [],
// 配置方式数据字典
configTypeOptions: [],
// 操作符数据字典
......@@ -416,10 +419,11 @@ export default {
}
}) || {}
this.form2 = this.form1.executeConfig
this.form2.table = {id: this.form2.tableId}
this.form3.reqParams = this.form1.reqParams
this.form3.resParams = this.form1.resParams
if (this.form2.configType === '1') {
this.tableNameOptions = await getDbTables(this.form2.sourceId).then(response => {
this.tableOptions = await listDataTable({sourceId: this.form2.sourceId}).then(response => {
if (response.success) {
return response.data
}
......
......@@ -144,13 +144,15 @@
icon="el-icon-copy-document"
@click="handleCopy(scope.row)"
>拷贝</el-button>
<el-button v-if="scope.row.status !== '2'"
<el-button
:disabled="scope.row.status === '2'"
size="mini"
type="text"
icon="el-icon-upload2"
@click="handleRegister(scope.row)"
>发布</el-button>
<el-button v-if="scope.row.status === '2'"
<el-button
:disabled="scope.row.status !== '2'"
size="mini"
type="text"
icon="el-icon-download"
......
......@@ -13,7 +13,7 @@
@node-click="handleNodeClick"
></el-tree>
</el-col>
<el-col :span="20">
<el-col :span="20" style="border-left: 2px solid #aaa;">
<el-form :model="queryParams" ref="queryForm" :inline="true">
<el-form-item label="字段名称" prop="columnName">
<el-input
......
......@@ -44,30 +44,6 @@
v-hasPerm="['scheduler:job:detail']"
>详情</el-button>
<el-button
type="info"
icon="el-icon-view"
size="mini"
:disabled="single"
@click="handlePause"
v-hasPerm="['scheduler:job:pause']"
>暂停任务</el-button>
<el-button
type="info"
icon="el-icon-view"
size="mini"
:disabled="single"
@click="handleResume"
v-hasPerm="['scheduler:job:resume']"
>恢复任务</el-button>
<el-button
type="info"
icon="el-icon-view"
size="mini"
:disabled="single"
@click="handleRun"
v-hasPerm="['scheduler:job:run']"
>立即执行任务</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
......@@ -163,6 +139,7 @@
v-hasPerm="['scheduler:job:detail']"
>详情</el-button>
<el-button
:disabled="scope.row.status !== '1'"
size="mini"
type="text"
icon="el-icon-view"
......@@ -170,6 +147,7 @@
v-hasPerm="['scheduler:job:pause']"
>暂停任务</el-button>
<el-button
:disabled="scope.row.status === '1'"
size="mini"
type="text"
icon="el-icon-view"
......
<template>
<div>
<el-card class="box-card" shadow="always">
<el-row :gutter="20">
<el-col :span="4">
<el-card class="box-card" shadow="always">
<el-tree
:data="deptOptions"
default-expand-all
......@@ -12,10 +12,8 @@
:props="defaultProps"
@node-click="handleNodeClick"
></el-tree>
</el-card>
</el-col>
<el-col :span="20">
<el-card class="box-card" shadow="always">
<el-col :span="20" style="border-left: 2px solid #aaa;">
<el-form :model="queryParams" ref="queryForm" :inline="true">
<el-form-item label="用户名称" prop="username">
<el-input
......@@ -194,9 +192,9 @@
:page-size.sync="queryParams.pageSize"
:total="total"
></el-pagination>
</el-card>
</el-col>
</el-row>
</el-card>
</div>
</template>
......
......@@ -26,9 +26,9 @@
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<spring-boot.version>2.2.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
<spring-boot-admin.version>2.2.3</spring-boot-admin.version>
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR7</spring-cloud.version>
<spring-boot-admin.version>2.2.4</spring-boot-admin.version>
<fastjson.version>1.2.73</fastjson.version>
<hutool.version>5.3.10</hutool.version>
......
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