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} + +