Commit 3f1ccf7f by yuwei

项目初始化

parent 74961873
...@@ -14,13 +14,13 @@ public class JsonPage<T> implements Serializable { ...@@ -14,13 +14,13 @@ public class JsonPage<T> implements Serializable {
private long pageNum; private long pageNum;
private long pageSize; private long pageSize;
private long totalPage; private long total;
private List<T> data; private List<T> data;
public JsonPage(long pageNum, long pageSize, long totalPage, List<T> data) { public JsonPage(long pageNum, long pageSize, long total, List<T> data) {
this.pageNum = pageNum; this.pageNum = pageNum;
this.pageSize = pageSize; this.pageSize = pageSize;
this.totalPage = totalPage; this.total = total;
this.data = data; this.data = data;
} }
} }
...@@ -17,6 +17,7 @@ public class AsyncTask { ...@@ -17,6 +17,7 @@ public class AsyncTask {
@Async("dataLogExecutor") @Async("dataLogExecutor")
public void doTask(LogDto logDto) { public void doTask(LogDto logDto) {
log.info("日志{}", logDto);
logServiceFeign.saveLog(logDto); logServiceFeign.saveLog(logDto);
} }
......
...@@ -55,6 +55,17 @@ spring: ...@@ -55,6 +55,17 @@ spring:
args: args:
name: fileFallback name: fileFallback
fallbackUri: forward:/fallback fallbackUri: forward:/fallback
# 数据工厂中心
- id: datax-service-data-factory
uri: lb://datax-service-data-factory
predicates:
- Path=/data/factory/**
filters:
- StripPrefix=1
- name: Hystrix
args:
name: dataFactoryFallback
fallbackUri: forward:/fallback
# 即时通讯中心 # 即时通讯中心
- id: datax-websocket-server - id: datax-websocket-server
uri: ws://localhost:9876 uri: ws://localhost:9876
......
# 数据源配置
spring:
redis:
database: 1
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
lettuce:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
datasource:
dynamic:
type: com.zaxxer.hikari.HikariDataSource
hikari:
auto-commit: false
connection-timeout: 30000
idle-timeout: 25000
login-timeout: 5
max-lifetime: 30000
read-only: false
validation-timeout: 3000
maximum-pool-size: 15
minimum-idle: 5
pool-name: DataxHikariCP
connection-test-query: SELECT 1 FROM DUAL
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
useLocalSessionState: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
cacheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: false
primary: mysql
datasource:
mysql:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://127.0.0.1:3306/data_cloud?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 1234@abcd
mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: cn.datax.service.data.factory.api.entity
global-config:
db-config:
id-type: ASSIGN_ID
banner: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# spring security 配置
security:
oauth2:
client:
access-token-uri: http://localhost:8612/auth/oauth/token
user-authorization-uri: http://localhost:8612/auth/oauth/authorize
client-id: datax
client-secret: 123456
scope: all
resource:
loadBalanced: true
token-info-uri: http://localhost:8612/auth/oauth/check_token
\ No newline at end of file
...@@ -40,7 +40,7 @@ mybatis-plus: ...@@ -40,7 +40,7 @@ mybatis-plus:
type-aliases-package: cn.datax.service.email.api.entity type-aliases-package: cn.datax.service.email.api.entity
global-config: global-config:
db-config: db-config:
id-type: ID_WORKER_STR id-type: ASSIGN_ID
banner: false banner: false
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
......
...@@ -40,7 +40,7 @@ mybatis-plus: ...@@ -40,7 +40,7 @@ mybatis-plus:
type-aliases-package: cn.datax.service.file.api.entity type-aliases-package: cn.datax.service.file.api.entity
global-config: global-config:
db-config: db-config:
id-type: ID_WORKER_STR id-type: ASSIGN_ID
banner: false banner: false
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
......
...@@ -51,7 +51,7 @@ mybatis-plus: ...@@ -51,7 +51,7 @@ mybatis-plus:
type-aliases-package: cn.datax.service.system.api.entity type-aliases-package: cn.datax.service.system.api.entity
global-config: global-config:
db-config: db-config:
id-type: ID_WORKER_STR id-type: ASSIGN_ID
banner: false banner: false
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
......
...@@ -51,7 +51,7 @@ mybatis-plus: ...@@ -51,7 +51,7 @@ mybatis-plus:
type-aliases-package: cn.datax.system.api.entity type-aliases-package: cn.datax.system.api.entity
global-config: global-config:
db-config: db-config:
id-type: ID_WORKER_STR id-type: ASSIGN_ID
banner: false banner: false
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
......
...@@ -11,5 +11,40 @@ ...@@ -11,5 +11,40 @@
<artifactId>data-factory-service-api</artifactId> <artifactId>data-factory-service-api</artifactId>
<dependencies>
<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>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-bootstrap.version}</version>
</dependency>
<!--feign 依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>datax-common-core</artifactId>
<version>${app.version}</version>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
package cn.datax.service.data.factory.api.dto;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "数据源连接信息Model")
@Data
public class DataSchemaDto implements Serializable {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "JDBC URL")
@NotBlank(message = "JDBC URL不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class})
private String jdbcUrl;
@ApiModelProperty(value = "用户名")
@NotBlank(message = "用户名不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class})
private String username;
@ApiModelProperty(value = "密码")
@NotBlank(message = "密码不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class})
private String password;
}
package cn.datax.service.data.factory.api.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class DataSchema implements Serializable {
private static final long serialVersionUID = 1L;
private String jdbcUrl;
private String username;
private String password;
}
...@@ -11,5 +11,72 @@ ...@@ -11,5 +11,72 @@
<artifactId>data-factory-service</artifactId> <artifactId>data-factory-service</artifactId>
<dependencies>
<!--web 模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--配置中心客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>datax-common-mybatis</artifactId>
<version>${app.version}</version>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>datax-common-redis</artifactId>
<version>${app.version}</version>
</dependency>
<dependency>
<groupId>cn.datax</groupId>
<artifactId>datax-common-security</artifactId>
<version>${app.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>cn.datax</groupId>-->
<!-- <artifactId>datax-common-log</artifactId>-->
<!-- <version>${app.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.datax</groupId>
<artifactId>data-factory-service-api</artifactId>
<version>${app.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project> </project>
\ No newline at end of file
package cn.datax.service.data.factory; package cn.datax.service.data.factory;
//import cn.datax.common.log.annotation.EnableDataLog;
import cn.datax.common.mybatis.annotation.EnableDataMybatis;
import cn.datax.common.redis.annotation.EnableDataRedis;
import cn.datax.common.security.annotation.EnableDataSecurity;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@EnableDataSecurity
@EnableDataMybatis
@EnableDataRedis
//@EnableDataLog
@EnableFeignClients
@ComponentScan(basePackages = {"cn.datax"})
@SpringCloudApplication @SpringCloudApplication
public class DataFactoryApplication { public class DataFactoryApplication {
......
package cn.datax.service.data.factory.config;
import cn.datax.common.security.handler.DataAccessDeniedHandler;
import cn.datax.common.security.handler.DataAuthExceptionEntryPoint;
import cn.datax.common.security.utils.DataRedisTokenServices;
import cn.datax.common.security.utils.RedisTokenStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class DataResourceServerConfig extends ResourceServerConfigurerAdapter {
@Autowired
private DataAccessDeniedHandler accessDeniedHandler;
@Autowired
private DataAuthExceptionEntryPoint exceptionEntryPoint;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public TokenStore redisTokenStore() {
return new RedisTokenStore(redisConnectionFactory);
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
DataRedisTokenServices dataTokenServices = new DataRedisTokenServices();
dataTokenServices.setTokenStore(redisTokenStore());
resources
.tokenStore(redisTokenStore())
.tokenServices(dataTokenServices)
.authenticationEntryPoint(exceptionEntryPoint)
.accessDeniedHandler(accessDeniedHandler);
}
@Override
public void configure(HttpSecurity http) throws Exception {
//允许使用iframe 嵌套,避免swagger-ui 不被加载的问题
http.headers().frameOptions().disable();
http.authorizeRequests()
.antMatchers(
"/actuator/**",
"/v2/api-docs/**",
"/swagger-ui.html",
"/doc.html",
"/swagger-resources/**",
"/webjars/**",
// feign 内部调用不用授权
"/inner/**"
).permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
package cn.datax.service.data.factory.config;
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
import springfox.documentation.builders.*;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.Parameter;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class SwaggerConfig {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
*
* @return
*/
@Bean
public Docket createRestApi(){
//版本类型是swagger2
return new Docket(DocumentationType.SWAGGER_2)
//通过调用自定义方法apiInfo,获得文档的主要信息
.apiInfo(apiInfo())
//设置全局参数
.globalOperationParameters(globalParamBuilder())
//设置全局响应参数
.globalResponseMessage(RequestMethod.GET,responseBuilder())
.globalResponseMessage(RequestMethod.POST,responseBuilder())
.globalResponseMessage(RequestMethod.PUT,responseBuilder())
.globalResponseMessage(RequestMethod.DELETE,responseBuilder())
.select()
.apis(RequestHandlerSelectors.basePackage("cn.datax.service.data.factory.controller"))//扫描该包下面的API注解
.paths(PathSelectors.any())
.build()
//设置安全认证
.securitySchemes(security());
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("数据工厂管理中心") //接口管理文档首页显示
.description("数据工厂管理中心接口文档") //API的描述
.version("1.0")
.build();
}
/**
* 安全认证参数
* @return
*/
private List<ApiKey> security() {
List<ApiKey> apiKeys = new ArrayList<>();
apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeys;
}
/**
* 构建全局参数列表
* @return
*/
private List<Parameter> globalParamBuilder(){
List<Parameter> pars = new ArrayList<>();
pars.add(parameterBuilder("Authorization","令牌","string","header",false).build());
return pars;
}
/**
* 创建参数
* @return
*/
private ParameterBuilder parameterBuilder(String name, String desc, String type, String parameterType, boolean required) {
ParameterBuilder tokenPar = new ParameterBuilder();
tokenPar.name(name).description(desc).modelRef(new ModelRef(type)).parameterType(parameterType).required(required).build();
return tokenPar;
}
/**
* 创建全局响应值
* @return
*/
private List<ResponseMessage> responseBuilder() {
List<ResponseMessage> responseMessageList = new ArrayList<>();
responseMessageList.add(new ResponseMessageBuilder().code(200).message("响应成功").build());
responseMessageList.add(new ResponseMessageBuilder().code(500).message("服务器内部错误").build());
return responseMessageList;
}
}
package cn.datax.service.data.factory.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 org.mapstruct.Mapper;
/**
* <p>
* 数据源信息表 Mapper 实体映射
* </p>
*
* @author yuwei
* @since 2020-03-14
*/
@Mapper(componentModel = "spring")
public interface DataSourceMapper extends EntityMapper<DataSourceDto, DataSourceEntity, DataSourceVo> {
}
server:
port: 8813
spring:
application:
name: datax-service-data-factory
profiles:
active: dev
cloud:
config:
fail-fast: true
name: ${spring.application.name}
profile: ${spring.profiles.active}
discovery:
enabled: true
service-id: datax-config
# 注册中心配置
eureka:
instance:
lease-renewal-interval-in-seconds: 20
client:
register-with-eureka: true
fetch-registry: true
instance-info-replication-interval-seconds: 30
registry-fetch-interval-seconds: 3
service-url:
defaultZone: http://localhost:8610/eureka
\ No newline at end of file
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,batch,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
# 开启过滤
filter=true
# 配置不打印的内容
exclude=select 1
\ No newline at end of file
...@@ -27,4 +27,7 @@ public class DeptDto implements Serializable { ...@@ -27,4 +27,7 @@ public class DeptDto implements Serializable {
@NotBlank(message = "部门名称不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class}) @NotBlank(message = "部门名称不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class})
private String deptName; private String deptName;
@ApiModelProperty(value = "部门编码")
@NotBlank(message = "部门编码不能为空", groups = {ValidateGroupForSave.class, ValidateGroupForUpdate.class})
private String deptNo;
} }
...@@ -32,4 +32,11 @@ public class DeptEntity extends BaseEntity { ...@@ -32,4 +32,11 @@ public class DeptEntity extends BaseEntity {
*/ */
private String deptName; private String deptName;
/**
* 一级:10
* 二级:10 001、10 002
* 三级:10 001 001、10 001 002、10 002 001
* 部门编码(数据权限优化查询速度 like '10001%')
*/
private String deptNo;
} }
...@@ -17,4 +17,5 @@ public class DeptVo implements Serializable { ...@@ -17,4 +17,5 @@ public class DeptVo implements Serializable {
private LocalDateTime createTime; private LocalDateTime createTime;
private String parentId; private String parentId;
private String deptName; private String deptName;
private String deptNo;
} }
...@@ -54,6 +54,7 @@ public class UserController extends BaseController { ...@@ -54,6 +54,7 @@ public class UserController extends BaseController {
private UserMapper userMapper; private UserMapper userMapper;
@LogAop(module = "datax-service-system", value = "根据id获取用户详细信息") @LogAop(module = "datax-service-system", value = "根据id获取用户详细信息")
@PreAuthorize("hasAuthority('system:user:query')")
@ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息") @ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}") @GetMapping("/{id}")
...@@ -112,7 +113,6 @@ public class UserController extends BaseController { ...@@ -112,7 +113,6 @@ public class UserController extends BaseController {
return R.ok(); return R.ok();
} }
@PreAuthorize("hasAuthority('user:delete')")
@ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象") @ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path") @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<result column="update_time" property="updateTime" /> <result column="update_time" property="updateTime" />
<result column="parent_id" property="parentId" /> <result column="parent_id" property="parentId" />
<result column="dept_name" property="deptName" /> <result column="dept_name" property="deptName" />
<result column="dept_no" property="deptNo" />
<result column="status" property="status" /> <result column="status" property="status" />
</resultMap> </resultMap>
...@@ -21,7 +22,7 @@ ...@@ -21,7 +22,7 @@
create_time, create_time,
update_by, update_by,
update_time, update_time,
parent_id, dept_name, status parent_id, dept_name, dept_no, status
</sql> </sql>
<sql id="Dept_Column_List"> <sql id="Dept_Column_List">
...@@ -30,7 +31,7 @@ ...@@ -30,7 +31,7 @@
${alias}.create_time, ${alias}.create_time,
${alias}.update_by, ${alias}.update_by,
${alias}.update_time, ${alias}.update_time,
${alias}.parent_id, ${alias}.dept_name, ${alias}.status ${alias}.parent_id, ${alias}.dept_name, ${alias}.dept_no, ${alias}.status
</sql> </sql>
</mapper> </mapper>
...@@ -54,9 +54,9 @@ public class Generate { ...@@ -54,9 +54,9 @@ public class Generate {
// 包配置 // 包配置
PackageConfig pc = new PackageConfig(); PackageConfig pc = new PackageConfig();
pc.setParent("cn.datax.service"); pc.setParent("cn.datax.service.data");
// 父包模块名 // 父包模块名
pc.setModuleName("system"); pc.setModuleName("factory");
pc.setMapper("dao"); pc.setMapper("dao");
mpg.setPackageInfo(pc); mpg.setPackageInfo(pc);
...@@ -65,7 +65,7 @@ public class Generate { ...@@ -65,7 +65,7 @@ public class Generate {
@Override @Override
public void initMap() { public void initMap() {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("PackageParent", "cn.datax.service"); map.put("PackageParent", "cn.datax.service.data");
this.setMap(map); this.setMap(map);
} }
}; };
...@@ -84,31 +84,31 @@ public class Generate { ...@@ -84,31 +84,31 @@ public class Generate {
focList.add(new FileOutConfig("/templates/entity.java.vm") { focList.add(new FileOutConfig("/templates/entity.java.vm") {
@Override @Override
public String outputFile(TableInfo tableInfo) { public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/java/"+ "cn.datax.service".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/entity/" + tableInfo.getEntityName() + StringPool.DOT_JAVA; return projectPath + "/src/main/java/"+ "cn.datax.service.data".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/entity/" + tableInfo.getEntityName() + StringPool.DOT_JAVA;
} }
}); });
focList.add(new FileOutConfig("/templates/mapstruct.java.vm") { focList.add(new FileOutConfig("/templates/mapstruct.java.vm") {
@Override @Override
public String outputFile(TableInfo tableInfo) { public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/java/"+ "cn.datax.service".replace(".", File.separator) + File.separator + pc.getModuleName() + "/mapstruct/" + tableInfo.getEntityName().replace("Entity", "Mapper") + StringPool.DOT_JAVA; return projectPath + "/src/main/java/"+ "cn.datax.service.data".replace(".", File.separator) + File.separator + pc.getModuleName() + "/mapstruct/" + tableInfo.getEntityName().replace("Entity", "Mapper") + StringPool.DOT_JAVA;
} }
}); });
focList.add(new FileOutConfig("/templates/dto.java.vm") { focList.add(new FileOutConfig("/templates/dto.java.vm") {
@Override @Override
public String outputFile(TableInfo tableInfo) { public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/java/"+ "cn.datax.service".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/dto/" + tableInfo.getEntityName().replace("Entity", "Dto") + StringPool.DOT_JAVA; return projectPath + "/src/main/java/"+ "cn.datax.service.data".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/dto/" + tableInfo.getEntityName().replace("Entity", "Dto") + StringPool.DOT_JAVA;
} }
}); });
focList.add(new FileOutConfig("/templates/vo.java.vm") { focList.add(new FileOutConfig("/templates/vo.java.vm") {
@Override @Override
public String outputFile(TableInfo tableInfo) { public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/java/"+ "cn.datax.service".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/vo/" + tableInfo.getEntityName().replace("Entity", "Vo") + StringPool.DOT_JAVA; return projectPath + "/src/main/java/"+ "cn.datax.service.data".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/vo/" + tableInfo.getEntityName().replace("Entity", "Vo") + StringPool.DOT_JAVA;
} }
}); });
focList.add(new FileOutConfig("/templates/query.java.vm") { focList.add(new FileOutConfig("/templates/query.java.vm") {
@Override @Override
public String outputFile(TableInfo tableInfo) { public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/java/"+ "cn.datax.service".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/query/" + tableInfo.getEntityName().replace("Entity", "Query") + StringPool.DOT_JAVA; return projectPath + "/src/main/java/"+ "cn.datax.service.data".replace(".", File.separator) + File.separator + pc.getModuleName() + "/api/query/" + tableInfo.getEntityName().replace("Entity", "Query") + StringPool.DOT_JAVA;
} }
}); });
/* /*
...@@ -152,9 +152,9 @@ public class Generate { ...@@ -152,9 +152,9 @@ public class Generate {
strategy.setSuperServiceImplClass("cn.datax.common.base.BaseServiceImpl"); strategy.setSuperServiceImplClass("cn.datax.common.base.BaseServiceImpl");
strategy.setSuperMapperClass("cn.datax.common.base.BaseDao"); strategy.setSuperMapperClass("cn.datax.common.base.BaseDao");
strategy.setControllerMappingHyphenStyle(true); strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("sys_"); // strategy.setTablePrefix("data_");
// strategy.setInclude(new String[]{"sys_user", "sys_role", "sys_dept", "sys_menu", "sys_post", "sys_user_role", "sys_user_dept", "sys_user_post", "sys_role_menu"}); // strategy.setInclude(new String[]{"sys_user", "sys_role", "sys_dept", "sys_menu", "sys_post", "sys_user_role", "sys_user_dept", "sys_user_post", "sys_role_menu"});
strategy.setInclude(new String[]{"sys_user"}); strategy.setInclude(new String[]{"data_source"});
mpg.setStrategy(strategy); mpg.setStrategy(strategy);
mpg.setTemplateEngine(new VelocityTemplateEngine()); mpg.setTemplateEngine(new VelocityTemplateEngine());
...@@ -168,11 +168,11 @@ public class Generate { ...@@ -168,11 +168,11 @@ public class Generate {
* @param parentName 包名 * @param parentName 包名
* @param tableNames 表名 * @param tableNames 表名
*/ */
private void generateByTables(String moduleName, String parentName, List<String> tableNames) { private void generateByTables(String projectPath,String moduleName, String parentName, List<String> tableNames) {
//配置数据源 //配置数据源
DataSourceConfig dataSourceConfig = getDataSourceConfig(); DataSourceConfig dataSourceConfig = getDataSourceConfig();
//全局变量配置 //全局变量配置
GlobalConfig globalConfig = getGlobalConfig(); GlobalConfig globalConfig = getGlobalConfig(projectPath);
//包名配置 //包名配置
PackageConfig packageConfig = getPackageConfig(moduleName, parentName); PackageConfig packageConfig = getPackageConfig(moduleName, parentName);
// 策略配置 // 策略配置
...@@ -302,7 +302,7 @@ public class Generate { ...@@ -302,7 +302,7 @@ public class Generate {
* *
* @return GlobalConfig * @return GlobalConfig
*/ */
private GlobalConfig getGlobalConfig() { private GlobalConfig getGlobalConfig(String projectPath) {
return new GlobalConfig() return new GlobalConfig()
//是否打开输出目录 //是否打开输出目录
.setOpen(false) .setOpen(false)
...@@ -320,7 +320,7 @@ public class Generate { ...@@ -320,7 +320,7 @@ public class Generate {
//指定生成的主键的ID类型 //指定生成的主键的ID类型
.setIdType(IdType.ASSIGN_ID) .setIdType(IdType.ASSIGN_ID)
//设置输出路径 //设置输出路径
.setOutputDir(System.getProperty("user.dir") + "/src/main/java/") .setOutputDir(projectPath + "/src/main/java/")
.setEntityName("%sEntity") .setEntityName("%sEntity")
.setMapperName("%sDao") .setMapperName("%sDao")
.setXmlName("%sMapper") .setXmlName("%sMapper")
......
package ${cfg.PackageParent}#if(${package.ModuleName}).${package.ModuleName}#end.api.vo; package ${cfg.PackageParent}#if(${package.ModuleName}).${package.ModuleName}#end.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -20,6 +21,7 @@ public class ${className}Vo implements Serializable { ...@@ -20,6 +21,7 @@ public class ${className}Vo implements Serializable {
private String id; private String id;
private Integer status; private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime; private LocalDateTime createTime;
## ---------- BEGIN 字段循环遍历 ---------- ## ---------- BEGIN 字段循环遍历 ----------
......
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