diff --git a/pom.xml b/pom.xml index 8ce166e..9003ee4 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ srt-cloud-gateway srt-data-development srt-cloud-data-governance - srt-cloud-data-service + srt-cloud-data-server diff --git a/srt-cloud-data-server/.gitignore b/srt-cloud-data-server/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/srt-cloud-data-server/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/srt-cloud-data-server/pom.xml b/srt-cloud-data-server/pom.xml new file mode 100644 index 0000000..9d2401b --- /dev/null +++ b/srt-cloud-data-server/pom.xml @@ -0,0 +1,204 @@ + + + 4.0.0 + + net.srt + srt-cloud + 2.0.0 + + + srt-cloud-data-server + + + 8 + 8 + UTF-8 + + + + + net.srt + srt-cloud-api + 2.0.0 + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + net.srt + srt-cloud-mybatis + 2.0.0 + + + net.srt + srt-cloud-dbswitch + 2.0.0 + + + jsqlparser + com.github.jsqlparser + + + spring-boot-starter-logging + org.springframework.boot + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + com.github.xiaoymin + knife4j-springdoc-ui + + + + + + + + org.codehaus.mojo + appassembler-maven-plugin + 2.1.0 + + + + + generate-jsw-scripts + package + + generate-daemons + + + + + + + flat + + src/main/resources + true + + true + + conf + + lib + + bin + UTF-8 + logs + + + + ${project.artifactId} + net.srt.DataServiceApplication + + jsw + + + + jsw + + linux-x86-32 + linux-x86-64 + windows-x86-32 + windows-x86-64 + + + + configuration.directory.in.classpath.first + conf + + + wrapper.ping.timeout + 120 + + + set.default.REPO_DIR + lib + + + wrapper.logfile + logs/wrapper.log + + + + + + + + + -server + -Dfile.encoding=utf-8 + -Xms128m + -Xmx1024m + -XX:+PrintGCDetails + -XX:+PrintGCDateStamps + -Xloggc:logs/gc.log + + + + + + + net.srt.DataServiceApplication + ${project.artifactId} + + + + + + + + maven-assembly-plugin + + + ${project.parent.basedir}/assembly/assembly-win.xml + ${project.parent.basedir}/assembly/assembly-linux.xml + + + + + make-assembly + package + + single + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + + diff --git a/srt-cloud-data-server/src/main/java/net/srt/DataServiceApplication.java b/srt-cloud-data-server/src/main/java/net/srt/DataServiceApplication.java new file mode 100644 index 0000000..08dc8b9 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/DataServiceApplication.java @@ -0,0 +1,16 @@ +package net.srt; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableFeignClients +@EnableDiscoveryClient +@SpringBootApplication +public class DataServiceApplication { + public static void main(String[] args) { + SpringApplication.run(DataServiceApplication.class, args); + System.out.println("==============启动成功==================="); + } +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/controller/ApiConfigController.java b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiConfigController.java new file mode 100644 index 0000000..c84f33a --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiConfigController.java @@ -0,0 +1,118 @@ +package net.srt.controller; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.AllArgsConstructor; +import net.srt.dto.ApiConfigDto; +import net.srt.entity.ApiConfigEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.query.ApiConfigQuery; +import net.srt.service.ApiConfigService; +import net.srt.vo.ApiConfig; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/api-config") +@AllArgsConstructor +public class ApiConfigController { + private final ApiConfigService apiConfigService; + + + + /** + * 查询文件分组树 + * + * @return 结果列表 + */ + @GetMapping("/api-group") + @Operation(summary = "查询文件分组树") + public Result> listTree() { + return Result.ok(apiConfigService.listTree()); + } + + /** + * 分页查询API配置 + * @param query API配置查询对象 + * @return 分页结果 + */ + @GetMapping("page") + @Operation(summary = "分页") + @PreAuthorize("hasAuthority('data-service:api-config:page')") + public Result> page(@Valid ApiConfigQuery query) { + PageResult page = apiConfigService.page(query); + + return Result.ok(page); + } + + /** + * 获取IP和端口信息 + * + * @return 返回IP和端口信息 + */ + @GetMapping("getIpPort") + public Result getIpPort() { + return Result.ok(apiConfigService.getIpPort()); + } + + /** + * 根据ID获取API配置信息 + * + * @param id API配置ID + * @return API配置实体对象 + */ + @GetMapping("/{id}") + @Operation(summary = "查看") + @PreAuthorize("hasAuthority('data-service:api-config:info')") + public Result get(@PathVariable("id") Long id) { + ApiConfigEntity apiConfig = apiConfigService.getByI(id); + + return Result.ok(apiConfig); + } + + @PutMapping("/{id}") + @Operation(summary = "修改") + @PreAuthorize("hasAuthority('data-service:api-config:update')") + public Result update(@PathVariable Long id, @RequestBody @Valid ApiConfigEntity vo) { + apiConfigService.update(id,vo); + return Result.ok(); + } + @PutMapping("/{id}/offline") + @Operation(summary = "下线") + @PreAuthorize("hasAuthority('data-service:api-config:update')") + public Result xia(@PathVariable Long id) { + apiConfigService.xia(id); + return Result.ok(); + } + + @PutMapping("/{id}/online") + @Operation(summary = "上线") + @PreAuthorize("hasAuthority('data-service:api-config:update')") + public Result shang(@PathVariable Long id) { + apiConfigService.shang(id); + return Result.ok(); + } + + + @PostMapping + @Operation(summary = "新增") + @PreAuthorize("hasAuthority('data-service:api-config:save')") + public Result insert(@RequestBody ApiConfig vo) { + apiConfigService.sav(vo); + return Result.ok(); + } + + @DeleteMapping + @Operation(summary = "删除") + @PreAuthorize("hasAuthority('data-service:api-config:delete')") + public Result delete(@PathVariable("id") Long id) { + apiConfigService.removeByI(id); + return Result.ok(); + } + + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/controller/ApiGroupController.java b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiGroupController.java new file mode 100644 index 0000000..d63facc --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiGroupController.java @@ -0,0 +1,70 @@ +package net.srt.controller; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.AllArgsConstructor; +import net.srt.convert.ApiGroupConvert; +import net.srt.entity.ApiGroupEntity; +import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.service.ApiGroupService; +import net.srt.vo.ApiGroup; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** +* 数据服务-api分组 +* +* @author zrx 985134801@qq.com +* @since 1.0.0 2023-01-28 +*/ +@RestController +@RequestMapping("/api-group") +@AllArgsConstructor +public class ApiGroupController { + private final ApiGroupService apiGroupService; + + @GetMapping + @Operation(summary = "查询文件分组树") + public Result> listTree() { + return Result.ok(apiGroupService.listTree()); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @PreAuthorize("hasAuthority('data-service:api-group:info')") + public Result get(@PathVariable("id") Long id){ + ApiGroupEntity entity = apiGroupService.getById(id); + return Result.ok(ApiGroupConvert.INSTANCE.convert(entity)); + } + + + @PostMapping + @Operation(summary = "保存") + @PreAuthorize("hasAuthority('data-service:api-group:save')") + public Result save(@RequestBody ApiGroup vo) { + apiGroupService.save(vo); + return Result.ok(); + } + + + @PutMapping + @Operation(summary = "修改") + @PreAuthorize("hasAuthority('data-service:api-group:update')") + public Result update(@RequestBody @Valid ApiGroup vo) { + apiGroupService.update(vo); + return Result.ok(); + } + + + @DeleteMapping("/{id}") + @Operation(summary = "删除") + @PreAuthorize("hasAuthority('data-service:api-group:delete')") + public Result delete(@PathVariable Long id) { + apiGroupService.delete(id); + return Result.ok(); + } + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/controller/ApiTest.java b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiTest.java new file mode 100644 index 0000000..2568106 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/controller/ApiTest.java @@ -0,0 +1,43 @@ +package net.srt.controller; + +import io.swagger.v3.oas.annotations.Operation; +import lombok.AllArgsConstructor; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.Result; +import net.srt.query.ApiConfigQuery; +import net.srt.query.ApiLogQuery; +import net.srt.service.ApiLogService; +import net.srt.vo.ApiConfig; +import net.srt.vo.ApiLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * @ClassName ApiTest + * @Description 描述 + * @Author 栗永斌 + */ +@RestController +@RequestMapping("/log") +@AllArgsConstructor +public class ApiTest { + + @Autowired + ApiLogService apiLogService; + + @GetMapping("/page") + @Operation(summary = "日志列表") + @PreAuthorize("hasAuthority('data-service:api-config:page')") + public Result> page(@Valid ApiLogQuery query) { + PageResult page = apiLogService.pag(query); + + return Result.ok(page); + } + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/convert/ApiConfigConvert.java b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiConfigConvert.java new file mode 100644 index 0000000..d411d67 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiConfigConvert.java @@ -0,0 +1,29 @@ +package net.srt.convert; + +import net.srt.dto.ApiConfigDto; +import net.srt.entity.ApiConfigEntity; +import net.srt.vo.ApiConfig; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** +* 数据服务-api配置 +* +* @author zrx 985134801@qq.com +* @since 1.0.0 2023-01-28 +*/ +@Mapper +public interface ApiConfigConvert { + ApiConfigConvert INSTANCE = Mappers.getMapper(ApiConfigConvert.class); + + ApiConfigEntity convert(ApiConfig vo); + + ApiConfig convert(ApiConfigEntity entity); + + ApiConfigDto convertDto(ApiConfigEntity entity); + + List convertList(List list); + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/convert/ApiGroupConvert.java b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiGroupConvert.java new file mode 100644 index 0000000..1c4f4bb --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiGroupConvert.java @@ -0,0 +1,26 @@ +package net.srt.convert; + +import net.srt.entity.ApiGroupEntity; +import net.srt.vo.ApiGroup; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** +* 数据服务-api分组 +* +* @author zrx 985134801@qq.com +* @since 1.0.0 2023-01-28 +*/ +@Mapper +public interface ApiGroupConvert { + ApiGroupConvert INSTANCE = Mappers.getMapper(ApiGroupConvert.class); + + ApiGroupEntity convert(ApiGroup vo); + + ApiGroup convert(ApiGroupEntity entity); + + List convertList(List list); + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/convert/ApiLogConvert.java b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiLogConvert.java new file mode 100644 index 0000000..c187daa --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/convert/ApiLogConvert.java @@ -0,0 +1,25 @@ +package net.srt.convert; + +import net.srt.entity.ApiLogEntity; +import net.srt.vo.ApiLog; +import org.apache.ibatis.annotations.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * @ClassName ApiLogConvert + * @Description 描述 + * @Author 栗永斌 + */ +@Mapper +public interface ApiLogConvert { + + ApiLogConvert INSTANCE = Mappers.getMapper(ApiLogConvert.class); + + ApiLogEntity convert(ApiLog vo); + + ApiLog convert(ApiLogEntity entity); + + List convertList(List list); +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/dto/ApiConfigDto.java b/srt-cloud-data-server/src/main/java/net/srt/dto/ApiConfigDto.java new file mode 100644 index 0000000..ce03da4 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/dto/ApiConfigDto.java @@ -0,0 +1,49 @@ +package net.srt.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.srt.framework.common.utils.DateUtils; + +import java.io.Serializable; +import java.util.Date; + + +@Data +public class ApiConfigDto implements Serializable { + private static final long serialVersionUID = 1L; + private Long id; + private Long groupId; + private String path; + private String type; + private String name; + private String note; + private String sqlText; + private String sqlSeparator; + private Integer sqlMaxRow; + private String sqlParam; + private String jsonParam; + private String responseResult; + private String contentType; + private Integer status; + private Date releaseTime; + private Long releaseUserId; + private Integer sqlDbType; + private Long databaseId; + private Integer previlege; + private Integer openTrans; + private Long projectId; + private Integer version; + private Integer deleted; + private Long creator; + private Date createTime; + private Long updater; + private Date updateTime; + private Integer requestedTimes; + private Integer requestedSuccessTimes; + private Integer requestedFailedTimes; + private Long authId; + private String group; + + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/entity/ApiConfigEntity.java b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiConfigEntity.java new file mode 100644 index 0000000..db43cc0 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiConfigEntity.java @@ -0,0 +1,59 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.srt.framework.mybatis.entity.BaseEntity; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@TableName("data_dispatch_catalogue") +public class ApiConfigEntity extends BaseEntity { + /** + * 父级id(顶级为0) + */ + private Long parentId; + + /** + * 分组名称 + */ + private String name; + + /** + * 分组序号 + */ + private Integer orderNo; + + /** + * 描述 + */ + private String description; + + /** + * 分组路径 + */ + private String path; + + private Integer type; + + /** + * 项目id + */ + private Long projectId; + private Long id; + + // 私有属性,状态 + private Integer status; + // 私有属性,发布用户ID + private Long releaseUserId; + // 自定义注解,日期格式化,格式为"yyyy-MM-dd HH:mm:ss" + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date releaseTime; + // 私有属性,内容类型 + private String contentType; + private Integer previlege; + private Integer openTrans; + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/entity/ApiGroupEntity.java b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiGroupEntity.java new file mode 100644 index 0000000..aabf06c --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiGroupEntity.java @@ -0,0 +1,41 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.srt.framework.mybatis.entity.BaseEntity; + +@Data +@TableName(value = "data_dispatch_catalogue",autoResultMap = true) +public class ApiGroupEntity extends BaseEntity { + /** + * 父级id(顶级为0) + */ + private Long parentId; + + /** + * 分组名称 + */ + private String name; + + /** + * 分组序号 + */ + private Integer orderNo; + + /** + * 描述 + */ + private String description; + + /** + * 分组路径 + */ + private String path; + + private Integer type; + + /** + * 项目id + */ + private Long projectId; +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/entity/ApiLogEntity.java b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiLogEntity.java new file mode 100644 index 0000000..f819add --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/entity/ApiLogEntity.java @@ -0,0 +1,31 @@ +package net.srt.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import net.srt.framework.mybatis.entity.BaseEntity; + +import java.util.Date; + +/** + * @ClassName ApiLogEntity + * @Description 描述 + * @Author 栗永斌 + */ +@Data +@TableName(value = "data_service_api_log",autoResultMap = true) +public class ApiLogEntity extends BaseEntity { +// private Integer id; + private String url; + private Integer duration; + private String ip; + private Integer apiId; + private String error; + private Integer projectId; +// private String deleted; +// private Integer creator; +// private String createTime; +// private Integer updater; + private Date updateTime; + private String apiName; + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiConfigDao.java b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiConfigDao.java new file mode 100644 index 0000000..6919a9f --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiConfigDao.java @@ -0,0 +1,14 @@ +package net.srt.mapper; + +import net.srt.entity.ApiConfigEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface ApiConfigDao extends BaseDao { + void xia(@Param("id") Long id); + + void shang(Long id); + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiGroupDao.java b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiGroupDao.java new file mode 100644 index 0000000..a8bd1f0 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiGroupDao.java @@ -0,0 +1,9 @@ +package net.srt.mapper; + +import net.srt.entity.ApiGroupEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ApiGroupDao extends BaseDao { +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiLogDao.java b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiLogDao.java new file mode 100644 index 0000000..6e45e61 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/mapper/ApiLogDao.java @@ -0,0 +1,15 @@ +package net.srt.mapper; + +import net.srt.entity.ApiGroupEntity; +import net.srt.entity.ApiLogEntity; +import net.srt.framework.mybatis.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName ApiLogDao + * @Description 描述 + * @Author 栗永斌 + */ +@Mapper +public interface ApiLogDao extends BaseDao { +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/query/ApiConfigQuery.java b/srt-cloud-data-server/src/main/java/net/srt/query/ApiConfigQuery.java new file mode 100644 index 0000000..4cbb148 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/query/ApiConfigQuery.java @@ -0,0 +1,21 @@ +package net.srt.query; + +import lombok.Data; +import net.srt.framework.common.query.Query; + +@Data +public class ApiConfigQuery extends Query { + private Long groupId; + private Long resourceId; + private Long appId; + private String name; + private String path; + private String contentType; + private Integer status; + private Integer sqlDbType; + private Long databaseId; + private Integer privates; + private Integer openTrans; + private Integer queryApply; + private Integer ifMarket; +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/query/ApiLogQuery.java b/srt-cloud-data-server/src/main/java/net/srt/query/ApiLogQuery.java new file mode 100644 index 0000000..09aded7 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/query/ApiLogQuery.java @@ -0,0 +1,16 @@ +package net.srt.query; + +import lombok.Data; +import net.srt.framework.common.query.Query; + +/** + * @ClassName ApiLogQuery + * @Description 描述 + * @Author 栗永斌 + */ +@Data +public class ApiLogQuery extends Query { + + private String ip; + private String apiName; +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/ApiConfigService.java b/srt-cloud-data-server/src/main/java/net/srt/service/ApiConfigService.java new file mode 100644 index 0000000..8b5d7ff --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/ApiConfigService.java @@ -0,0 +1,37 @@ +package net.srt.service; + +import net.srt.dto.ApiConfigDto; +import net.srt.entity.ApiConfigEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.query.ApiConfigQuery; +import net.srt.vo.ApiConfig; + +import java.util.List; + +public interface ApiConfigService extends BaseService { + String getIpPort(); + + List listTree(); + + + PageResult page(ApiConfigQuery query); + + ApiConfigEntity getByI(Long id); + + + void update(Long id, ApiConfigEntity vo); + + void xia(Long id); + + + void shang(Long id); + + void removeByI(Long id); + + + void sav(ApiConfig vo); + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/ApiGroupService.java b/srt-cloud-data-server/src/main/java/net/srt/service/ApiGroupService.java new file mode 100644 index 0000000..df523d0 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/ApiGroupService.java @@ -0,0 +1,18 @@ +package net.srt.service; + +import net.srt.entity.ApiGroupEntity; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.vo.ApiGroup; + +import java.util.List; + +public interface ApiGroupService extends BaseService { + List listTree(); + + void save(ApiGroup vo); + + void update(ApiGroup vo); + + void delete(Long id); +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/ApiLogService.java b/srt-cloud-data-server/src/main/java/net/srt/service/ApiLogService.java new file mode 100644 index 0000000..70fca35 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/ApiLogService.java @@ -0,0 +1,19 @@ +package net.srt.service; + +import net.srt.entity.ApiGroupEntity; +import net.srt.entity.ApiLogEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.BaseService; +import net.srt.query.ApiLogQuery; +import net.srt.vo.ApiLog; + +/** + * @ClassName ApiLogService + * @Description 描述 + * @Author 栗永斌 + */ +public interface ApiLogService extends BaseService { + + PageResult pag(ApiLogQuery query); + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiConfigServiceImpl.java b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiConfigServiceImpl.java new file mode 100644 index 0000000..56a1ea8 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiConfigServiceImpl.java @@ -0,0 +1,164 @@ +package net.srt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; +import net.srt.convert.ApiConfigConvert; +import net.srt.convert.ApiGroupConvert; +import net.srt.dto.ApiConfigDto; +import net.srt.entity.ApiConfigEntity; +import net.srt.entity.ApiGroupEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.common.utils.BeanUtil; +import net.srt.framework.common.utils.BuildTreeUtils; +import net.srt.framework.common.utils.Result; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.mapper.ApiConfigDao; +import net.srt.query.ApiConfigQuery; +import net.srt.service.ApiConfigService; +import net.srt.vo.ApiConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +import java.util.List; + +@Service +@AllArgsConstructor +public class ApiConfigServiceImpl extends BaseServiceImpl implements ApiConfigService { + @Override + public String getIpPort() { + return null; + } + + + /** + * 从数据库中查询并返回树结构的节点列表 + * @return List 树节点列表 + */ + @Override + public List listTree() { + // 创建查询条件 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + // 设置查询条件,排除组织id + dataScopeWithoutOrgId(wrapper); + // 按照排序字段升序排序 + wrapper.orderByAsc(ApiConfigEntity::getOrderNo); + // 从数据库中查询列表数据 + List dataFileCategoryEntities = baseMapper.selectList(wrapper); + // 将数据转换为树节点vo列表 + List treeNodeVos = BeanUtil.copyListProperties(dataFileCategoryEntities, TreeNodeVo::new, (oldItem, newItem) -> { + // 设置树节点的标签为名称 + newItem.setLabel(oldItem.getName()); + // 设置树节点的值为id + newItem.setValue(oldItem.getId()); + // 设置树节点是否不可用,类型为0表示不可用 + newItem.setDisabled(oldItem.getType() == 0); + // 如果树节点路径包含斜杠,则设置父路径为路径截取到倒数第一个斜杠的位置 + if (newItem.getPath().contains("/")) { + newItem.setParentPath(newItem.getPath().substring(0, newItem.getPath().lastIndexOf("/"))); + } + }); + // 调用工具类构建树结构 + return BuildTreeUtils.buildTree(treeNodeVos); + } + + + + + /** + * 分页查询API配置信息 + * + * @param query 查询条件 + * @return 分页结果 + */ + @Override + public PageResult page(ApiConfigQuery query) { + // 调用Mapper层方法,查询分页数据 + IPage page = baseMapper.selectPage(getPage(query), getWrapper(query)); + + // 将查询结果转换为ApiConfig对象列表 + // 返回分页结果 + return new PageResult<>(ApiConfigConvert.INSTANCE.convertList(page.getRecords()), page.getTotal()); + } + + + /** + * 根据ID获取ApiConfigEntity对象 + * + * @param id ID值 + * @return ApiConfigEntity对象 + */ + @Override + public ApiConfigEntity getByI(Long id) { + return id != null ? baseMapper.selectById(id) : null; + } + + @Override + public void update(Long id,ApiConfigEntity vo) { + baseMapper.deleteById(id); + baseMapper.insert(vo); +// if (vo.getType() == 0) { +// ApiGroupEntity apiGroupEntity = new ApiGroupEntity(); +// apiGroupEntity.setId(vo.getId()); +// apiGroupEntity.setVersion(vo.getVersion()); +// apiGroupEntity.setDeleted(vo.getDeleted()); +// apiGroupEntity.setUpdateTime(vo.getUpdateTime()); +// apiGroupEntity.setCreateTime(vo.getCreateTime()); +// apiGroupEntity.setUpdater(vo.getUpdater()); +// } + } + + @Autowired + ApiConfigDao apiConfigDto; + + @Override + public void xia(Long id) { + apiConfigDto.xia(id); + } + + + + @Override + public void shang(Long id) { + apiConfigDto.shang(id); + } + + @Override + public void removeByI(Long id) { + baseMapper.deleteById(id); + } + + @Override + public void sav(ApiConfig vo) { + ApiConfigEntity entity = ApiConfigConvert.INSTANCE.convert(vo); + entity.setPath(recursionPath(entity, null)); + entity.setProjectId(getProjectId()); + baseMapper.insert(entity); // 使用 insertSelective() 方法进行插入操作 + } + private String recursionPath(ApiConfigEntity groupEntity, String path) { + if (StringUtil.isBlank(path)) { + path = groupEntity.getName(); + } + if (groupEntity.getParentId() != 0) { + ApiConfigEntity parent = getById(groupEntity.getParentId()); + path = parent.getName() + "/" + path; + return recursionPath(parent, path); + } + return path; + } + + private LambdaQueryWrapper getWrapper(ApiConfigQuery query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StringUtil.isNotBlank(query.getName()), ApiConfigEntity::getName, query.getName()); + wrapper.like(StringUtil.isNotBlank(query.getPath()), ApiConfigEntity::getPath, query.getPath()); +// wrapper.eq(StringUtil.isNotBlank(query.getContentType()), ApiConfigEntity::getContentType, query.getContentType()); +// wrapper.eq(query.getStatus()!= null, ApiConfigEntity::getStatus, query.getStatus()); +// wrapper.eq(query.getSqlDbType() != null, ApiConfigEntity::getSqlDbType, query.getSqlDbType()); +// + return wrapper; + } + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiGroupServiceImpl.java b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiGroupServiceImpl.java new file mode 100644 index 0000000..1fd1973 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiGroupServiceImpl.java @@ -0,0 +1,93 @@ +package net.srt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.AllArgsConstructor; +import net.srt.convert.ApiGroupConvert; +import net.srt.entity.ApiConfigEntity; +import net.srt.entity.ApiGroupEntity; +import net.srt.framework.common.exception.ServerException; +import net.srt.framework.common.utils.BeanUtil; +import net.srt.framework.common.utils.BuildTreeUtils; +import net.srt.framework.common.utils.TreeNodeVo; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.mapper.ApiGroupDao; +import net.srt.service.ApiConfigService; +import net.srt.service.ApiGroupService; +import net.srt.vo.ApiGroup; +import org.springframework.stereotype.Service; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +import java.util.List; + +@Service +@AllArgsConstructor +public class ApiGroupServiceImpl extends BaseServiceImpl implements ApiGroupService{ + private final ApiConfigService apiConfigService; + @Override + public List listTree() { + List treeNodeVos = getTreeNodeVos(); + return BuildTreeUtils.buildTree(treeNodeVos); + } + + private List getTreeNodeVos() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + dataScopeWithoutOrgId(wrapper); + wrapper.orderByAsc(ApiGroupEntity::getOrderNo); + List apiGroupEntities = baseMapper.selectList(wrapper); + return BeanUtil.copyListProperties(apiGroupEntities, TreeNodeVo::new, (oldItem, newItem) -> { + newItem.setLabel(oldItem.getName()); + newItem.setValue(oldItem.getId()); + newItem.setDisabled(oldItem.getType() == 1); + if (newItem.getPath().contains("/")) { + newItem.setParentPath(newItem.getPath().substring(0, newItem.getPath().lastIndexOf("/"))); + } + }); + } + + @Override + public void save(ApiGroup vo) { + ApiGroupEntity entity = ApiGroupConvert.INSTANCE.convert(vo); + entity.setPath(recursionPath(entity, null)); + entity.setProjectId(getProjectId()); + baseMapper.insert(entity); // 使用 insertSelective() 方法进行插入操作 + } + + @Override + public void update(ApiGroup vo) { + ApiGroupEntity entity = ApiGroupConvert.INSTANCE.convert(vo); + entity.setPath(recursionPath(entity, null)); + entity.setProjectId(getProjectId()); + updateById(entity); + } + + private String recursionPath(ApiGroupEntity groupEntity, String path) { + if (StringUtil.isBlank(path)) { + path = groupEntity.getName(); + } + if (groupEntity.getParentId() != 0) { + ApiGroupEntity parent = getById(groupEntity.getParentId()); + path = parent.getName() + "/" + path; + return recursionPath(parent, path); + } + return path; + } + + @Override + public void delete(Long id) { + //查询有没有子节点 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ApiGroupEntity::getParentId, id).last(" limit 1"); + ApiGroupEntity one = baseMapper.selectOne(wrapper); + if (one != null) { + throw new ServerException("存在子节点,不允许删除!"); + } + //查询有没有api与之关联 + LambdaQueryWrapper serviceApiConfigWrapper = new LambdaQueryWrapper<>(); + serviceApiConfigWrapper.eq(ApiConfigEntity::getParentId, id).last(" limit 1"); + ApiConfigEntity apiConfigEntity = apiConfigService.getOne(serviceApiConfigWrapper); + if (apiConfigEntity != null) { + throw new ServerException("节点下有 api 与之关联,不允许删除!"); + } + removeById(id); + } +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiLogServiceImpl.java b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiLogServiceImpl.java new file mode 100644 index 0000000..58a6a9d --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/service/impl/ApiLogServiceImpl.java @@ -0,0 +1,54 @@ +package net.srt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; + +import net.srt.convert.ApiLogConvert; + + +import net.srt.entity.ApiLogEntity; +import net.srt.framework.common.page.PageResult; +import net.srt.framework.mybatis.service.impl.BaseServiceImpl; +import net.srt.mapper.ApiLogDao; + +import net.srt.query.ApiLogQuery; + +import net.srt.service.ApiLogService; +import net.srt.vo.ApiLog; +import org.springframework.stereotype.Service; +import srt.cloud.framework.dbswitch.common.util.StringUtil; + +/** + * @ClassName ApiLogServiceImpl + * @Description 描述 + * @Author 栗永斌 + */ +@Service +@AllArgsConstructor +public class ApiLogServiceImpl extends BaseServiceImpl implements ApiLogService { + + + @Override + public PageResult pag(ApiLogQuery query) { + // 调用Mapper层方法,查询分页数据 + IPage page = baseMapper.selectPage(getPage(query), getWrapper(query)); + + // 将查询结果转换为ApiConfig对象列表 + // 返回分页结果 + return new PageResult<>(ApiLogConvert.INSTANCE.convertList(page.getRecords()), page.getTotal()); + } + + private LambdaQueryWrapper getWrapper(ApiLogQuery query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.like(StringUtil.isNotBlank(query.getApiName()), ApiLogEntity::getApiName, query.getApiName()); + wrapper.like(StringUtil.isNotBlank(query.getIp()), ApiLogEntity::getIp, query.getIp()); +// wrapper.eq(StringUtil.isNotBlank(query.getContentType()), ApiConfigEntity::getContentType, query.getContentType()); +// wrapper.eq(query.getStatus()!= null, ApiConfigEntity::getStatus, query.getStatus()); +// wrapper.eq(query.getSqlDbType() != null, ApiConfigEntity::getSqlDbType, query.getSqlDbType()); + + return wrapper; + } + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/vo/ApiConfig.java b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiConfig.java new file mode 100644 index 0000000..9293809 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiConfig.java @@ -0,0 +1,51 @@ +package net.srt.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** +* 数据服务-api配置 +* +* @author zrx 985134801@qq.com +* @since 1.0.0 2023-01-28 +*/ +@Data +public class ApiConfig implements Serializable { + private static final long serialVersionUID = 1L; + private Long id; + private Long groupId; + private String path; + private String type; + private String name; + private String note; + private String sqlText; + private String sqlSeparator; + private Integer sqlMaxRow; + private String sqlParam; + private String jsonParam; + private String responseResult; + private Integer contentType; + private Integer status; + private Date releaseTime; + private Long releaseUserId; + private Integer sqlDbType; + private Long databaseId; + private Integer previlege; + private Integer openTrans; + private Long projectId; + private Integer version; + private Integer deleted; + private Long creator; + private Date createTime; + private Long updater; + private Date updateTime; + private Integer requestedTimes; + private Integer requestedSuccessTimes; + private Integer requestedFailedTimes; + private Long authId; + private String group; + private String groupPath; + +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/vo/ApiGroup.java b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiGroup.java new file mode 100644 index 0000000..dcaa232 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiGroup.java @@ -0,0 +1,25 @@ +package net.srt.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class ApiGroup implements Serializable { + private static final long serialVersionUID = 1L; + private Long id; + private Long parentId; + private Integer type; + private String name; + private String description; + private Integer orderNo; + private String path; + private Long projectId; + private Integer version; + private Integer deleted; + private Long creator; + private Date createTime; + private Long updater; + private Date updateTime; +} diff --git a/srt-cloud-data-server/src/main/java/net/srt/vo/ApiLog.java b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiLog.java new file mode 100644 index 0000000..e45af60 --- /dev/null +++ b/srt-cloud-data-server/src/main/java/net/srt/vo/ApiLog.java @@ -0,0 +1,32 @@ +package net.srt.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @ClassName ApiLog + * @Description 描述 + * @Author 栗永斌 + */ +@Data +public class ApiLog implements Serializable { + private static final long serialVersionUID = 1L; + + + private Integer id; + private String url; + private Integer duration; + private String ip; + private Integer apiId; + private String error; + private Integer projectId; + private String deleted; + private Integer creator; + private String createTime; + private Integer updater; + private Date updateTime; + + +} diff --git a/srt-cloud-data-server/src/main/resources/auth.yml b/srt-cloud-data-server/src/main/resources/auth.yml new file mode 100644 index 0000000..0e6a006 --- /dev/null +++ b/srt-cloud-data-server/src/main/resources/auth.yml @@ -0,0 +1,7 @@ +auth: + ignore_urls: + - /auth/captcha + - /auth/login + - /auth/send/code + - /auth/mobile + - /upload/** \ No newline at end of file diff --git a/srt-cloud-data-server/src/main/resources/bootstrap.yml b/srt-cloud-data-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..227c8ed --- /dev/null +++ b/srt-cloud-data-server/src/main/resources/bootstrap.yml @@ -0,0 +1,43 @@ +server: + port: 8085 + +spring: + mvc: + servlet: + load-on-startup: 1 + application: + name: data-service + profiles: + active: dev + cloud: + nacos: + discovery: + server-addr: 101.34.77.101:8848 + # 命名空间,默认:public + namespace: a60b2ca1-a8c6-47ae-94f1-741105674655 + service: ${spring.application.name} + group: srt2.0 + config: + server-addr: ${spring.cloud.nacos.discovery.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + file-extension: yaml + # 指定配置 + extension-configs: + - data-id: datasource.yaml + refresh: true + servlet: + multipart: + max-request-size: 100MB + max-file-size: 1024MB +storage: + enabled: true + config: + # 存储类型:local、aliyun + type: local + # 访问域名 + domain: http://localhost:8082/sys + # 配置访问前缀 + prefix: + local: + # 本地上传路径 + path: D://upload diff --git a/srt-cloud-data-server/src/main/resources/log4j2.xml b/srt-cloud-data-server/src/main/resources/log4j2.xml new file mode 100644 index 0000000..14461eb --- /dev/null +++ b/srt-cloud-data-server/src/main/resources/log4j2.xml @@ -0,0 +1,48 @@ + + + + + ./logs/ + srt-cloud-system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/srt-cloud-data-server/src/main/resources/mapper/ApiConfigMapper.xml b/srt-cloud-data-server/src/main/resources/mapper/ApiConfigMapper.xml new file mode 100644 index 0000000..a15f3e3 --- /dev/null +++ b/srt-cloud-data-server/src/main/resources/mapper/ApiConfigMapper.xml @@ -0,0 +1,14 @@ + + + + + + + update data_dispatch_catalogue set status = 0 where id = #{id} + + + update data_dispatch_catalogue set status = 1 where id = #{id} + + diff --git a/srt-cloud-framework/srt-cloud-flink/build/app/flink-app-1.14-2.0.0-jar-with-dependencies.jar b/srt-cloud-framework/srt-cloud-flink/build/app/flink-app-1.14-2.0.0-jar-with-dependencies.jar index 0595467..e9979b7 100644 Binary files a/srt-cloud-framework/srt-cloud-flink/build/app/flink-app-1.14-2.0.0-jar-with-dependencies.jar and b/srt-cloud-framework/srt-cloud-flink/build/app/flink-app-1.14-2.0.0-jar-with-dependencies.jar differ diff --git a/srt-cloud-framework/srt-cloud-flink/build/extends/flink-catalog-mysql-1.14-2.0.0.jar b/srt-cloud-framework/srt-cloud-flink/build/extends/flink-catalog-mysql-1.14-2.0.0.jar index e848764..bc7b2a0 100644 Binary files a/srt-cloud-framework/srt-cloud-flink/build/extends/flink-catalog-mysql-1.14-2.0.0.jar and b/srt-cloud-framework/srt-cloud-flink/build/extends/flink-catalog-mysql-1.14-2.0.0.jar differ diff --git a/srt-cloud-framework/srt-cloud-flink/build/extends/flink-client-1.14-2.0.0.jar b/srt-cloud-framework/srt-cloud-flink/build/extends/flink-client-1.14-2.0.0.jar index e6aa6cd..724cdbd 100644 Binary files a/srt-cloud-framework/srt-cloud-flink/build/extends/flink-client-1.14-2.0.0.jar and b/srt-cloud-framework/srt-cloud-flink/build/extends/flink-client-1.14-2.0.0.jar differ diff --git a/srt-cloud-framework/srt-cloud-mybatis/src/main/java/net/srt/framework/mybatis/service/impl/BaseServiceImpl.java b/srt-cloud-framework/srt-cloud-mybatis/src/main/java/net/srt/framework/mybatis/service/impl/BaseServiceImpl.java index 89a427e..077c62b 100644 --- a/srt-cloud-framework/srt-cloud-mybatis/src/main/java/net/srt/framework/mybatis/service/impl/BaseServiceImpl.java +++ b/srt-cloud-framework/srt-cloud-mybatis/src/main/java/net/srt/framework/mybatis/service/impl/BaseServiceImpl.java @@ -198,13 +198,20 @@ public class BaseServiceImpl, T> extends ServiceImpl queryWrapper) { - DataScope dataScope = getDataScope(null, null, null, null, false, true); - if (dataScope != null) { - queryWrapper.apply(dataScope.getSqlFilter()); - } - } +// protected void dataScopeWithoutOrgId(LambdaQueryWrapper queryWrapper) { +// DataScope dataScope = getDataScope(null, null, null, null, false, true); +// if (dataScope != null) { +// queryWrapper.apply(dataScope.getSqlFilter()); +// } +// } + protected void dataScopeWithoutOrgId(LambdaQueryWrapper queryWrapper) { + DataScope dataScope = this.getDataScope((String)null, (String)null, (String)null, (String)null, false, true); + if (dataScope != null) { + queryWrapper.apply(dataScope.getSqlFilter(), new Object[0]); + } + + } /** * MyBatis-Plus 数据权限 */ diff --git a/srt-cloud-module/srt-cloud-datax/pom.xml b/srt-cloud-module/srt-cloud-datax/pom.xml index 4ccd30a..5ba3ab9 100644 --- a/srt-cloud-module/srt-cloud-datax/pom.xml +++ b/srt-cloud-module/srt-cloud-datax/pom.xml @@ -101,11 +101,11 @@ - - com.alibaba.datax - mysqlreader - 0.0.1-SNAPSHOT - + + + + + @@ -117,11 +117,11 @@ - - com.alibaba.datax - oraclereader - 0.0.1-SNAPSHOT - + + + + +