Browse Source

UAS同步和复制逻辑修改

hy 6 years ago
parent
commit
5b61d87d4a

+ 2 - 1
bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardsController.java

@@ -168,7 +168,8 @@ public class DashboardsController {
     @CheckToken
     @PostMapping("/copyDashboard")
     public RepEntity copy(@RequestHeader String token, @RequestBody DashboardCopyInfo dashboardCopyInfo){
-        return dashboardsService.copy(token, dashboardCopyInfo);
+        boolean fromBI = true;
+        return dashboardsService.copy(token, dashboardCopyInfo,fromBI);
     }
 
     @ApiOperation(value = "导出", notes = "导出")

+ 6 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/common/UASMapper.java

@@ -107,4 +107,10 @@ public interface UASMapper {
             + "#{res,mode=OUT,jdbcType=VARCHAR})" })
     @Options(statementType=StatementType.CALLABLE)
     String sp_clean_sob(@Param("from") String from,@Param("res") String res);
+
+    /**
+     * 清除同步时使用的from_id 和 from_data_id
+     */
+    @Update("update bi_charts set from_id = null,from_data_id=null ")
+    void clear();
 }

+ 7 - 8
bi-server/src/main/java/com/usoftchina/bi/server/service/common/UASService.java

@@ -61,19 +61,18 @@ public class UASService {
         int hasFrom = uasMapper.checkDataBase(syncData.getFrom());
         int hasTo = uasMapper.checkDataBase(syncData.getTo());
         if(hasFrom==0){
-            //插入数据源
             return "来源账套还未初始化,请初始化后再使用同步功能";
         }
         if(hasTo==0){
-            //插入数据
+            //插入数据链接
             uasMapper.insertDataBase(syncData.getToName(),syncData.getTo(),id);
         }
-        //目标账套数据ID
+        //目标账套数据链接ID
         String to_basedata_id = userMapper.getMasterIdByName(syncData.getTo());
-        //添加数据可切换
+        //添加数据链接可切换
         DatabasesInfo databasesInfo = uasMapper.getDatabasesInfo(to_basedata_id);
         dataBasesService.addDataSource(databasesInfo);
-        //删除目标数据所有标准报表
+        //删除目标数据链接所有标准报表
         uasMapper.sp_clean_sob(syncData.getTo(),"");
         //模拟登录
         User user = userMapper.getLogin(syncData.getEmName());
@@ -84,10 +83,10 @@ public class UASService {
             dashboardCopyInfo.setLastName("_" + syncData.getToName());
             dashboardCopyInfo.setDataSourceId(Integer.valueOf(to_basedata_id));
             //复制报表
-            dashboardsService.copy(token,dashboardCopyInfo);
+            dashboardsService.copy(token,dashboardCopyInfo,false);
         }
-        //更新标准的旧报表编号账套后缀
-        //uasMapper.sp_sync(syncData.getTo(),"");
+        //更新from_id from_data_id字段
+        uasMapper.clear();
         return "true";
     }
 }

+ 38 - 24
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsService.java

@@ -351,17 +351,27 @@ public class DashboardsService {
 
     /**
      * 复制报表
+     * 1.fromBI true 时 说明是来自BI系统的报表复制按钮触发
+     *   (1)不切换数据源 dashboardCopyInfo.getDataSourceId()==0
+     *    除了数据链接和数据源 其余的都复制一份
+     *    (2) 切换数据源 dashboardCopyInfo.getDataSourceId()>0
+     *    除了数据链接 其余的都复制一份 特殊情况:如果报表的多个图表对应一个数据源 则只复制这个数据源一次
+     * 2.fromBI false 时 说明是来自UAS系统同步按钮触发(只复制编号带有账套名的报表)
+     *    除了数据链接 其余的都复制一份 一模一样的
      * @param dashboardCopyInfo
+     * @param fromBI 标识是来自BI系统的报表复制按钮触发 还是来自 UAS系统同步按钮触发
      * @return
      */
-    public RepEntity copy(String token, DashboardCopyInfo dashboardCopyInfo) {
+    public RepEntity copy(String token, DashboardCopyInfo dashboardCopyInfo, boolean fromBI) {
         Map<String,String> userData = GetTokenDataUtil.getTokenData(token);
         int userId = Integer.valueOf(userData.get("id"));
         String userName = userData.get("name");
         int dashboardId = dashboardCopyInfo.getDashboardId(),
-            dataSourceId = dashboardCopyInfo.getDataSourceId();
+            dataSourceId = dashboardCopyInfo.getDataSourceId();//如果dataSourceId是0 就说明是没有切换数据源
         List<String> idList = new ArrayList<>();
         Map<String, String> idMap = new HashMap<>();
+        //数据源ID集合 用来复用同一个数据源 {oldDataConnects : newDataConnects}
+        Map<Integer, Integer> dataConnectMap = new HashMap<>();
         //复制图表
         String chartIds = dashboardsMapper.getChartIdsById(dashboardId);
         if (!StringUtils.isEmpty(chartIds)) {
@@ -369,15 +379,24 @@ public class DashboardsService {
             for (int i = 0, len = idArray.length; i < len; i++) {
                 ChartConfig chartConfig = chartsConfigMapper.getOneChart(Integer.valueOf(idArray[i]));
                 int oldChartId = chartConfig.getChartId();
-                //校验 要复制的图标是否已在目标账套
-                List<Map<String, Object>> chartMap = chartsConfigMapper.checkOldChart(oldChartId,chartConfig.getDataId());
-                if(chartMap.size()==0){
-                    chartConfig.setFrom_id(oldChartId);
-                    chartConfig.setFrom_data_id(chartConfig.getDataId());
-                    chartConfig.setChartName(chartConfig.getChartName() + dashboardCopyInfo.getLastName());
-                    chartConfig.setCreateBy(userName);
-                    chartConfig.setCreateId(userId);
-                    String oldFetchConfig = chartConfig.getFetchConfig();
+                chartConfig.setFrom_id(oldChartId);
+                chartConfig.setFrom_data_id(chartConfig.getDataId());
+                chartConfig.setChartName(chartConfig.getChartName() + dashboardCopyInfo.getLastName());
+                chartConfig.setCreateBy(userName);
+                chartConfig.setCreateId(userId);
+                String oldFetchConfig = chartConfig.getFetchConfig();
+                //复制数据源
+                if(fromBI){
+                    if(dataSourceId>0){
+                        Integer dataId = dataConnectMap.get(chartConfig.getDataId());
+                        //判断数据源是否已复制过
+                        if(StringUtils.isEmpty(dataId)){
+                            dataId = dataConnectorService.copyDataSource(token, new DataSourceCopyInfo(chartConfig.getDataId(), dataSourceId ,dashboardCopyInfo.getLastName())).getData();
+                            dataConnectMap.put(chartConfig.getDataId(),dataId);
+                        }
+                        chartConfig.setDataId(dataId);
+                    }
+                }else{
                     //判断数据源是否已复制过
                     Integer DataConnectId = chartsConfigMapper.getDataConnectId(chartConfig.getDataId());
                     int dataId = 0;
@@ -385,22 +404,17 @@ public class DashboardsService {
                         dataId = dataConnectorService.copyDataSource(token, new DataSourceCopyInfo(chartConfig.getDataId(), dataSourceId ,dashboardCopyInfo.getLastName())).getData();
                     }else{
                         dataId = DataConnectId;
-                        chartConfig.setFrom_data_id(dataId);
                     }
                     chartConfig.setDataId(dataId);
-                    chartsConfigMapper.insertCharts(chartConfig);
-                    int newChartId = chartConfig.getChartId();
-                    //新ID更新到FetchConfig
-                    JSONArray jsonArray = JSONObject.parseArray("["+oldFetchConfig+"]");
-                    jsonArray.getJSONObject(0).put("id",newChartId);
-                    chartsConfigMapper.updateChartFetchConfig(JSONObject.toJSONString(jsonArray.getJSONObject(0)),newChartId);
-                    idMap.put(String.valueOf(oldChartId), String.valueOf(newChartId));
-                    idList.add(String.valueOf(newChartId));
-                }else{
-                    String newChartId = String.valueOf(chartMap.get(0).get("ID"));
-                    idMap.put(String.valueOf(oldChartId), newChartId);
-                    idList.add(newChartId);
                 }
+                chartsConfigMapper.insertCharts(chartConfig);
+                int newChartId = chartConfig.getChartId();
+                //新ID更新到FetchConfig
+                JSONArray jsonArray = JSONObject.parseArray("["+oldFetchConfig+"]");
+                jsonArray.getJSONObject(0).put("id",newChartId);
+                chartsConfigMapper.updateChartFetchConfig(JSONObject.toJSONString(jsonArray.getJSONObject(0)),newChartId);
+                idMap.put(String.valueOf(oldChartId), String.valueOf(newChartId));
+                idList.add(String.valueOf(newChartId));
             }
         }
         //复制报表