package com.dsideal.base.DataEase.Util ;
import cn.hutool.http.HttpUtil ;
import com.alibaba.fastjson.JSONObject ;
import com.dsideal.base.DataEase.Model.DataEaseModel ;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil ;
import com.dsideal.base.Util.CommonUtil ;
import com.dsideal.base.Util.FileUtil ;
import com.jfinal.kit.PathKit ;
import com.jfinal.plugin.activerecord.Db ;
import com.jfinal.plugin.activerecord.Record ;
import java.util.List ;
import java.util.UUID ;
import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME ;
public class CopyBigScreen {
//DataEase部署的地址
public static String urlPrefix = "http://10.10.14.203" ;
public static DataEaseModel dm = new DataEaseModel ( ) ;
/ * *
* 功 能 : 获 取 DataEase 的 Token
*
* @return
* /
public static String getToken ( ) {
//读取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 ( ) ;
return JSONObject . parseObject ( res ) . getJSONObject ( "data" ) . getString ( "token" ) ;
}
/ * *
* 清 理 指 定 名 称 大 屏 的 所 有 副 本 , 为 了 再 次 生 成 不 重 复
*
* @param bigScreenName 大 屏 名 称
* /
public static void clearScreen ( String bigScreenName ) {
//一、先删除后插入保持健康:保留:【云南省教育决策支持系统【市州】】,删除掉云南省教育决策支持系统【市州】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据
String sql = "select * from data_visualization_info where name like '%" + bigScreenName + "%' and name <>'" + bigScreenName + "'" ;
List < Record > toDelList = Db . use ( 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 ( DB_NAME ) . update ( sql , id ) ;
//(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 < Record > jumpList = Db . use ( 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 ( 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 ) ;
sql = "delete from visualization_outer_params_info where params_id=?" ;
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 ( ) + "条~" ) ;
}
/ * *
* 获 取 指 定 大 屏 的 信 息
*
* @param dataVisualizationNameCity
* @return
* /
public static Record getVisualizationByName ( String dataVisualizationNameCity ) {
String sql = "select * from data_visualization_info where name =?" ;
return Db . use ( DataEaseModel . DB_NAME ) . findFirst ( sql , dataVisualizationNameCity ) ;
}
/ * *
* 拷 贝 城 市 大 屏
*
* @param dataVisualizationNameCity
* /
public static void copyCityScreen ( String dataVisualizationNameCity ) {
//清理掉旧的数据
clearScreen ( dataVisualizationNameCity ) ;
//母屏信息
Record motherRecord = getVisualizationByName ( dataVisualizationNameCity ) ;
long motherId = motherRecord . getLong ( "id" ) ; //母屏ID
long pid = motherRecord . getLong ( "pid" ) ; //隶属文件夹
//母屏共享链接
String sql = "select * from xpack_share where resource_id=?" ;
Record motherShareRecord = Db . use ( DataEaseModel . DB_NAME ) . findFirst ( sql , motherId ) ;
//按16个市州进行生成
List < String > list = dm . getCityNameList ( ) ;
for ( int i = 0 ; i < list . size ( ) ; i + + ) {
String cityName = list . get ( i ) ;
String screenName = dataVisualizationNameCity + cityName ; //要拷贝出来的屏幕名称
//拷贝API
String url = urlPrefix + "/de2api/dataVisualization/copy" ;
JSONObject jo = new JSONObject ( ) ;
jo . put ( "nodeType" , "leaf" ) ;
jo . put ( "name" , screenName ) ;
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 childId = Long . parseLong ( JSONObject . parseObject ( res ) . getString ( "data" ) ) ;
//更新pid,没有这步的话,在界面上看不到拷贝出来的大屏!
sql = "update data_visualization_info set pid=? where id=?" ;
Db . use ( DB_NAME ) . update ( sql , pid , childId ) ;
// 修改地图中城市
List < Record > listMap = dm . getMap ( childId ) ;
//获取城市编码
String area_code = dm . getCityCode ( cityName ) ;
//core_chart_view表
for ( Record record : listMap ) {
long id = record . getLong ( "id" ) ;
jo = JSONObject . parseObject ( record . getStr ( "custom_attr" ) ) ;
//修改城市编码
jo . getJSONObject ( "map" ) . put ( "id" , area_code ) ;
jo . getJSONObject ( "map" ) . put ( "level" , "city" ) ;
//写到数据库
String jsonString = jo . toString ( ) ;
Db . use ( DB_NAME ) . update ( "update core_chart_view set custom_attr=? where id=?" , jsonString , id ) ;
}
//修改外部参数
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" , childId ) ;
Db . use ( DB_NAME ) . save ( "visualization_outer_params" , "params_id" , cityOuterParamsRecord ) ;
//复制外部参数关联关系表
sql = "select * from visualization_outer_params_info where params_id=?" ;
Record paramsInfoRecord = Db . use ( DB_NAME ) . findFirst ( sql , motherParamsId ) ;
Record cityParamsInfoRecord = new Record ( ) . setColumns ( paramsInfoRecord ) ;
cityParamsInfoRecord . set ( "params_id" , cityOuterParamsRecord . getStr ( "params_id" ) ) ;
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" , CommonUtil . getSnowId ( ) ) ;
shareRecord . set ( "uuid" , CommonUtil . randomString ( 8 ) ) ; //大小写字母和数字组合, 长度为8
Db . use ( DataEaseModel . DB_NAME ) . save ( "xpack_share" , "id" , shareRecord ) ;
System . out . println ( ( i + 1 ) + "、" + cityName + "修改完成,共" + ( list . size ( ) ) + "个。" ) ;
}
System . out . println ( "恭喜,所有操作成功完成!" ) ;
}
/ * *
* 拷 贝 省 级 大 屏
*
* @param dataVisualizationProvince 省 级 大 屏 的 名 称
* /
public static long copyProvinceScreen ( String dataVisualizationProvince ) {
//清理掉旧的数据
clearScreen ( dataVisualizationProvince ) ;
//母屏信息
String sql = "select * from data_visualization_info where name =?" ;
Record motherRecord = Db . use ( DataEaseModel . DB_NAME ) . findFirst ( sql , dataVisualizationProvince ) ;
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 ) ;
String screenName = dataVisualizationProvince + "【黄海】" ; //要拷贝出来的屏幕名称
//拷贝API
String url = urlPrefix + "/de2api/dataVisualization/copy" ;
JSONObject jo = new JSONObject ( ) ;
jo . put ( "nodeType" , "leaf" ) ;
jo . put ( "name" , screenName ) ;
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 childId = Long . parseLong ( JSONObject . parseObject ( res ) . getString ( "data" ) ) ;
//更新pid,没有这步的话,在界面上看不到拷贝出来的大屏!
sql = "update data_visualization_info set pid=? where id=?" ;
Db . use ( DB_NAME ) . update ( sql , pid , childId ) ;
//发布共享链接
Record shareRecord = new Record ( ) . setColumns ( motherShareRecord ) ;
shareRecord . set ( "resource_id" , childId ) ;
shareRecord . set ( "id" , CommonUtil . getSnowId ( ) ) ;
shareRecord . set ( "uuid" , CommonUtil . randomString ( 8 ) ) ; //大小写字母和数字组合, 长度为8
Db . use ( DataEaseModel . DB_NAME ) . save ( "xpack_share" , "id" , shareRecord ) ;
System . out . println ( "恭喜,省级大屏拷贝完成!" ) ;
return motherId ;
}
/ * *
* 获 取 城 市 的 共 享 链 接
*
* @param dataVisualizationName
* @param cityName
* @return
* /
public static String getCityShare ( String dataVisualizationName , String cityName ) {
String screenName = dataVisualizationName + cityName ;
String 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" ) ) ;
return shareRecord . getStr ( "uuid" ) ;
}
public static void main ( String [ ] args ) throws InterruptedException {
//连接本地数据库系统
LocalMysqlConnectUtil . Init ( ) ;
//获取数据可视化名称
String dataVisualizationNameCity = LocalMysqlConnectUtil . PropKit . get ( "dataEase.dataVisualizationNameCity" ) ;
//获取数据可视化名称
String dataVisualizationProvince = LocalMysqlConnectUtil . PropKit . get ( "dataEase.dataVisualizationProvince" ) ;
//拷贝省级大屏
//copyProvinceScreen(dataVisualizationProvince);
//拷贝市州级大屏
//copyCityScreen(dataVisualizationNameCity);
//更新复制出的省级大屏的链接路由
Record motherRecord = getVisualizationByName ( dataVisualizationNameCity ) ;
long motherId = motherRecord . getLong ( "id" ) ; //母屏ID
String sql = "update visualization_link_jump_info set content=REPLACE(content,'/dsBase/dataease/route?city_name=','/dsBase/dataease/routeV2?city_name=') where link_jump_id in (select id from visualization_link_jump where source_dv_id=?)" ;
Db . use ( DB_NAME ) . update ( sql , motherId ) ;
}
}