caixiaofeng 10 mēneši atpakaļ
vecāks
revīzija
102904a454

+ 5 - 0
flow-report/flow-report-api/src/main/java/com/flow/service/ReportDatasourceService.java

@@ -2,7 +2,10 @@ package com.flow.service;
 
 import com.flow.common.mybatis.service.BaseService;
 import com.flow.entity.ReportDatasource;
+import com.flow.model.ExecSql;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 public interface ReportDatasourceService extends BaseService<ReportDatasource> {
@@ -12,4 +15,6 @@ public interface ReportDatasourceService extends BaseService<ReportDatasource> {
     ReportDatasource update(ReportDatasource reportDatasource);
 
     void delete(Set<Long> ids);
+
+    List<Map<String, Object>> execSql(ExecSql execSql);
 }

+ 28 - 3
flow-report/flow-report-biz/src/main/java/com/flow/service/impl/ReportDatasourceServiceImpl.java

@@ -1,13 +1,18 @@
 package com.flow.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.flow.common.core.exception.BaseException;
 import com.flow.common.mybatis.service.impl.BaseServiceImpl;
 import com.flow.dao.ReportDatasourceDao;
 import com.flow.entity.ReportDatasource;
+import com.flow.model.ExecSql;
 import com.flow.service.ReportDatasourceService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
-import java.util.Set;
+import javax.sql.DataSource;
+import java.util.*;
 
 
 @Service
@@ -18,16 +23,36 @@ public class ReportDatasourceServiceImpl extends BaseServiceImpl<ReportDatasourc
 
     @Override
     public ReportDatasource create(ReportDatasource reportDatasource) {
-        return null;
+        reportDatasourceDao.insert(reportDatasource);
+        return reportDatasource;
     }
 
     @Override
     public ReportDatasource update(ReportDatasource reportDatasource) {
-        return null;
+        reportDatasourceDao.updateById(reportDatasource);
+        return reportDatasource;
     }
 
     @Override
     public void delete(Set<Long> ids) {
+        reportDatasourceDao.deleteBatchIds(ids);
+    }
 
+    @Override
+    public List<Map<String, Object>> execSql(ExecSql execSql) {
+        String sql = execSql.getSql();
+        if(StringUtils.isBlank(sql)){
+            throw new BaseException("sql不能为空");
+        }
+        Optional<ReportDatasource> optional = this.lambdaQuery()
+                .eq(ReportDatasource::getId, execSql.getDatasourceId())
+                .oneOpt();
+        if(!optional.isPresent()){
+            throw new BaseException("数据源不存在");
+        }
+        ReportDatasource reportDatasource = optional.get();
+        DataSource dataSource = reportDatasource.getDataSource();
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        return jdbcTemplate.queryForList(sql);
     }
 }

+ 7 - 0
flow-report/flow-report-controller/src/main/java/com/flow/controller/ReportDatasourceController.java

@@ -2,6 +2,7 @@ package com.flow.controller;
 
 import com.flow.common.core.model.Result;
 import com.flow.entity.ReportDatasource;
+import com.flow.model.ExecSql;
 import com.flow.service.ReportDatasourceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -34,4 +35,10 @@ public class ReportDatasourceController {
         return Result.success();
     }
 
+    @PreAuthorize("hasAnyAuthority('reportDatasource:execSql')")
+    @PostMapping("/execSql")
+    public Result<?> execSql(@RequestBody ExecSql execSql) {
+        return Result.success(reportDatasourceService.execSql(execSql));
+    }
+
 }

+ 12 - 0
flow-report/flow-report-entity/src/main/java/com/flow/entity/ReportDatasource.java

@@ -3,9 +3,12 @@ import com.baomidou.mybatisplus.annotation.SqlCondition;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.flow.common.mybatis.entity.BaseEntity;
+import com.zaxxer.hikari.HikariDataSource;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.sql.DataSource;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("report_datasource")
@@ -16,4 +19,13 @@ public class ReportDatasource extends BaseEntity {
     protected String url;
     protected String username;
     protected String password;
+
+    public DataSource getDataSource() {
+        HikariDataSource datasource = new HikariDataSource();
+        datasource.setJdbcUrl(url);
+        datasource.setDriverClassName("com.mysql.cj.jdbc.Driver");
+        datasource.setUsername(username);
+        datasource.setPassword(password);
+        return datasource;
+    }
 }