main
黄海 7 months ago
parent 8d164b2320
commit 3d818cc04a

@ -1,5 +1,7 @@
package com.dsideal.base.DataEase.Util; package com.dsideal.base.DataEase.Util;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dsideal.base.DataEase.Model.DataEaseModel; import com.dsideal.base.DataEase.Model.DataEaseModel;
@ -10,32 +12,65 @@ import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.Record;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME; import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME;
public class CallApiToCopy { public class CallApiToCopy {
//DataEase部署的地址
public static String urlPrefix = "http://10.10.14.203"; public static String urlPrefix = "http://10.10.14.203";
public static DataEaseModel dm = new DataEaseModel();
/** /**
* DataEaseToken * DataEaseToken
* *
* @return * @return
*/ */
public static String getToken() { public static String getToken() {
//登录获取Token
//读取Data目录下DataEaseLogin.json文件 //读取Data目录下DataEaseLogin.json文件
JSONObject jo = FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/DataEaseLogin.json"); JSONObject jo = FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/DataEaseLogin.json");
String url = urlPrefix + "/de2api/login/localLogin"; String url = urlPrefix + "/de2api/login/localLogin";
String res = HttpUtil.createPost(url).contentType("application/json") String res = HttpUtil.createPost(url).contentType("application/json").body(jo.toString()).execute().body();
.body(jo.toString()).execute().body();
return JSONObject.parseObject(res).getJSONObject("data").getString("token"); 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) { public static void clear(String dataVisualizationName) {
//一、先删除后插入保持健康:保留:【云南省教育决策支持系统【市州】】,删除掉云南省教育决策支持系统【市州】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据 //一、先删除后插入保持健康:保留:【云南省教育决策支持系统【市州】】,删除掉云南省教育决策支持系统【市州】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据
String sql = "select * from data_visualization_info where name like '%" + dataVisualizationName + "%' and name <>'" + dataVisualizationName + "'"; String sql = "select * from data_visualization_info where name like '%" + dataVisualizationName + "%' and name <>'" + dataVisualizationName + "'";
@ -48,15 +83,12 @@ public class CallApiToCopy {
//(2) 删除共享链接表 //(2) 删除共享链接表
sql = "delete from xpack_share WHERE resource_id=?"; sql = "delete from xpack_share WHERE resource_id=?";
Db.use(DB_NAME).update(sql, id); Db.use(DB_NAME).update(sql, id);
//(3) 删除可视化资源表 //(3) 删除可视化资源表
sql = "delete from core_opt_recent where resource_id=?"; sql = "delete from core_opt_recent where resource_id=?";
Db.use(DB_NAME).update(sql, id); Db.use(DB_NAME).update(sql, id);
// (4) 跳转记录表 // (4) 跳转记录表
sql = "delete from visualization_link_jump where source_dv_id=?"; sql = "delete from visualization_link_jump where source_dv_id=?";
Db.use(DB_NAME).update(sql, id); Db.use(DB_NAME).update(sql, id);
// (5) 跳转配置表 // (5) 跳转配置表
sql = "select * from visualization_link_jump_info where target_dv_id=?"; sql = "select * from visualization_link_jump_info where target_dv_id=?";
List<Record> jumpList = Db.use(DB_NAME).find(sql, id); List<Record> jumpList = Db.use(DB_NAME).find(sql, id);
@ -64,11 +96,9 @@ public class CallApiToCopy {
long jumpId = r.getLong("id"); long jumpId = r.getLong("id");
sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?"; sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?";
Db.use(DB_NAME).update(sql, jumpId); Db.use(DB_NAME).update(sql, jumpId);
sql = "delete from visualization_link_jump_info where id=?"; sql = "delete from visualization_link_jump_info where id=?";
Db.use(DB_NAME).update(sql, jumpId); Db.use(DB_NAME).update(sql, jumpId);
} }
// (6) 外部参数关联关系表 // (6) 外部参数关联关系表
sql = "select params_id from visualization_outer_params where visualization_id=?"; sql = "select params_id from visualization_outer_params where visualization_id=?";
String paramsId = Db.use(DB_NAME).queryStr(sql, id); String paramsId = Db.use(DB_NAME).queryStr(sql, id);
@ -76,28 +106,31 @@ public class CallApiToCopy {
Db.use(DB_NAME).update(sql, paramsId); Db.use(DB_NAME).update(sql, paramsId);
sql = "delete from visualization_outer_params where visualization_id=?"; sql = "delete from visualization_outer_params where visualization_id=?";
Db.use(DB_NAME).update(sql, id); Db.use(DB_NAME).update(sql, id);
//(7) 删除主表数据 //(7) 删除主表数据
Db.use(DB_NAME).deleteById("data_visualization_info", id); Db.use(DB_NAME).deleteById("data_visualization_info", id);
} }
System.out.println("成功删除大屏数据" + toDelList.size() + "条~"); System.out.println("成功删除大屏数据" + toDelList.size() + "条~");
} }
public static void main(String[] args) { public static void main(String[] args) throws InterruptedException {
LocalMysqlConnectUtil.Init(); LocalMysqlConnectUtil.Init();
//获取数据可视化名称 //获取数据可视化名称
String dataVisualizationName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationName"); String dataVisualizationName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationName");
//旧的不去,新的不来 //清理掉旧的数据
clear(dataVisualizationName); clear(dataVisualizationName);
//母屏的id //母屏信息
String motherId = "1036286881547030528"; String sql = "select * from data_visualization_info where name =?";
//母屏所在的文件夹ID Record motherRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, dataVisualizationName);
String pid = "1036643788262608896"; 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()) { for (String cityName : dm.getCityNameList()) {
//要拷贝出来的屏幕名称 String screenName = dataVisualizationName + cityName;//要拷贝出来的屏幕名称
String screenName = dataVisualizationName + cityName; //拷贝API
//拷贝
String url = urlPrefix + "/de2api/dataVisualization/copy"; String url = urlPrefix + "/de2api/dataVisualization/copy";
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
jo.put("nodeType", "leaf"); jo.put("nodeType", "leaf");
@ -105,25 +138,22 @@ public class CallApiToCopy {
jo.put("type", "dataV"); jo.put("type", "dataV");
jo.put("id", motherId); jo.put("id", motherId);
jo.put("pid", pid); jo.put("pid", pid);
String res = HttpUtil.createPost(url).contentType("application/json") String res = HttpUtil.createPost(url).contentType("application/json")
.header("x-de-token", getToken()) .header("x-de-token", getToken()).body(jo.toString()).execute().body();
.body(jo.toString()).execute().body(); long childId = Long.parseLong(JSONObject.parseObject(res).getString("data"));
long bigScreenId = Long.parseLong(JSONObject.parseObject(res).getString("data"));
System.out.println("生成大屏ID=" + bigScreenId);
//更新pid //更新pid,没有这步的话,在界面上看不到拷贝出来的大屏!
String sql = "update data_visualization_info set pid=? where id=?"; sql = "update data_visualization_info set pid=? where id=?";
Db.use(DB_NAME).update(sql, pid, bigScreenId); Db.use(DB_NAME).update(sql, pid, childId);
// (3) 修改地图中城市 // 修改地图中城市
List<Record> list = dm.getMap(bigScreenId); List<Record> list = dm.getMap(childId);
//获取城市编码
String area_code = dm.getCityCode(cityName);
//core_chart_view表 //core_chart_view表
for (Record record : list) { for (Record record : list) {
long id = record.getLong("id"); long id = record.getLong("id");
jo = JSONObject.parseObject(record.getStr("custom_attr")); jo = JSONObject.parseObject(record.getStr("custom_attr"));
//获取城市编码
String area_code = dm.getCityCode(cityName);
//修改城市编码 //修改城市编码
jo.getJSONObject("map").put("id", area_code); jo.getJSONObject("map").put("id", area_code);
jo.getJSONObject("map").put("level", "city"); 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); 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 =?"; sql = "select * from visualization_outer_params where visualization_id =?";
Record motherOuterParamsRecord = Db.use(DB_NAME).findFirst(sql, motherId); Record motherOuterParamsRecord = Db.use(DB_NAME).findFirst(sql, motherId);
String motherParamsId = motherOuterParamsRecord.getStr("params_id"); String motherParamsId = motherOuterParamsRecord.getStr("params_id");
Record cityOuterParamsRecord = new Record().setColumns(motherOuterParamsRecord); Record cityOuterParamsRecord = new Record().setColumns(motherOuterParamsRecord);
cityOuterParamsRecord.set("params_id", UUID.randomUUID().toString()); 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); Db.use(DB_NAME).save("visualization_outer_params", "params_id", cityOuterParamsRecord);
//复制外部参数关联关系表 //复制外部参数关联关系表
sql = "select * from visualization_outer_params_info where params_id=?"; 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()); cityParamsInfoRecord.set("params_info_id", UUID.randomUUID().toString());
Db.use(DB_NAME).save("visualization_outer_params_info", "params_info_id", cityParamsInfoRecord); 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(cityName + "修改完成");
} }
System.out.println("ok"); System.out.println("恭喜,所有操作成功完成!");
} }
} }

@ -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<Record> 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<Record> 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<Record> 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<Record> motherLinkJumpList = Db.use(DataEaseModel.DB_NAME).find(sql, motherId);
//母屏的linkJumpInfo
sql = "select * from visualization_link_jump_info where target_dv_id=?";
List<Record> 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<Record> writeList = new ArrayList<>();
Map<Long, Long> 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<Long, Long> 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<Record> 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<Long, Long> 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);
}
}
Loading…
Cancel
Save