From 592dec16cc1e208f5cc610ba51c8977b014eccb9 Mon Sep 17 00:00:00 2001
From: sunshine7058 <2564255161@qq.com>
Date: Mon, 22 Apr 2024 14:27:05 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
muyu-common/muyu-common-core/pom.xml | 6 +
.../muyu-data-source-common/pom.xml | 33 ++++
.../muyu/data/source/domain/DatabaseType.java | 89 +++++++++++
.../domain/req/DatabaseTypeEditReq.java | 38 +++++
.../domain/req/DatabaseTypeQueryReq.java | 38 +++++
.../domain/req/DatabaseTypeSaveReq.java | 46 ++++++
.../muyu-data-source-remote/pom.xml | 20 +++
.../muyu-data-source-server/pom.xml | 91 +++++++++++
.../controller/DataSourceController.java | 121 ++++++++++++++
.../controller/DatabaseTypeController.java | 116 ++++++++++++++
.../data/source/mapper/DataSourceMapper.java | 15 ++
.../source/mapper/DatabaseTypeMapper.java | 15 ++
.../source/service/DataSourceService.java | 23 +++
.../source/service/DatabaseTypeService.java | 22 +++
.../service/impl/DataSourceServiceImpl.java | 148 ++++++++++++++++++
.../service/impl/DatabaseTypeServiceImpl.java | 61 ++++++++
.../mapper/data/DataSourceMapper.xml | 34 ++++
.../mapper/data/DatabaseTypeMapper.xml | 22 +++
muyu-modules/muyu-data-source/pom.xml | 27 ++++
muyu-modules/pom.xml | 1 +
pom.xml | 7 +
21 files changed, 973 insertions(+)
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DatabaseType.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeEditReq.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeQueryReq.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeSaveReq.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-remote/pom.xml
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/pom.xml
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DatabaseTypeMapper.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DatabaseTypeService.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DatabaseTypeServiceImpl.java
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml
create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DatabaseTypeMapper.xml
create mode 100644 muyu-modules/muyu-data-source/pom.xml
diff --git a/muyu-common/muyu-common-core/pom.xml b/muyu-common/muyu-common-core/pom.xml
index d7ff491..1c04765 100644
--- a/muyu-common/muyu-common-core/pom.xml
+++ b/muyu-common/muyu-common-core/pom.xml
@@ -136,6 +136,12 @@
lombok
+
+
+ redis.clients
+ jedis
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml b/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml
new file mode 100644
index 0000000..0ff2638
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-common/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-data-source
+ 3.6.3
+
+
+ muyu-data-source-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ com.muyu
+ muyu-common-core
+
+
+ com.muyu
+ muyu-common-security
+
+
+ com.muyu
+ muyu-common-log
+
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DatabaseType.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DatabaseType.java
new file mode 100644
index 0000000..a10efb3
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/DatabaseType.java
@@ -0,0 +1,89 @@
+package com.muyu.data.source.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.data.source.domain.req.DatabaseTypeQueryReq;
+import com.muyu.data.source.domain.req.DatabaseTypeSaveReq;
+import com.muyu.data.source.domain.req.DatabaseTypeEditReq;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 数据源类型对象 database_type
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("database_type")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DatabaseType", description = "数据源类型")
+public class DatabaseType extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+ @TableId(value = "database_id",type = IdType.AUTO)
+ @ApiModelProperty(name = "主键", value = "主键")
+ private Long databaseId;
+
+ /** 名称 */
+ @Excel(name = "名称")
+ @ApiModelProperty(name = "名称", value = "名称")
+ private String databaseName;
+
+ /** 注册驱动 */
+ @Excel(name = "注册驱动")
+ @ApiModelProperty(name = "注册驱动", value = "注册驱动")
+ private String driverManager;
+
+ /** 前缀 */
+ @Excel(name = "前缀")
+ @ApiModelProperty(name = "前缀", value = "前缀")
+ private String urlPre;
+
+ /**
+ * 查询构造器
+ */
+ public static DatabaseType queryBuild( DatabaseTypeQueryReq databaseTypeQueryReq){
+ return DatabaseType.builder()
+ .databaseName(databaseTypeQueryReq.getDatabaseName())
+ .driverManager(databaseTypeQueryReq.getDriverManager())
+ .urlPre(databaseTypeQueryReq.getUrlPre())
+ .build();
+ }
+
+ /**
+ * 添加构造器
+ */
+ public static DatabaseType saveBuild(DatabaseTypeSaveReq databaseTypeSaveReq){
+ return DatabaseType.builder()
+ .databaseName(databaseTypeSaveReq.getDatabaseName())
+ .driverManager(databaseTypeSaveReq.getDriverManager())
+ .urlPre(databaseTypeSaveReq.getUrlPre())
+ .build();
+ }
+
+ /**
+ * 修改构造器
+ */
+ public static DatabaseType editBuild(Long databaseId, DatabaseTypeEditReq databaseTypeEditReq){
+ return DatabaseType.builder()
+ .databaseId(databaseId)
+ .databaseName(databaseTypeEditReq.getDatabaseName())
+ .driverManager(databaseTypeEditReq.getDriverManager())
+ .urlPre(databaseTypeEditReq.getUrlPre())
+ .build();
+ }
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeEditReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeEditReq.java
new file mode 100644
index 0000000..48ac2c3
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeEditReq.java
@@ -0,0 +1,38 @@
+package com.muyu.data.source.domain.req;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 数据源类型对象 database_type
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "DatabaseTypeEditReq", description = "数据源类型")
+public class DatabaseTypeEditReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 名称 */
+ @ApiModelProperty(name = "名称", value = "名称")
+ private String databaseName;
+
+ /** 注册驱动 */
+ @ApiModelProperty(name = "注册驱动", value = "注册驱动")
+ private String driverManager;
+
+ /** 前缀 */
+ @ApiModelProperty(name = "前缀", value = "前缀")
+ private String urlPre;
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeQueryReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeQueryReq.java
new file mode 100644
index 0000000..e5c934d
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeQueryReq.java
@@ -0,0 +1,38 @@
+package com.muyu.data.source.domain.req;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 数据源类型对象 database_type
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "DatabaseTypeQueryReq", description = "数据源类型")
+public class DatabaseTypeQueryReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 名称 */
+ @ApiModelProperty(name = "名称", value = "名称")
+ private String databaseName;
+
+ /** 注册驱动 */
+ @ApiModelProperty(name = "注册驱动", value = "注册驱动")
+ private String driverManager;
+
+ /** 前缀 */
+ @ApiModelProperty(name = "前缀", value = "前缀")
+ private String urlPre;
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeSaveReq.java b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeSaveReq.java
new file mode 100644
index 0000000..3f3a079
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-common/src/main/java/com/muyu/data/source/domain/req/DatabaseTypeSaveReq.java
@@ -0,0 +1,46 @@
+package com.muyu.data.source.domain.req;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import io.swagger.annotations.*;
+import com.muyu.common.core.web.domain.BaseEntity;
+
+/**
+ * 数据源类型对象 database_type
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "DatabaseTypeSaveReq", description = "数据源类型")
+public class DatabaseTypeSaveReq extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+
+ @ApiModelProperty(name = "主键", value = "主键")
+ private Long databaseId;
+
+ /** 名称 */
+
+ @ApiModelProperty(name = "名称", value = "名称")
+ private String databaseName;
+
+ /** 注册驱动 */
+
+ @ApiModelProperty(name = "注册驱动", value = "注册驱动")
+ private String driverManager;
+
+ /** 前缀 */
+
+ @ApiModelProperty(name = "前缀", value = "前缀")
+ private String urlPre;
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-remote/pom.xml b/muyu-modules/muyu-data-source/muyu-data-source-remote/pom.xml
new file mode 100644
index 0000000..ab202ca
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-remote/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-data-source
+ 3.6.3
+
+
+ muyu-data-source-remote
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/pom.xml b/muyu-modules/muyu-data-source/muyu-data-source-server/pom.xml
new file mode 100644
index 0000000..22f2b25
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/pom.xml
@@ -0,0 +1,91 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-data-source
+ 3.6.3
+
+
+ muyu-data-source-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.muyu
+ muyu-data-source-common
+ ${muyu.version}
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ muyu-common-datasource
+
+
+
+
+ com.muyu
+ muyu-common-datascope
+
+
+
+
+ com.muyu
+ muyu-common-log
+
+
+
+
+ com.muyu
+ muyu-common-swagger
+
+
+
+
+
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java
new file mode 100644
index 0000000..59af459
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DataSourceController.java
@@ -0,0 +1,121 @@
+package com.muyu.data.source.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.data.source.domain.DataSource;
+import com.muyu.data.source.domain.req.DataSourceQueryReq;
+import com.muyu.data.source.domain.req.DataSourceSaveReq;
+import com.muyu.data.source.domain.req.DataSourceEditReq;
+import com.muyu.data.source.service.DataSourceService;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 数据源Controller
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Api(tags = "数据源")
+@RestController
+@RequestMapping("/source")
+public class DataSourceController extends BaseController {
+ @Autowired
+ private DataSourceService dataSourceService;
+
+ /**
+ * 查询数据源列表
+ */
+ @ApiOperation("获取数据源列表")
+ @RequiresPermissions("data:source:list")
+ @GetMapping("/list")
+ public Result> list(DataSourceQueryReq dataSourceQueryReq) {
+ startPage();
+ List list = dataSourceService.list(DataSource.queryBuild(dataSourceQueryReq));
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出数据源列表
+ */
+ @ApiOperation("导出数据源列表")
+ @RequiresPermissions("data:source:export")
+ @Log(title = "数据源", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, DataSource dataSource) {
+ List list = dataSourceService.list(dataSource);
+ ExcelUtil util = new ExcelUtil(DataSource.class);
+ util.exportExcel(response, list, "数据源数据");
+ }
+
+ /**
+ * 获取数据源详细信息
+ */
+ @ApiOperation("获取数据源详细信息")
+ @RequiresPermissions("data:source:query")
+ @GetMapping(value = "/{id}")
+ @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
+ public Result getInfo(@PathVariable("id") Long id) {
+ return Result.success(dataSourceService.getById(id));
+ }
+
+ /**
+ * 新增数据源
+ */
+ @RequiresPermissions("data:source:add")
+ @Log(title = "数据源", businessType = BusinessType.INSERT)
+ @PostMapping
+ @ApiOperation("新增数据源")
+ public Result add(@RequestBody DataSourceSaveReq dataSourceSaveReq) {
+ return toAjax(dataSourceService.save(DataSource.saveBuild(dataSourceSaveReq)));
+ }
+
+ /**
+ * 修改数据源
+ */
+ @RequiresPermissions("data:source:edit")
+ @Log(title = "数据源", businessType = BusinessType.UPDATE)
+ @PutMapping("/{id}")
+ @ApiOperation("修改数据源")
+ public Result edit(@PathVariable Long id, @RequestBody DataSourceEditReq dataSourceEditReq) {
+ return toAjax(dataSourceService.updateById(DataSource.editBuild(id,dataSourceEditReq)));
+ }
+
+ /**
+ * 删除数据源
+ */
+ @RequiresPermissions("data:source:remove")
+ @Log(title = "数据源", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ @ApiOperation("删除数据源")
+ @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
+ public Result remove(@PathVariable List ids) {
+ return toAjax(dataSourceService.removeBatchByIds(ids));
+ }
+ /**
+ * 测试连接数据源
+ */
+ @RequiresPermissions("data:source:jdbc")
+ @Log(title = "数据源类型", businessType = BusinessType.DELETE)
+ @PostMapping("/test/{databaseId}")
+ @ApiOperation("测试数据源")
+ public Result testConnection(@PathVariable("databaseId") Long id) {
+ return Result.success(dataSourceService.testConnection(id));
+ }
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java
new file mode 100644
index 0000000..e786dc0
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/controller/DatabaseTypeController.java
@@ -0,0 +1,116 @@
+package com.muyu.data.source.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.log.annotation.Log;
+import com.muyu.common.log.enums.BusinessType;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.data.source.domain.DatabaseType;
+import com.muyu.data.source.domain.req.DatabaseTypeQueryReq;
+import com.muyu.data.source.domain.req.DatabaseTypeSaveReq;
+import com.muyu.data.source.domain.req.DatabaseTypeEditReq;
+import com.muyu.data.source.service.DatabaseTypeService;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 数据源类型Controller
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Api(tags = "数据源类型")
+@RestController
+@RequestMapping("/source/type")
+public class DatabaseTypeController extends BaseController {
+ @Autowired
+ private DatabaseTypeService databaseTypeService;
+
+ /**
+ * 查询数据源类型列表
+ */
+ @ApiOperation("获取数据源类型列表")
+ @RequiresPermissions("data:type:list")
+ @GetMapping("/list")
+ public Result> list(DatabaseTypeQueryReq databaseTypeQueryReq) {
+ startPage();
+ List list = databaseTypeService.list(DatabaseType.queryBuild(databaseTypeQueryReq));
+ return Result.success(list);
+ }
+
+ /**
+ * 导出数据源类型列表
+ */
+ @ApiOperation("导出数据源类型列表")
+ @RequiresPermissions("data:type:export")
+ @Log(title = "数据源类型", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, DatabaseType databaseType) {
+ List list = databaseTypeService.list(databaseType);
+ ExcelUtil util = new ExcelUtil(DatabaseType.class);
+ util.exportExcel(response, list, "数据源类型数据");
+ }
+
+ /**
+ * 获取数据源类型详细信息
+ */
+ @ApiOperation("获取数据源类型详细信息")
+ @RequiresPermissions("data:type:query")
+ @GetMapping(value = "/{databaseId}")
+ @ApiImplicitParam(name = "databaseId", value = "databaseId", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
+ public Result getInfo(@PathVariable("databaseId") Long databaseId) {
+ return Result.success(databaseTypeService.getById(databaseId));
+ }
+
+ /**
+ * 新增数据源类型
+ */
+ @RequiresPermissions("data:type:add")
+ @Log(title = "数据源类型", businessType = BusinessType.INSERT)
+ @PostMapping
+ @ApiOperation("新增数据源类型")
+ public Result add(@RequestBody DatabaseTypeSaveReq databaseTypeSaveReq) {
+ return toAjax(databaseTypeService.save(DatabaseType.saveBuild(databaseTypeSaveReq)));
+ }
+
+ /**
+ * 修改数据源类型
+ */
+ @RequiresPermissions("data:type:edit")
+ @Log(title = "数据源类型", businessType = BusinessType.UPDATE)
+ @PutMapping("/{databaseId}")
+ @ApiOperation("修改数据源类型")
+ public Result edit(@PathVariable Long databaseId, @RequestBody DatabaseTypeEditReq databaseTypeEditReq) {
+ return toAjax(databaseTypeService.updateById(DatabaseType.editBuild(databaseId,databaseTypeEditReq)));
+ }
+
+ /**
+ * 删除数据源类型
+ */
+ @RequiresPermissions("data:type:remove")
+ @Log(title = "数据源类型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{databaseIds}")
+ @ApiOperation("删除数据源类型")
+ @ApiImplicitParam(name = "databaseId", value = "databaseId", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
+ public Result remove(@PathVariable List databaseIds) {
+ return toAjax(databaseTypeService.removeBatchByIds(databaseIds));
+ }
+
+
+
+
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java
new file mode 100644
index 0000000..37772ec
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DataSourceMapper.java
@@ -0,0 +1,15 @@
+package com.muyu.data.source.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.data.source.domain.DataSource;
+
+/**
+ * 数据源Mapper接口
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+public interface DataSourceMapper extends BaseMapper {
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DatabaseTypeMapper.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DatabaseTypeMapper.java
new file mode 100644
index 0000000..993316b
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/mapper/DatabaseTypeMapper.java
@@ -0,0 +1,15 @@
+package com.muyu.data.source.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.data.source.domain.DatabaseType;
+
+/**
+ * 数据源类型Mapper接口
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+public interface DatabaseTypeMapper extends BaseMapper {
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java
new file mode 100644
index 0000000..9eb4e67
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DataSourceService.java
@@ -0,0 +1,23 @@
+package com.muyu.data.source.service;
+
+import java.util.List;
+import com.muyu.data.source.domain.DataSource;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 数据源Service接口
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+public interface DataSourceService extends IService {
+ /**
+ * 查询数据源列表
+ *
+ * @param dataSource 数据源
+ * @return 数据源集合
+ */
+ public List list(DataSource dataSource);
+
+ boolean testConnection(Long databaseId);
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DatabaseTypeService.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DatabaseTypeService.java
new file mode 100644
index 0000000..b7cd67d
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/DatabaseTypeService.java
@@ -0,0 +1,22 @@
+package com.muyu.data.source.service;
+
+import java.util.List;
+import com.muyu.data.source.domain.DatabaseType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 数据源类型Service接口
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+public interface DatabaseTypeService extends IService {
+ /**
+ * 查询数据源类型列表
+ *
+ * @param databaseType 数据源类型
+ * @return 数据源类型集合
+ */
+ public List list(DatabaseType databaseType);
+
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java
new file mode 100644
index 0000000..c49fd04
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DataSourceServiceImpl.java
@@ -0,0 +1,148 @@
+package com.muyu.data.source.service.impl;
+
+import com.muyu.data.source.domain.DatabaseType;
+import com.muyu.data.source.service.DatabaseTypeService;
+import java.sql.DriverManager;
+import java.util.HashSet;
+import java.util.List;
+
+import com.muyu.common.core.utils.ObjUtils;
+import java.util.Optional;
+import java.util.Set;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.muyu.data.source.mapper.DataSourceMapper;
+import com.muyu.data.source.domain.DataSource;
+import com.muyu.data.source.service.DataSourceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import redis.clients.jedis.Jedis;
+
+/**
+ * 数据源Service业务层处理
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Slf4j
+@Service
+public class DataSourceServiceImpl extends ServiceImpl implements DataSourceService {
+
+ @Autowired
+ private DataSourceService dataSourceService;
+
+ @Autowired
+ private DatabaseTypeService databaseTypeService;
+
+ /**
+ * 查询数据源列表
+ *
+ * @param dataSource 数据源
+ * @return 数据源
+ */
+ @Override
+ public List list(DataSource dataSource) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+
+ if (ObjUtils.notNull(dataSource.getName())) {
+ queryWrapper.like(DataSource::getName, dataSource.getName());
+ }
+
+ if (ObjUtils.notNull(dataSource.getSystemName())) {
+ queryWrapper.like(DataSource::getSystemName, dataSource.getSystemName());
+ }
+
+ if (ObjUtils.notNull(dataSource.getDatabaseName())) {
+ queryWrapper.like(DataSource::getDatabaseName, dataSource.getDatabaseName());
+ }
+
+ return list(queryWrapper);
+ }
+
+ /**
+ * 测试连接
+ *
+ * @param id 数据源id
+ */
+ @Override
+ public boolean testConnection(Long id) {
+ DataSource dataSource=null;
+ List dataSourceList = this.list(
+ new LambdaQueryWrapper()
+ .eq(DataSource::getDatabaseType, id)
+ );
+
+ // 使用Set进行去重,
+ Set uniqueDataSources = new HashSet<>(dataSourceList);
+
+ Optional source = uniqueDataSources.stream().distinct().findFirst();
+ if (source.isPresent()){
+ dataSource = source.get();
+ }
+
+ String jdbcUrl = "";
+ String driveClass = "";
+ boolean flag = false;
+ DatabaseType dataType = databaseTypeService.getOne(
+ new LambdaQueryWrapper()
+ .eq(DatabaseType::getDatabaseId, dataSource.getDatabaseType())
+ );
+
+ if (dataType.getDatabaseName().equals("mysql")||dataType.equals("MYSQL")){
+ driveClass=dataType.getDriverManager();
+
+ }
+ try {
+ if (dataType.getDriverManager() != null && dataType.getUrlPre() != null){
+ if ("mysql".equals(dataType.getDatabaseName())){
+ driveClass = dataType.getDriverManager();
+ jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + "/" + dataSource.getDatabaseName() + "?" + dataSource.getConnectionParam();
+ }
+ if ("oracle".equals(dataType.getDatabaseName())){
+ driveClass = dataType.getDriverManager();
+ jdbcUrl = dataType.getUrlPre() + dataSource.getHost() + ":" + dataSource.getPort() + ":" + dataSource.getDatabaseName();
+ }
+ if ("sqlserver".equals(dataType.getDatabaseName())){
+ driveClass = dataType.getDriverManager();
+ jdbcUrl = dataType.getUrlPre()+ dataSource.getHost() +":"+dataSource.getPort()+";databaseName="+dataSource.getDatabaseName();
+ }
+ flag = testDatasource(driveClass, jdbcUrl, dataSource.getUser(), dataSource.getPassword());
+ }else if(dataType.getDriverManager()== null && dataType.getUrlPre() == null){
+ // redis
+ //连接指定的redis
+ Jedis jedis = new Jedis(dataSource.getHost(), Integer.valueOf(dataSource.getPort()));
+ //如果有密码则需要下面这一行
+ if (dataSource.getPassword() != null && !dataSource.getPassword().equals("")){
+ jedis.auth(dataSource.getPassword());
+ }
+ //查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误
+ try {
+ jedis.ping();
+ flag = true;
+ } catch (Exception e) {
+ flag = false;
+ }
+ }
+ return flag;
+ }catch (Exception e) {
+ return flag;
+ }
+
+ }
+
+
+ public static boolean testDatasource(String driveClass, String url, String username, String password) {
+ try {
+ Class.forName(driveClass);
+ DriverManager.getConnection(url, username, password);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+}
+
+
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DatabaseTypeServiceImpl.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DatabaseTypeServiceImpl.java
new file mode 100644
index 0000000..512d588
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/java/com/muyu/data/source/service/impl/DatabaseTypeServiceImpl.java
@@ -0,0 +1,61 @@
+package com.muyu.data.source.service.impl;
+
+import java.util.List;
+
+import com.muyu.common.core.utils.ObjUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import com.muyu.data.source.mapper.DatabaseTypeMapper;
+import com.muyu.data.source.domain.DatabaseType;
+import com.muyu.data.source.service.DatabaseTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+/**
+ * 数据源类型Service业务层处理
+ *
+ * @author hufangming
+ * @date 2024-04-21
+ */
+@Slf4j
+@Service
+public class DatabaseTypeServiceImpl extends ServiceImpl implements DatabaseTypeService {
+
+ /**
+ * 查询数据源类型列表
+ *
+ * @param databaseType 数据源类型
+ * @return 数据源类型
+ */
+ @Override
+ public List list(DatabaseType databaseType) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+
+
+ if (ObjUtils.notNull(databaseType.getDatabaseName())){
+ queryWrapper.like(DatabaseType::getDatabaseName, databaseType.getDatabaseName());
+ }
+
+ if (ObjUtils.notNull(databaseType.getDriverManager())){
+ queryWrapper.eq(DatabaseType::getDriverManager, databaseType.getDriverManager());
+ }
+
+ if (ObjUtils.notNull(databaseType.getUrlPre())){
+ queryWrapper.eq(DatabaseType::getUrlPre, databaseType.getUrlPre());
+ }
+
+
+
+
+
+ return list(queryWrapper);
+ }
+ /**
+ * 将所有的大写转换成小写并清除中间所有的空格
+ * @param str 需要转换的参数
+ * @return 转换后的参数
+ */
+ public static String lowerCase(String str){
+ return str.toLowerCase().replaceAll(" ","");
+ }
+}
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml
new file mode 100644
index 0000000..b5dc8de
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DataSourceMapper.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, name, system_name, database_name, database_type, host, port, user, password, type, connection_param, status, init_num, max_num, max_wait_time, max_wait_size, remark, create_by, create_time, update_by, update_time from data_source
+
+
diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DatabaseTypeMapper.xml b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DatabaseTypeMapper.xml
new file mode 100644
index 0000000..a7f3afa
--- /dev/null
+++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/main/resources/mapper/data/DatabaseTypeMapper.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select database_id, database_name, driver_manager, url_pre, remark, create_by, create_time, update_by, update_time from database_type
+
+
diff --git a/muyu-modules/muyu-data-source/pom.xml b/muyu-modules/muyu-data-source/pom.xml
new file mode 100644
index 0000000..0d2898f
--- /dev/null
+++ b/muyu-modules/muyu-data-source/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ muyu-modules
+ 3.6.3
+
+
+ muyu-data-source
+ pom
+
+ muyu-data-source数据源模块
+
+ muyu-data-source-common
+ muyu-data-source-remote
+ muyu-data-source-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/muyu-modules/pom.xml b/muyu-modules/pom.xml
index 846198c..06dfe44 100644
--- a/muyu-modules/pom.xml
+++ b/muyu-modules/pom.xml
@@ -13,6 +13,7 @@
muyu-gen
muyu-job
muyu-file
+ muyu-data-source
muyu-modules
diff --git a/pom.xml b/pom.xml
index fc97f1d..eb76ba5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
0.9.1
8.2.2
4.1.2
+ 2.9.0
2.14.3
@@ -206,6 +207,12 @@
${muyu.version}
+
+ redis.clients
+ jedis
+ ${jedis.version}
+
+