map = new HashMap<>(8);
while (rs.next()) {
@@ -70,6 +67,13 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide
property.setUrl(url);
map.put(name, property);
}
+
+ // 添加默认主数据源
+ DataSourceProperty property = new DataSourceProperty();
+ property.setUsername(properties.getUsername());
+ property.setPassword(properties.getPassword());
+ property.setUrl(properties.getUrl());
+ map.put(DataSourceConstants.DS_MASTER, property);
return map;
}
}
diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/support/DataSourceConstants.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/support/DataSourceConstants.java
index 3d23df3e8..07a34ea62 100644
--- a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/support/DataSourceConstants.java
+++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/support/DataSourceConstants.java
@@ -7,16 +7,17 @@ package com.pig4cloud.pigx.common.datasource.support;
* 数据源相关常量
*/
public interface DataSourceConstants {
- /**
- * 查询数据源的SQL
- */
- String QUERY_DS_SQL = "select * from gen_datasource_conf where del_flag = 0";
/**
* 数据源名称
*/
String DS_NAME = "name";
+ /**
+ * 默认数据源(master)
+ */
+ String DS_MASTER = "master";
+
/**
* jdbcurl
*/
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
index 7e81e44bd..443b22b73 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
@@ -20,7 +20,6 @@ package com.pig4cloud.pigx.common.job;
import com.pig4cloud.pigx.common.job.properties.XxlJobProperties;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@@ -35,7 +34,6 @@ import org.springframework.context.annotation.Configuration;
@ComponentScan("com.pig4cloud.pigx.common.job.properties")
public class XxlJobAutoConfiguration {
- @Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties) {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses());
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/ConcurrentDateFormat.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/ConcurrentDateFormat.java
deleted file mode 100644
index b0063b674..000000000
--- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/util/ConcurrentDateFormat.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the pig4cloud.com developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: lengleng (wangiegie@gmail.com)
- */
-
-package com.pig4cloud.pigx.common.security.util;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Queue;
-import java.util.TimeZone;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-/**
- * 参考tomcat8中的并发DateFormat
- *
- * {@link SimpleDateFormat}的线程安全包装器。
- * 不使用ThreadLocal,创建足够的SimpleDateFormat对象来满足并发性要求。
- *
- * @author L.cm
- */
-public class ConcurrentDateFormat {
- private final String format;
- private final Locale locale;
- private final TimeZone timezone;
- private final Queue queue = new ConcurrentLinkedQueue<>();
-
- private ConcurrentDateFormat(String format, Locale locale, TimeZone timezone) {
- this.format = format;
- this.locale = locale;
- this.timezone = timezone;
- SimpleDateFormat initial = createInstance();
- queue.add(initial);
- }
-
- public static ConcurrentDateFormat of(String format) {
- return new ConcurrentDateFormat(format, Locale.getDefault(), TimeZone.getDefault());
- }
-
- public static ConcurrentDateFormat of(String format, TimeZone timezone) {
- return new ConcurrentDateFormat(format, Locale.getDefault(), timezone);
- }
-
- public static ConcurrentDateFormat of(String format, Locale locale, TimeZone timezone) {
- return new ConcurrentDateFormat(format, locale, timezone);
- }
-
- public String format(Date date) {
- SimpleDateFormat sdf = queue.poll();
- if (sdf == null) {
- sdf = createInstance();
- }
- String result = sdf.format(date);
- queue.add(sdf);
- return result;
- }
-
- public Date parse(String source) throws ParseException {
- SimpleDateFormat sdf = queue.poll();
- if (sdf == null) {
- sdf = createInstance();
- }
- Date result = sdf.parse(source);
- queue.add(sdf);
- return result;
- }
-
- private SimpleDateFormat createInstance() {
- SimpleDateFormat sdf = new SimpleDateFormat(format, locale);
- sdf.setTimeZone(timezone);
- return sdf;
- }
-}
diff --git a/pigx-common/pigx-common-sequence/src/main/java/com/pig4cloud/pigx/common/sequence/range/BizName.java b/pigx-common/pigx-common-sequence/src/main/java/com/pig4cloud/pigx/common/sequence/range/BizName.java
index 93ef9ec9b..04d0ba57a 100644
--- a/pigx-common/pigx-common-sequence/src/main/java/com/pig4cloud/pigx/common/sequence/range/BizName.java
+++ b/pigx-common/pigx-common-sequence/src/main/java/com/pig4cloud/pigx/common/sequence/range/BizName.java
@@ -9,6 +9,8 @@ package com.pig4cloud.pigx.common.sequence.range;
public interface BizName {
/**
* 生成名称
+ *
+ * @return 返回文本序号
*/
String create();
diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java
index e715ffdde..a07a1c2c3 100644
--- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java
+++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java
@@ -25,8 +25,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
@@ -49,9 +51,9 @@ import java.util.List;
public class SwaggerAutoConfiguration {
/**
- * 默认的排除路径,排除Spring Boot默认的错误处理路径和端点
+ * 默认的排除路径,排除Spring Boot默认的错误处理路径和端点
*/
- private static final List DEFAULT_EXCLUDE_PATH = Arrays.asList("/error","/actuator/**");
+ private static final List DEFAULT_EXCLUDE_PATH = Arrays.asList("/error", "/actuator/**");
private static final String BASE_PATH = "/**";
@Bean
@@ -77,16 +79,26 @@ public class SwaggerAutoConfiguration {
List> excludePath = new ArrayList<>();
swaggerProperties.getExcludePath().forEach(path -> excludePath.add(PathSelectors.ant(path)));
+ // 版本请求头处理
+ ParameterBuilder versionPar = new ParameterBuilder();
+ List pars = new ArrayList<>();
+ versionPar.name("VERSION").description("灰度路由版本信息")
+ .modelRef(new ModelRef("string")).parameterType("header")
+ .required(false).build();
+ pars.add(versionPar.build());
+
//noinspection Guava
return new Docket(DocumentationType.SWAGGER_2)
- .host(swaggerProperties.getHost())
- .apiInfo(apiInfo(swaggerProperties)).select()
- .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
- .paths(Predicates.and(Predicates.not(Predicates.or(excludePath)), Predicates.or(basePath)))
- .build()
- .securitySchemes(Collections.singletonList(securitySchema()))
- .securityContexts(Collections.singletonList(securityContext()))
- .pathMapping("/");
+ .host(swaggerProperties.getHost())
+ .apiInfo(apiInfo(swaggerProperties))
+ .globalOperationParameters(pars)
+ .select()
+ .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
+ .paths(Predicates.and(Predicates.not(Predicates.or(excludePath)), Predicates.or(basePath)))
+ .build()
+ .securitySchemes(Collections.singletonList(securitySchema()))
+ .securityContexts(Collections.singletonList(securityContext()))
+ .pathMapping("/");
}
/**
@@ -96,9 +108,9 @@ public class SwaggerAutoConfiguration {
*/
private SecurityContext securityContext() {
return SecurityContext.builder()
- .securityReferences(defaultAuth())
- .forPaths(PathSelectors.regex(swaggerProperties().getAuthorization().getAuthRegex()))
- .build();
+ .securityReferences(defaultAuth())
+ .forPaths(PathSelectors.regex(swaggerProperties().getAuthorization().getAuthRegex()))
+ .build();
}
/**
@@ -111,9 +123,9 @@ public class SwaggerAutoConfiguration {
swaggerProperties().getAuthorization().getAuthorizationScopeList().forEach(authorizationScope -> authorizationScopeList.add(new AuthorizationScope(authorizationScope.getScope(), authorizationScope.getDescription())));
AuthorizationScope[] authorizationScopes = new AuthorizationScope[authorizationScopeList.size()];
return Collections.singletonList(SecurityReference.builder()
- .reference(swaggerProperties().getAuthorization().getName())
- .scopes(authorizationScopeList.toArray(authorizationScopes))
- .build());
+ .reference(swaggerProperties().getAuthorization().getName())
+ .scopes(authorizationScopeList.toArray(authorizationScopes))
+ .build());
}
@@ -127,14 +139,14 @@ public class SwaggerAutoConfiguration {
private ApiInfo apiInfo(SwaggerProperties swaggerProperties) {
return new ApiInfoBuilder()
- .title(swaggerProperties.getTitle())
- .description(swaggerProperties.getDescription())
- .license(swaggerProperties.getLicense())
- .licenseUrl(swaggerProperties.getLicenseUrl())
- .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
- .contact(new Contact(swaggerProperties.getContact().getName(), swaggerProperties.getContact().getUrl(), swaggerProperties.getContact().getEmail()))
- .version(swaggerProperties.getVersion())
- .build();
+ .title(swaggerProperties.getTitle())
+ .description(swaggerProperties.getDescription())
+ .license(swaggerProperties.getLicense())
+ .licenseUrl(swaggerProperties.getLicenseUrl())
+ .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
+ .contact(new Contact(swaggerProperties.getContact().getName(), swaggerProperties.getContact().getUrl(), swaggerProperties.getContact().getEmail()))
+ .version(swaggerProperties.getVersion())
+ .build();
}
}
diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/MenuTree.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/MenuTree.java
index 1bb3d0e23..f85261485 100644
--- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/MenuTree.java
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/MenuTree.java
@@ -87,6 +87,20 @@ public class MenuTree extends TreeNode implements Serializable {
public MenuTree() {
}
+ public MenuTree(int id, String name, int parentId) {
+ this.id = id;
+ this.parentId = parentId;
+ this.name = name;
+ this.label = name;
+ }
+
+ public MenuTree(int id, String name, MenuTree parent) {
+ this.id = id;
+ this.parentId = parent.getId();
+ this.name = name;
+ this.label = name;
+ }
+
public MenuTree(MenuVO menuVo) {
this.id = menuVo.getMenuId();
this.parentId = menuVo.getParentId();
@@ -94,9 +108,9 @@ public class MenuTree extends TreeNode implements Serializable {
this.name = menuVo.getName();
this.path = menuVo.getPath();
this.type = menuVo.getType();
+ this.permission = menuVo.getPermission();
this.label = menuVo.getName();
this.sort = menuVo.getSort();
- this.permission = menuVo.getPermission();
this.keepAlive = menuVo.getKeepAlive();
}
}
diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/TreeUtil.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/TreeUtil.java
index 28e65cd0b..8f6ad7d08 100644
--- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/TreeUtil.java
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/TreeUtil.java
@@ -112,13 +112,13 @@ public class TreeUtil {
node.setParentId(menu.getParentId());
node.setName(menu.getName());
node.setPath(menu.getPath());
+ node.setPermission(menu.getPermission());
node.setLabel(menu.getName());
node.setIcon(menu.getIcon());
node.setType(menu.getType());
node.setSort(menu.getSort());
node.setHasChildren(true);
node.setKeepAlive(menu.getKeepAlive());
- node.setPermission(menu.getPermission());
trees.add(node);
}
return TreeUtil.build(trees, root);
diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/mapper/GeneratorMapper.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/mapper/GeneratorMapper.java
index 5af04db55..6e5639d82 100755
--- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/mapper/GeneratorMapper.java
+++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/mapper/GeneratorMapper.java
@@ -48,6 +48,7 @@ public interface GeneratorMapper {
* 查询表信息
*
* @param tableName 表名称
+ * @param dsName 数据源名称
* @return
*/
@DS("#last")
@@ -57,6 +58,7 @@ public interface GeneratorMapper {
* 查询表列信息
*
* @param tableName 表名称
+ * @param dsName 数据源名称
* @return
*/
@DS("#last")
diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/GenUtils.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/GenUtils.java
index d5622a555..f1dae2987 100644
--- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/GenUtils.java
+++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/GenUtils.java
@@ -329,7 +329,7 @@ public class GenUtils {
if (template.contains(ELE_ADD_UPDATE_VUE_VM)) {
return CommonConstants.FRONT_END_PROJECT + File.separator + "src" + File.separator + "views"
+ File.separator + moduleName + File.separator + className.toLowerCase()
- + File.separator + moduleName + "-form.vue";
+ + File.separator + className.toLowerCase() + "-form.vue";
}
return null;
diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/avue/index.vue.vm b/pigx-visual/pigx-codegen/src/main/resources/template/avue/index.vue.vm
index 4272691ff..6c46c9ab1 100755
--- a/pigx-visual/pigx-codegen/src/main/resources/template/avue/index.vue.vm
+++ b/pigx-visual/pigx-codegen/src/main/resources/template/avue/index.vue.vm
@@ -118,6 +118,7 @@
},
searchChange(form, done) {
this.searchForm = form
+ this.page.currentPage = 1
this.getList(this.page, form)
done()
},