Compare commits

...

2 Commits

Author SHA1 Message Date
031026 db1bae4390 Merge remote-tracking branch 'origin/main' 2024-04-23 09:30:05 +08:00
031026 a2c8687869 feat:系统接入 2024-04-23 09:29:50 +08:00
28 changed files with 1329 additions and 0 deletions

View File

@ -0,0 +1,65 @@
package com.muyu.common.core.utils;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
/**
* @author DongZl
* @description:
* @Date 2023-10-9 04:56
*/
public class ObjUtils {
/**
*
* CharSequence:
* Array:
* Collection:
* Map:
* @param o
* @return nulltruefalse
*/
public static boolean notNull(Object o){
return ObjectUtils.isNotEmpty(o);
}
/**
* long0
* @param val
* @return 0
*/
public static boolean notNull(Long val){
return ObjectUtils.isNotEmpty(val) && val != 0;
}
/**
* Integer0
* @param val
* @return 0
*/
public static boolean notNull(Integer val){
return ObjectUtils.isNotEmpty(val) && val != 0;
}
/**
* BigDecimal0
* @param val
* @return 0
*/
public static boolean notNull(BigDecimal val){
return ObjectUtils.isNotEmpty(val) && val.doubleValue() == 0.00;
}
/**
* BigDecimal0
* @param val
* @return 0
*/
public static boolean notChildNull(Object[] val){
for (Object o : val) {
if (!notNull(o)){
return false;
}
}
return true;
}
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu-source</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-source-common</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 系统公共核心包 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,49 @@
package com.muyu.source.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.common.core.annotation.Excel;
import com.muyu.common.core.web.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
*
*
* @ClassName SysAccess
* @Author AnNan.Wang
* @Date 2024/4/21 10:43
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "sys_access")
@EqualsAndHashCode(callSuper = true)
public class SysAccess extends BaseEntity{
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty(name = "接入类型ID", value = "接入类型ID")
private Long id;
/** 接入类型名称 */
@Excel(name = "接入类型名称")
@ApiModelProperty(name = "接入类型名称", value = "接入类型名称")
private String accessName;
@Excel(name = "密码")
@ApiModelProperty(name = "密码", value = "密码")
private String password;
@Excel(name = "用户名")
@ApiModelProperty(name = "用户名", value = "用户名")
private String user;
}

View File

@ -0,0 +1,156 @@
package com.muyu.source.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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.source.domain.req.SysDataSourceQueryReq;
import com.muyu.source.domain.req.SysDataSourceSaveReq;
import com.muyu.source.domain.req.SysDataSourceEditReq;
import com.muyu.common.core.web.domain.BaseEntity;
import java.util.Date;
import java.util.function.Supplier;
/**
* sys_data_source
*
* @author wan
* @date 2024-04-20
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_data_source")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysDataSource", description = "数据接入基本信息")
public class SysDataSource extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 数据源ID */
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty(name = "数据源ID", value = "数据源ID")
private Long id;
/** 数据源名称 */
@Excel(name = "数据源名称")
@ApiModelProperty(name = "数据源名称", value = "数据源名称")
private String sourceName;
/** 数据来源系统名称 */
@Excel(name = "数据来源系统名称")
@ApiModelProperty(name = "数据来源系统名称", value = "数据来源系统名称", required = true)
private String systemName;
/** 主机地址 */
@Excel(name = "主机地址")
@ApiModelProperty(name = "主机地址", value = "主机地址")
private String hostAddress;
/** 主键端口号 */
@Excel(name = "主键端口号")
@ApiModelProperty(name = "主键端口号", value = "主键端口号")
private Long hostNumber;
/** 数据接入类型 */
@Excel(name = "数据接入类型")
@ApiModelProperty(name = "数据接入类型", value = "数据接入类型")
private Long accessId;
/** 数据连接参数 */
@Excel(name = "数据连接参数")
@ApiModelProperty(name = "数据连接参数", value = "数据连接参数")
private String connectionParameters;
/** 初始连接数量 */
@Excel(name = "初始连接数量")
@ApiModelProperty(name = "初始连接数量", value = "初始连接数量")
private Long initialize;
/** 最大连接数量 */
@Excel(name = "最大连接数量")
@ApiModelProperty(name = "最大连接数量", value = "最大连接数量")
private Long maxInitialize;
/**
*/
@Excel(name = "最大等待时间")
@ApiModelProperty(name = "最大等待时间", value = "最大等待时间")
private Long maxWaitingTime;
/** 最大等待次数 */
@Excel(name = "最大等待次数")
@ApiModelProperty(name = "最大等待次数", value = "最大等待次数")
private Long maxIsoFrequency;
/** 数据库名称 */
@Excel(name = "数据库名称")
@ApiModelProperty(name = "数据库名称", value = "数据库名称")
private String databaseName;
@TableField(exist = false)
private String accessName;
/**
*
*/
public static SysDataSource queryBuild( SysDataSourceQueryReq sysDataSourceQueryReq){
return SysDataSource.builder()
.sourceName(sysDataSourceQueryReq.getSourceName())
.systemName(sysDataSourceQueryReq.getSystemName())
.databaseName(sysDataSourceQueryReq.getDatabaseName())
.build();
}
/**
*
*/
public static SysDataSource saveBuild(SysDataSourceSaveReq sysDataSourceSaveReq, Supplier<String> createBy){
return SysDataSource.builder()
.sourceName(sysDataSourceSaveReq.getSourceName())
.systemName(sysDataSourceSaveReq.getSystemName())
.hostAddress(sysDataSourceSaveReq.getHostAddress())
.hostNumber(sysDataSourceSaveReq.getHostNumber())
.accessId(sysDataSourceSaveReq.getAccessId())
.connectionParameters(sysDataSourceSaveReq.getConnectionParameters())
.initialize(sysDataSourceSaveReq.getInitialize())
.maxInitialize(sysDataSourceSaveReq.getMaxInitialize())
.maxWaitingTime(sysDataSourceSaveReq.getMaxWaitingTime())
.maxIsoFrequency(sysDataSourceSaveReq.getMaxIsoFrequency())
.databaseName(sysDataSourceSaveReq.getDatabaseName())
.remark(sysDataSourceSaveReq.getRemark())
.createBy(createBy.get())
.createTime(new Date())
.build();
}
/**
*
*/
public static SysDataSource editBuild(Long id, SysDataSourceEditReq sysDataSourceEditReq){
return SysDataSource.builder()
.id(id)
.sourceName(sysDataSourceEditReq.getSourceName())
.systemName(sysDataSourceEditReq.getSystemName())
.hostAddress(sysDataSourceEditReq.getHostAddress())
.hostNumber(sysDataSourceEditReq.getHostNumber())
.accessId(sysDataSourceEditReq.getAccessId())
.connectionParameters(sysDataSourceEditReq.getConnectionParameters())
.initialize(sysDataSourceEditReq.getInitialize())
.maxInitialize(sysDataSourceEditReq.getMaxInitialize())
.maxWaitingTime(sysDataSourceEditReq.getMaxWaitingTime())
.maxIsoFrequency(sysDataSourceEditReq.getMaxIsoFrequency())
.databaseName(sysDataSourceEditReq.getDatabaseName())
.remark(sysDataSourceEditReq.getRemark())
.build();
}
}

View File

@ -0,0 +1,32 @@
package com.muyu.source.domain.red;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
*
*
* @ClassName userPassword
* @Author AnNan.Wang
* @Date 2024/4/21 21:36
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "userPassword", description = "数据库用户名密码")
public class UserPassword {
/**
*
*/
private String USERNAME;
/**
*
*/
private String PASSWORD;
}

View File

@ -0,0 +1,39 @@
资产结构:[
{
数据库名称:null,
表名:[
{
字段名称:null,
字段类型:null,
长度:null,
小数点:null,
是否为空:null,
是否是主键:null,
是否核心:null,
注释:null,
默认:null,
是否字典:null,
映射字典:null
}
],
},
{
数据库名称:null,
表名:[
{
字段名称:null,
字段类型:null,
长度:null,
小水点:null,
是否为空:null,
是否是主键:null,
是否核心:null,
注释:null,
默认:null,
是否字典:null,
映射字典:null
}
],
},
]

View File

@ -0,0 +1,71 @@
package com.muyu.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;
/**
* sys_data_source
*
* @author wan
* @date 2024-04-20
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "SysDataSourceEditReq", description = "数据接入基本信息")
public class SysDataSourceEditReq extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 数据源名称 */
@ApiModelProperty(name = "数据源名称", value = "数据源名称")
private String sourceName;
/** 数据来源系统名称 */
@ApiModelProperty(name = "数据来源系统名称", value = "数据来源系统名称", required = true)
private String systemName;
/** 主机地址 */
@ApiModelProperty(name = "主机地址", value = "主机地址")
private String hostAddress;
/** 主键端口号 */
@ApiModelProperty(name = "主键端口号", value = "主键端口号")
private Long hostNumber;
/** 数据接入类型 */
@ApiModelProperty(name = "数据接入类型", value = "数据接入类型")
private Long accessId;
/** 数据连接参数 */
@ApiModelProperty(name = "数据连接参数", value = "数据连接参数")
private String connectionParameters;
/** 初始连接数量 */
@ApiModelProperty(name = "初始连接数量", value = "初始连接数量")
private Long initialize;
/** 最大连接数量 */
@ApiModelProperty(name = "最大连接数量", value = "最大连接数量")
private Long maxInitialize;
/**
*/
@ApiModelProperty(name = "最大等待时间", value = "最大等待时间")
private Long maxWaitingTime;
/** 最大等待次数 */
@ApiModelProperty(name = "最大等待次数", value = "最大等待次数")
private Long maxIsoFrequency;
/** 数据库名称 */
@ApiModelProperty(name = "数据库名称", value = "数据库名称")
private String databaseName;
}

View File

@ -0,0 +1,37 @@
package com.muyu.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;
/**
* sys_data_source
*
* @author wan
* @date 2024-04-20
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "SysDataSourceQueryReq", description = "数据接入基本信息")
public class SysDataSourceQueryReq extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 数据源名称 */
@ApiModelProperty(name = "数据源名称", value = "数据源名称")
private String sourceName;
/** 数据来源系统名称 */
@ApiModelProperty(name = "数据来源系统名称", value = "数据来源系统名称")
private String systemName;
/** 数据库名称 */
@ApiModelProperty(name = "数据库名称", value = "数据库名称")
private String databaseName;
}

View File

@ -0,0 +1,87 @@
package com.muyu.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;
/**
* sys_data_source
*
* @author wan
* @date 2024-04-20
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "SysDataSourceSaveReq", description = "数据接入基本信息")
public class SysDataSourceSaveReq extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 数据源ID */
@ApiModelProperty(name = "数据源ID", value = "数据源ID")
private Long id;
/** 数据源名称 */
@ApiModelProperty(name = "数据源名称", value = "数据源名称")
private String sourceName;
/** 数据来源系统名称 */
@ApiModelProperty(name = "数据来源系统名称", value = "数据来源系统名称", required = true)
private String systemName;
/** 主机地址 */
@ApiModelProperty(name = "主机地址", value = "主机地址")
private String hostAddress;
/** 主键端口号 */
@ApiModelProperty(name = "主键端口号", value = "主键端口号")
private Long hostNumber;
/** 数据接入类型 */
@ApiModelProperty(name = "数据接入类型", value = "数据接入类型")
private Long accessId;
/** 数据连接参数 */
@ApiModelProperty(name = "数据连接参数", value = "数据连接参数")
private String connectionParameters;
/** 初始连接数量 */
@ApiModelProperty(name = "初始连接数量", value = "初始连接数量")
private Long initialize;
/** 最大连接数量 */
@ApiModelProperty(name = "最大连接数量", value = "最大连接数量")
private Long maxInitialize;
/**
*/
@ApiModelProperty(name = "最大等待时间", value = "最大等待时间")
private Long maxWaitingTime;
/** 最大等待次数 */
@ApiModelProperty(name = "最大等待次数", value = "最大等待次数")
private Long maxIsoFrequency;
/** 数据库名称 */
@ApiModelProperty(name = "数据库名称", value = "数据库名称")
private String databaseName;
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu-source</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-source-remote</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 商品模块 common 依赖 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-source-common</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,4 @@
com.muyu.product.remote.factory.RemoteProjectSkuFactory
com.muyu.product.remote.factory.RemoteRuleAttrFactory
com.muyu.product.remote.factory.RemoteRuleFactory
com.muyu.product.remote.factory.RemoteProjectInfoFactory

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu-source</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-source-server</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 商品模块 common 依赖 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-source-common</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- MuYu Common DataSource -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-datasource</artifactId>
</dependency>
<!-- MuYu Common DataScope -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-datascope</artifactId>
</dependency>
<!-- MuYu Common Log -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-log</artifactId>
</dependency>
<!-- MuYu Common Swagger -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-swagger</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 加入maven deploy插件当在deploy时忽略些model-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,23 @@
package com.muyu.source;
import com.muyu.common.security.annotation.EnableCustomConfig;
import com.muyu.common.security.annotation.EnableMyFeignClients;
import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author DongZl
* @description:
* @Date 2024-2-26 04:07
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableMyFeignClients
@SpringBootApplication
public class MuYuSourceApplication {
public static void main (String[] args) {
SpringApplication.run(MuYuSourceApplication.class, args);
}
}

View File

@ -0,0 +1,40 @@
package com.muyu.source.controller;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.source.domain.SysAccess;
import com.muyu.source.domain.SysDataSource;
import com.muyu.source.service.SysAccessService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Controller @wan
*
* @ClassName SysAccessController
* @Author AnNan.Wang
* @Date 2024/4/21 11:00
*/
@Api(tags = "接入类型")
@RestController
@RequestMapping("/type")
public class SysAccessController extends BaseController {
@Autowired
private SysAccessService sysAccessService;
/**
*
*/
@ApiOperation("获取接入类型")
@RequiresPermissions("source:type:typeList")
@GetMapping(value = "/typeList")
public Result<List<SysAccess>> typeList() {
return Result.success(sysAccessService.list(null));
}
}

View File

@ -0,0 +1,127 @@
package com.muyu.source.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.source.domain.SysAccess;
import com.muyu.source.service.SysAccessService;
import io.swagger.annotations.*;
import org.apache.commons.lang3.SystemUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
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.source.domain.SysDataSource;
import com.muyu.source.domain.req.SysDataSourceQueryReq;
import com.muyu.source.domain.req.SysDataSourceSaveReq;
import com.muyu.source.domain.req.SysDataSourceEditReq;
import com.muyu.source.service.SysDataSourceService;
import com.muyu.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author wan
* @date 2024-04-20
*/
@Api(tags = "数据接入基本信息")
@RestController
@RequestMapping("/source")
public class SysDataSourceController extends BaseController {
@Autowired
private SysDataSourceService sysDataSourceService;
@Autowired
private SysAccessService sysAccessService;
/**
*
*/
@ApiOperation("获取数据接入基本信息列表")
@RequiresPermissions("source:source:list")
@GetMapping("/list")
public Result<TableDataInfo<SysDataSource>> list(SysDataSourceQueryReq sysDataSourceQueryReq) {
startPage();
List<SysDataSource> list = sysDataSourceService.list(SysDataSource.queryBuild(sysDataSourceQueryReq));
return getDataTable(list);
}
/**
*
*/
@ApiOperation("导出数据接入基本信息列表")
@RequiresPermissions("source:source:export")
@Log(title = "数据接入基本信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, SysDataSource sysDataSource) {
List<SysDataSource> list = sysDataSourceService.list(sysDataSource);
ExcelUtil<SysDataSource> util = new ExcelUtil<SysDataSource>(SysDataSource.class);
util.exportExcel(response, list, "数据接入基本信息数据");
}
/**
*
*/
@ApiOperation("获取数据接入基本信息详细信息")
@RequiresPermissions("source:source:query")
@GetMapping(value = "/{id}")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
public Result<SysDataSource> getInfo(@PathVariable("id") Long id) {
return Result.success(sysDataSourceService.getById(id));
}
/**
*
*/
@RequiresPermissions("source:source:add")
@Log(title = "数据接入基本信息", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ApiOperation("新增数据接入基本信息")
public Result<String> add(@RequestBody SysDataSourceSaveReq sysDataSourceSaveReq) {
return toAjax(sysDataSourceService.save(SysDataSource.saveBuild(sysDataSourceSaveReq, SecurityUtils::getUsername)));
}
/**
*
*/
@RequiresPermissions("source:source:edit")
@Log(title = "数据接入基本信息", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改数据接入基本信息")
public Result<String> edit(@PathVariable Long id, @RequestBody SysDataSourceEditReq sysDataSourceEditReq) {
return toAjax(sysDataSourceService.updateById(SysDataSource.editBuild(id,sysDataSourceEditReq)));
}
/**
*
*/
@RequiresPermissions("source: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<String> remove(@PathVariable List<Long> ids) {
return toAjax(sysDataSourceService.removeBatchByIds(ids));
}
/**
*
* @param id
* @return
*/
@RequiresPermissions("source:source:connect")
@Log(title = "测试连接", businessType = BusinessType.DELETE)
@PostMapping("/connect")
@ApiOperation("删除数据接入基本信息")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
public Result<String> connect(@RequestParam Long id) {
return sysDataSourceService.connectList(id);
}
}

View File

@ -0,0 +1,15 @@
package com.muyu.source.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.source.domain.SysAccess;
/**
* Mapper
*
* @author AnNan.Wang
* @ClassName: SysAccessMapper
* @createTime: 2024/4/21 11:05
*/
public interface SysAccessMapper extends BaseMapper<SysAccess> {
}

View File

@ -0,0 +1,15 @@
package com.muyu.source.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.source.domain.SysDataSource;
/**
* Mapper
*
* @author wan
* @date 2024-04-20
*/
public interface SysDataSourceMapper extends BaseMapper<SysDataSource> {
}

View File

@ -0,0 +1,17 @@
package com.muyu.source.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.source.domain.SysAccess;
import com.muyu.source.domain.SysDataSource;
import java.util.List;
/**
* Service
*
* @author AnNan.Wang
* @ClassName: SysAccessService
* @createTime: 2024/4/21 11:01
*/
public interface SysAccessService extends IService<SysAccess> {
}

View File

@ -0,0 +1,25 @@
package com.muyu.source.service;
import java.util.List;
import com.muyu.common.core.domain.Result;
import com.muyu.source.domain.SysDataSource;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* Service
*
* @author wan
* @date 2024-04-20
*/
public interface SysDataSourceService extends IService<SysDataSource> {
/**
*
*
* @param sysDataSource
* @return
*/
public List<SysDataSource> list(SysDataSource sysDataSource);
Result<String> connectList(Long id);
}

View File

@ -0,0 +1,41 @@
package com.muyu.source.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.domain.Result;
import com.muyu.source.domain.SysAccess;
import com.muyu.source.domain.SysDataSource;
import com.muyu.source.domain.red.UserPassword;
import com.muyu.source.mapper.SysAccessMapper;
import com.muyu.source.mapper.SysDataSourceMapper;
import com.muyu.source.service.SysAccessService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.userPassword;
/**
* Service
*
* @ClassName SysAccessServiceImpl
* @Author AnNan.Wang
* @Date 2024/4/21 11:03
*/
@Slf4j
@Service
public class SysAccessServiceImpl extends ServiceImpl<SysAccessMapper,SysAccess>
implements SysAccessService {
@Autowired
private SysAccessMapper sysAccessMapper;
@Autowired
private SysDataSourceMapper sysDataSourceMapper;
}

View File

@ -0,0 +1,123 @@
package com.muyu.source.service.impl;
import java.sql.*;
import java.util.List;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.ObjUtils;
import com.muyu.source.domain.SysAccess;
import com.muyu.source.mapper.SysAccessMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.muyu.source.mapper.SysDataSourceMapper;
import com.muyu.source.domain.SysDataSource;
import com.muyu.source.service.SysDataSourceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
/**
* Service
*
* @author wan
* @date 2024-04-20
*/
@Slf4j
@Service
public class SysDataSourceServiceImpl extends ServiceImpl<SysDataSourceMapper, SysDataSource> implements SysDataSourceService {
@Autowired
private SysDataSourceMapper sysDataSourceMapper;
@Autowired
private SysAccessMapper sysAccessMapper;
/**
*
*
* @param sysDataSource
* @return
*/
@Override
public List<SysDataSource> list(SysDataSource sysDataSource) {
LambdaQueryWrapper<SysDataSource> queryWrapper = new LambdaQueryWrapper<>();
if (ObjUtils.notNull(sysDataSource.getSourceName())){
queryWrapper.like(SysDataSource::getSourceName, sysDataSource.getSourceName());
}
if (ObjUtils.notNull(sysDataSource.getSystemName())){
queryWrapper.like(SysDataSource::getSystemName, sysDataSource.getSystemName());
}
if (ObjUtils.notNull(sysDataSource.getDatabaseName())){
queryWrapper.like(SysDataSource::getDatabaseName, sysDataSource.getDatabaseName());
}
return list(queryWrapper);
}
@Override
public Result<String> connectList(Long id) {
List<SysDataSource> sysDataSources = sysDataSourceMapper.selectList(
new LambdaQueryWrapper<SysDataSource>() {{
eq(SysDataSource::getId, id);
}}
);
for (SysDataSource sysDataSource : sysDataSources) {
String url="jdbc:mysql://"+sysDataSource.getHostAddress()+":"+sysDataSource.getHostNumber()+"/"+sysDataSource.getDatabaseName();
if (sysDataSource.getAccessId()!=null && sysDataSource.getAccessId()==1) {
//是否是mysql数据库
SysAccess sysAccess = sysAccessMapper.selectById(sysDataSource.getAccessId());
String USERNAME=sysAccess.getUser();
String PASSWORD=sysAccess.getPassword();
try {
Connection connection = DriverManager.getConnection(url, USERNAME, PASSWORD);
if (connection!=null) {
ResultSetMetaData metaData = information(connection);
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
System.out.println("字段名称 : " + metaData.getColumnName(i));
}
return Result.success("连接成功");
}else {
return Result.error("连接失败");
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (sysDataSource.getAccessId()!=null && sysDataSource.getAccessId()==2) {
//是否是Oracle数据库
SysAccess sysAccess = sysAccessMapper.selectById(sysDataSource.getAccessId());
String USERNAME=sysAccess.getUser();
String PASSWORD=sysAccess.getPassword();
try {
Connection connection = DriverManager.getConnection(url, USERNAME, PASSWORD);
DatabaseMetaData metaData = connection.getMetaData();
System.out.println(metaData);
if (connection!=null) {
return Result.success("连接成功");
}else {
return Result.error("连接失败");
}
} catch (SQLException e) {
return Result.error("连接失败");
}
}
}
return Result.error("连接失败");
}
public static ResultSetMetaData information(Connection connection){
try {
PreparedStatement preparedStatement = connection.prepareStatement("select * from sys_data_source");
ResultSet resultSet = preparedStatement.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
return metaData;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,2 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -0,0 +1,28 @@
# Tomcat
server:
port: 9223
# Spring
spring:
application:
# 应用名称
name: ruoyi-source
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 101.34.243.166:8848
config:
# 配置中心地址
server-addr: 101.34.243.166:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
logging:
level:
com.muyu.product.mapper: DEBUG

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/muyu-product"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.muyu" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.muyu.source.mapper.SysDataSourceMapper">
<resultMap type="com.muyu.source.domain.SysDataSource" id="SysDataSourceResult">
<result property="id" column="id" />
<result property="sourceName" column="source_name" />
<result property="systemName" column="system_name" />
<result property="hostAddress" column="host_address" />
<result property="hostNumber" column="host_number" />
<result property="accessId" column="access_id" />
<result property="accessName" column="access_name" />
<result property="connectionParameters" column="connection_parameters" />
<result property="initialize" column="initialize" />
<result property="maxInitialize" column="max_initialize" />
<result property="maxWaitingTime" column="max_waiting_time" />
<result property="maxIsoFrequency" column="max_iso_frequency" />
<result property="databaseName" column="database_name" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectSysDataSourceVo">
select
source.id,
source.source_name,
source.system_name,
source.host_address,
source.host_number,
source.access_id,
source.connection_parameters,
source.initialize,
source.max_initialize,
source.max_waiting_time,
source.max_iso_frequency,
source.database_name,
source.remark,
source.create_by,
source.create_time,
source.update_by,
source.update_time,
access.access_name
from
sys_data_source as source
left join sys_access as access on source.access_id = access.id
</sql>
</mapper>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu-modules</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-source</artifactId>
<packaging>pom</packaging>
<modules>
<module>muyu-source-common</module>
<module>muyu-source-remote</module>
<module>muyu-source-server</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -13,6 +13,7 @@
<module>muyu-gen</module>
<module>muyu-job</module>
<module>muyu-file</module>
<module>muyu-source</module>
</modules>
<artifactId>muyu-modules</artifactId>

12
pom.xml
View File

@ -192,6 +192,18 @@
<version>${muyu.version}</version>
</dependency>
<!-- 连接数据源 公共模块 common 依赖 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-source-common</artifactId>
<version>${muyu.version}</version>
</dependency>
<!-- 连接数据源 远程调用模块 依赖 -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-source-remote</artifactId>
<version>${muyu.version}</version>
</dependency>
<!-- 缓存服务 -->
<dependency>
<groupId>com.muyu</groupId>