Compare commits
22 Commits
v1.1.6
...
full-lates
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4784a8d991 | ||
|
|
2c1297430b | ||
|
|
9de02903aa | ||
|
|
0fad018101 | ||
|
|
55ca2a2e43 | ||
|
|
d5300d4d76 | ||
|
|
802972abd2 | ||
|
|
57d560b9ec | ||
|
|
26c0f83bad | ||
|
|
e8394fac8e | ||
|
|
6769fdaa59 | ||
|
|
f5d32c6114 | ||
|
|
bdeab06d6c | ||
|
|
6f24c765ff | ||
|
|
b31104112c | ||
|
|
888a2106de | ||
|
|
feebc250d7 | ||
|
|
efa2538736 | ||
|
|
8b1fb129ce | ||
|
|
c28b7a7585 | ||
|
|
abcec4c846 | ||
|
|
2c66ad1b1a |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -61,3 +61,10 @@ rebel.xml
|
||||
# 忽略office文件打开临时文件 #
|
||||
[~$]*.*
|
||||
tmlog.lck
|
||||
/.metadata/
|
||||
zyplayer-doc-data/bin
|
||||
zyplayer-doc-api/bin
|
||||
zyplayer-doc-core/bin
|
||||
zyplayer-doc-data/src/main/java/com/zyplayer/.metadata/
|
||||
zyplayer-doc-db/bin/
|
||||
zyplayer-doc-wiki/bin/
|
||||
44
README.md
44
README.md
@@ -1,5 +1,15 @@
|
||||
<p align="center">
|
||||
<img src="https://gitee.com/dromara/zyplayer-doc/raw/master/zyplayer-doc-other/resource/logo.png">
|
||||
</p>
|
||||
|
||||
<h1 align="center">zyplayer-doc</h1>
|
||||
|
||||
<p align="center">专注于私有化部署的在线知识库管理平台</p>
|
||||
|
||||
# 项目简介
|
||||
zyplayer-doc是一款适合团队和个人使用的WIKI文档管理工具,同时还包含数据库文档、Api接口文档。
|
||||
zyplayer-doc是一款适合团队和个人私有化部署使用的WIKI文档管理工具,同时还包含数据库管理、Api接口管理等模块。
|
||||
|
||||
适合作为公司内部或个人的知识库、笔记、文档管理工具,将文档发布成对外可访问的形式,可作为公司的产品文档、帮助文档等。
|
||||
|
||||
体验地址:[http://zyplayer.com](http://zyplayer.com)
|
||||
|
||||
@@ -10,32 +20,50 @@ zyplayer-doc是一款适合团队和个人使用的WIKI文档管理工具,同
|
||||
欢迎加入微信群与我们一起交流
|
||||
> 微信群员超过限制只能加好友拉进群,添加微信好友,回复:`加群` 即可
|
||||
|
||||

|
||||

|
||||
|
||||
# 快速启动
|
||||
## 相关依赖
|
||||
启动本系统仅依赖JAVA和MySQL
|
||||
- JAVA 1.8+
|
||||
- MySQL 5.7.x
|
||||
- MySQL 5.7.x、8.x
|
||||
|
||||
建表SQL脚本无需手动执行,每次启动或更新之后都会检查当前版本,然后自动执行升级SQL脚本,所以每次有版本更新需求只需要下载最新版本启动即可,无需其他特殊操作
|
||||
数据库安装成功后,需要您**手动创建**一个库:`zyplayer_doc`
|
||||
|
||||
```sql
|
||||
-- 建库语句
|
||||
create database zyplayer_doc;
|
||||
```
|
||||
|
||||
> 建表SQL脚本无需手动执行,每次启动或更新之后都会检查当前版本,然后自动执行升级SQL脚本,所以每次有版本更新需求只需要下载最新版本启动即可,无需其他特殊操作
|
||||
|
||||
## 宝塔面板一键部署
|
||||
- 安装宝塔面板,前往[宝塔面板](https://www.bt.cn/u/2OCdV3)官网,选择对应的脚本下载安装,宝塔版本:`9.2.0+`
|
||||
- 登录宝塔面板,在菜单栏中点击 Docker,根据提示安装 Docker 和 Docker Compose 服务,若已有则跳过
|
||||
- 在Docker-应用商店查询到 zyplayer-doc,点击安装
|
||||
- 设置域名等基本信息,点击确定
|
||||
- 提交后面板会自动进行应用初始化,大概需要1-5分钟,初始化完成后即可访问。
|
||||

|
||||
|
||||
## Main方法启动
|
||||
1. 修改`zyplayer-doc/zyplayer-doc-manage/src/main/resources/application.yml`配置文件里面的数据库账号密码
|
||||
1. 修改`zyplayer-doc-manage/src/main/resources/application.yml`配置文件里面的数据库账号密码
|
||||
2. 执行`com.zyplayer.doc.manage.Application.main`方法启动项目
|
||||
|
||||
## JAR方式启动
|
||||
1. 直接下载:直接下载编译好的jar打包文件,编译后的最新版可到[在线文档](http://doc.zyplayer.com)右上角去下载
|
||||
1. 直接下载:直接下载编译好的jar打包文件,编译后的最新版可到 [发行版下载处](https://gitee.com/dromara/zyplayer-doc/releases) 去下载
|
||||
2. 自行编译:也可以自己动手编译,双击执行:`zyplayer-doc\build.bat`,将使用maven编译整个项目为可执行的jar文件,编译结果文件放在:`zyplayer-doc\dist\version`文件夹下
|
||||
3. 修改第一步或第二步结果文件夹下的`application.yml`文件里面数据库帐号密码
|
||||
4. 双击第一步或第二步结果文件夹下的`startup.bat`启动项目
|
||||
|
||||
## Tomcat容器启动
|
||||
1. 直接下载编译好的war打包文件,编译后的最新版可到[在线文档](http://doc.zyplayer.com)右上角去下载
|
||||
1. 直接下载编译好的war打包文件,编译后的最新版可到 [发行版下载处](https://gitee.com/dromara/zyplayer-doc/releases) 去下载
|
||||
2. 修改配置文件:`zyplayer-doc.zip\apache-tomcat\webapps\zyplayer-doc\WEB-INF\classes\application.yml`配置文件里面的数据库账号密码
|
||||
3. 双击`tomcat\bin\startup.bat`启动即可
|
||||
|
||||
启动后访问:[http://127.0.0.1:8083/zyplayer-doc](http://127.0.0.1:8083/zyplayer-doc) ,默认登录账号: **zyplayer** 密码: **123456**
|
||||
## 其他
|
||||
更多启动方式请参考文档:[项目下载与部署](http://doc.zyplayer.com/#/integrate/zyplayer-doc/opensource/279)
|
||||
|
||||
启动后访问:[http://127.0.0.1:8083](http://127.0.0.1:8083) ,默认登录账号: **zyplayer** 密码: **123456**
|
||||
|
||||
# 各模块介绍
|
||||
## zyplayer-doc-manage 文档管理后台
|
||||
|
||||
@@ -20,6 +20,7 @@ md %target_dir%
|
||||
|
||||
copy zyplayer-doc-manage\target\zyplayer-doc.jar %target_dir%
|
||||
copy zyplayer-doc-manage\src\main\resources\application.yml %target_dir%
|
||||
copy zyplayer-doc-manage\src\main\resources\application_pg.yml %target_dir%
|
||||
|
||||
xcopy /e /y /q zyplayer-doc-other\script %target_dir%
|
||||
|
||||
|
||||
5
pom.xml
5
pom.xml
@@ -166,6 +166,11 @@
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.6.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>1.17.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.zyplayer</groupId>
|
||||
<artifactId>zyplayer-doc-core</artifactId>
|
||||
|
||||
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/doc/auth")
|
||||
public class ApiDocAuthController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiDocAuthController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiDocAuthController.class);
|
||||
|
||||
@Resource
|
||||
UserAuthService userAuthService;
|
||||
@@ -93,7 +93,7 @@ public class ApiDocAuthController {
|
||||
if (CollectionUtils.isNotEmpty(userModuleAuthList)) {
|
||||
UserAuth userAuth = userModuleAuthList.remove(0);
|
||||
// 错误数据兼容移除
|
||||
if (userModuleAuthList.size() > 0) {
|
||||
if (!userModuleAuthList.isEmpty()) {
|
||||
List<Long> authIdList = userModuleAuthList.stream().map(UserAuth::getId).collect(Collectors.toList());
|
||||
userAuthService.removeByIds(authIdList);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ import java.util.Objects;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/doc")
|
||||
public class ApiDocumentController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiDocumentController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiDocumentController.class);
|
||||
|
||||
@Resource
|
||||
ApiDocAuthJudgeService apiDocAuthJudgeService;
|
||||
|
||||
@@ -34,7 +34,7 @@ import java.util.Optional;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/global-param")
|
||||
public class ApiGlobalParamController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiGlobalParamController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiGlobalParamController.class);
|
||||
|
||||
@Resource
|
||||
private ApiGlobalParamService apiGlobalParamService;
|
||||
|
||||
@@ -30,7 +30,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/proxy")
|
||||
public class ApiPoxyRequestController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiPoxyRequestController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiPoxyRequestController.class);
|
||||
|
||||
@Resource
|
||||
ApiCustomNodeService apiCustomNodeService;
|
||||
|
||||
@@ -30,7 +30,7 @@ import java.util.List;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/request-param")
|
||||
public class ApiRequestParamController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiRequestParamController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiRequestParamController.class);
|
||||
|
||||
@Resource
|
||||
private ApiRequestParamService apiRequestParamService;
|
||||
|
||||
@@ -27,7 +27,7 @@ import java.util.Objects;
|
||||
@RestController
|
||||
@RequestMapping("/doc-api/share")
|
||||
public class ApiShareDocumentController {
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiShareDocumentController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiShareDocumentController.class);
|
||||
|
||||
@Resource
|
||||
private ApiDocService swaggerDocService;
|
||||
|
||||
@@ -42,15 +42,15 @@ import java.util.stream.Stream;
|
||||
*/
|
||||
@Service
|
||||
public class SwaggerHttpRequestService {
|
||||
private static Logger logger = LoggerFactory.getLogger(SwaggerHttpRequestService.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(SwaggerHttpRequestService.class);
|
||||
|
||||
@Resource
|
||||
private ApiGlobalParamService apiGlobalParamService;
|
||||
|
||||
private static final Map<String, Method> requestMethodMap = Stream.of(Method.values()).collect(Collectors.toMap(val -> val.name().toLowerCase(), val -> val));
|
||||
|
||||
List<String> domainHeaderKeys = Arrays.asList("referer", "origin");
|
||||
List<String> needRequestHeaderKeys = Arrays.asList("user-agent");
|
||||
final List<String> domainHeaderKeys = Arrays.asList("referer", "origin");
|
||||
final List<String> needRequestHeaderKeys = Collections.singletonList("user-agent");
|
||||
|
||||
/**
|
||||
* 请求真实的swagger文档内容
|
||||
@@ -72,13 +72,12 @@ public class SwaggerHttpRequestService {
|
||||
requestHeaders.put("host", SwaggerDocUtil.getDomainHost(docDomain));
|
||||
}
|
||||
// 执行请求
|
||||
String resultStr = HttpRequest.get(docUrl)
|
||||
return HttpRequest.get(docUrl)
|
||||
.form(globalFormParamMap)
|
||||
.addHeaders(requestHeaders)
|
||||
.header("Accept", "application/json, text/javascript, */*; q=0.01")
|
||||
.cookie(this.getHttpCookie(request, globalCookieParamMap, null))
|
||||
.timeout(10000).execute().body();
|
||||
return resultStr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,7 +175,7 @@ public class SwaggerHttpRequestService {
|
||||
multiResource.add(new BytesResource(file.getBytes(), file.getOriginalFilename()));
|
||||
}
|
||||
httpRequest.form(originKey, multiResource);
|
||||
} else if (fileList.size() > 0) {
|
||||
} else if (!fileList.isEmpty()) {
|
||||
MultipartFile multipartFile = fileList.get(0);
|
||||
httpRequest.form(originKey, multipartFile.getBytes(), multipartFile.getOriginalFilename());
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ public enum PageFileSource {
|
||||
PASTE_FILES(2, "页面粘贴的图片或文件"),
|
||||
;
|
||||
@Getter
|
||||
private Integer source;
|
||||
private final Integer source;
|
||||
@Getter
|
||||
private String desc;
|
||||
private final String desc;
|
||||
|
||||
PageFileSource(Integer source, String desc) {
|
||||
this.source = source;
|
||||
|
||||
@@ -15,8 +15,8 @@ public enum SystemConfigEnum {
|
||||
DOC_SYSTEM_VERSION("doc_system_version", "系统当前的版本号"),
|
||||
;
|
||||
|
||||
private String key;
|
||||
private String desc;
|
||||
private final String key;
|
||||
private final String desc;
|
||||
|
||||
SystemConfigEnum(String key, String desc) {
|
||||
this.key = key;
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.Objects;
|
||||
* @since 2018年8月21日
|
||||
*/
|
||||
public class DocResponseJson<T> implements ResponseJson<T> {
|
||||
private static SerializeConfig mapping = new SerializeConfig();
|
||||
private static final SerializeConfig mapping = new SerializeConfig();
|
||||
|
||||
static {
|
||||
mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
|
||||
@@ -134,7 +134,7 @@ public class DocResponseJson<T> implements ResponseJson<T> {
|
||||
* @since 2018年8月7日
|
||||
*/
|
||||
public static <T> DocResponseJson<T> warn(String errMsg) {
|
||||
return new DocResponseJson<T>(300, errMsg);
|
||||
return new DocResponseJson<>(300, errMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -145,7 +145,7 @@ public class DocResponseJson<T> implements ResponseJson<T> {
|
||||
* @since 2018年8月7日
|
||||
*/
|
||||
public static <T> DocResponseJson<T> error(String errMsg) {
|
||||
return new DocResponseJson<T>(500, errMsg);
|
||||
return new DocResponseJson<>(500, errMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,7 +156,7 @@ public class DocResponseJson<T> implements ResponseJson<T> {
|
||||
* @since 2018年8月7日
|
||||
*/
|
||||
public static <T> DocResponseJson<T> failure(int errCode, String errMsg) {
|
||||
return new DocResponseJson<T>(errCode, errMsg);
|
||||
return new DocResponseJson<>(errCode, errMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,10 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
import org.apache.ibatis.mapping.DatabaseIdProvider;
|
||||
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
|
||||
|
||||
import java.util.Properties;
|
||||
import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@@ -51,9 +54,21 @@ public class MybatisPlusConfig {
|
||||
@Bean(name = "manageSqlSessionFactory")
|
||||
public MybatisSqlSessionFactoryBean manageSqlSessionFactory() throws Exception {
|
||||
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
||||
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty("SQL Server", "sqlserver");
|
||||
properties.setProperty("DB2", "db2");
|
||||
properties.setProperty("Oracle", "oracle");
|
||||
properties.setProperty("MySQL", "mysql");
|
||||
properties.setProperty("PostgreSQL", "postgresql");
|
||||
properties.setProperty("Derby", "derby");
|
||||
properties.setProperty("HSQL", "hsqldb");
|
||||
properties.setProperty("H2", "h2");
|
||||
databaseIdProvider.setProperties(properties);
|
||||
sqlSessionFactoryBean.setDatabaseIdProvider(databaseIdProvider);
|
||||
sqlSessionFactoryBean.setDataSource(manageDatasource());
|
||||
sqlSessionFactoryBean.setPlugins(new SqlLogInterceptor(), paginationInterceptor);
|
||||
|
||||
|
||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/manage/*Mapper.xml"));
|
||||
return sqlSessionFactoryBean;
|
||||
|
||||
@@ -15,6 +15,7 @@ public class DocUserDetails {
|
||||
private Long userId;
|
||||
private String username;
|
||||
private String password;
|
||||
private String accessToken;
|
||||
private boolean enabled;
|
||||
private List<UserAuthInfo> userAuthList;
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ public class DocUserUtil {
|
||||
* 设置当前用户
|
||||
*/
|
||||
public static void setCurrentUser(String accessToken, DocUserDetails docUser) {
|
||||
docUser.setAccessToken(accessToken);
|
||||
DOC_USER_DETAILS.set(docUser);
|
||||
CacheUtil.put(accessToken, docUser);
|
||||
CacheUtil.put(CachePrefix.LOGIN_USER_ID_TOKEN + docUser.getUserId(), accessToken);
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
* 模板信息
|
||||
* </p>
|
||||
*
|
||||
* @author Sh1yu
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserInfo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.ResultType;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
@@ -19,15 +18,18 @@ import java.util.Map;
|
||||
*/
|
||||
public interface UserInfoMapper extends BaseMapper<UserInfo> {
|
||||
|
||||
@Select("show tables")
|
||||
@Select(value = "show tables")
|
||||
@Select(value = "SELECT table_name FROM information_schema.tables where table_schema = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<String> getTableList();
|
||||
|
||||
@Select("${sql}")
|
||||
List<String> executeSql(@Param("sql") String sql);
|
||||
|
||||
@Select("SHOW COLUMNS FROM ${tableName}")
|
||||
@Select(value = "SELECT * FROM information_schema.columns WHERE table_name = #{tableName} and table_schema = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<Map<String, Object>> getTableColumnList(@Param("tableName") String tableName);
|
||||
|
||||
@Select("SHOW INDEX FROM ${tableName}")
|
||||
@Select(value = "SELECT * FROM pg_catalog.pg_indexes WHERE tablename = #{tableName} and schemaname = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<Map<String, Object>> getTableIndexList(@Param("tableName") String tableName);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageZan;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.zyplayer.doc.data.repository.manage.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 模板与文档信息的Vo
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.zyplayer.doc.data.repository.manage.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -7,7 +7,7 @@ package com.zyplayer.doc.data.repository.support.consts;
|
||||
* @since 2020-06-26
|
||||
*/
|
||||
public class DocSysModuleType {
|
||||
public static enum Manage {
|
||||
public enum Manage {
|
||||
USER_MANAGE(1, "用户管理权限"),
|
||||
;
|
||||
|
||||
@@ -28,7 +28,7 @@ public class DocSysModuleType {
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Wiki {
|
||||
public enum Wiki {
|
||||
PAGE(1, "空间"),
|
||||
;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class DocSysModuleType {
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Db {
|
||||
public enum Db {
|
||||
DATASOURCE(1, "数据源管理"),
|
||||
;
|
||||
|
||||
@@ -70,7 +70,7 @@ public class DocSysModuleType {
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Api {
|
||||
public enum Api {
|
||||
DOC(1, "api文档管理"),
|
||||
;
|
||||
|
||||
|
||||
@@ -29,23 +29,19 @@ public class CodeGenerator {
|
||||
.dateType(DateType.ONLY_DATE)
|
||||
.fileOverride(); // 覆盖已生成文件
|
||||
})
|
||||
.packageConfig(builder -> {
|
||||
builder.parent("com.zyplayer.doc.data") // 设置父包名
|
||||
.moduleName("") // 设置父包模块名
|
||||
.controller("web.generator")
|
||||
.entity("repository.manage.entity")
|
||||
.mapper("repository.manage.mapper")
|
||||
.service("service.manage")
|
||||
.serviceImpl("service.manage.impl")
|
||||
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperDir));
|
||||
})
|
||||
.strategyConfig(builder -> {
|
||||
builder.addInclude(tableName) // 设置需要生成的表名
|
||||
.enableCapitalMode()
|
||||
.serviceBuilder()
|
||||
.formatServiceFileName("%sService")
|
||||
.formatServiceImplFileName("%sServiceImpl");
|
||||
})
|
||||
.packageConfig(builder -> builder.parent("com.zyplayer.doc.data") // 设置父包名
|
||||
.moduleName("") // 设置父包模块名
|
||||
.controller("web.generator")
|
||||
.entity("repository.manage.entity")
|
||||
.mapper("repository.manage.mapper")
|
||||
.service("service.manage")
|
||||
.serviceImpl("service.manage.impl")
|
||||
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperDir)))
|
||||
.strategyConfig(builder -> builder.addInclude(tableName) // 设置需要生成的表名
|
||||
.enableCapitalMode()
|
||||
.serviceBuilder()
|
||||
.formatServiceFileName("%sService")
|
||||
.formatServiceImplFileName("%sServiceImpl"))
|
||||
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
|
||||
.execute();
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class SqlLogInterceptor implements Interceptor {
|
||||
private String getParameterValue(Object obj) {
|
||||
String value = null;
|
||||
if (obj instanceof String) {
|
||||
value = "'" + obj.toString() + "'";
|
||||
value = "'" + obj + "'";
|
||||
} else if (obj instanceof Date) {
|
||||
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
|
||||
value = "'" + formatter.format(obj) + "'";
|
||||
@@ -87,7 +87,7 @@ public class SqlLogInterceptor implements Interceptor {
|
||||
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
|
||||
StringBuilder sqlSb = new StringBuilder(boundSql.getSql().replaceAll("[\\s]+", " "));
|
||||
int fromIndex = 0;
|
||||
if (parameterMappings.size() > 0 && parameterObject != null) {
|
||||
if (!parameterMappings.isEmpty() && parameterObject != null) {
|
||||
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
|
||||
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
|
||||
//sqlSb = sqlSb.replaceFirst("\\?", getParameterValue(parameterObject));
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomParams;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiDoc;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomDocVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.zyplayer.doc.data.service.manage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.DbTableRelation;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.param.TableRelationParam;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.TableRelationVo;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -20,5 +20,5 @@ public interface WikiPageService extends IService<WikiPage> {
|
||||
|
||||
void deletePage(WikiPage wikiPage);
|
||||
|
||||
public List<WikiPageTemplateInfoVo> wikiPageTemplateInfos(Long spaceId);
|
||||
List<WikiPageTemplateInfoVo> wikiPageTemplateInfos(Long spaceId);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package com.zyplayer.doc.data.service.manage;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -22,7 +20,7 @@ public interface WikiPageTemplateService extends IService<WikiPageTemplate> {
|
||||
/**
|
||||
* 根据模板的公开情况获取模板标签
|
||||
*/
|
||||
public List<WikiTemplateTagVo> getAllTags( Long user, boolean open);
|
||||
List<WikiTemplateTagVo> getAllTags(Long user, boolean open);
|
||||
|
||||
/**
|
||||
* 根据条件获取模板
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.*;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.ApiCustomNodeMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomDocVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomVo;
|
||||
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
|
||||
import com.zyplayer.doc.data.service.manage.ApiCustomNodeService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
@@ -32,7 +32,7 @@ public class UserAuthServiceImpl extends ServiceImpl<UserAuthMapper, UserAuth> i
|
||||
@Override
|
||||
public List<UserAuthInfo> getUserAuthSet(Long userId) {
|
||||
QueryWrapper<UserAuth> authWrapper = new QueryWrapper<>();
|
||||
authWrapper.eq("user_id", userId).eq("del_flag", "0");
|
||||
authWrapper.eq("user_id", userId).eq("del_flag", 0);
|
||||
List<UserAuth> userAuthList = this.list(authWrapper);
|
||||
if (CollectionUtils.isEmpty(userAuthList)) {
|
||||
return Collections.emptyList();
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Service
|
||||
public class WikiPageHistoryServiceImpl extends ServiceImpl<WikiPageHistoryMapper, WikiPageHistory> implements WikiPageHistoryService {
|
||||
private static Logger logger = LoggerFactory.getLogger(WikiPageHistoryServiceImpl.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(WikiPageHistoryServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public WikiPageHistory saveRecord(Long spaceId, Long pageId, String content) {
|
||||
|
||||
@@ -71,7 +71,8 @@ public class WikiPageServiceImpl extends ServiceImpl<WikiPageMapper, WikiPage> i
|
||||
userMessage.setAffectUserId(wikiPage.getCreateUserId());
|
||||
userMessage.setAffectUserName(wikiPage.getCreateUserName());
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
// 递归删除
|
||||
// 递归删除,名字不能修改
|
||||
wikiPage.setName(null);
|
||||
this.deletePageAndSon(wikiPage);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,7 @@ import java.util.List;
|
||||
public class WikiPageTemplateServiceImpl extends ServiceImpl<WikiPageTemplateMapper, WikiPageTemplate> implements WikiPageTemplateService {
|
||||
@Override
|
||||
public List<WikiTemplateTagVo> getAllTags(Long user, boolean open) {
|
||||
List<WikiTemplateTagVo> all = getBaseMapper().getAllTags(user,open);
|
||||
return all;
|
||||
return getBaseMapper().getAllTags(user,open);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,23 +31,20 @@ public class WikiPageTemplateServiceImpl extends ServiceImpl<WikiPageTemplateMap
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("space_id", spaceId);
|
||||
queryWrapper.eq("page_id", pageId);
|
||||
WikiPageTemplate template = getBaseMapper().selectOne(queryWrapper);
|
||||
return template;
|
||||
return getBaseMapper().selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WikiPageTemplateInfoVo> filterAll(Long user, String name, boolean open, List<String> tags, Long pageNum) {
|
||||
Long offset = 0L;
|
||||
long offset = 0L;
|
||||
if (null != pageNum && pageNum != 0L) {
|
||||
offset = (pageNum - 1) * 8;
|
||||
}
|
||||
List<WikiPageTemplateInfoVo> all = getBaseMapper().getAllTemplate(user, StringUtils.isBlank(name) ? null : "%" + name + "%", open, tags, offset);
|
||||
return all;
|
||||
return getBaseMapper().getAllTemplate(user, StringUtils.isBlank(name) ? null : "%" + name + "%", open, tags, offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long total(Long user, String name, boolean open, List<String> tags) {
|
||||
Long num = getBaseMapper().getAllTemplateCount(user, name, open, tags);
|
||||
return num;
|
||||
return getBaseMapper().getAllTemplateCount(user, name, open, tags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* @since 2019年05月25日
|
||||
*/
|
||||
public class CacheUtil {
|
||||
private static Logger logger = LoggerFactory.getLogger(CacheUtil.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(CacheUtil.class);
|
||||
|
||||
// 定期清除过期的key
|
||||
static {
|
||||
@@ -49,7 +49,7 @@ public class CacheUtil {
|
||||
}
|
||||
|
||||
// 现在是内存缓存,不支持分布式部署,后期考虑放到redis,但感觉也没必要。。
|
||||
private static Map<String, CacheData> cacheDataMap = new ConcurrentHashMap<>();
|
||||
private static final Map<String, CacheData> cacheDataMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 放入缓存,默认12小时,按最后一次访问的12小时
|
||||
|
||||
@@ -15,9 +15,9 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||
*/
|
||||
public class DruidDataSourceUtil {
|
||||
|
||||
private static AtomicLong nameId = new AtomicLong(0);
|
||||
private static final AtomicLong nameId = new AtomicLong(0);
|
||||
|
||||
public static DruidDataSource createDataSource(String driverClassName, String url, String username, String password, boolean breakAfterAcquireFailure) throws Exception {
|
||||
public static DruidDataSource createDataSource(String driverClassName, String url, String username, String password, boolean breakAfterAcquireFailure) {
|
||||
// 数据源配置
|
||||
DruidDataSource dataSource = new DruidDataSource();
|
||||
dataSource.setDriverClassName(driverClassName);
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.zyplayer.doc.data.utils;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class HtmlUtils {
|
||||
private static final Logger logger = LoggerFactory.getLogger(HtmlUtils.class);
|
||||
|
||||
/**
|
||||
* 从Content-Disposition头部提取文件名
|
||||
*
|
||||
* @param contentDisposition Content-Disposition头部字符串
|
||||
* @return 文件名,如果未找到则返回null
|
||||
*/
|
||||
public static String extractFilename(String contentDisposition, String defaultName) {
|
||||
if (StringUtils.isBlank(contentDisposition)) {
|
||||
return defaultName;
|
||||
}
|
||||
for (String name : contentDisposition.split(";")) {
|
||||
String[] nameArr = name.trim().split("=");
|
||||
if (nameArr.length >= 2 && StringUtils.startsWith(nameArr[0], "filename")) {
|
||||
return StringUtils.removeEnd(StringUtils.removeStart(nameArr[1].trim(), "\""), "\"");
|
||||
}
|
||||
}
|
||||
return defaultName;
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,12 @@
|
||||
set seq_no = b.rownum
|
||||
where a.parent_id = #{parentId} and a.space_id = #{spaceId};
|
||||
</update>
|
||||
<update id="updateChildrenSeq" databaseId="postgresql">
|
||||
WITH exceeded_wiki_page AS (
|
||||
select row_number() over() as rownum, * from wiki_page where parent_id = #{parentId} and space_id = #{spaceId} ORDER BY seq_no ASC, update_time DESC
|
||||
)
|
||||
UPDATE wiki_page SET seq_no = ewp.rownum
|
||||
FROM exceeded_wiki_page AS ewp
|
||||
WHERE wiki_page.id = ewp.id
|
||||
</update>
|
||||
</mapper>
|
||||
|
||||
@@ -40,7 +40,7 @@ import java.util.stream.Stream;
|
||||
@AuthMan(DocAuthConst.DB_DATASOURCE_MANAGE)
|
||||
@RequestMapping("/zyplayer-doc-db/auth")
|
||||
public class DbDataSourceAuthController {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbDataSourceAuthController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbDataSourceAuthController.class);
|
||||
|
||||
@Resource
|
||||
UserInfoService userInfoService;
|
||||
|
||||
@@ -43,7 +43,7 @@ import java.util.*;
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-db/data-view")
|
||||
public class DbDataViewController {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbDataViewController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbDataViewController.class);
|
||||
|
||||
@Resource
|
||||
ExecuteAuthService executeAuthService;
|
||||
|
||||
@@ -40,7 +40,7 @@ import java.util.List;
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-db/procedure")
|
||||
public class DbProcedureController {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbProcedureController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbProcedureController.class);
|
||||
|
||||
@Resource
|
||||
DatabaseServiceFactory databaseServiceFactory;
|
||||
|
||||
@@ -46,7 +46,7 @@ import java.util.*;
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-db/executor")
|
||||
public class DbSqlExecutorController {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbSqlExecutorController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbSqlExecutorController.class);
|
||||
|
||||
@Resource
|
||||
ColumnSqlExecutor columnSqlExecutor;
|
||||
@@ -87,10 +87,10 @@ public class DbSqlExecutorController {
|
||||
// 参数处理
|
||||
Map<String, Object> paramMap = JSON.parseObject(params);
|
||||
// 解析出多个执行的SQL
|
||||
List<Map<String,Object>> analysisQuerySqlList = new LinkedList<Map<String,Object>>();
|
||||
List<Map<String,Object>> analysisQuerySqlList = new LinkedList<>();
|
||||
try {
|
||||
String driverClassName = dbBaseService.getDatabaseProduct().getDriverClassName();
|
||||
List<SQLStatement> sqlStatements = new ArrayList<SQLStatement>();
|
||||
List<SQLStatement> sqlStatements;
|
||||
//根据驱动程序类名获取数据库类型
|
||||
DbType dbType = SQLTransformUtils.getDbTypeByDriverClassName(driverClassName);
|
||||
sqlStatements = new SQLStatementParser(sql,dbType).parseStatementList();
|
||||
@@ -99,7 +99,7 @@ public class DbSqlExecutorController {
|
||||
if(sb.length()>0&&';' == (sb.charAt(sb.length()-1))){
|
||||
sb.deleteCharAt(sb.length()-1);
|
||||
}
|
||||
Map<String,Object> map = new HashMap<String,Object>();
|
||||
Map<String,Object> map = new HashMap<>();
|
||||
//原始sql
|
||||
map.put("originalSql",sb);
|
||||
//sql解析类型
|
||||
|
||||
@@ -32,7 +32,7 @@ import java.util.*;
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-db/table-relation")
|
||||
public class DbTableRelationController {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbTableRelationController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbTableRelationController.class);
|
||||
|
||||
@Resource
|
||||
DatabaseServiceFactory databaseServiceFactory;
|
||||
|
||||
@@ -61,7 +61,7 @@ public class CommonFormatDownloadService implements FormatDownloadService {
|
||||
StringBuilder resultSb = new StringBuilder("/*\n" +
|
||||
" 数据库 : " + param.getDbName() + "\n" +
|
||||
" 数据库类型 : " + dbBaseService.getDatabaseProduct().name() + "\n" +
|
||||
" 导出时间 : " + DateTime.now().toString() + "\n" +
|
||||
" 导出时间 : " + DateTime.now() + "\n" +
|
||||
" 导出软件 : zyplayer-doc\n" +
|
||||
" 软件版本 : " + ZyplayerDocVersion.version + "\n" +
|
||||
"*/\n\n");
|
||||
|
||||
@@ -43,7 +43,7 @@ import java.util.stream.Stream;
|
||||
*/
|
||||
@Service(FormatDownloadConst.EXCEL)
|
||||
public class ExcelFormatDownloadService implements FormatDownloadService {
|
||||
private static Logger logger = LoggerFactory.getLogger(ExcelFormatDownloadService.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(ExcelFormatDownloadService.class);
|
||||
|
||||
@Resource
|
||||
ExecuteAuthService executeAuthService;
|
||||
|
||||
@@ -16,5 +16,4 @@ public class FormatDownloadConst {
|
||||
public static final String JSON = "json";
|
||||
public static final String EXCEL = "excel";
|
||||
public static final String CVS = "cvs";
|
||||
;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
*/
|
||||
public interface FormatDownloadService {
|
||||
|
||||
public void download(HttpServletResponse response, DataViewParam param, String[] tableNameArr) throws Exception;
|
||||
void download(HttpServletResponse response, DataViewParam param, String[] tableNameArr) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public class DatasourceUtil {
|
||||
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
|
||||
sqlSessionFactoryBean.setDataSource(dataSource);
|
||||
sqlSessionFactoryBean.setMapperLocations(resources);
|
||||
sqlSessionFactoryBean.setPlugins(new Interceptor[]{sqlLogInterceptor});
|
||||
sqlSessionFactoryBean.setPlugins(sqlLogInterceptor);
|
||||
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactoryBean.getObject());
|
||||
// 组装自定义的bean
|
||||
databaseFactoryBean.setId(dbDatasource.getId());
|
||||
|
||||
@@ -67,7 +67,7 @@ public class SqlLogInterceptor implements Interceptor {
|
||||
private String getParameterValue(Object obj) {
|
||||
String value = null;
|
||||
if (obj instanceof String) {
|
||||
value = "'" + obj.toString() + "'";
|
||||
value = "'" + obj + "'";
|
||||
} else if (obj instanceof Date) {
|
||||
DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
|
||||
value = "'" + formatter.format(obj) + "'";
|
||||
@@ -87,7 +87,7 @@ public class SqlLogInterceptor implements Interceptor {
|
||||
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
|
||||
StringBuilder sqlSb = new StringBuilder(boundSql.getSql().replaceAll("[\\s]+", " "));
|
||||
int fromIndex = 0;
|
||||
if (parameterMappings.size() > 0 && parameterObject != null) {
|
||||
if (!parameterMappings.isEmpty() && parameterObject != null) {
|
||||
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
|
||||
if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
|
||||
//sqlSb = sqlSb.replaceFirst("\\?", getParameterValue(parameterObject));
|
||||
|
||||
@@ -23,7 +23,7 @@ public class BackupJob implements Job {
|
||||
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
public void execute(JobExecutionContext context) {
|
||||
// 解析参数
|
||||
BackupJobVO jobVO = JSONObject.parseObject(context.getJobDetail().getJobDataMap().getString(QuartzManagerUtils.PARAM_KEY), BackupJobVO.class);
|
||||
// TODO 保存备份记录
|
||||
|
||||
@@ -53,9 +53,9 @@ public class ColumnExecuteResult {
|
||||
}
|
||||
|
||||
public static class ExecuteResultCode {
|
||||
public static Integer SUCCESS = 0;
|
||||
public static Integer WARN = -1;
|
||||
public static Integer ERROR = -2;
|
||||
public static final Integer SUCCESS = 0;
|
||||
public static final Integer WARN = -1;
|
||||
public static final Integer ERROR = -2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,7 +31,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
@Repository
|
||||
public class ColumnSqlExecutor {
|
||||
private static Logger logger = LoggerFactory.getLogger(SqlExecutor.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(SqlExecutor.class);
|
||||
|
||||
@Resource
|
||||
DatabaseRegistrationBean databaseRegistrationBean;
|
||||
@@ -119,7 +119,7 @@ public class ColumnSqlExecutor {
|
||||
statementMap.put(executeParam.getExecuteId(), preparedStatement);
|
||||
List<ParameterMapping> parameterMappings = executeParam.getParameterMappings();
|
||||
List<Object> paramDataList = executeParam.getParamList();
|
||||
if (parameterMappings.size() > 0 && paramDataList.size() > 0) {
|
||||
if (!parameterMappings.isEmpty() && !paramDataList.isEmpty()) {
|
||||
int parameterCount = 99999;
|
||||
try {
|
||||
parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
|
||||
|
||||
@@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
@Repository
|
||||
public class SqlExecutor {
|
||||
private static Logger logger = LoggerFactory.getLogger(SqlExecutor.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(SqlExecutor.class);
|
||||
|
||||
@Resource
|
||||
DatabaseRegistrationBean databaseRegistrationBean;
|
||||
@@ -113,7 +113,7 @@ public class SqlExecutor {
|
||||
statementMap.put(executeParam.getExecuteId(), preparedStatement);
|
||||
List<ParameterMapping> parameterMappings = executeParam.getParameterMappings();
|
||||
List<Object> paramDataList = executeParam.getParamList();
|
||||
if (parameterMappings != null && paramDataList != null && parameterMappings.size() > 0 && paramDataList.size() > 0) {
|
||||
if (parameterMappings != null && paramDataList != null && !parameterMappings.isEmpty() && !paramDataList.isEmpty()) {
|
||||
for (int i = 0; i < parameterMappings.size(); i++) {
|
||||
preparedStatement.setObject(i + 1, paramDataList.get(i));
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class GenericTokenParser {
|
||||
if (text == null || text.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
int start = text.indexOf(openToken, 0);
|
||||
int start = text.indexOf(openToken);
|
||||
if (start == -1) {
|
||||
return text;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public interface MethodInvoke {
|
||||
Method method = ReflectionUtils.findMethod(this.getClass(), expr.getMethodName().toLowerCase(), SQLMethodInvokeExpr.class);
|
||||
if (null != method) {
|
||||
try {
|
||||
method.invoke(this, new Object[]{expr});
|
||||
method.invoke(this, expr);
|
||||
} catch (Exception e) {
|
||||
log.error("method invoke error", e);
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -113,8 +113,8 @@ public class MySqlToOracleOutputVisitor extends MySqlOutputVisitor {
|
||||
}else if(sqlTableElement instanceof MySqlPrimaryKey){
|
||||
OraclePrimaryKey oraclePrimaryKey = new OraclePrimaryKey();
|
||||
List<SQLSelectOrderByItem> list = ((MySqlPrimaryKey) sqlTableElement).getIndexDefinition().getColumns();
|
||||
for(int i=0;i<list.size();i++){
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr)list.get(i).getExpr();
|
||||
for (SQLSelectOrderByItem sqlSelectOrderByItem : list) {
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr) sqlSelectOrderByItem.getExpr();
|
||||
sQLIdentifierExpr.setName(sQLIdentifierExpr.getName().replaceAll("`", ""));
|
||||
oraclePrimaryKey.addColumn(sQLIdentifierExpr);
|
||||
}
|
||||
|
||||
@@ -88,8 +88,8 @@ public class MySqlToSqlServerOutputVisitor extends MySqlOutputVisitor {
|
||||
}else if(sqlTableElement instanceof MySqlPrimaryKey){
|
||||
SQLPrimaryKeyImpl sqlserverPrimaryKey = new SQLPrimaryKeyImpl();
|
||||
List<SQLSelectOrderByItem> list = ((MySqlPrimaryKey) sqlTableElement).getIndexDefinition().getColumns();
|
||||
for(int i=0;i<list.size();i++){
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr)list.get(i).getExpr();
|
||||
for (SQLSelectOrderByItem sqlSelectOrderByItem : list) {
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr) sqlSelectOrderByItem.getExpr();
|
||||
sQLIdentifierExpr.setName(sQLIdentifierExpr.getName().replaceAll("`", ""));
|
||||
sqlserverPrimaryKey.addColumn(sQLIdentifierExpr);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public class MySqlSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
|| nameHash == FnvHash.Constants.INT
|
||||
|| nameHash == FnvHash.Constants.BIGINT
|
||||
|| nameHash == FnvHash.Constants.TINYINT) {
|
||||
if(argumentns.size() > 0){
|
||||
if(!argumentns.isEmpty()){
|
||||
int len;
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
if (arg0 instanceof SQLNumericLiteralExpr) {
|
||||
@@ -54,7 +54,7 @@ public class MySqlSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
|| nameHash == FnvHash.Constants.DECIMAL) {
|
||||
dataType = new SQLDataTypeImpl("DECIMAL");
|
||||
int precision = 0;
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue();
|
||||
dataType = new SQLDataTypeImpl("DECIMAL",precision);
|
||||
}
|
||||
@@ -74,7 +74,7 @@ public class MySqlSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
|
||||
} else if (nameHash == FnvHash.Constants.VARCHAR
|
||||
||nameHash == FnvHash.Constants.CHAR) {
|
||||
if(argumentns.size() > 0){
|
||||
if(!argumentns.isEmpty()){
|
||||
int len;
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
if (arg0 instanceof SQLNumericLiteralExpr) {
|
||||
|
||||
@@ -108,8 +108,8 @@ public class OracleToMySqlOutputVisitor extends OracleOutputVisitor {
|
||||
MySqlPrimaryKey mySqlPrimaryKey = new MySqlPrimaryKey();
|
||||
mySqlPrimaryKey.setName("primary key");
|
||||
List<SQLSelectOrderByItem> list = ((OraclePrimaryKey) sqlTableElement).getIndexDefinition().getColumns();
|
||||
for(int i=0;i<list.size();i++){
|
||||
mySqlPrimaryKey.addColumn(list.get(i));
|
||||
for (SQLSelectOrderByItem sqlSelectOrderByItem : list) {
|
||||
mySqlPrimaryKey.addColumn(sqlSelectOrderByItem);
|
||||
}
|
||||
mySqlCreateTableStatement.getTableElementList().add(mySqlPrimaryKey);
|
||||
}else if(sqlTableElement instanceof OracleUnique) {
|
||||
|
||||
@@ -61,7 +61,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
dataType = new SQLDataTypeImpl("double");
|
||||
|
||||
} else if (nameHash == FnvHash.Constants.NUMBER) {
|
||||
if (argumentns.size() == 0) {
|
||||
if (argumentns.isEmpty()) {
|
||||
dataType = new SQLDataTypeImpl("decimal", 38);
|
||||
} else {
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
@@ -112,7 +112,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
dataType.setName("decimal");
|
||||
|
||||
int precision = 0;
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue();
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
} else if (nameHash == FnvHash.Constants.RAW) {
|
||||
int len;
|
||||
|
||||
if (argumentns.size() == 0) {
|
||||
if (argumentns.isEmpty()) {
|
||||
len = -1;
|
||||
} else if (argumentns.size() == 1) {
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
@@ -163,7 +163,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
} else {
|
||||
dataType = new SQLCharacterDataType("varchar", len);
|
||||
}
|
||||
} else if (argumentns.size() == 0) {
|
||||
} else if (argumentns.isEmpty()) {
|
||||
dataType = new SQLCharacterDataType("char");
|
||||
} else {
|
||||
throw new UnsupportedOperationException(SQLUtils.toOracleString(x));
|
||||
@@ -185,14 +185,14 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
} else {
|
||||
dataType = new SQLCharacterDataType("nvarchar", len);
|
||||
}
|
||||
} else if (argumentns.size() == 0) {
|
||||
} else if (argumentns.isEmpty()) {
|
||||
dataType = new SQLCharacterDataType("nchar");
|
||||
} else {
|
||||
throw new UnsupportedOperationException(SQLUtils.toOracleString(x));
|
||||
}
|
||||
|
||||
} else if (nameHash == FnvHash.Constants.VARCHAR2) {
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
int len;
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
if (arg0 instanceof SQLNumericLiteralExpr) {
|
||||
@@ -210,7 +210,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
}
|
||||
|
||||
} else if (nameHash == FnvHash.Constants.NVARCHAR2) {
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
int len;
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
if (arg0 instanceof SQLNumericLiteralExpr) {
|
||||
@@ -229,7 +229,7 @@ public class OracleSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
} else if (nameHash == FnvHash.Constants.DATE
|
||||
|| nameHash == FnvHash.Constants.TIMESTAMP) {
|
||||
int len = -1;
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
SQLExpr arg0 = argumentns.get(0);
|
||||
if (arg0 instanceof SQLNumericLiteralExpr) {
|
||||
len = ((SQLNumericLiteralExpr) arg0).getNumber().intValue();
|
||||
|
||||
@@ -119,8 +119,8 @@ public class SqlServerToMySqlOutputVisitor extends SQLServerOutputVisitor {
|
||||
SQLPrimaryKeyImpl sQLPrimaryKeyImpl = (SQLPrimaryKeyImpl) ((SQLAlterTableAddConstraint) item).getConstraint();
|
||||
SQLIndexDefinition sQLIndexDefinition = sQLPrimaryKeyImpl.getIndexDefinition();
|
||||
List<SQLSelectOrderByItem> list = sQLIndexDefinition.getColumns();
|
||||
for(int i=0;i<list.size();i++){
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr)list.get(i).getExpr();
|
||||
for (SQLSelectOrderByItem sqlSelectOrderByItem : list) {
|
||||
SQLIdentifierExpr sQLIdentifierExpr = (SQLIdentifierExpr) sqlSelectOrderByItem.getExpr();
|
||||
sQLIdentifierExpr.setName(sQLIdentifierExpr.getName().replaceAll("\\[", "").replaceAll("\\]", ""));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class SqlServerSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
SQLDataType dataType;
|
||||
if (nameHash == FnvHash.Constants.SMALLINT) {
|
||||
int precision = 0;
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue();
|
||||
}
|
||||
dataType = new SQLDataTypeImpl("int", precision);
|
||||
@@ -43,7 +43,7 @@ public class SqlServerSQLDataTypeTransformUtil extends SQLTransformUtils {
|
||||
|
||||
} else if(nameHash == FnvHash.Constants.NVARCHAR){
|
||||
int precision = 0;
|
||||
if (argumentns.size() > 0) {
|
||||
if (!argumentns.isEmpty()) {
|
||||
precision = ((SQLIntegerExpr) argumentns.get(0)).getNumber().intValue();
|
||||
}
|
||||
dataType = new SQLDataTypeImpl("varchar", precision);
|
||||
|
||||
@@ -109,7 +109,7 @@ public class SqlParseUtil {
|
||||
resultParamList.add(paramMap.get(parameterMapping.getProperty()));
|
||||
}
|
||||
}
|
||||
sqlBuilder.append(itemsSb.toString());
|
||||
sqlBuilder.append(itemsSb);
|
||||
}
|
||||
// pagehelper 使用了jsqlparser包,而且版本很低,,低版本没这个方法
|
||||
// if (insert.isUseSet()) {
|
||||
@@ -232,15 +232,13 @@ public class SqlParseUtil {
|
||||
if (select.getFromItem() != null) {
|
||||
countSql.append(" FROM ").append(select.getFromItem());
|
||||
if (select.getJoins() != null) {
|
||||
Iterator<Join> it = select.getJoins().iterator();
|
||||
while (it.hasNext()) {
|
||||
Join join = it.next();
|
||||
if (join.isSimple()) {
|
||||
countSql.append(", ").append(join);
|
||||
} else {
|
||||
countSql.append(" ").append(join);
|
||||
}
|
||||
}
|
||||
for (Join join : select.getJoins()) {
|
||||
if (join.isSimple()) {
|
||||
countSql.append(", ").append(join);
|
||||
} else {
|
||||
countSql.append(" ").append(join);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (select.getWhere() != null) {
|
||||
countSql.append(" WHERE ").append(select.getWhere());
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.zyplayer.doc.db.framework.db.transfer;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
@@ -42,7 +41,7 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||
*/
|
||||
@Service
|
||||
public class TransferDataServer {
|
||||
private static Logger logger = LoggerFactory.getLogger(TransferDataServer.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(TransferDataServer.class);
|
||||
|
||||
@Resource
|
||||
SqlExecutor sqlExecutor;
|
||||
@@ -163,7 +162,7 @@ public class TransferDataServer {
|
||||
}
|
||||
});
|
||||
// 不足100的数据
|
||||
if (selectResultList.size() > 0) {
|
||||
if (!selectResultList.isEmpty()) {
|
||||
this.writeData(storageSourceId, storageSql, selectResultList);
|
||||
}
|
||||
if (StringUtils.isNotBlank(executeResult.getErrMsg())) {
|
||||
|
||||
@@ -23,7 +23,7 @@ public interface DbSseEmitterService {
|
||||
* @author diantu
|
||||
* @date 2023/7/17
|
||||
**/
|
||||
public SseEmitter createSseConnect(String clientId, Boolean setHeartBeat, Boolean defaultHeartbeat, Consumer<DbCommonSseParam> consumer);
|
||||
SseEmitter createSseConnect(String clientId, Boolean setHeartBeat, Boolean defaultHeartbeat, Consumer<DbCommonSseParam> consumer);
|
||||
|
||||
/**
|
||||
* 关闭连接
|
||||
@@ -31,7 +31,7 @@ public interface DbSseEmitterService {
|
||||
* @author diantu
|
||||
* @date 2023/7/17
|
||||
**/
|
||||
public void closeSseConnect(String clientId);
|
||||
void closeSseConnect(String clientId);
|
||||
|
||||
/**
|
||||
* 推送消息到所有客户端
|
||||
@@ -39,7 +39,7 @@ public interface DbSseEmitterService {
|
||||
* @author diantu
|
||||
* @date 2023/7/17
|
||||
**/
|
||||
public void sendMessageToAllClient(String msg);
|
||||
void sendMessageToAllClient(String msg);
|
||||
|
||||
/**
|
||||
* 根据clientId发送消息给某一客户端
|
||||
@@ -47,5 +47,5 @@ public interface DbSseEmitterService {
|
||||
* @author diantu
|
||||
* @date 2023/7/17
|
||||
**/
|
||||
public void sendMessageToOneClient(String clientId, String msg);
|
||||
void sendMessageToOneClient(String clientId, String msg);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public class DbSseCacheUtil {
|
||||
/**
|
||||
* 创建一个容器来存储所有的 SseEmitter(使用ConcurrentHashMap是因为它是线程安全的)。
|
||||
*/
|
||||
public static Map<String, Map<String,Object>> sseCache = new ConcurrentHashMap<>();
|
||||
public static final Map<String, Map<String,Object>> sseCache = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
/**
|
||||
@@ -96,7 +96,7 @@ public class DbSseCacheUtil {
|
||||
* @date 2023/7/17
|
||||
**/
|
||||
public static boolean existSseCache() {
|
||||
return sseCache.size()>0;
|
||||
return !sseCache.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -249,7 +249,7 @@ public class DbSseCacheUtil {
|
||||
**/
|
||||
public static void sendMessageToClientByClientId(String clientId, DocDbResponseJson message) {
|
||||
Map<String, Object> map = sseCache.get(clientId);
|
||||
if (map==null||map.size()==0) {
|
||||
if (map==null|| map.isEmpty()) {
|
||||
log.error("推送消息失败:客户端{}未创建长链接,失败消息:{}",clientId, message.toString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -63,7 +63,6 @@ public class DatabaseBackupUtils {
|
||||
//@TODO 存入备份记录信息
|
||||
// 备份文件上传至文件服务器
|
||||
if (!jobVO.getIsUpload()) {
|
||||
return;
|
||||
}
|
||||
//@TODO 备份文件上传至文件服务器
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.util.Date;
|
||||
*/
|
||||
public class JSONUtil {
|
||||
|
||||
public static SerializeConfig serializeConfig = new SerializeConfig();
|
||||
public static final SerializeConfig serializeConfig = new SerializeConfig();
|
||||
|
||||
static {
|
||||
serializeConfig.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
@@ -15,7 +15,7 @@ public class MapCacheUtil {
|
||||
private static Map<String,Object> cacheMap;
|
||||
|
||||
private MapCacheUtil(){
|
||||
cacheMap = new HashMap<String, Object>();
|
||||
cacheMap = new HashMap<>();
|
||||
}
|
||||
|
||||
public static MapCacheUtil getInstance(){
|
||||
|
||||
@@ -47,14 +47,12 @@ public class PoiUtil {
|
||||
"\n" +
|
||||
" 数据库 : " + dbName + "\n" +
|
||||
" 数据库类型 : " + dbType + "\n" +
|
||||
" 导出时间 : " + DateTime.now().toString() + "\n" +
|
||||
" 导出时间 : " + DateTime.now() + "\n" +
|
||||
" 软件版本 : " + ZyplayerDocVersion.version + "\n" +
|
||||
"*/\n\n");
|
||||
for (Map.Entry<String, String> entry : ddlSqlMap.entrySet()) {
|
||||
ddlSqlSb.append("-- ----------------------------\n")
|
||||
.append("-- 表结构:" + entry.getKey() + "\n")
|
||||
.append("-- ----------------------------\n")
|
||||
.append("DROP TABLE IF EXISTS `" + entry.getKey() + "`;\n")
|
||||
ddlSqlSb.append("-- ----------------------------\n").append("-- 表结构:").append(entry.getKey()).append("\n")
|
||||
.append("-- ----------------------------\n").append("DROP TABLE IF EXISTS `").append(entry.getKey()).append("`;\n")
|
||||
.append(entry.getValue()).append("\n\n");
|
||||
}
|
||||
IoUtil.write(response.getOutputStream(), "utf-8", true, ddlSqlSb.toString());
|
||||
@@ -121,7 +119,7 @@ public class PoiUtil {
|
||||
// 写入表信息
|
||||
PoiUtil.createEmptyLine(document);
|
||||
document.createParagraph().createRun().setText("数据库名:" + dbName);
|
||||
document.createParagraph().createRun().setText("导出时间:" + DateTime.now().toString());
|
||||
document.createParagraph().createRun().setText("导出时间:" + DateTime.now());
|
||||
document.createParagraph().createRun().setText("导出说明:本文档使用zyplayer-doc生成并导出");
|
||||
document.createParagraph().createRun().setText("所有库表:");
|
||||
List<List<String>> baseDataList = new LinkedList<>();
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory;
|
||||
*/
|
||||
public class QuartzManagerUtils {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(QuartzManagerUtils.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(QuartzManagerUtils.class);
|
||||
|
||||
/**
|
||||
* 参数传递key
|
||||
|
||||
@@ -38,12 +38,11 @@ public class SQLTransformUtils {
|
||||
StringBuilder out = new StringBuilder();
|
||||
OracleToMySqlOutputVisitor visitor = new OracleToMySqlOutputVisitor(out, false);
|
||||
|
||||
for(int i = 0; i < stmtList.size(); ++i) {
|
||||
((SQLStatement)stmtList.get(i)).accept(visitor);
|
||||
for (SQLStatement sqlStatement : stmtList) {
|
||||
sqlStatement.accept(visitor);
|
||||
}
|
||||
|
||||
String mysqlSql = out.toString();
|
||||
return mysqlSql;
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,12 +55,11 @@ public class SQLTransformUtils {
|
||||
StringBuilder out = new StringBuilder();
|
||||
SqlServerToMySqlOutputVisitor visitor = new SqlServerToMySqlOutputVisitor(out, false);
|
||||
|
||||
for(int i = 0; i < stmtList.size(); ++i) {
|
||||
((SQLStatement)stmtList.get(i)).accept(visitor);
|
||||
for (SQLStatement sqlStatement : stmtList) {
|
||||
sqlStatement.accept(visitor);
|
||||
}
|
||||
|
||||
String mysqlSql = out.toString();
|
||||
return mysqlSql;
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,12 +72,11 @@ public class SQLTransformUtils {
|
||||
StringBuilder out = new StringBuilder();
|
||||
MySqlToOracleOutputVisitor visitor = new MySqlToOracleOutputVisitor(out, false);
|
||||
|
||||
for(int i = 0; i < stmtList.size(); ++i) {
|
||||
((SQLStatement)stmtList.get(i)).accept(visitor);
|
||||
for (SQLStatement sqlStatement : stmtList) {
|
||||
sqlStatement.accept(visitor);
|
||||
}
|
||||
|
||||
String oracleSql = out.toString();
|
||||
return oracleSql;
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,12 +89,11 @@ public class SQLTransformUtils {
|
||||
StringBuilder out = new StringBuilder();
|
||||
MySqlToSqlServerOutputVisitor visitor = new MySqlToSqlServerOutputVisitor(out, false);
|
||||
|
||||
for(int i = 0; i < stmtList.size(); ++i) {
|
||||
((SQLStatement)stmtList.get(i)).accept(visitor);
|
||||
for (SQLStatement sqlStatement : stmtList) {
|
||||
sqlStatement.accept(visitor);
|
||||
}
|
||||
|
||||
String sqlserverSql = out.toString();
|
||||
return sqlserverSql;
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,7 +110,7 @@ public class SQLTransformUtils {
|
||||
java.io.Reader is = clob.getCharacterStream();
|
||||
BufferedReader br = new BufferedReader(is);
|
||||
String s = br.readLine();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
|
||||
while (s != null) {
|
||||
sb.append(s);
|
||||
|
||||
@@ -20,7 +20,7 @@ public class SqlLogUtil {
|
||||
private static String getParameterValue(Object obj) {
|
||||
String value;
|
||||
if (obj instanceof String) {
|
||||
value = "'" + obj.toString() + "'";
|
||||
value = "'" + obj + "'";
|
||||
} else if (obj instanceof Number) {
|
||||
value = obj.toString();
|
||||
} else if (obj instanceof Date) {
|
||||
@@ -35,7 +35,7 @@ public class SqlLogUtil {
|
||||
public static String parseLogSql(String sql, List<ParameterMapping> parameterMappings, List<Object> paramList) {
|
||||
StringBuilder sqlSb = new StringBuilder(sql.replaceAll(" {2,}", " "));
|
||||
int fromIndex = 0;
|
||||
if (parameterMappings.size() > 0) {
|
||||
if (!parameterMappings.isEmpty()) {
|
||||
for (int i = 0; i < parameterMappings.size(); i++) {
|
||||
Object obj = paramList.get(i);
|
||||
fromIndex = replacePlaceholder(sqlSb, fromIndex, getParameterValue(obj));
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
*/
|
||||
public class BackupTaskServiceImpl implements BackupTaskService {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(BackupTaskServiceImpl.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(BackupTaskServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
private Scheduler scheduler;
|
||||
|
||||
@@ -41,7 +41,7 @@ import java.util.Set;
|
||||
* @since 2018年8月8日
|
||||
*/
|
||||
public abstract class DbBaseService {
|
||||
private static Logger logger = LoggerFactory.getLogger(DbBaseService.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(DbBaseService.class);
|
||||
|
||||
@Resource
|
||||
SqlExecutor sqlExecutor;
|
||||
@@ -140,7 +140,7 @@ public abstract class DbBaseService {
|
||||
TableColumnVo.TableInfoVo tableInfoVo = new TableColumnVo.TableInfoVo();
|
||||
List<TableDescDto> tableDescList = baseMapper.getTableDescList(dbName, tableName);
|
||||
String description = null;
|
||||
if (tableDescList.size() > 0) {
|
||||
if (!tableDescList.isEmpty()) {
|
||||
TableDescDto descDto = tableDescList.get(0);
|
||||
description = descDto.getDescription();
|
||||
}
|
||||
@@ -334,11 +334,10 @@ public abstract class DbBaseService {
|
||||
* @since 2023年2月22日
|
||||
*/
|
||||
public String getQueryPageSqlBySql(String sql,Integer pageSize,Integer pageNum) {
|
||||
StringBuilder sqlSb = new StringBuilder();
|
||||
sqlSb.append(String.format("select * from (%s) r", sql));
|
||||
Integer offset = (pageNum-1)*pageSize;
|
||||
sqlSb.append(String.format(" limit %s offset %s", pageSize, offset));
|
||||
return sqlSb.toString();
|
||||
String sqlSb = String.format("select * from (%s) r", sql) +
|
||||
String.format(" limit %s offset %s", pageSize, offset);
|
||||
return sqlSb;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -65,8 +65,8 @@ public class OracleServiceImpl extends DbBaseService {
|
||||
sqlSb.append(String.format(" order by %s %s", "\""+dataViewParam.getOrderColumn()+"\"", dataViewParam.getOrderType()));
|
||||
}
|
||||
StringBuilder sqlSbFinal = new StringBuilder();
|
||||
Integer pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum();
|
||||
Integer pageNum = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1;
|
||||
int pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum();
|
||||
int pageNum = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1;
|
||||
sqlSbFinal.append(String.format("select %s ,ZYPLAYDBROWID from ( select %s ,rowidtochar(rowid) as ZYPLAYDBROWID from %s",queryColumns, queryColumns + ",rownum rn", "(" + sqlSb + ") where rownum<=" + pageSize + " ) t2 where t2.rn >=" + pageNum));
|
||||
return sqlSbFinal.toString();
|
||||
}
|
||||
@@ -80,11 +80,9 @@ public class OracleServiceImpl extends DbBaseService {
|
||||
*/
|
||||
@Override
|
||||
public String getQueryPageSqlBySql(String sql,Integer pageSize,Integer pageNum) {
|
||||
StringBuilder sqlSb = new StringBuilder();
|
||||
Integer pageSizeFinal = pageSize * pageNum;
|
||||
Integer pageNumFinal = pageSize * (pageNum - 1) + 1;
|
||||
sqlSb.append(String.format("select * from ( select r.*,rownum rn from %s", "(" + sql + ") r where rownum<=" + pageSizeFinal + " ) t2 where t2.rn >=" + pageNumFinal));
|
||||
return sqlSb.toString();
|
||||
int pageSizeFinal = pageSize * pageNum;
|
||||
int pageNumFinal = pageSize * (pageNum - 1) + 1;
|
||||
return String.format("select * from ( select r.*,rownum rn from %s", "(" + sql + ") r where rownum<=" + pageSizeFinal + " ) t2 where t2.rn >=" + pageNumFinal);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,9 +101,7 @@ public class OracleServiceImpl extends DbBaseService {
|
||||
String oracleSql = "";
|
||||
try {
|
||||
oracleSql = SQLTransformUtils.ClobToString((Clob)tableDdlList.get(0).get("CREATETABLE"));
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
} catch (SQLException | IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
tableDdlVo.setOracle(SQLUtils.formatOracle(oracleSql));
|
||||
|
||||
@@ -36,7 +36,7 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
@Service
|
||||
public class BaseDownloadService implements DownloadService {
|
||||
private static Logger logger = LoggerFactory.getLogger(BaseDownloadService.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(BaseDownloadService.class);
|
||||
|
||||
@Resource
|
||||
SqlExecutor sqlExecutor;
|
||||
@@ -55,7 +55,7 @@ public class BaseDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
if (Objects.equals(param.getCreateTableFlag(), 1)) {
|
||||
@@ -109,7 +109,7 @@ public class BaseDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
||||
@@ -157,7 +157,7 @@ public class BaseDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
resultSb.append("[");
|
||||
sqlExecutor.execute(executeParam, item -> {
|
||||
|
||||
@@ -26,7 +26,7 @@ public interface DownloadService {
|
||||
* @author 暮光:城中城
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||
String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet);
|
||||
|
||||
/**
|
||||
* 导出数据为update语句格式
|
||||
@@ -34,7 +34,7 @@ public interface DownloadService {
|
||||
* @author 暮光:城中城
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||
String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet);
|
||||
|
||||
/**
|
||||
* 导出数据为json格式
|
||||
@@ -42,7 +42,7 @@ public interface DownloadService {
|
||||
* @author 暮光:城中城
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||
String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
|
||||
*/
|
||||
@Service
|
||||
public class SqlserverDownloadService implements DownloadService {
|
||||
private static Logger logger = LoggerFactory.getLogger(SqlserverDownloadService.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(SqlserverDownloadService.class);
|
||||
|
||||
@Resource
|
||||
SqlExecutor sqlExecutor;
|
||||
@@ -46,7 +46,7 @@ public class SqlserverDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
String dbTableName = String.format("%s..%s", param.getDbName(), param.getTableName());
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
if (Objects.equals(param.getCreateTableFlag(), 1)) {
|
||||
@@ -100,7 +100,7 @@ public class SqlserverDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
String dbTableName = String.format("%s..%s", param.getDbName(), param.getTableName());
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
||||
@@ -148,7 +148,7 @@ public class SqlserverDownloadService implements DownloadService {
|
||||
* @since 2020年6月5日
|
||||
*/
|
||||
@Override
|
||||
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) {
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
resultSb.append("[");
|
||||
sqlExecutor.execute(executeParam, item -> {
|
||||
|
||||
@@ -57,6 +57,13 @@
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>42.7.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.oracle</groupId>-->
|
||||
<!-- <artifactId>ojdbc6</artifactId>-->
|
||||
|
||||
@@ -1,23 +1,15 @@
|
||||
package com.zyplayer.doc.manage;
|
||||
|
||||
import com.zyplayer.doc.core.util.ZyplayerDocVersion;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.BeanNameGenerator;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 程序启动器
|
||||
*
|
||||
@@ -34,14 +26,14 @@ import java.util.Optional;
|
||||
})
|
||||
public class Application extends SpringBootServletInitializer {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(Application.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(Application.class);
|
||||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||
return application.sources(Application.class);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
public static void main(String[] args) {
|
||||
ConfigurableApplicationContext application = SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,15 +3,9 @@ package com.zyplayer.doc.manage.framework.config;
|
||||
import com.zyplayer.doc.api.framework.config.EnableDocApi;
|
||||
import com.zyplayer.doc.db.framework.configuration.EnableDocDb;
|
||||
import com.zyplayer.doc.wiki.framework.config.EnableDocWiki;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* 按需开启zyplayer-doc所有的服务
|
||||
*
|
||||
@@ -25,18 +19,18 @@ public class ZyplayerDocConfig {
|
||||
@EnableDocWiki
|
||||
//wiki模块加载注解条件化,配合配置文件决定是否加载
|
||||
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "wiki", matchIfMissing = true)
|
||||
public class enableWiki {
|
||||
public static class enableWiki {
|
||||
}
|
||||
|
||||
@EnableDocDb
|
||||
//db模块加载注解条件化,配合配置文件决定是否加载
|
||||
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "db", matchIfMissing = true)
|
||||
public class enableDb {
|
||||
public static class enableDb {
|
||||
}
|
||||
|
||||
@EnableDocApi
|
||||
//api模块加载注解条件化,配合配置文件决定是否加载
|
||||
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "api", matchIfMissing = true)
|
||||
public class enableApi {
|
||||
public static class enableApi {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import java.util.HashMap;
|
||||
*/
|
||||
@Configuration
|
||||
public class ZyplayerModuleKeeper implements ApplicationContextAware {
|
||||
HashMap<String, Boolean> moduleInfo = new HashMap<>();
|
||||
final HashMap<String, Boolean> moduleInfo = new HashMap<>();
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
@Override
|
||||
@@ -26,7 +26,7 @@ public class ZyplayerModuleKeeper implements ApplicationContextAware {
|
||||
|
||||
//获取模块是否启动
|
||||
public boolean ismoduleStarted(Class<?> clazz) {
|
||||
if (moduleInfo.size() < 1) {
|
||||
if (moduleInfo.isEmpty()) {
|
||||
getmoduleInfo();
|
||||
}
|
||||
return moduleInfo.get(clazz.getName().split("\\$")[1]);
|
||||
@@ -34,7 +34,7 @@ public class ZyplayerModuleKeeper implements ApplicationContextAware {
|
||||
|
||||
//提供模块开启状态数组,给前端控制页面展示
|
||||
public HashMap<String, Boolean> getmoduleInfo() {
|
||||
if (moduleInfo.size() < 1) {
|
||||
if (moduleInfo.isEmpty()) {
|
||||
synchronized (ZyplayerModuleKeeper.class) {
|
||||
Class<? extends ZyplayerDocConfig> clazz = ZyplayerDocConfig.class;
|
||||
Class<?>[] innerClasses = clazz.getClasses();
|
||||
@@ -54,6 +54,6 @@ public class ZyplayerModuleKeeper implements ApplicationContextAware {
|
||||
} catch (BeansException e) {
|
||||
return false;
|
||||
}
|
||||
return null != bean;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public class ApplicationInfoConsolePrint implements IConsolePrint {
|
||||
public void buildPrintInfo(StringBuilder printInfo) throws Exception {
|
||||
String contextPath = environment.getProperty("server.servlet.context-path");
|
||||
contextPath = Optional.ofNullable(contextPath).orElse("").replaceFirst("/", "");
|
||||
contextPath = (contextPath.length() <= 0 || contextPath.endsWith("/")) ? contextPath : contextPath + "/";
|
||||
contextPath = (contextPath.isEmpty() || contextPath.endsWith("/")) ? contextPath : contextPath + "/";
|
||||
String hostAddress = InetAddress.getLocalHost().getHostAddress();
|
||||
String serverPort = environment.getProperty("server.port");
|
||||
String urlCtx = hostAddress + ":" + serverPort + "/" + contextPath;
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.zyplayer.doc.manage.framework.console;
|
||||
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
/**
|
||||
* 启动后打印信息接口
|
||||
@@ -12,5 +9,5 @@ import java.net.UnknownHostException;
|
||||
* @since 2023年6月16日
|
||||
*/
|
||||
public interface IConsolePrint extends Ordered {
|
||||
public void buildPrintInfo(StringBuilder printInfo) throws Exception;
|
||||
void buildPrintInfo(StringBuilder printInfo) throws Exception;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public class ModuleInfoConsolePrint implements IConsolePrint {
|
||||
ZyplayerModuleKeeper moduleKeeper;
|
||||
|
||||
@Override
|
||||
public void buildPrintInfo(StringBuilder printInfo) throws Exception {
|
||||
public void buildPrintInfo(StringBuilder printInfo) {
|
||||
printInfo.append("\n\n\t\t\t\t↓zyplayer-doc模块的启动情况\n")
|
||||
.append("\t\t\t\t------------------------\n");
|
||||
HashMap<String, Boolean> moduleInfoMap = moduleKeeper.getmoduleInfo();
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
|
||||
public class ZyplayerConsolePrint implements CommandLineRunner {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ZyplayerConsolePrint.class);
|
||||
StringBuilder logInfoHolder = new StringBuilder();
|
||||
final StringBuilder logInfoHolder = new StringBuilder();
|
||||
|
||||
@Resource
|
||||
ObjectProvider<List<IConsolePrint>> consolePrintListProvider;
|
||||
|
||||
@@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ import java.util.Properties;
|
||||
*/
|
||||
@Component
|
||||
public class SchedulerTask {
|
||||
private static Logger logger = LoggerFactory.getLogger(SchedulerTask.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(SchedulerTask.class);
|
||||
|
||||
@Value("${zyplayer.doc.manage.upgradePropertiesUrl:}")
|
||||
private String upgradePropertiesUrl;
|
||||
|
||||
@@ -3,6 +3,9 @@ package com.zyplayer.doc.manage.framework.upgrade;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.*;
|
||||
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||
import com.zyplayer.doc.core.enums.SystemConfigEnum;
|
||||
import com.zyplayer.doc.core.util.UpgradeInfo;
|
||||
import com.zyplayer.doc.core.util.ZyplayerDocVersion;
|
||||
@@ -37,6 +40,8 @@ public class UpgradeSystemDdlTask {
|
||||
@Resource
|
||||
UserInfoMapper userInfoMapper;
|
||||
@Resource
|
||||
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean;
|
||||
@Resource
|
||||
SystemConfigService systemConfigService;
|
||||
|
||||
/**
|
||||
@@ -48,6 +53,11 @@ public class UpgradeSystemDdlTask {
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
try {
|
||||
|
||||
SqlSessionFactory sqlSessionFactory = mybatisSqlSessionFactoryBean.getObject();
|
||||
Configuration c = sqlSessionFactory.getConfiguration();
|
||||
String databaseId = c.getDatabaseId();
|
||||
|
||||
String nowVersion = systemConfigService.getConfigValue(SystemConfigEnum.DOC_SYSTEM_VERSION);
|
||||
if (Objects.equals(nowVersion, ZyplayerDocVersion.version)) {
|
||||
logger.info("当前数据库DDL已是最新版本:" + nowVersion);
|
||||
@@ -57,14 +67,14 @@ public class UpgradeSystemDdlTask {
|
||||
if (StringUtils.isBlank(nowVersion)) {
|
||||
if (CollectionUtils.isEmpty(tableList)) {
|
||||
// 新部署,执行全量建表语句
|
||||
initDatabase();
|
||||
initDatabase(databaseId);
|
||||
} else {
|
||||
// 执行一次最新的脚本
|
||||
upgradeByStart();
|
||||
upgradeByStart(databaseId);
|
||||
}
|
||||
} else {
|
||||
// 依次执行高于此版本的脚本
|
||||
upgradeByNowVersion(nowVersion, tableList);
|
||||
upgradeByNowVersion(databaseId, nowVersion, tableList);
|
||||
}
|
||||
// 更新当前版本
|
||||
systemConfigService.setConfigValue(SystemConfigEnum.DOC_SYSTEM_VERSION, ZyplayerDocVersion.version);
|
||||
@@ -79,8 +89,11 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void initDatabase() {
|
||||
public void initDatabase(String databaseId) {
|
||||
String sql = loadDDLFile("sql/full/full.sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/full/"+databaseId+"_full.sql");
|
||||
}
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
logger.error("初始化数据库DDL失败,未找到当前版本的DDL脚本");
|
||||
return;
|
||||
@@ -90,6 +103,7 @@ public class UpgradeSystemDdlTask {
|
||||
for (SQLStatement sqlStatement : sqlStatements) {
|
||||
// 执行SQL
|
||||
try {
|
||||
logger.info("开始执行 DDL:" + sqlStatement.toString());
|
||||
userInfoMapper.executeSql(sqlStatement.toString());
|
||||
} catch (Exception e) {
|
||||
logger.info("执行升级SQL异常:" + e.getMessage());
|
||||
@@ -104,7 +118,7 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByNowVersion(String nowVersion, List<String> tableList) {
|
||||
public void upgradeByNowVersion(String databaseId, String nowVersion, List<String> tableList) throws Exception {
|
||||
logger.info("升级数据库DDL脚本:{} --> {}", nowVersion, ZyplayerDocVersion.version);
|
||||
boolean isStart = false;
|
||||
for (int i = ZyplayerDocVersion.versionUpgrade.size() - 1; i >= 0; i--) {
|
||||
@@ -116,7 +130,7 @@ public class UpgradeSystemDdlTask {
|
||||
} else if (!upgradeInfo.isHaveUpgradeSql()) {
|
||||
logger.info("该版本无DDL脚本,跳过此版本:" + upgradeInfo.getVersion());
|
||||
} else {
|
||||
upgradeByVersion(upgradeInfo.getVersion(), tableList);
|
||||
upgradeByVersion(databaseId, upgradeInfo.getVersion(), tableList);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -127,9 +141,13 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByVersion(String version, List<String> tableList) {
|
||||
public void upgradeByVersion(String databaseId, String version, List<String> tableList) {
|
||||
logger.info("升级数据库DDL开始:" + version);
|
||||
String sql = loadDDLFile("sql/upgrade/" + version + ".sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/upgrade/"+databaseId+"/" + version + ".sql");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
logger.info("未找到当前版本的DDL脚本:" + version);
|
||||
return;
|
||||
@@ -156,7 +174,7 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByStart() {
|
||||
public void upgradeByStart(String databaseId) {
|
||||
logger.info("初始升级数据库DDL脚本:{} --> {}", "1.1.1", ZyplayerDocVersion.version);
|
||||
for (int i = ZyplayerDocVersion.versionUpgrade.size() - 1; i >= 0; i--) {
|
||||
UpgradeInfo upgradeInfo = ZyplayerDocVersion.versionUpgrade.get(i);
|
||||
@@ -165,6 +183,9 @@ public class UpgradeSystemDdlTask {
|
||||
continue;
|
||||
}
|
||||
String sql = loadDDLFile("sql/upgrade/" + upgradeInfo.getVersion() + ".sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/upgrade/"+databaseId+"/" + upgradeInfo.getVersion() + ".sql");
|
||||
}
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ import java.util.Objects;
|
||||
*/
|
||||
@RestController
|
||||
public class LoginController {
|
||||
private static Logger logger = LoggerFactory.getLogger(LoginController.class);
|
||||
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
|
||||
|
||||
@Resource
|
||||
private UserInfoService userInfoService;
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.zyplayer.doc.manage.web;
|
||||
|
||||
import com.zyplayer.doc.core.json.DocResponseJson;
|
||||
import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.manage.framework.config.ZyplayerDocConfig;
|
||||
import com.zyplayer.doc.manage.framework.config.ZyplayerModuleKeeper;
|
||||
import com.zyplayer.doc.manage.framework.upgrade.UpgradeUtil;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
||||
@@ -11,7 +11,6 @@ import com.zyplayer.doc.data.repository.manage.entity.UserAuth;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
|
||||
import com.zyplayer.doc.data.service.manage.AuthInfoService;
|
||||
import com.zyplayer.doc.data.service.manage.UserAuthService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@@ -119,7 +119,7 @@ public class UserInfoController {
|
||||
if (StringUtils.isBlank(userInfo.getUserName())) {
|
||||
return DocResponseJson.warn("用户名必填");
|
||||
}
|
||||
Long userId = Optional.ofNullable(userInfo.getId()).orElse(0L);
|
||||
long userId = Optional.ofNullable(userInfo.getId()).orElse(0L);
|
||||
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("user_no", userInfo.getUserNo());
|
||||
queryWrapper.ne(userId > 0, "id", userInfo.getId());
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
# 端口和根路径,jar启动时依此处配置,放tomcat后以tomcat的配置为准
|
||||
server:
|
||||
port: ${SERVER_PORT:8083}
|
||||
@@ -7,7 +6,6 @@ server:
|
||||
compression:
|
||||
enabled: true
|
||||
min-response-size: 2048
|
||||
mim-types: text/css,text/javascript
|
||||
tomcat:
|
||||
# tomcat容器层最大传输限制,不做限制
|
||||
max-http-post-size: -1
|
||||
@@ -19,6 +17,12 @@ zyplayer:
|
||||
doc:
|
||||
# ------zyplayer_doc_manage相关配置------
|
||||
manage:
|
||||
# 管理端的数据库配置
|
||||
datasource:
|
||||
driverClassName: ${DATASOURCE_DRIVER:com.mysql.cj.jdbc.Driver}
|
||||
url: jdbc:mysql://${DATASOURCE_HOST_PORT:127.0.0.1:3306}/${DATASOURCE_DATABASE:zyplayer_doc}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
username: ${DATASOURCE_USER:root}
|
||||
password: ${DATASOURCE_PASSWORD:root}
|
||||
enable:
|
||||
#wiki模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
wiki: ${ZYPLAYER_ENABLE_WIKI:true}
|
||||
@@ -30,28 +34,12 @@ zyplayer:
|
||||
upgradePropertiesUrl: https://gitee.com/zyplayer/zyplayer-doc/raw/master/upgrade.properties
|
||||
# 系统根域名,调试UI时需要使用,同时需要在host文件里配置:127.0.0.1 local.zyplayer.com
|
||||
originDomainRegex: .*\.zyplayer\.com(:\d+|)$
|
||||
# 管理端的数据库配置
|
||||
datasource:
|
||||
driverClassName: ${DATASOURCE_DRIVER:com.mysql.cj.jdbc.Driver}
|
||||
url: jdbc:mysql://${DATASOURCE_HOST_PORT:127.0.0.1:3306}/${DATASOURCE_DATABASE:zyplayer_doc}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
username: ${DATASOURCE_USER:root}
|
||||
password: ${DATASOURCE_PASSWORD:root}
|
||||
# ------WIKI文档相关------
|
||||
wiki:
|
||||
# WIKI文档的文件上传后的存储目录,!!截图或文件还是很重要的,建议您还要定期备份此目录的文件呢!!
|
||||
upload-path: ${SERVER_PORT:/zyplayerDoc/wikiFiles}
|
||||
# 是否检查目录有被系统定期清理的风险,强烈建议开启
|
||||
# WIKI文档的文件上传后的存储目录
|
||||
upload-path: ${WIKI_UPLOAD_PATH:D:/zyplayerDoc/wikiFiles}
|
||||
# 是否检查目录有被系统定期清理的风险,建议开启
|
||||
upload-path-check: true
|
||||
# git本地仓库地址,用于管理WIKI的历史版本
|
||||
git-local-path: ${SERVER_PORT:/zyplayerDoc/wikiGitFiles}
|
||||
# git远程仓库地址,可选配置项,如果存在则会每次修改后push到此仓库,必须先创建远程仓库,项目初始化时会去拉取
|
||||
# 如果没有配置此项,则只会在维护一个本地的git仓库,使用简单
|
||||
# 例:https://gitee.com/zyplayer/zyplayer-doc-wiki-files.git
|
||||
git-remote-url:
|
||||
# git远程仓库登录账号
|
||||
git-remote-username:
|
||||
# git远程仓库登录密码
|
||||
git-remote-password:
|
||||
# ------数据库相关配置------
|
||||
db:
|
||||
# 最大允许导出的行数,设置的过大有可能会导致内存溢出
|
||||
|
||||
60
zyplayer-doc-manage/src/main/resources/application_pg.yml
Normal file
60
zyplayer-doc-manage/src/main/resources/application_pg.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
# 端口和根路径,jar启动时依此处配置,放tomcat后以tomcat的配置为准
|
||||
server:
|
||||
port: ${SERVER_PORT:8083}
|
||||
servlet:
|
||||
context-path: ${CONTEXT_PATH:/}
|
||||
compression:
|
||||
enabled: true
|
||||
min-response-size: 2048
|
||||
tomcat:
|
||||
# tomcat容器层最大传输限制,不做限制
|
||||
max-http-post-size: -1
|
||||
max-http-form-post-size: -1
|
||||
max-swallow-size: -1
|
||||
|
||||
# 整个文档项目的配置
|
||||
zyplayer:
|
||||
doc:
|
||||
# ------zyplayer_doc_manage相关配置------
|
||||
manage:
|
||||
# 管理端的数据库配置
|
||||
datasource:
|
||||
driverClassName: ${DATASOURCE_DRIVER:org.postgresql.Driver}
|
||||
url: jdbc:postgresql://${DATASOURCE_HOST_PORT:127.0.0.1:5432}/${DATASOURCE_DATABASE:zyplayer_doc}?ssl=false&characterEncoding=utf-8¤tSchema=zyplayer_doc
|
||||
username: ${DATASOURCE_USER:rootxxx}
|
||||
password: ${DATASOURCE_PASSWORD:passwordxxxx}
|
||||
enable:
|
||||
#wiki模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
wiki: ${ZYPLAYER_ENABLE_WIKI:true}
|
||||
#db模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
db: ${ZYPLAYER_ENABLE_DB:true}
|
||||
#api模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
api: ${ZYPLAYER_ENABLE_API:true}
|
||||
# 版本和升级信息获取地址
|
||||
upgradePropertiesUrl: https://gitee.com/zyplayer/zyplayer-doc/raw/master/upgrade.properties
|
||||
# 系统根域名,调试UI时需要使用,同时需要在host文件里配置:127.0.0.1 local.zyplayer.com
|
||||
originDomainRegex: .*\.zyplayer\.com(:\d+|)$
|
||||
# ------WIKI文档相关------
|
||||
wiki:
|
||||
# WIKI文档的文件上传后的存储目录
|
||||
upload-path: ${WIKI_UPLOAD_PATH:D:/zyplayerDoc/wikiFiles}
|
||||
# 是否检查目录有被系统定期清理的风险,建议开启
|
||||
upload-path-check: true
|
||||
# ------数据库相关配置------
|
||||
db:
|
||||
# 最大允许导出的行数,设置的过大有可能会导致内存溢出
|
||||
download-max-row: 100000
|
||||
swagger:
|
||||
proxy-request:
|
||||
# 允许代理请求的域名,正则表达式,多个使用 ; 分割,必须设置,防止通过代理接口访问到内部资源,实在觉得没必要可设置为:.+
|
||||
white-domain: .+
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: zyplayer-doc
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: ${SERVLET_MAX_FILE_SIZE:100MB}
|
||||
max-request-size: ${SERVLET_MAX_REQUEST_SIZE:100MB}
|
||||
datasource:
|
||||
continue-on-error: true
|
||||
@@ -442,18 +442,22 @@ CREATE TABLE `backup_task` (
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '备份任务信息';
|
||||
|
||||
CREATE TABLE `wiki_page_template` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '模板信息逐渐',
|
||||
`space_id` bigint(20) NULL DEFAULT NULL COMMENT '空间id',
|
||||
`page_id` bigint(20) NULL DEFAULT NULL COMMENT '模板挂载文档id',
|
||||
`tag_name` varchar(200) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '标签信息',
|
||||
`share_status` tinyint(1) NULL DEFAULT NULL COMMENT '模板公开状态(0-个人模板1-公共模板)',
|
||||
`created` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人id',
|
||||
`create_user` varchar(200) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '创建人名称',
|
||||
`yn` tinyint(1) NOT NULL default '1',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '模板信息表';
|
||||
CREATE TABLE `wiki_page_template` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '模板信息主键',
|
||||
`space_id` bigint null COMMENT '空间id',
|
||||
`page_id` bigint null COMMENT '模板挂载文档id',
|
||||
`tag_name` varchar(50) null COMMENT '标签信息',
|
||||
`share_status` tinyint default 0 not null COMMENT '模板公开状态(0-个人模板1-公共模板)',
|
||||
|
||||
`created` datetime null COMMENT '创建时间',
|
||||
`create_user_id` bigint null COMMENT '创建人id',
|
||||
`create_user` varchar(50) null COMMENT '创建人名称',
|
||||
`modified` datetime null comment '修改时间',
|
||||
`modify_user_id` bigint null comment '修改人ID',
|
||||
`modify_user` varchar(50) null comment '修改人姓名',
|
||||
`yn` tinyint default 1 not null comment '是否有效 1=有效',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '模板信息表';
|
||||
-- -------------------插入必要的数据-------------------
|
||||
-- 用户信息
|
||||
INSERT INTO `user_info` (id, user_no, password, user_name, email, del_flag, creation_time, update_time, sex)
|
||||
|
||||
1191
zyplayer-doc-manage/src/main/resources/sql/full/postgresql_full.sql
Normal file
1191
zyplayer-doc-manage/src/main/resources/sql/full/postgresql_full.sql
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user