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 d5a5e02c..df85e079 100644 --- a/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java +++ b/src/main/java/com/dsideal/base/DataEase/Util/CallApiToCopy.java @@ -1,5 +1,7 @@ package com.dsideal.base.DataEase.Util; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.dsideal.base.DataEase.Model.DataEaseModel; @@ -10,32 +12,65 @@ import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import java.util.List; -import java.util.Locale; +import java.util.Random; import java.util.UUID; import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME; public class CallApiToCopy { - + //DataEase部署的地址 public static String urlPrefix = "http://10.10.14.203"; + public static DataEaseModel dm = new DataEaseModel(); + /** * 功能:获取DataEase的Token * * @return */ public static String getToken() { - //登录获取Token //读取Data目录下DataEaseLogin.json文件 JSONObject jo = FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/DataEaseLogin.json"); String url = urlPrefix + "/de2api/login/localLogin"; - String res = HttpUtil.createPost(url).contentType("application/json") - .body(jo.toString()).execute().body(); + String res = HttpUtil.createPost(url).contentType("application/json").body(jo.toString()).execute().body(); return JSONObject.parseObject(res).getJSONObject("data").getString("token"); } - public static DataEaseModel dm = new DataEaseModel(); + /** + * 利用雪花算法获取唯一ID + * + * @return + */ + public static long getSnowId() { + Snowflake snowflake = IdUtil.createSnowflake(1, 1); + return snowflake.nextId(); + } + /** + * 生成随机字符串 + * + * @param len + * @return + */ + static String randomString(int len) { + String alphabetsInUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String alphabetsInLowerCase = "abcdefghijklmnopqrstuvwxyz"; + String numbers = "0123456789"; + String allCharacters = alphabetsInLowerCase + alphabetsInUpperCase + numbers; + StringBuilder randomString = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < len; i++) { + int randomIndex = random.nextInt(allCharacters.length()); + randomString.append(allCharacters.charAt(randomIndex)); + } + return randomString.toString(); + } + + /** + * 清理通过本程序生成的所有副本,为了再次生成不重复 + * + * @param dataVisualizationName + */ public static void clear(String dataVisualizationName) { //一、先删除后插入保持健康:保留:【云南省教育决策支持系统【市州】】,删除掉云南省教育决策支持系统【市州】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据 String sql = "select * from data_visualization_info where name like '%" + dataVisualizationName + "%' and name <>'" + dataVisualizationName + "'"; @@ -48,15 +83,12 @@ public class CallApiToCopy { //(2) 删除共享链接表 sql = "delete from xpack_share WHERE resource_id=?"; Db.use(DB_NAME).update(sql, id); - //(3) 删除可视化资源表 sql = "delete from core_opt_recent where resource_id=?"; Db.use(DB_NAME).update(sql, id); - // (4) 跳转记录表 sql = "delete from visualization_link_jump where source_dv_id=?"; Db.use(DB_NAME).update(sql, id); - // (5) 跳转配置表 sql = "select * from visualization_link_jump_info where target_dv_id=?"; List jumpList = Db.use(DB_NAME).find(sql, id); @@ -64,11 +96,9 @@ public class CallApiToCopy { long jumpId = r.getLong("id"); sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?"; Db.use(DB_NAME).update(sql, jumpId); - sql = "delete from visualization_link_jump_info where id=?"; Db.use(DB_NAME).update(sql, jumpId); } - // (6) 外部参数关联关系表 sql = "select params_id from visualization_outer_params where visualization_id=?"; String paramsId = Db.use(DB_NAME).queryStr(sql, id); @@ -76,28 +106,31 @@ public class CallApiToCopy { Db.use(DB_NAME).update(sql, paramsId); sql = "delete from visualization_outer_params where visualization_id=?"; Db.use(DB_NAME).update(sql, id); - //(7) 删除主表数据 Db.use(DB_NAME).deleteById("data_visualization_info", id); } System.out.println("成功删除大屏数据" + toDelList.size() + "条~"); } - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { LocalMysqlConnectUtil.Init(); //获取数据可视化名称 String dataVisualizationName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationName"); - //旧的不去,新的不来 + //清理掉旧的数据 clear(dataVisualizationName); - //母屏的id - String motherId = "1036286881547030528"; - //母屏所在的文件夹ID - String pid = "1036643788262608896"; - + //母屏信息 + String sql = "select * from data_visualization_info where name =?"; + Record motherRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, dataVisualizationName); + long motherId = motherRecord.getLong("id");//母屏ID + long pid = motherRecord.getLong("pid"); //隶属文件夹 + //母屏共享链接 + sql = "select * from xpack_share where resource_id=?"; + Record motherShareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); + + //按16个市州进行生成 for (String cityName : dm.getCityNameList()) { - //要拷贝出来的屏幕名称 - String screenName = dataVisualizationName + cityName; - //拷贝 + String screenName = dataVisualizationName + cityName;//要拷贝出来的屏幕名称 + //拷贝API String url = urlPrefix + "/de2api/dataVisualization/copy"; JSONObject jo = new JSONObject(); jo.put("nodeType", "leaf"); @@ -105,25 +138,22 @@ public class CallApiToCopy { jo.put("type", "dataV"); jo.put("id", motherId); jo.put("pid", pid); - String res = HttpUtil.createPost(url).contentType("application/json") - .header("x-de-token", getToken()) - .body(jo.toString()).execute().body(); - long bigScreenId = Long.parseLong(JSONObject.parseObject(res).getString("data")); - System.out.println("生成大屏ID=" + bigScreenId); + .header("x-de-token", getToken()).body(jo.toString()).execute().body(); + long childId = Long.parseLong(JSONObject.parseObject(res).getString("data")); - //更新pid - String sql = "update data_visualization_info set pid=? where id=?"; - Db.use(DB_NAME).update(sql, pid, bigScreenId); + //更新pid,没有这步的话,在界面上看不到拷贝出来的大屏! + sql = "update data_visualization_info set pid=? where id=?"; + Db.use(DB_NAME).update(sql, pid, childId); - // (3) 修改地图中城市 - List list = dm.getMap(bigScreenId); + // 修改地图中城市 + List list = dm.getMap(childId); + //获取城市编码 + String area_code = dm.getCityCode(cityName); //core_chart_view表 for (Record record : list) { long id = record.getLong("id"); jo = JSONObject.parseObject(record.getStr("custom_attr")); - //获取城市编码 - String area_code = dm.getCityCode(cityName); //修改城市编码 jo.getJSONObject("map").put("id", area_code); jo.getJSONObject("map").put("level", "city"); @@ -132,13 +162,13 @@ public class CallApiToCopy { Db.use(DB_NAME).update("update core_chart_view set custom_attr=? where id=?", jsonString, id); } - //4、修改外部参数 + //修改外部参数 sql = "select * from visualization_outer_params where visualization_id =?"; Record motherOuterParamsRecord = Db.use(DB_NAME).findFirst(sql, motherId); String motherParamsId = motherOuterParamsRecord.getStr("params_id"); Record cityOuterParamsRecord = new Record().setColumns(motherOuterParamsRecord); cityOuterParamsRecord.set("params_id", UUID.randomUUID().toString()); - cityOuterParamsRecord.set("visualization_id", bigScreenId); + cityOuterParamsRecord.set("visualization_id", childId); Db.use(DB_NAME).save("visualization_outer_params", "params_id", cityOuterParamsRecord); //复制外部参数关联关系表 sql = "select * from visualization_outer_params_info where params_id=?"; @@ -148,8 +178,14 @@ public class CallApiToCopy { cityParamsInfoRecord.set("params_info_id", UUID.randomUUID().toString()); Db.use(DB_NAME).save("visualization_outer_params_info", "params_info_id", cityParamsInfoRecord); + //发布共享链接 + Record shareRecord = new Record().setColumns(motherShareRecord); + shareRecord.set("resource_id", childId); + shareRecord.set("id", getSnowId()); + shareRecord.set("uuid", randomString(8));//大小写字母和数字组合,长度为8 + Db.use(DataEaseModel.DB_NAME).save("xpack_share", "id", shareRecord); System.out.println(cityName + "修改完成"); } - System.out.println("ok"); + System.out.println("恭喜,所有操作成功完成!"); } } diff --git a/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java b/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java deleted file mode 100644 index e9ccae34..00000000 --- a/src/main/java/com/dsideal/base/DataEase/Util/SyncCityScreen.java +++ /dev/null @@ -1,247 +0,0 @@ -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 net.sf.json.JSONObject; - -import java.util.*; - -public class SyncCityScreen { - - /* - 开启数据库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(); - } - - /** - * 生成随机字符串 - * - * @param len - * @return - */ - static String randomString(int len) { - String alphabetsInUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String alphabetsInLowerCase = "abcdefghijklmnopqrstuvwxyz"; - String numbers = "0123456789"; - String allCharacters = alphabetsInLowerCase + alphabetsInUpperCase + numbers; - StringBuilder randomString = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < len; i++) { - int randomIndex = random.nextInt(allCharacters.length()); - randomString.append(allCharacters.charAt(randomIndex)); - } - return randomString.toString(); - } - - public static DataEaseModel dm = new DataEaseModel(); - - public static void clear(String dataVisualizationName) { - //一、先删除后插入保持健康:保留:【云南省教育决策支持系统【市州】】,删除掉云南省教育决策支持系统【市州】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据 - String sql = "select * from data_visualization_info where name like '%" + dataVisualizationName + "%' and name <>'" + dataVisualizationName + "'"; - List toDelList = Db.use(DataEaseModel.DB_NAME).find(sql); - for (Record record : toDelList) { - long id = record.getLong("id"); - //(1) 删除关联的表core_chart_view - sql = "delete from core_chart_view where scene_id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, id); - //(2) 删除共享链接表 - sql = "delete from xpack_share WHERE resource_id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, id); - - //(3) 删除可视化资源表 - sql = "delete from core_opt_recent where resource_id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, id); - - // (4) 跳转记录表 - sql = "delete from visualization_link_jump where source_dv_id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, id); - - // (5) 跳转配置表 - sql = "select * from visualization_link_jump_info where target_dv_id=?"; - List jumpList = Db.use(DataEaseModel.DB_NAME).find(sql, id); - for (Record r : jumpList) { - long jumpId = r.getLong("id"); - sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?"; - Db.use(DataEaseModel.DB_NAME).update(sql, jumpId); - - sql = "delete from visualization_link_jump_info where id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, jumpId); - } - - // (6) 外部参数关联关系表 - sql = "delete from visualization_outer_params where visualization_id=?"; - Db.use(DataEaseModel.DB_NAME).update(sql, id); - - //(7) 删除主表数据 - Db.use(DataEaseModel.DB_NAME).deleteById("data_visualization_info", id); - } - System.out.println("成功删除大屏数据" + toDelList.size() + "条~"); - } - - /** - * 同步【云南省教育决策支持系统【市州】】 - * - * @param dataVisualizationName - * @throws InterruptedException - */ - public static void SyncCityScreen(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 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); - - //母屏的linkJump - 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); - - //2、需要哪16个城市 - for (String cityName : dm.getCityNameList()) { - //(1)复制16个大屏 - Record cityRecord = new Record().setColumns(motherRecord);//复制record对象 - cityRecord.set("name", dataVisualizationName + cityName); - long bigScreenId = getSnowId(); - cityRecord.set("id", bigScreenId); - Db.use(DataEaseModel.DB_NAME).save("data_visualization_info", "id", cityRecord); - - // (2) 复制16个大屏的细节表 - List writeList = new ArrayList<>(); - Map mcMap = new HashMap<>(); - for (Record rMotherChart : motherChartList) { - Record rCityChart = new Record().setColumns(rMotherChart);//克隆出来 - //修改大屏ID - rCityChart.set("id", getSnowId()); - rCityChart.set("scene_id", bigScreenId); - writeList.add(rCityChart); - //保存母屏的组件IDS 与复制品组件IDS之间的对应关系 - long motherChartId = rMotherChart.getLong("id"); - 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); - - - // (3) 修改地图中城市 - List list = dm.getMap(bigScreenId); - //core_chart_view表 - for (Record record : list) { - long id = record.getLong("id"); - JSONObject jo = JSONObject.fromObject(record.getStr("custom_attr")); - //获取城市编码 - String area_code = dm.getCityCode(cityName); - //修改前 - //System.out.println("修改前=" + jo.getJSONObject("map")); - - //修改城市编码 - jo.getJSONObject("map").put("id", area_code); - jo.getJSONObject("map").put("level", "city"); - - //System.out.println("修改后=" + jo.getJSONObject("map")); - //写到数据库 - String jsonString = jo.toString(); - Db.use(DataEaseModel.DB_NAME).update("update core_chart_view set custom_attr=? where id=?", jsonString, id); - } - - // (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); - - // (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) 插入跳转配置表 - Map linkJumpMap = new HashMap<>(); - for (Record rMotherLinkJump : motherLinkJumpList) { - long motherLinkJumpId = rMotherLinkJump.getLong("id"); - Record rCityLinkJump = new Record().setColumns(rMotherLinkJump);//克隆出来 - rCityLinkJump.set("id", getSnowId()); - rCityLinkJump.set("source_dv_id", bigScreenId); - linkJumpMap.put(motherLinkJumpId, rCityLinkJump.getLong("id")); - Db.use(DataEaseModel.DB_NAME).save("visualization_link_jump", "id", rCityLinkJump); - } - - for (Record rMotherLinkJumpInfo : motherLinkJumpInfoList) { - if(rMotherLinkJumpInfo.get("link_jump_id")==null)continue; - long motherLinkJumpId = rMotherLinkJumpInfo.getLong("link_jump_id"); - Record rCityLinkJumpInfo = new Record().setColumns(rMotherLinkJumpInfo);//克隆出来 - rCityLinkJumpInfo.set("id", getSnowId()); - rCityLinkJumpInfo.set("link_jump_id", linkJumpMap.get(motherLinkJumpId)); - Db.use(DataEaseModel.DB_NAME).save("visualization_link_jump_info", "id", rCityLinkJumpInfo); - } - break; - //System.out.println("完成" + cityName + "的数据填充~"); - } - - //查询出每个城市的共享链接 -// 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("生成完毕"); - } - - public static void main(String[] args) throws InterruptedException { - LocalMysqlConnectUtil.Init(); - //获取数据可视化名称 - String dataVisualizationName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationName"); - clear(dataVisualizationName); - //SyncCityScreen(dataVisualizationName); - } -}