Browse Source

数据源复制

chenw 7 years ago
parent
commit
5e6e96f53f

+ 14 - 0
bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataConnectorController.java

@@ -10,6 +10,7 @@ import com.usoftchina.bi.core.base.TestPage;
 import com.usoftchina.bi.server.model.vo.configVo.ChangeOrderInfo;
 import com.usoftchina.bi.server.model.vo.configVo.DataConnectorInfo;
 import com.usoftchina.bi.server.model.vo.configVo.GroupInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DataSourceCopyInfo;
 import com.usoftchina.bi.server.service.dataSource.DataConnectorService;
 import com.usoftchina.bi.server.service.dataSource.ImplementSqlService;
 import com.usoftchina.bi.server.model.pojo.annotation.TargetDataSource;
@@ -181,4 +182,17 @@ public class DataConnectorController {
     public RepEntity getConnectorData(@RequestHeader String token, @RequestBody BaseToDataInfo body){
         return dataConnectorService.getConnectorData(token, body);
     }
+
+    /**
+     * 数据源复制
+     * @param token
+     * @param dataSourceCopyInfo
+     * @return
+     */
+    @ApiOperation(value = "复制数据源", notes = "复制数据源", response = RepEntity.class)
+    @CheckToken
+    @PostMapping("/copyDataSource")
+    public RepEntity copyDataSource(@RequestHeader String token, @RequestBody DataSourceCopyInfo dataSourceCopyInfo){
+        return dataConnectorService.copyDataSource(token, dataSourceCopyInfo);
+    }
 }

+ 3 - 1
bi-server/src/main/java/com/usoftchina/bi/server/dao/dataSource/DataConnectorMapper.java

@@ -104,7 +104,9 @@ public interface DataConnectorMapper {
     插入数据源配置
      */
     @Insert("INSERT INTO bi_data_connectors(id,data_name,data_note,data_tag,con_type,LOAD_OBJECT,DB_CONFIG,columns_config,used_number,create_by,create_date, table_name, BD_GROUP, create_id) " +
-            "VALUES (#{dataId},#{dataName}, #{note}, #{dataTag}, #{type}, #{loadObject}, #{dbConId},#{columnConfig}, #{usedNumber},#{createBy}, to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss'), #{tableName}, #{connectorGroup},#{createId})")
+            "VALUES (#{dataId,jdbcType=INTEGER},#{dataName,jdbcType=VARCHAR}, #{note,jdbcType=VARCHAR}, #{dataTag,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{loadObject,jdbcType=VARCHAR}, " +
+            "#{dbConId,jdbcType=INTEGER},#{columnConfig,jdbcType=VARCHAR}, #{usedNumber,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR}, to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss'), " +
+            "#{tableName,jdbcType=VARCHAR}, #{connectorGroup,jdbcType=VARCHAR},#{createId,jdbcType=INTEGER})")
     @SelectKey(before=true,keyProperty="dataId",resultType=int.class,statement="SELECT bi_data_connectors_sequence.nextval from dual",keyColumn = "id")
     void insertDataConnector(DataConnector dataConnector);
 

+ 42 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DataSourceCopyInfo.java

@@ -0,0 +1,42 @@
+package com.usoftchina.bi.server.model.vo.dataVo;
+
+import java.io.Serializable;
+
+/**
+ * @Author chenwei
+ * @Date 2019-04-10
+ */
+public class DataSourceCopyInfo implements Serializable {
+    /**
+     * 数据源ID
+     */
+    private int dataSourceId;
+    /**
+     * 数据连接ID
+     */
+    private int dataConnectionId;
+
+    public int getDataSourceId() {
+        return dataSourceId;
+    }
+
+    public void setDataSourceId(int dataSourceId) {
+        this.dataSourceId = dataSourceId;
+    }
+
+    public int getDataConnectionId() {
+        return dataConnectionId;
+    }
+
+    public void setDataConnectionId(int dataConnectionId) {
+        this.dataConnectionId = dataConnectionId;
+    }
+
+    public DataSourceCopyInfo() {
+    }
+
+    public DataSourceCopyInfo(int dataSourceId, int dataConnectionId) {
+        this.dataSourceId = dataSourceId;
+        this.dataConnectionId = dataConnectionId;
+    }
+}

+ 53 - 3
bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataConnectorService.java

@@ -1,7 +1,7 @@
 package com.usoftchina.bi.server.service.dataSource;
 
+import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
-import com.usoftchina.bi.core.utils.JsonUtils;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
 import com.usoftchina.bi.server.dao.dataSource.DataConnectorMapper;
 import com.usoftchina.bi.server.dao.user.UserMapper;
@@ -10,7 +10,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.bi.server.model.bo.BaseToDataInfo;
 import com.usoftchina.bi.server.model.bo.ColumnConfigAndSql;
-import com.usoftchina.bi.server.model.bo.DatabaseConfig;
 import com.usoftchina.bi.server.model.bo.GroupUpdateId;
 import com.usoftchina.bi.server.model.po.BaseConfig;
 import com.usoftchina.bi.server.model.po.DataConnector;
@@ -20,6 +19,7 @@ import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.base.TestPage;
 import com.usoftchina.bi.server.model.vo.configVo.*;
 import com.usoftchina.bi.server.model.vo.dataVo.ColumnValuesInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DataSourceCopyInfo;
 import com.usoftchina.bi.server.service.chart.GetChartsDataUtilService;
 import com.usoftchina.bi.server.service.strategy.StrategysService;
 import com.usoftchina.bi.server.service.chart.ChartsUtilService;
@@ -30,7 +30,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -57,6 +58,8 @@ public class DataConnectorService {
     ChartsUtilService chartsUtilService;
     @Autowired
     GetChartsDataUtilService getChartsDataUtilService;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
 
     private static final Logger logger = LoggerFactory.getLogger(DataConnectorService.class);
 
@@ -349,4 +352,51 @@ public class DataConnectorService {
         return new RepEntity(RepCode.success, columnValuesInfo);
     }
 
+    /**
+     * 数据源复制
+     * @param token
+     * @param dataSourceCopyInfo
+     * @return
+     */
+    public RepEntity copyDataSource(String token, DataSourceCopyInfo dataSourceCopyInfo){
+        Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
+        int userId = Integer.parseInt(resultMap.get("id"));
+        String userName = resultMap.get("name");
+
+        int dataSourceId = dataSourceCopyInfo.getDataSourceId(),
+            dataConnectionId = dataSourceCopyInfo.getDataConnectionId();
+        DataConnector dataConnector = dataConnectorMapper.getOneData(dataSourceId);
+        String loadObject = dataConnector.getLoadObject();
+        //校验SQL语句是否可正确在目标数据库执行
+        enableCopy(loadObject, dataConnectionId);
+        //复制数据源,开启事务
+        dataConnector.setDataName(dataConnector.getDataName() + "_副本");
+        dataConnector.setCreateBy(userName);
+        dataConnector.setCreateId(userId);
+        dataConnector.setDbConId(String.valueOf(dataConnectionId));
+        dataConnectorMapper.insertDataConnector(dataConnector);
+        int dataId = dataConnector.getDataId();
+        return new RepEntity(RepCode.success, dataId);
+    }
+
+    /**
+     * 校验SQL在新数据连接中是否可以正确执行
+     * @param loadObject
+     * @param dataConnectionId
+     */
+    private void enableCopy(String loadObject, int dataConnectionId){
+        DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(dataConnectionId));
+        if (!loadObject.toUpperCase().startsWith("SELECT")) {
+            loadObject = "SELECT * FROM " + loadObject;
+        }
+        try {
+            jdbcTemplate.queryForRowSet(loadObject);
+        } catch (DataAccessException e) {
+            throw new MyException(e.getCause().getMessage());
+        } finally {
+            DynamicDataSourceContextHolder.clearDataSourceType();
+        }
+
+    }
+
 }