From 1f7cd7ad6c805732ff69d4f9c5fd89c56f16364e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?=
<806783409@qq.com>
Date: Wed, 21 Aug 2019 23:17:04 +0800
Subject: [PATCH] =?UTF-8?q?sql=E6=89=A7=E8=A1=8C=E5=99=A8=E5=BC=80?=
=?UTF-8?q?=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/manage/entity/DbFavorite.java | 118 +++++++++++++++++
.../repository/manage/entity/DbHistory.java | 105 ++++++++++++++++
.../manage/mapper/DbFavoriteMapper.java | 16 +++
.../manage/mapper/DbHistoryMapper.java | 20 +++
.../support/generator/CodeGenerator.java | 4 +-
.../service/manage/DbFavoriteService.java | 16 +++
.../data/service/manage/DbHistoryService.java | 18 +++
.../manage/impl/DbFavoriteServiceImpl.java | 20 +++
.../manage/impl/DbHistoryServiceImpl.java | 41 ++++++
.../mapper/manage/DbFavoriteMapper.xml | 5 +
.../mapper/manage/DbHistoryMapper.xml | 5 +
.../controller/DbSqlExecutorController.java | 68 +++++++++-
.../framework/db/mapper/base/SqlExecutor.java | 18 ++-
.../sql/zyplayer_doc_manage.1.0.4.sql | 33 +++++
zyplayer-doc-ui/db-ui/package-lock.json | 29 +++--
zyplayer-doc-ui/db-ui/src/App.vue | 2 +-
.../db-ui/src/common/config/apilist.js | 3 +
.../db-ui/src/views/data/Executor.vue | 119 ++++++++++++++++--
18 files changed, 608 insertions(+), 32 deletions(-)
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbFavorite.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbHistory.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbFavoriteMapper.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbHistoryMapper.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbFavoriteService.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbHistoryService.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbFavoriteServiceImpl.java
create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbHistoryServiceImpl.java
create mode 100644 zyplayer-doc-data/src/main/resources/mapper/manage/DbFavoriteMapper.xml
create mode 100644 zyplayer-doc-data/src/main/resources/mapper/manage/DbHistoryMapper.xml
create mode 100644 zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.4.sql
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbFavorite.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbFavorite.java
new file mode 100644
index 00000000..830f7d83
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbFavorite.java
@@ -0,0 +1,118 @@
+package com.zyplayer.doc.data.repository.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public class DbFavorite implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键自增ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 收藏标题
+ */
+ private String name;
+
+ /**
+ * 收藏内容
+ */
+ private String content;
+
+ /**
+ * 创建人ID
+ */
+ private Long createUserId;
+
+ /**
+ * 创建人名字
+ */
+ private String createUserName;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 是否有效 0=无效 1=有效
+ */
+ private Integer yn;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+ public Long getCreateUserId() {
+ return createUserId;
+ }
+
+ public void setCreateUserId(Long createUserId) {
+ this.createUserId = createUserId;
+ }
+ public String getCreateUserName() {
+ return createUserName;
+ }
+
+ public void setCreateUserName(String createUserName) {
+ this.createUserName = createUserName;
+ }
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ public Integer getYn() {
+ return yn;
+ }
+
+ public void setYn(Integer yn) {
+ this.yn = yn;
+ }
+
+ @Override
+ public String toString() {
+ return "DbFavorite{" +
+ "id=" + id +
+ ", name=" + name +
+ ", content=" + content +
+ ", createUserId=" + createUserId +
+ ", createUserName=" + createUserName +
+ ", createTime=" + createTime +
+ ", yn=" + yn +
+ "}";
+ }
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbHistory.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbHistory.java
new file mode 100644
index 00000000..bfe975d7
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbHistory.java
@@ -0,0 +1,105 @@
+package com.zyplayer.doc.data.repository.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public class DbHistory implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键自增ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * sql内容
+ */
+ private String content;
+
+ /**
+ * 创建人ID
+ */
+ private Long createUserId;
+
+ /**
+ * 创建人名字
+ */
+ private String createUserName;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 是否有效 0=无效 1=有效
+ */
+ private Integer yn;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+ public Long getCreateUserId() {
+ return createUserId;
+ }
+
+ public void setCreateUserId(Long createUserId) {
+ this.createUserId = createUserId;
+ }
+ public String getCreateUserName() {
+ return createUserName;
+ }
+
+ public void setCreateUserName(String createUserName) {
+ this.createUserName = createUserName;
+ }
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ public Integer getYn() {
+ return yn;
+ }
+
+ public void setYn(Integer yn) {
+ this.yn = yn;
+ }
+
+ @Override
+ public String toString() {
+ return "DbHistory{" +
+ "id=" + id +
+ ", content=" + content +
+ ", createUserId=" + createUserId +
+ ", createUserName=" + createUserName +
+ ", createTime=" + createTime +
+ ", yn=" + yn +
+ "}";
+ }
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbFavoriteMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbFavoriteMapper.java
new file mode 100644
index 00000000..fed7a4ba
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbFavoriteMapper.java
@@ -0,0 +1,16 @@
+package com.zyplayer.doc.data.repository.manage.mapper;
+
+import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public interface DbFavoriteMapper extends BaseMapper {
+
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbHistoryMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbHistoryMapper.java
new file mode 100644
index 00000000..9f3f8093
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbHistoryMapper.java
@@ -0,0 +1,20 @@
+package com.zyplayer.doc.data.repository.manage.mapper;
+
+import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Update;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public interface DbHistoryMapper extends BaseMapper {
+
+ @Update("delete a from db_history a,(select id from db_history order by id desc limit 100, 1) b where a.id < b.id")
+ void deleteHistory();
+
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java
index c7930008..1d809c8a 100644
--- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java
@@ -19,8 +19,8 @@ public class CodeGenerator {
final String moduleName = "manage";
// final String[] tableName = { "zyplayer_storage", "auth_info", "user_auth", "user_info", "db_datasource" };
// final String[] tableName = { "wiki_space", "wiki_page", "wiki_page_content", "wiki_page_file", "wiki_page_comment", "wiki_page_zan" };
-// final String[] tableName = { "db_datasource" };
- final String[] tableName = { "es_datasource" };
+// final String[] tableName = { "db_datasource", "es_datasource", "db_favorite" };
+ final String[] tableName = { "db_history" };
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbFavoriteService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbFavoriteService.java
new file mode 100644
index 00000000..e05ebf4a
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbFavoriteService.java
@@ -0,0 +1,16 @@
+package com.zyplayer.doc.data.service.manage;
+
+import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public interface DbFavoriteService extends IService {
+
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbHistoryService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbHistoryService.java
new file mode 100644
index 00000000..3c77070d
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbHistoryService.java
@@ -0,0 +1,18 @@
+package com.zyplayer.doc.data.service.manage;
+
+import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+public interface DbHistoryService extends IService {
+
+ void saveHistory(String content);
+
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbFavoriteServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbFavoriteServiceImpl.java
new file mode 100644
index 00000000..199c2b71
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbFavoriteServiceImpl.java
@@ -0,0 +1,20 @@
+package com.zyplayer.doc.data.service.manage.impl;
+
+import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
+import com.zyplayer.doc.data.repository.manage.mapper.DbFavoriteMapper;
+import com.zyplayer.doc.data.service.manage.DbFavoriteService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+@Service
+public class DbFavoriteServiceImpl extends ServiceImpl implements DbFavoriteService {
+
+}
diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbHistoryServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbHistoryServiceImpl.java
new file mode 100644
index 00000000..871e1edd
--- /dev/null
+++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbHistoryServiceImpl.java
@@ -0,0 +1,41 @@
+package com.zyplayer.doc.data.service.manage.impl;
+
+import com.zyplayer.doc.data.config.security.DocUserDetails;
+import com.zyplayer.doc.data.config.security.DocUserUtil;
+import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
+import com.zyplayer.doc.data.repository.manage.mapper.DbHistoryMapper;
+import com.zyplayer.doc.data.service.manage.DbHistoryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author 暮光:城中城
+ * @since 2019-08-21
+ */
+@Service
+public class DbHistoryServiceImpl extends ServiceImpl implements DbHistoryService {
+
+ @Resource
+ DbHistoryMapper dbHistoryMapper;
+
+ @Override
+ public void saveHistory(String content) {
+ DocUserDetails currentUser = DocUserUtil.getCurrentUser();
+ DbHistory dbHistory = new DbHistory();
+ dbHistory.setContent(content);
+ dbHistory.setCreateTime(new Date());
+ dbHistory.setCreateUserId(currentUser.getUserId());
+ dbHistory.setCreateUserName(currentUser.getUsername());
+ dbHistory.setYn(1);
+ this.save(dbHistory);
+ // 删除多余的数据
+ dbHistoryMapper.deleteHistory();
+ }
+}
diff --git a/zyplayer-doc-data/src/main/resources/mapper/manage/DbFavoriteMapper.xml b/zyplayer-doc-data/src/main/resources/mapper/manage/DbFavoriteMapper.xml
new file mode 100644
index 00000000..ed347ae7
--- /dev/null
+++ b/zyplayer-doc-data/src/main/resources/mapper/manage/DbFavoriteMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/zyplayer-doc-data/src/main/resources/mapper/manage/DbHistoryMapper.xml b/zyplayer-doc-data/src/main/resources/mapper/manage/DbHistoryMapper.xml
new file mode 100644
index 00000000..2b164024
--- /dev/null
+++ b/zyplayer-doc-data/src/main/resources/mapper/manage/DbHistoryMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbSqlExecutorController.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbSqlExecutorController.java
index 8874b597..66b002e5 100644
--- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbSqlExecutorController.java
+++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbSqlExecutorController.java
@@ -1,19 +1,35 @@
package com.zyplayer.doc.db.controller;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.core.util.StringUtil;
+import com.zyplayer.doc.data.config.security.DocUserDetails;
+import com.zyplayer.doc.data.config.security.DocUserUtil;
+import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
+import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
+import com.zyplayer.doc.data.repository.manage.mapper.DbFavoriteMapper;
+import com.zyplayer.doc.data.service.manage.DbFavoriteService;
+import com.zyplayer.doc.data.service.manage.DbHistoryService;
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
+import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
/**
* sql执行器
@@ -28,13 +44,23 @@ public class DbSqlExecutorController {
@Resource
SqlExecutor sqlExecutor;
+ @Resource
+ DbHistoryService dbHistoryService;
+ @Resource
+ DbFavoriteService dbFavoriteService;
@PostMapping(value = "/execute")
public ResponseJson execute(Long sourceId, String executeId, String sql, String params) {
- Map paramMap = JSON.parseObject(params);
+ if (StringUtils.isBlank(sql)) {
+ return DocDbResponseJson.warn("执行的SQL不能为空");
+ }
try {
+ Map paramMap = JSON.parseObject(params);
ExecuteResult executeResult = sqlExecutor.execute(sourceId, executeId, sql, paramMap);
- String resultJsonStr = JSON.toJSONString(executeResult, SerializerFeature.WriteMapNullValue);
+ SerializeConfig mapping = new SerializeConfig();
+ mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
+ mapping.put(Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
+ String resultJsonStr = JSON.toJSONString(executeResult, mapping, SerializerFeature.WriteMapNullValue);
return DocDbResponseJson.ok(resultJsonStr);
} catch (Exception e) {
return DocDbResponseJson.warn(StringUtil.getException(e));
@@ -46,5 +72,43 @@ public class DbSqlExecutorController {
sqlExecutor.cancel(executeId);
return DocDbResponseJson.ok();
}
+
+ @PostMapping(value = "/history/list")
+ public ResponseJson historyList() {
+ UpdateWrapper wrapper = new UpdateWrapper<>();
+ wrapper.orderByDesc("id");
+ List favoriteList = dbHistoryService.list(wrapper);
+ return DocDbResponseJson.ok(favoriteList);
+ }
+
+ @PostMapping(value = "/favorite/list")
+ public ResponseJson favoriteList() {
+ DocUserDetails currentUser = DocUserUtil.getCurrentUser();
+ UpdateWrapper wrapper = new UpdateWrapper<>();
+ wrapper.eq("create_user_id", currentUser.getUserId());
+ wrapper.eq("yn", 1);
+ wrapper.orderByDesc("id");
+ List favoriteList = dbFavoriteService.list(wrapper);
+ return DocDbResponseJson.ok(favoriteList);
+ }
+
+ @PostMapping(value = "/favorite/add")
+ public ResponseJson addFavorite(DbFavorite dbFavorite) {
+ Integer yn = Optional.ofNullable(dbFavorite.getYn()).orElse(1);
+ if (yn == 1 && StringUtils.isBlank(dbFavorite.getContent())) {
+ return DocDbResponseJson.warn("收藏的SQL不能为空");
+ }
+ DocUserDetails currentUser = DocUserUtil.getCurrentUser();
+ if (dbFavorite.getId() != null && dbFavorite.getId() > 0) {
+ dbFavoriteService.updateById(dbFavorite);
+ } else {
+ dbFavorite.setCreateTime(new Date());
+ dbFavorite.setCreateUserId(currentUser.getUserId());
+ dbFavorite.setCreateUserName(currentUser.getUsername());
+ dbFavorite.setYn(1);
+ dbFavoriteService.save(dbFavorite);
+ }
+ return DocDbResponseJson.ok();
+ }
}
diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/base/SqlExecutor.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/base/SqlExecutor.java
index 2267af64..121c5b62 100644
--- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/base/SqlExecutor.java
+++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/base/SqlExecutor.java
@@ -1,6 +1,12 @@
package com.zyplayer.doc.db.framework.db.mapper.base;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.zyplayer.doc.data.config.security.DocUserDetails;
+import com.zyplayer.doc.data.config.security.DocUserUtil;
+import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
+import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
+import com.zyplayer.doc.data.service.manage.DbFavoriteService;
+import com.zyplayer.doc.data.service.manage.DbHistoryService;
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean;
import com.zyplayer.doc.db.framework.db.interceptor.SqlLogUtil;
@@ -33,6 +39,8 @@ public class SqlExecutor {
@Resource
DatabaseRegistrationBean databaseRegistrationBean;
+ @Resource
+ DbHistoryService dbHistoryService;
// 执行中的PreparedStatement信息,用于强制取消执行
private static final Map statementMap = new ConcurrentHashMap<>();
@@ -80,7 +88,11 @@ public class SqlExecutor {
StaticSqlSource parse = (StaticSqlSource) sqlSourceBuilder.parse(sql, Object.class, paramMap);
BoundSql boundSql = parse.getBoundSql(new Object());
sql = boundSql.getSql();
- logger.info("sql ==> {}", SqlLogUtil.getSqlString(paramMap, boundSql));
+ String sqlStr = SqlLogUtil.getSqlString(paramMap, boundSql);
+ logger.info("sql ==> {}", sqlStr);
+ // 保留历史记录
+ dbHistoryService.saveHistory(sqlStr);
+
List parameterMappings = boundSql.getParameterMappings();
PreparedStatement preparedStatement = null;
// 执行查询
@@ -100,8 +112,8 @@ public class SqlExecutor {
while (resultSet.next()) {
Map resultMap = new LinkedHashMap<>();
ResultSetMetaData metaData = resultSet.getMetaData();
- for (int i = 0; i < metaData.getColumnCount(); i++) {
- resultMap.put(metaData.getColumnName(i + 1), resultSet.getObject(i + 1));
+ for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
+ resultMap.put(metaData.getColumnName(i), resultSet.getObject(i));
}
if (handler != null) {
handler.handleResult(resultMap);
diff --git a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.4.sql b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.4.sql
new file mode 100644
index 00000000..882baa4d
--- /dev/null
+++ b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.4.sql
@@ -0,0 +1,33 @@
+
+--
+-- !!重要说明!!
+-- 1、本sql文件分为:从1.0.3版本升级 和 全新的库,即增量和全量的区分,请选择性执行
+-- 2、建议数据库版本:5.7.25
+--
+
+-- ------------------------从1.0.3版本升级:------------------------
+
+CREATE TABLE `db_favorite` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键自增ID',
+ `name` varchar(50) DEFAULT NULL COMMENT '收藏标题',
+ `content` varchar(10000) DEFAULT NULL COMMENT '收藏内容',
+ `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
+ `create_user_name` varchar(20) DEFAULT NULL COMMENT '创建人名字',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `yn` tinyint(4) DEFAULT NULL COMMENT '是否有效 0=无效 1=有效',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
+
+CREATE TABLE `db_history` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键自增ID',
+ `content` varchar(10000) DEFAULT NULL COMMENT 'sql内容',
+ `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
+ `create_user_name` varchar(20) DEFAULT NULL COMMENT '创建人名字',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `yn` tinyint(4) DEFAULT NULL COMMENT '是否有效 0=无效 1=有效',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
+
+
+
+-- ------------------------全新的库:------------------------
diff --git a/zyplayer-doc-ui/db-ui/package-lock.json b/zyplayer-doc-ui/db-ui/package-lock.json
index 9e542f2a..0cc56bbd 100644
--- a/zyplayer-doc-ui/db-ui/package-lock.json
+++ b/zyplayer-doc-ui/db-ui/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "element-starter",
+ "name": "console-ui",
"requires": true,
"lockfileVersion": 1,
"dependencies": {
@@ -239,7 +239,7 @@
},
"async-validator": {
"version": "1.8.5",
- "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz",
+ "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz?cache=0&sync_timestamp=1565685468183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-1.8.5.tgz",
"integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
"requires": {
"babel-runtime": "6.x"
@@ -2014,7 +2014,7 @@
},
"deepmerge": {
"version": "1.5.2",
- "resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
+ "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
"integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
},
"define-properties": {
@@ -2237,9 +2237,9 @@
"dev": true
},
"element-ui": {
- "version": "2.8.2",
- "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.8.2.tgz",
- "integrity": "sha1-Iaeky5Jhaw+LddTU5jfToc2MCd4=",
+ "version": "2.11.1",
+ "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.11.1.tgz",
+ "integrity": "sha1-K2f57uPtouaISHPBxYnL4w2anWA=",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -2770,7 +2770,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -3185,7 +3186,8 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -3241,6 +3243,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -3284,12 +3287,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -4637,7 +4642,7 @@
},
"normalize-wheel": {
"version": "1.0.1",
- "resolved": "http://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
+ "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-wheel%2Fdownload%2Fnormalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
},
"nth-check": {
@@ -6032,7 +6037,7 @@
},
"resize-observer-polyfill": {
"version": "1.5.1",
- "resolved": "http://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
+ "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
},
"resolve": {
diff --git a/zyplayer-doc-ui/db-ui/src/App.vue b/zyplayer-doc-ui/db-ui/src/App.vue
index d784f84b..66302956 100644
--- a/zyplayer-doc-ui/db-ui/src/App.vue
+++ b/zyplayer-doc-ui/db-ui/src/App.vue
@@ -19,8 +19,8 @@
系统管理
数据源管理
- 数据库表导出
SQL执行器
+ 数据库表导出
-
执行
+
取消执行
+
执行
- 收藏
- 历史记录
+ 收藏
+ 收藏及历史
@@ -24,15 +25,43 @@
{{executeError}}
-
+
+
+ {{scope.row._index}}
+
-
-
-
打开里面的!
+
+
+
+
+
+
+
+
+
+
+ 输入
+ 删除
+
+
+
+
+
+
+
+
+
+ 输入
+ 收藏
+
+
+
+
+
@@ -53,18 +82,21 @@
databaseList: [],
choiceDatabase: "",
+ sqlExecuting: false,
executeResultList: [],
executeResultCols: [],
sqlExecutorEditor: {},
nowExecutorId: 1,
executeError: "",
-
+ // 收藏及历史
historyDrawerVisible: false,
+ myFavoriteList: [],
+ myHistoryListList: [],
}
},
mounted: function () {
app = this;
- window.tableMetaInfo = "helloWorld";
+ window.tableMetaInfo = "";
app.sqlExecutorEditor = app.initAceEditor("sqlExecutorEditor", 20);
this.loadDatasourceList();
},
@@ -87,6 +119,45 @@
app.$message.success("取消成功");
});
},
+ loadHistoryAndFavoriteList() {
+ this.historyDrawerVisible = true;
+ this.loadHistoryList();
+ this.loadFavoriteList();
+ },
+ loadFavoriteList() {
+ this.common.post(this.apilist1.favoriteList, {}, function (json) {
+ app.myFavoriteList = json.data || [];
+ });
+ },
+ loadHistoryList() {
+ this.common.post(this.apilist1.historyList, {}, function (json) {
+ app.myHistoryListList = json.data || [];
+ });
+ },
+ addFavorite(sqlValue) {
+ if (!sqlValue) {
+ sqlValue = this.sqlExecutorEditor.getSelectedText();
+ if (!sqlValue) {
+ sqlValue = this.sqlExecutorEditor.getValue();
+ }
+ }
+ var param = {name: '我的收藏', content: sqlValue};
+ this.common.post(this.apilist1.updateFavorite, param, function (json) {
+ app.$message.success("收藏成功");
+ app.loadFavoriteList();
+ });
+ },
+ delFavorite(row) {
+ var param = {id: row.id, yn: 0};
+ this.common.post(this.apilist1.updateFavorite, param, function (json) {
+ app.$message.success("删除成功");
+ app.loadFavoriteList();
+ });
+ },
+ inputFavoriteSql(content) {
+ this.sqlExecutorEditor.setValue(content);
+ this.historyDrawerVisible = false;
+ },
doExecutorSql() {
if (!this.choiceDatasourceId) {
app.$message.error("请先选择数据源");
@@ -97,32 +168,43 @@
app.executeResultCols = [];
this.nowExecutorId = (new Date()).getTime() + Math.ceil(Math.random() * 1000);
- var sql = this.sqlExecutorEditor.getValue();
+ var sqlValue = this.sqlExecutorEditor.getSelectedText();
+ if (!sqlValue) {
+ sqlValue = this.sqlExecutorEditor.getValue();
+ }
+ this.sqlExecuting = true;
this.common.postNonCheck(this.apilist1.executeSql, {
sourceId: this.choiceDatasourceId,
executeId: this.nowExecutorId,
- sql: sql,
+ sql: sqlValue,
params: '',
}, function (json) {
+ app.sqlExecuting = false;
if (json.errCode != 200) {
app.executeError = json.errMsg;
return;
}
var resultData = JSON.parse(json.data) || {};
var dataList = resultData.result || [];
- app.executeResultList = dataList;
var executeResultCols = [];
if (dataList.length > 0) {
for (var key in dataList[0]) {
executeResultCols.push({prop: key});
}
+ for (var i = 0; i < dataList.length; i++) {
+ dataList[i]._index = i + 1;
+ }
}
+ app.executeResultList = dataList;
app.executeResultCols = executeResultCols;
});
},
loadDatasourceList() {
this.common.post(this.apilist1.datasourceList, {}, function (json) {
app.datasourceList = json.data || [];
+ if (app.datasourceList.length > 0) {
+ app.choiceDatasourceId = app.datasourceList[0].id;
+ }
});
},
datasourceChangeEvents() {
@@ -144,4 +226,17 @@
.data-executor-vue .el-card__body{
padding: 10px;
}
+ .data-executor-vue .el-table td, .el-table th{
+ padding: 6px 0;
+ }
+ .data-executor-vue-out .el-tabs__nav-scroll{
+ padding-left: 20px;
+ }
+ .data-executor-vue-out .el-button+.el-button{
+ margin-left: 0px;
+ }
+ .data-executor-vue-out .el-table__body-wrapper{
+ height: calc(100vh - 180px);
+ overflow-y: auto;
+ }