From bd7e9719071ce3281401b3c95aaaa21d6cb8c204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 13 Dec 2024 20:45:02 +0800 Subject: [PATCH] 'commit' --- .../base/DataEase/Util/CallApiToCopy.java | 5 +- .../base/DataEase/Util/SyncCityScreen.java | 91 +++++++------ .../base/DataEase/Util/SyncCityScreenNew.java | 120 ++++++++++++++++++ .../com/dsideal/base/DataEase/Util/Watch.java | 14 +- 4 files changed, 179 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreenNew.java diff --git a/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java b/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java index 32a84536..ec2900d1 100644 --- a/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java +++ b/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java @@ -59,13 +59,14 @@ public class CallApiToCopy { String screenId = JSONObject.parseObject(res).getString("data"); System.out.println("生成大屏ID=" + screenId); + JSONObject canvasViewInfo = FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/CanvasViewInfo.json"); //将临时副本保存下来 url = urlPrefix + "/de2api/dataVisualization/saveCanvas"; jo = new JSONObject(); + jo.put("appData", null); jo.put("canvasStyleData", canvas_style_data); + jo.put("canvasViewInfo", canvasViewInfo); jo.put("componentData", component_data); - jo.put("canvasViewInfo", FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/CanvasViewInfo.json")); - jo.put("appData", null); jo.put("id", screenId); jo.put("name", screenName); jo.put("pid", pid); diff --git a/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java b/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java index cc9a91a3..24dbfc8c 100644 --- a/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java +++ b/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java @@ -102,8 +102,6 @@ public class SyncCityScreen { * @throws InterruptedException */ public static void SyncCityScreen(String dataVisualizationName) throws InterruptedException { - - // 二、开始全新插入数据 //1、获取母屏数据 String sql = "select * from data_visualization_info where name =?"; @@ -113,8 +111,8 @@ public class SyncCityScreen { sql = "select * from core_chart_view where scene_id=?"; List motherChartList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); //母屏共享链接 - sql = "select * from xpack_share where resource_id=?"; - Record motherShareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); +// sql = "select * from xpack_share where resource_id=?"; +// Record motherShareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); //母屏的可视化资源表 sql = "select * from core_opt_recent where resource_id=?"; Record motherOptRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); @@ -123,17 +121,17 @@ public class SyncCityScreen { sql = "select * from visualization_link_jump where source_dv_id=?"; List motherLinkJumpList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); //母屏的linkJumpInfo - sql = "select * from visualization_link_jump_info where target_dv_id=?"; - List motherLinkJumpInfoList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); +// sql = "select * from visualization_link_jump_info where target_dv_id=?"; +// List motherLinkJumpInfoList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); //母屏的外部参数关联关系表 - sql = "select * from visualization_outer_params where visualization_id=?"; - List motheRouterParamsList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); +// sql = "select * from visualization_outer_params where visualization_id=?"; +// List motheRouterParamsList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); //跳转目标仪表板图表字段配置表 - sql = "select * from visualization_link_jump_target_view_info where link_jump_info_id in (" + - "select id from visualization_link_jump_info where target_dv_id=?)"; - List motherLinkJumpTargetViewInfo = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); +// sql = "select * from visualization_link_jump_target_view_info where link_jump_info_id in (" + +// "select id from visualization_link_jump_info where target_dv_id=?)"; +// List motherLinkJumpTargetViewInfo = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); //2、需要哪16个城市 for (String cityName : dm.getCityNameList()) { //(1)复制16个大屏 @@ -177,11 +175,11 @@ public class SyncCityScreen { } // (4) 发布共享链接 - Record shareRecord = new Record().setColumns(motherShareRecord); - shareRecord.set("resource_id", bigScreenId); - shareRecord.set("id", getSnowId()); - shareRecord.set("uuid", randomString(8));//大小写字母和数字组合,长度为8 - Db.use(DataEaseModel.DB_NAME).save("xpack_share", "id", shareRecord); +// Record shareRecord = new Record().setColumns(motherShareRecord); +// shareRecord.set("resource_id", bigScreenId); +// shareRecord.set("id", getSnowId()); +// shareRecord.set("uuid", randomString(8));//大小写字母和数字组合,长度为8 +// Db.use(DataEaseModel.DB_NAME).save("xpack_share", "id", shareRecord); // (5) 插入可视化资源表 Record optRecord = new Record().setColumns(motherOptRecord); @@ -199,16 +197,16 @@ public class SyncCityScreen { } // (7) 插入跳转配置信息表 - Map map = new HashMap<>(); - int idx = 0; - for (Record rMotherLinkJumpInfo : motherLinkJumpInfoList) { - idx++; - Record rCityLinkJumpInfo = new Record().setColumns(rMotherLinkJumpInfo);//克隆出来 - rCityLinkJumpInfo.set("id", getSnowId()); - map.put(idx, rCityLinkJumpInfo.getLong("id")); - rCityLinkJumpInfo.set("target_dv_id", bigScreenId); - Db.use(DataEaseModel.DB_NAME).save("visualization_link_jump_info", "id", rCityLinkJumpInfo); - } +// Map map = new HashMap<>(); +// int idx = 0; +// for (Record rMotherLinkJumpInfo : motherLinkJumpInfoList) { +// idx++; +// Record rCityLinkJumpInfo = new Record().setColumns(rMotherLinkJumpInfo);//克隆出来 +// rCityLinkJumpInfo.set("id", getSnowId()); +// map.put(idx, rCityLinkJumpInfo.getLong("id")); +// rCityLinkJumpInfo.set("target_dv_id", bigScreenId); +// Db.use(DataEaseModel.DB_NAME).save("visualization_link_jump_info", "id", rCityLinkJumpInfo); +// } //TODO 外部参数比较复杂 /* @@ -216,28 +214,29 @@ public class SyncCityScreen { */ //(8) 跳转目标仪表板图表字段配置表:visualization_link_jump_info - idx = 0; - for (Record record : motherLinkJumpTargetViewInfo) { - idx++; - Record rCityLinkJumpTargetViewInfo = new Record().setColumns(record);//克隆出来 - rCityLinkJumpTargetViewInfo.set("target_id", getSnowId()); - rCityLinkJumpTargetViewInfo.set("link_jump_info_id", map.get(idx)); - Db.use(DataEaseModel.DB_NAME).save( - "visualization_link_jump_target_view_info", "target_id", rCityLinkJumpTargetViewInfo); - } +// idx = 0; +// for (Record record : motherLinkJumpTargetViewInfo) { +// idx++; +// Record rCityLinkJumpTargetViewInfo = new Record().setColumns(record);//克隆出来 +// rCityLinkJumpTargetViewInfo.set("target_id", getSnowId()); +// rCityLinkJumpTargetViewInfo.set("link_jump_info_id", map.get(idx)); +// Db.use(DataEaseModel.DB_NAME).save( +// "visualization_link_jump_target_view_info", "target_id", rCityLinkJumpTargetViewInfo); +// } System.out.println("完成" + cityName + "的数据填充~"); + break; } - //查询出每个城市的共享链接 - for (String cityName : dm.getCityNameList()) { - String screenName = dataVisualizationName + cityName; - sql = "select * from data_visualization_info where name =?"; - Record record = Db.use(DataEaseModel.DB_NAME).findFirst(sql, screenName); - long id = record.getLong("id"); - sql = "select * from xpack_share where resource_id=?"; - Record shareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, id); - System.out.println(cityName + "的共享链接:" + shareRecord.getStr("uuid")); - } +// //查询出每个城市的共享链接 +// for (String cityName : dm.getCityNameList()) { +// String screenName = dataVisualizationName + cityName; +// sql = "select * from data_visualization_info where name =?"; +// Record record = Db.use(DataEaseModel.DB_NAME).findFirst(sql, screenName); +// long id = record.getLong("id"); +// sql = "select * from xpack_share where resource_id=?"; +// Record shareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, id); +// System.out.println(cityName + "的共享链接:" + shareRecord.getStr("uuid")); +// } System.out.println("生成完毕"); } @@ -246,6 +245,6 @@ public class SyncCityScreen { //获取数据可视化名称 String dataVisualizationName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationName"); clear(dataVisualizationName); -// SyncCityScreen(dataVisualizationName); + //SyncCityScreen(dataVisualizationName); } } diff --git a/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreenNew.java b/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreenNew.java new file mode 100644 index 00000000..b6723275 --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreenNew.java @@ -0,0 +1,120 @@ +package com.dsideal.base.DataEase.Util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SyncCityScreenNew { + + /* + 开启数据库SQL执行日志 + SHOW VARIABLES LIKE 'general_log%'; + SET GLOBAL general_log = 'ON'; + SET GLOBAL general_log = 'OFF'; + */ + + /** + * 利用雪花算法获取唯一ID + * + * @return + */ + public static long getSnowId() throws InterruptedException { + //雪花算法生成唯一ID + Snowflake snowflake = IdUtil.createSnowflake(1, 1); + Thread.sleep(2); + return snowflake.nextId(); + } + + public static DataEaseModel dm = new DataEaseModel(); + + /** + * @param dataVisualizationName + * @throws InterruptedException + */ + public static void SyncScreen(String dataVisualizationName) throws InterruptedException { + //1、获取母屏数据 + String sql = "select * from data_visualization_info where name =?"; + Record motherRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, dataVisualizationName); + long motherId = motherRecord.getLong("id"); + //母屏细节表 + sql = "select * from core_chart_view where scene_id=?"; + List motherChartList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); + + //母屏的可视化资源表 + sql = "select * from core_opt_recent where resource_id=?"; + Record motherOptRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); + + //母屏的linkJump + sql = "select * from visualization_link_jump where source_dv_id=?"; + List motherLinkJumpList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId); + + + //(1)复制大屏 + Record cityRecord = new Record().setColumns(motherRecord);//复制record对象 + cityRecord.set("name", dataVisualizationName + "_copy"); + long bigScreenId = getSnowId(); + cityRecord.set("id", bigScreenId); + Db.use(DataEaseModel.DB_NAME).save("data_visualization_info", "id", cityRecord); + Map mcMap = new HashMap<>(); + // (2) 复制大屏的细节表 + List writeList = new ArrayList<>(); + for (Record rMotherChart : motherChartList) { + long motherChartId = rMotherChart.getLong("id"); + Record rCityChart = new Record().setColumns(rMotherChart);//克隆出来 + //修改大屏ID + rCityChart.set("id", getSnowId()); + rCityChart.set("scene_id", bigScreenId); + writeList.add(rCityChart); + //保存母屏的组件IDS 与复制品组件IDS之间的对应关系 + mcMap.put(motherChartId, rCityChart.getLong("id")); + } + //批量保存 + Db.use(DataEaseModel.DB_NAME).batchSave("core_chart_view", writeList, 100);//需要修改 + + //回头修改一下主表 + sql = "select component_data from data_visualization_info where id=?"; + Record rChild = Db.use(DataEaseModel.DB_NAME).findFirst(sql, bigScreenId); + String component_data = rChild.getStr("component_data"); + //遍历map + for (Map.Entry entry : mcMap.entrySet()) { + Long key = entry.getKey(); + Long value = entry.getValue(); + component_data = component_data.replace(key.toString(), value.toString()); + } + // 更新回去 + sql = "update data_visualization_info set component_data=? where id=?"; + Db.use(DataEaseModel.DB_NAME).update(sql, component_data, bigScreenId); + + // (5) 插入可视化资源表 + Record optRecord = new Record().setColumns(motherOptRecord); + optRecord.set("resource_id", bigScreenId); + optRecord.set("id", getSnowId()); + Db.use(DataEaseModel.DB_NAME).save("core_opt_recent", "id", optRecord); + + + // (6) 插入跳转配置表 + for (Record rMotherLinkJump : motherLinkJumpList) { + Record rCityLinkJump = new Record().setColumns(rMotherLinkJump);//克隆出来 + rCityLinkJump.set("id", getSnowId()); + rCityLinkJump.set("source_dv_id", bigScreenId); + Db.use(DataEaseModel.DB_NAME).save("visualization_link_jump", "id", rCityLinkJump); + } + + System.out.println("生成完毕"); + } + + public static void main(String[] args) throws InterruptedException { + LocalMysqlConnectUtil.Init(); + //获取数据可视化名称 + String dataVisualizationName = "黄海测试的气泡地图"; + SyncScreen(dataVisualizationName); + } +} diff --git a/src/main/java/com/dsideal/base/DataEase/Util/Watch.java b/src/main/java/com/dsideal/base/DataEase/Util/Watch.java index 558732f4..98e80011 100644 --- a/src/main/java/com/dsideal/base/DataEase/Util/Watch.java +++ b/src/main/java/com/dsideal/base/DataEase/Util/Watch.java @@ -8,7 +8,9 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; public class Watch { @@ -23,6 +25,9 @@ public class Watch { int port = uri.getPort(); // 获取端口号 String user = "root";//用户名 String password = "Password123@mysql";//密码 + + Set set = new HashSet<>(); + set.add("QRTZ_FIRED_TRIGGERS"); // 构建二进制日志客户端 BinaryLogClient client = new BinaryLogClient(host, port, user, password); // 反序列化配置 @@ -32,7 +37,7 @@ public class Watch { client.setEventDeserializer(eventDeserializer); // 设置自己的client作为服务器的id client.setServerId(SERVER_ID); - Map tableMap = new HashMap<>(); + Map tableMap = new HashMap<>(); client.registerEventListener(event -> { EventData data = event.getData(); @@ -41,10 +46,13 @@ public class Watch { tableMap.put(tableMapEventData.getTableId(), tableMapEventData.getTable()); } if (data instanceof WriteRowsEventData) { - System.out.println("Insert:"+tableMap.get(((WriteRowsEventData) data).getTableId())); + String tableName = tableMap.get(((WriteRowsEventData) data).getTableId()); + if (!set.contains(tableName) && !tableName.startsWith("tmp_") && !tableName.endsWith("_log")) { + set.add(tableName); + System.out.println(tableName); + } } }); - client.connect(); } }