# 工具插件
# 字段加密
可通过脚本编辑栏中字段加密
菜单对输入的字段进行加密,加密完成的加密串可放入用户自定义的脚本代码中,dix执行脚本时会自动将加密串进行解密。
# ExcelUtil
var ExcleUtil = Java.type("com.uinnova.di.dicom.util.ExcelUtil");
// Excel文件的全路径, Sheet页名称
var retDatas = ExcleUtil.importExcleBySheetName("/uinnova/tarsier-app/test.xls", "Sheet1");
logger.info("获取到的数据-----------" + retDatas);
1
2
3
4
2
3
4
var ExcleUtil = Java.type("com.uinnova.di.dicom.util.ExcelUtil");
// Excel文件的全路径
var retDatas = ExcleUtil.importExcle("/uinnova/tarsier-app/test.xls");
logger.info("获取到的数据-----------" + retDatas);
1
2
3
4
2
3
4
写入数据到excel
参数名 | 必选/可选 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|---|
dataList | 必选 | List<Map<String, Object>> | 源数据集合 | 其中key对应标题属性,value对应属性值 |
excelPath | 必选 | String | 目标excel文件全路径 | 文件不存在时会根据后缀.xls或.xlsx自动创建该文件,该路径为服务器路径 |
sheetName | 必选 | String | 要写入的sheet页名称 | |
flag | 必选 | boolean | 是否覆盖原有数据 | 传参为flase时新的源数据会写入到原有数据的下一行 |
调用示例
var ArrayList = Java.type("java.util.ArrayList");
var HashMap = Java.type("java.util.HashMap");
var ExcleUtil = Java.type("com.uinnova.di.dicom.util.ExcelUtil");
// 该路径为服务器路径
var excelPath = "/uinnova/tarsier-app/testWriteExcel.xls";
var sheetName = "Sheet1";
var dataList = new ArrayList();
var dataMap1 = new HashMap();
var dataMap2 = new HashMap();
dataMap1.put("name", "zhangsan");
dataMap1.put("age", "20");
dataMap2.put("name", "lisi");
dataMap2.put("age", "22");
dataList.add(dataMap1);
dataList.add(dataMap2);
ExcleUtil.writeToExcel(dataList, excelPath, sheetName, true);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# CsvUtil
var CSVUtil = Java.type("com.uinnova.di.dicom.util.ExcelUtil");
// csv文件的全路径
var data = CSVUtil.readCsvFile("/usr/work/testfile.csv");
logger.info("获取到的数据-----------" + data);
1
2
3
4
2
3
4
# 中文转unicode
var UnicodeConvertUtils = Java.type("com.uinnova.di.dicom.util.UnicodeConvertUtils");
// 将要转换的中文字符串
var retDatas = UnicodeConvertUtils.toUnicode("数据集成");
logger.info("转换后的数据-----------" + retDatas);
1
2
3
4
2
3
4
# unicode转中文
var UnicodeConvertUtils = Java.type("com.uinnova.di.dicom.util.UnicodeConvertUtils");
// 将要转换的中文字符串
var retDatas = UnicodeConvertUtils.toGb2312("\u7cfb");
logger.info("转换后的数据-----------" + retDatas);
1
2
3
4
2
3
4
# FtpUtil
/**
* 读取FTP指定目录下的指定文件
*/
var FTPUtil = Java.type("com.uinnova.di.dicom.util.FTPUtil");
// host, port, username, password
var util = FTPUtil.getInstance("0.0.0.0", 21, "test", "test");
// 文件路径, 文件名称, 服务端字符编码集, 本地端字符编码集
var data = util.getContentByFileName("/test", "test.txt", "iso-8859-1", "GBK");
logger.info("获取到的数据-----------" + data);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
/**
* 读取FTP指定目录下的所有文件
*/
var FTPUtil = Java.type("com.uinnova.di.dicom.util.FTPUtil");
// host, port, username, password
var util = FTPUtil.getInstance("0.0.0.0", 21, "test", "test");
// 文件路径, 服务端字符编码集, 本地端字符编码集
var data = util.getContentByFilePath("/test", "iso-8859-1", "GBK");
logger.info("获取到的数据-----------" + data);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
/**
* 删除ftp文件,成功返回`true`,失败返回`false`
*/
var FTPUtil = Java.type("com.uinnova.di.dicom.util.FTPUtil");
// host, port, username, password
var util = FTPUtil.getInstance("0.0.0.0", 21, "test", "test");
// 文件全路径
var ret = util.deleteFile("/test/123/test.txt");
logger.info("删除结果-----------" + ret);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# MD5计算
var MD5Util = Java.type("com.uinnova.di.dicom.util.MD5Utils");
// 计算的字符串
var data = MD5Util.string2MD5("ABC");
logger.info("MD5后--------" + data);
1
2
3
4
2
3
4
# RSA加解密
var RsaUtil = Java.type("com.uinnova.di.dicom.util.RSAUtil");
var String = Java.type("java.lang.String");
var Base64 = Java.type("org.apache.commons.codec.binary.Base64");
function run() {
//获取私钥 公钥
//new String(byte[] bytes, String charset); 将byte数组根据指定编码集编码为字符串
//content.getBytes("utf-8"); 根据指定编码集将字符串解码为byte[]数组
var keyPair = RsaUtil.getKeyPair();
var publicKey = new String(Base64.encodeBase64(keyPair.getPublic().getEncoded()),"utf-8");
var privateKey = new String(Base64.encodeBase64(keyPair.getPrivate().getEncoded()), "utf-8");
logger.info("public: " + publicKey);
logger.info("private: " + privateKey);
var content = "要加密的字符串";
/**
* 私钥加密
* @param byte[]
* @param privateKey 私钥
*/
var privateEncode = RsaUtil.encryptPrivateKey(content.getBytes("utf-8"), privateKey);
logger.info("私钥加密:" + new String(privateEncode,"utf-8"));
/**
* 公钥解密
* @param privateEncode byte[]
* @param publicKey 公钥
*/
var publicRes = RsaUtil.decryptPublicKey(privateEncode, publicKey);
logger.info("公钥解密:" + new String(publicRes,"utf-8"));
/**
* 公钥加密
* @param byte[]
* @param publicKey 公钥
*/
var publicEncode = RsaUtil.encryptPublicKey(content.getBytes("utf-8"), publicKey);
logger.info("公钥加密:" + new String(publicEncode,"utf-8"));
/**
* 私钥解密
* @param publicEncode byte[]
* @param privateKey 私钥
*/
var privateRes = RsaUtil.decryptPrivateKey(publicEncode, privateKey);
logger.info("私钥解密:" + new String(privateRes, "utf-8"));
/**
* 私钥加签
* @param byte[]
* @param privateKey 私钥
*/
var privateSign = RsaUtil.sign(content.getBytes("utf-8"),privateKey);
logger.info("加签后的数据:" + privateSign);
/**
* 公钥验签
* @paramc byte[]
* @param publicKey 公钥
* @param privateSign 签名
*/
var verifyRes = RsaUtil.verify(content.getBytes("utf-8"), publicKey, privateSign);
logger.info("验签后的结果:" + verifyRes);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Base64加密
var Base64Util = Java.type("com.uinnova.di.dicom.util.Base64Util");
// 计算的字符串
var data = Base64Util.base64("ABC");
logger.info("base64加密后--------" + data);
1
2
3
4
2
3
4
# Base64解密
var Base64Util = Java.type("com.uinnova.di.dicom.util.Base64Util");
// 解密的字符串
var data = Base64Util.base64dec("aGVsbG9EaXg=");
logger.info("base64解密后--------" + data);
1
2
3
4
2
3
4
# 邮件发送
var EmailUtil = Java.type("com.uinnova.di.dicom.util.SendEmail");
/**
* 配置SMTP服务器信息,以及发件人信息
*
* @param protocol 发送协议
* @param host smtp服务器地址
* @param port smtp服务器端口
* @param account 发件人账户
* @param password 发件人邮箱密码
* @param personal 发件人别名,不需要设为空串或者`null`
*/
var send = new EmailUtil("smtp", "smtp.exmail.qq.com", "465", "test@uinnova.com", "test", null);
/**
* 配置SMTP服务器信息,以及发件人信息
*
* @param recipients 收件人(多个用英文逗号隔开)
* @param subject 邮件主题
* @param emailMessage 邮件信息
* @param fileStr 附件路径(所在本地的绝对路径),无附件时写null
* @param sslFlag 是否进行ssl验证(若发送的邮件端口为465那便是需要开启SSL验证的,此处填写"true"),若端口为25则不需要开启,填写"false"
*/
send.sendEmail("test2@uinnova.com, test3@uinnova.com", "邮件主题", "hello, I am DIX", null, "true");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 时间戳转时间字符串
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
time | 必选 | long | 13位时间戳 |
format | 可选 | String | 格式化时间格式,传null或空字符串时默认为yyyy-MM-dd HH:mm:ss |
var CommonUtil = Java.type("com.uinnova.di.dicom.util.CommonUtil");
var time = new Date().getTime();
var format = "yyyy-MM-dd HH:mm:ss";
var result = CommonUtil.conLong2Date(time, format);
logger.info(result);
1
2
3
4
5
2
3
4
5
# 时间字符串转时间戳
参数名 | 必选/可选 | 参数类型 | 参数说明 |
---|---|---|---|
time | 必选 | String | 时间字符串 |
format | 必选 | String | 格式化时间格式 |
var CommonUtil = Java.type("com.uinnova.di.dicom.util.CommonUtil");
var time = "2019-12-27 13:13:13";
var format = "yyyy-MM-dd HH:mm:ss";
var result = CommonUtil.conDate2Long(time, format);
logger.info(result);
1
2
3
4
5
2
3
4
5
# JS方式时间戳转时间字符串
/**
* @Title 时间戳转时间
* @param timestamp(13位)
* @return YYYY-MM-DD hh:mm:ss
*/
function timeStamp2date(timestamp){
var time = new Date(timestamp);
var year = time.getFullYear();
var mon = time.getMonth()+1;
var day = time.getDate();
var hour = time.getHours();
var minute = time.getMinutes();
var second = time.getSeconds();
mon = mon<10?("0"+mon):mon;
day = day<10?("0"+day):day;
hour = hour<10?("0"+hour):hour;
minute = minute<10?("0"+minute):minute;
second = second<10?("0"+second):second;
var formatTime = year+"-"+mon+"-"+day+" "+hour+":"+minute+":"+second;
return formatTime;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# JS方式时间字符串转时间戳
var time = new Date("2019-05-08 16:31:01");
var mill = time.getTime()+"";
1
2
2
# 网络测试工具
function run() {
var NetUtil = Java.type("com.uinnova.di.dicom.util.NetUtil");
/**
* ping一次
* ip
*/
var ret = NetUtil.ping("0.0.0.0");
logger.info(ret);
/**
* ping多次
* ip, 次数(默认3次), 超时时间(默认3000ms)
*/
var ret = NetUtil.ping("0.0.0.0", "3", "3000");
logger.info(ret);
/**
* telnet
* ip, port
*/
var ret = NetUtil.telnet("0.0.0.0", "0000");
logger.info(ret);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 主键生成器
function run() {
var IdGenerator = Java.type("com.uinnova.di.dicom.util.IdGenerator");
var idGenerator = IdGenerator.createGenerator();
for(var i = 0;i<10;i++){
var id = idGenerator.generate();
logger.info("新的主键为:" + id)
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 格式化业务主键
描述:在5.6版本后在告警数据中添加了一个新的属性CIPRIMARYKEY
,格式化的方法如下:
function formatPrimaryKey(ciPrimaryKey) {
if (ciPrimaryKey== null || ciPrimaryKey==""||ciPrimaryKey=="undefined") {
return "";
}
var formatJson = JSON.parse(ciPrimaryKey);
return formatJson.join(",");
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# Syslog客户端工具推送数据到服务端
请求参数
参数名 | 必选/可选 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|---|
host | 必选 | String | Syslog服务端主机地址 | |
port | 必选 | int | Syslog服务端端口 | 一般默认为514 |
protocol | 必选 | String | 传输协议 | 支持"TCP", "UDP"协议 |
data | 必选 | String | 要推送到Syslog服务端的数据 | |
charset | 必选 | String | 推送数据的字符编码集 |
调用示例
var SyslogClientUtil = Java.type("com.uinnova.di.dicom.util.SyslogClientUtil");
var data = "---test push data---";
SyslogClientUtil.pushData("127.0.0.1", 514, "UDP", data, "utf-8");
1
2
3
2
3
# 经纬度转世界坐标
/**
* @param lon 经度
* @param lat 纬度
* @param h 地球半径浮动值,若h值为0, 则初始值为6378000 + 0
**/
var position = lonlat2World(lon,lat,h);
1
2
3
4
5
6
2
3
4
5
6
# 获取相对位置坐标
var campusCoordinates = new Array();
campusCoordinates.push(116.6);//经度
campusCoordinates.push(39.92);//纬度
campusCoordinates.push(0);// 地球半径浮动值,若值为0, 则初始值为6378000 + 0
var coordinates = new Array();
coordinates.push(0);
coordinates.push(0);
coordinates.push(0);
/**
* 根据参照点将待求点世界坐标系下的位置转换成园区坐标系下的坐标
* @param campusCoordinates 园区坐标经纬度
* @param azimuth 方位角角度
* @param coordinates 参照点坐标经纬度
**/
var position = getLocalPosition(campusCoordinates, 45, coordinates)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16