22 Commits

Author SHA1 Message Date
sswiki
4784a8d991 !41 add postgresql support
Merge pull request !41 from runner-mei/master
2024-11-30 12:28:31 +00:00
mfk
2c1297430b add postgresql support 2024-11-25 21:17:31 +08:00
sswiki
9de02903aa !40 add postgresql support
Merge pull request !40 from runner-mei/master
2024-11-25 01:30:43 +00:00
runner-mei
0fad018101 add pg_full.sql
Signed-off-by: runner-mei <run_mei@163.com>
2024-11-24 04:01:56 +00:00
sswiki
55ca2a2e43 增加宝塔部署方式
Signed-off-by: sswiki <1773266885@qq.com>
2024-10-26 03:25:22 +00:00
sswiki
d5300d4d76 增加宝塔部署方式
Signed-off-by: sswiki <1773266885@qq.com>
2024-10-26 03:23:30 +00:00
sswiki
802972abd2 修改编码 2024-07-06 19:02:39 +08:00
sswiki
57d560b9ec 去掉类型,使用默认的类型
Signed-off-by: sswiki <1773266885@qq.com>
2024-07-05 15:38:26 +00:00
sswiki
26c0f83bad !39 fix:修复mime-types拼写错误问题
Merge pull request !39 from 裴永鹏/master
2024-07-05 15:37:48 +00:00
peiyp
e8394fac8e fix:修复mime-types拼写错误问题 2024-07-05 23:23:45 +08:00
sswiki
6769fdaa59 build 2024-06-25 19:34:37 +08:00
sswiki
f5d32c6114 优化word文档的导出 2024-06-25 19:29:44 +08:00
sswiki
bdeab06d6c #I9FSZ3 解决导出word没有图片的问题 2024-04-22 21:36:51 +08:00
sswiki
6f24c765ff 修复开放文档将文档内的图片展示为附件的问题 2024-03-08 10:51:31 +08:00
sswiki
b31104112c 修复删除页面时将子页面的名字改为了父目录名称的问题 2024-02-18 10:01:24 +08:00
sswiki
888a2106de 修改模板表SQL 2023-11-24 09:54:45 +08:00
sswiki
feebc250d7 !38 对一大波idea提醒需要优化的地方进行处理
Merge pull request !38 from handy/handy
2023-11-24 01:46:37 +00:00
handy
efa2538736 对一大波idea提醒需要优化的地方进行处理 2023-11-23 16:25:59 +08:00
sswiki
8b1fb129ce update README.md.
Signed-off-by: sswiki <1773266885@qq.com>
2023-10-27 06:53:28 +00:00
sswiki
c28b7a7585 update README.md.
Signed-off-by: sswiki <1773266885@qq.com>
2023-10-27 06:39:51 +00:00
sswiki
abcec4c846 update README.md.
Signed-off-by: sswiki <1773266885@qq.com>
2023-10-27 06:29:02 +00:00
sswiki
2c66ad1b1a 新建 resource 2023-10-27 06:18:52 +00:00
130 changed files with 1815 additions and 422 deletions

7
.gitignore vendored
View File

@@ -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/

View File

@@ -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文档管理工具
欢迎加入微信群与我们一起交流
> 微信群员超过限制只能加好友拉进群,添加微信好友,回复:`加群` 即可
![weixinqun.jpg](https://zyplayer.oss-cn-beijing.aliyuncs.com/doc/weixin/weixinqun.png)
![weixinqun.jpg](https://gitee.com/dromara/zyplayer-doc/raw/master/zyplayer-doc-other/resource/weixinqun.png)
# 快速启动
## 相关依赖
启动本系统仅依赖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分钟初始化完成后即可访问。
![输入图片说明](zyplayer-doc-other/resource/image.png)
## 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 文档管理后台

View File

@@ -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%

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
/**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -10,7 +10,7 @@ import java.util.Date;
/**
* <p>
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* 模板信息
* </p>
*
* @author Sh1yu

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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>

View File

@@ -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

View File

@@ -2,8 +2,6 @@ package com.zyplayer.doc.data.repository.manage.vo;
import lombok.Data;
import java.util.Date;
/**
* <p>

View File

@@ -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文档管理"),
;

View File

@@ -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();
}

View File

@@ -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));

View File

@@ -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;

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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);
/**
* 根据条件获取模板

View File

@@ -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;

View File

@@ -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();

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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小时

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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解析类型

View File

@@ -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;

View File

@@ -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");

View File

@@ -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;

View File

@@ -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";
;
}

View File

@@ -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;
}

View File

@@ -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());

View File

@@ -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));

View File

@@ -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 保存备份记录

View File

@@ -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;
}
/**

View File

@@ -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();

View File

@@ -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));
}

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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("\\]", ""));
}
}

View File

@@ -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);

View File

@@ -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());

View File

@@ -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())) {

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -63,7 +63,6 @@ public class DatabaseBackupUtils {
//@TODO 存入备份记录信息
// 备份文件上传至文件服务器
if (!jobVO.getIsUpload()) {
return;
}
//@TODO 备份文件上传至文件服务器
}

View File

@@ -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"));

View File

@@ -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(){

View File

@@ -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<>();

View File

@@ -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

View File

@@ -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);

View File

@@ -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));

View File

@@ -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;

View File

@@ -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;
}
/**

View File

@@ -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));

View File

@@ -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 -> {

View File

@@ -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);
/**

View File

@@ -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 -> {

View File

@@ -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>-->

View File

@@ -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);
}
}

View File

@@ -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 {
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());

View File

@@ -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:
# 最大允许导出的行数,设置的过大有可能会导致内存溢出

View 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&currentSchema=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

View File

@@ -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)

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