SnapshotTest.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. package com.rtdb.test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import java.util.List;
  6. import java.util.Random;
  7. import com.rtdb.api.callbackInter.RSDataChange;
  8. import com.rtdb.api.callbackInter.RSDataChangeEx;
  9. import com.rtdb.api.model.MemoryStream;
  10. import com.rtdb.api.model.NamedDataTypeField;
  11. import com.rtdb.api.model.NamedType;
  12. import com.rtdb.api.model.NamedTypeNameToFieldsCount;
  13. import com.rtdb.api.model.RtdbData;
  14. import com.rtdb.api.util.BytesConvertUtil;
  15. import com.rtdb.api.util.DateUtil;
  16. import com.rtdb.enums.DataSort;
  17. import com.rtdb.enums.Quality;
  18. import com.rtdb.model.BlobData;
  19. import com.rtdb.model.CoorData;
  20. import com.rtdb.model.DatetimeData;
  21. import com.rtdb.model.DoubleData;
  22. import com.rtdb.model.Entity;
  23. import com.rtdb.model.ErrorParse;
  24. import com.rtdb.model.IntData;
  25. import com.rtdb.model.NamedTypeData;
  26. import com.rtdb.model.SearchCondition;
  27. import com.rtdb.service.impl.BaseImpl;
  28. import com.rtdb.service.impl.ServerImpl;
  29. import com.rtdb.service.impl.ServerImplPool;
  30. import com.rtdb.service.impl.SnapshotImpl;
  31. import com.rtdb.service.inter.Base;
  32. import com.rtdb.service.inter.Server;
  33. import com.rtdb.service.inter.Snapshot;
  34. /**
  35. * <p>
  36. * Description:快照服务类测试
  37. * </p>
  38. * <p>
  39. * Copyright: Copyright (c) 2012 GoldenAPI_Java , 北京庚顿数据科技有限公司
  40. * </p>
  41. * <p>
  42. * Company: 北京庚顿数据科技有限公司(www.golden-data.com.cn)
  43. * </p>
  44. */
  45. @SuppressWarnings("unused")
  46. public class SnapshotTest {
  47. private static Snapshot snap = null;
  48. private static Base base = null;
  49. //private static ServerImpl server = null;
  50. public static void main(String[] args) {
  51. try {
  52. //ServerImplPool pool = new ServerImplPool("192.168.1.144", 6327, "sa", "golden", 1, 8);
  53. ServerImpl server = new ServerImpl("172.168.1.3", 6327, "sa", "golden");
  54. //server = pool.getServerImpl();
  55. snap = new SnapshotImpl(server);
  56. base = new BaseImpl(server);
  57. // cancelSubscribeSnapshots();
  58. // fixCoorSnapshots();//3.0测试完成
  59. // fixDoubleSnapshot();//3.0测试完成
  60. // fixIntSnapshot();//3.0测试完成
  61. // getBlobSnapshot();//3.0测试完成
  62. // getBlobSnapshots();//3.0测试完成与GEM显示数据不同
  63. // getCoorSnapshots();//3.0测试完成
  64. // getDateTimeSnapshots();//3.0测试完成
  65. // getDoubleSnapshots();// 3.0测试完成
  66. // getIntSnapshots();//3.0测试完成
  67. // getNamedTypeSnapshot();//此API暂缓测试
  68. // getNamedTypeSnapshots();//此API暂缓测试
  69. // pubDateTimeSnapshots();//3.0测试完成
  70. //putBlobSnapshot();//3.0测试完成
  71. // putBlobSnapshots();//3.0测试完成
  72. //putCoorSnapshots();//3.0测试完成
  73. // putDoubleSnapshots();//3.0测试完成
  74. // putIntSnapshots();//3.0测试完成。
  75. //putNamedTypeSnapshot();// 此API暂缓测试
  76. // putNamedTypeSnapshots();//此API暂缓测试
  77. // subscribeSnapshots();//3.0测试完成
  78. subscribsnapshotsEx();//3.0测试完成
  79. //server.close();
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. public static void getBlobSnapshot() throws Exception {
  85. int id = 233;
  86. BlobData b = snap.getBlobSnapshot(id);
  87. byte[] blob = b.getBlob();
  88. System.out.println(new String(blob, "gbk"));
  89. }
  90. // 批量读取dateTime类型标签点实时数据
  91. public static void getDateTimeSnapshots() throws Exception {
  92. int[] ids = { 10115, 10116 };
  93. Entity<DatetimeData> en = snap.getDateTimeSnapshots(ids);
  94. List<DatetimeData> list = en.getList();
  95. for (DatetimeData d : list) {
  96. Date value = d.getValue();
  97. System.out
  98. .println(DateUtil.getGMTTime(value) + " " + ErrorParse.getGoldenError(d.getError()).getErrmsg());
  99. }
  100. }
  101. // 获取自定义类型测点的单个快照
  102. @SuppressWarnings("null")
  103. private static void getNamedTypeSnapshot() throws Exception {
  104. int id = 6022;
  105. short length = 12;
  106. NamedTypeData t = snap.getNamedTypeSnapshot(id, length);
  107. // 获取快照数据
  108. byte[] bz = t.getValue();
  109. // 根据列名,列数据类型读数据
  110. MemoryStream m = new MemoryStream(bz);
  111. float readFloat = m.readFloat();
  112. float readFloat2 = m.readFloat();
  113. float readFloat3 = m.readFloat();
  114. int[] ids = { id };
  115. // 1.根据id获取自定义类型的名称
  116. List<NamedTypeNameToFieldsCount> p = base.getNamedTypeNamesProperty(ids);
  117. String[] name = new String[p.size()];
  118. int[] lens = new int[p.size()];
  119. for (int i = 0; i < p.size(); i++) {
  120. NamedTypeNameToFieldsCount nt = p.get(i);
  121. // 获取自定义类型的名称
  122. name[i] = nt.getName().trim();
  123. // 获取自定义类型的长度
  124. lens[i] = nt.getLen();
  125. }
  126. // 获取自定义类型数据的列属性(如几列,列名称,该列的字节长度,该列的数据类型
  127. NamedType namedType = base.getNamedType(name[0]);
  128. List<NamedDataTypeField> list = namedType.getTypeFields();
  129. String[] fName = null;
  130. int[] len = new int[list.size()];
  131. for (int i = 0; i < list.size(); i++) {
  132. fName[i] = list.get(i).getFieldName();
  133. len[i] = list.get(i).getLength();
  134. }
  135. byte[] value = t.getValue();
  136. MemoryStream stream = new MemoryStream(value);
  137. boolean v1 = ((stream.readByte() > 0) ? true : false);
  138. float v2 = stream.readFloat();
  139. System.out.println(v1);
  140. System.out.println(v2);
  141. }
  142. // 批量获取自定义类型测点的快照
  143. private static void getNamedTypeSnapshots() throws Exception {
  144. int[] ids = { 116510 };
  145. short[] lengths = {};
  146. Entity<NamedTypeData> nd = snap.getNamedTypeSnapshots(ids, lengths);
  147. List<NamedTypeData> list = nd.getList();
  148. for (int i = 0; i < list.size(); i++) {
  149. byte[] value = list.get(i).getValue();
  150. for (int j = 0; j < value.length; j++) {
  151. System.out.println(value[i]);
  152. }
  153. }
  154. }
  155. private static void pubDateTimeSnapshots() throws Exception {
  156. List<DatetimeData> list = new ArrayList<DatetimeData>();
  157. DatetimeData d = new DatetimeData();
  158. String date = "2018-10-16 11:45:00";
  159. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  160. d.setDateTime(new Date());
  161. d.setId(6);
  162. d.setValue(format.parse(date));
  163. d.setMs((short) 999);
  164. d.setQuality(Quality.GOOD.getNum());
  165. list.add(d);
  166. Entity<DatetimeData> entity = snap.putDatetimeSnapshots(list);
  167. List<DatetimeData> res = entity.getList();
  168. for (DatetimeData data : res) {
  169. System.out.println(data.getId() + " " + ErrorParse.getGoldenError(data.getError()).getErrmsg());
  170. }
  171. }
  172. // 写入单个自定义类型标签点的快照
  173. private static void putNamedTypeSnapshot() throws Exception {
  174. NamedTypeData named = new NamedTypeData();
  175. named.setId(39440);
  176. named.setLen(12);
  177. byte[] by = new byte[12];
  178. int c = 3;
  179. float d = 38;
  180. int e = 29;
  181. byte[] es = BytesConvertUtil.intToBytes(e);
  182. byte[] ds = BytesConvertUtil.floatToBytes(d,0);
  183. byte[] cs = BytesConvertUtil.intToBytes(c);
  184. System.arraycopy(cs, 0, by, 0, cs.length);
  185. System.arraycopy(ds, 0, by, cs.length, ds.length);
  186. System.arraycopy(es, 0, by, cs.length+ds.length, es.length);
  187. named.setValue(by);
  188. named.setQuality((short) 0);
  189. named.setDatetime(new Date());
  190. snap.putNamedTypeSnapshot(named);
  191. }
  192. // 批量写入自定义类型标签点的快照
  193. private static void putNamedTypeSnapshots() throws Exception {
  194. List<NamedTypeData> list = new ArrayList<NamedTypeData>();
  195. NamedTypeData named = new NamedTypeData();
  196. named.setId(116393);
  197. named.setLen(20);
  198. named.setValue("112".getBytes());
  199. named.setQuality((short) 2);
  200. named.setDatetime(new Date());
  201. list.add(named);
  202. snap.putNamedTypeSnapshots(list);
  203. }
  204. // 批量标签点快照改变的通知订阅
  205. public static void subscribsnapshotsEx() throws Exception {
  206. /*
  207. * Base base = new BaseImpl(new ServerImpl("127.0.0.1", 6327, "sa",
  208. * "golden")); int[] ids = { 1, 2, 3, 4, 5 };
  209. */
  210. int count = base.getTableSizeByName("QSFJ");
  211. Object param = " abc ";
  212. SearchCondition s = new SearchCondition();
  213. s.setTablemask("QSFJ");
  214. int[] ids = base.search(s, count, DataSort.SORT_BY_ID);
  215. int[] errors = new int[ids.length];
  216. snap.subscribeSnapshotsEx(param, ids, new RSDataChangeEx() {
  217. @Override
  218. public void run(Object param, RtdbData[] goldenDatas) {
  219. System.out.print(param + ": \t" + goldenDatas.length);
  220. for (int i = 0; i < goldenDatas.length; i++) {
  221. System.out.println(",id: " + goldenDatas[i].getId() + " :: " + goldenDatas[i].getValue() + " :: "
  222. + DateUtil.dateToString(goldenDatas[i].getDate()) + " ");
  223. }
  224. System.out.println(" end");
  225. }
  226. }, errors);
  227. }
  228. // 获得int类型的快照值
  229. public static void getIntSnapshots() throws Exception {
  230. Entity<IntData> ents = snap.getIntSnapshots(new int[] { 10113 });
  231. for (IntData db : ents.getList())
  232. System.out.println(db.getId() + "---" + db.getValue() + "---" + DateUtil.getGMTTime(db.getDateTime()));
  233. }
  234. // 批量插入int类型的快照
  235. public static void putIntSnapshots() throws Exception {
  236. List<IntData> list = new ArrayList<IntData>();
  237. IntData data = new IntData();
  238. data.setDateTime(new Date());
  239. data.setState(22);
  240. data.setId(239);
  241. data.setQuality((short) 0);
  242. data.setError(0);
  243. list.add(data);
  244. IntData data1 = new IntData();
  245. data1.setDateTime(new Date());
  246. data1.setState(13);
  247. data1.setId(241);
  248. data1.setQuality((short) 0);
  249. data1.setError(0);
  250. list.add(data1);
  251. IntData data2 = new IntData();
  252. data2.setDateTime(new Date());
  253. data2.setState(13);
  254. data2.setId(242);
  255. data2.setQuality((short) 0);
  256. data2.setError(0);
  257. list.add(data2);
  258. int count = snap.putIntSnapshots(list);
  259. System.out.println("成功了 " + count + " 条 id: ");
  260. for (IntData intData : list) {
  261. System.out.println(intData.getId() + " " + ErrorParse.getGoldenError(intData.getError()).getErrmsg());
  262. }
  263. }
  264. // 获得double类型的快照
  265. public static void getDoubleSnapshots() throws Exception {
  266. int[] ids = { 10108 };
  267. Entity<DoubleData> d = snap.getDoubleSnapshots(ids);
  268. List<DoubleData> list = d.getList();
  269. for (DoubleData db : list) {
  270. System.out.println(db.getId() + "---" + db.getValue() + "---" + DateUtil.getGMTTime(db.getDateTime()));
  271. }
  272. }
  273. // 写入浮点类型的快照
  274. public static void putDoubleSnapshots() throws Exception {
  275. List<DoubleData> doubleDataList = new ArrayList<DoubleData>();
  276. DoubleData data = new DoubleData();
  277. data.setId(248);
  278. data.setValue(200.12);
  279. data.setDateTime(new Date());
  280. DoubleData data3 = new DoubleData();
  281. data3.setId(250);
  282. data3.setValue(200.12);
  283. data3.setDateTime(new Date());
  284. DoubleData data1= new DoubleData();
  285. data1.setId(249);
  286. data1.setValue(1000.30);
  287. data1.setDateTime(new Date());
  288. doubleDataList.add(data);
  289. doubleDataList.add(data3);
  290. doubleDataList.add(data1);
  291. int count = snap.putDoubleSnapshots(doubleDataList);
  292. System.out.println("成功 " + count + " 条 ");
  293. for (DoubleData d : doubleDataList) {
  294. System.out.println( "id:"+d.getId() + " " + ErrorParse.getGoldenError(d.getError()).getErrmsg() + "\r\t");
  295. }
  296. }
  297. // 批量修改int类型的快照
  298. public static void fixIntSnapshot() throws Exception {
  299. List<IntData> list = new ArrayList<IntData>();
  300. IntData d = new IntData();
  301. d.setId(10113);
  302. d.setValue(666);
  303. list.add(d);
  304. int n = snap.fixIntSnapshot(list);
  305. System.out.println(n);
  306. }
  307. // 批量修改浮点类型的快照
  308. public static void fixDoubleSnapshot() throws Exception {
  309. List<DoubleData> list = new ArrayList<DoubleData>();
  310. Random r = new Random();
  311. DoubleData d = new DoubleData();
  312. d.setId(1);
  313. d.setValue((r.nextDouble()) * 100);
  314. list.add(d);
  315. DoubleData d2 = new DoubleData();
  316. d2.setId(2);
  317. d2.setValue((r.nextDouble()) * 100);
  318. list.add(d2);
  319. int n = snap.fixDoubleSnapshot(list);
  320. System.out.println(n);
  321. }
  322. // 获得坐标类型的快照
  323. public static void getCoorSnapshots() throws Exception {
  324. int[] ids = new int[] { 10105, 10106 };
  325. Entity<CoorData> ents = snap.getCoorSnapshots(ids);
  326. List<CoorData> list = ents.getList();
  327. for (int i = 0; i < list.size(); i++) {
  328. System.out.println(ents.getRetInfo() + " " + list.get(i).getX() + " " + list.get(i).getY());
  329. }
  330. }
  331. // 批量写入coor类型快照值
  332. public static void putCoorSnapshots() throws Exception {
  333. List<CoorData> list = new ArrayList<CoorData>();
  334. CoorData data = new CoorData();
  335. data.setId(251);
  336. data.setX((float) 323.2);
  337. data.setY((float) 333.3);
  338. data.setDateTime(new Date());
  339. list.add(data);
  340. int count = snap.putCoorSnapshots(list);
  341. System.out.print("成功 " + count + "条 id: ");
  342. for (CoorData coorData : list) {
  343. System.out.println(coorData.getId() + " " + ErrorParse.getGoldenError(coorData.getError()).getErrmsg());
  344. }
  345. }
  346. // 批量修改coor类型 的快照
  347. public static void fixCoorSnapshots() throws Exception {
  348. List<CoorData> list = new ArrayList<CoorData>();
  349. CoorData d = new CoorData();
  350. d.setId(10107);
  351. d.setDateTime(new Date());
  352. d.setX((float) 988.22);
  353. d.setY((float) 466.23);
  354. list.add(d);
  355. CoorData d2 = new CoorData();
  356. d2.setId(10108);
  357. d2.setDateTime(new Date());
  358. d2.setX((float) 989.22);
  359. d2.setY((float) 277.23);
  360. list.add(d2);
  361. int n = snap.fixCoorSnapshots(list);
  362. System.out.println(n);
  363. }
  364. // 批量获得blob快照
  365. public static void getBlobSnapshots() throws Exception {
  366. int[] ids = new int[] { 10111 };
  367. Entity<BlobData> ents = snap.getBlobSnapshots(ids);
  368. // for(int i = 0; i < ents.getList().size(); i++)
  369. for (BlobData data : ents.getList()) {
  370. byte[] blob = data.getBlob();
  371. for (int j = 0; j < blob.length; j++) {
  372. System.out.print(blob[j] + " ");
  373. }
  374. System.out.println(data.getError());
  375. System.out.println();
  376. }
  377. // System.out.println(new String(blob,"gbk"));
  378. }
  379. // 写入blob类型的快照
  380. public static void putBlobSnapshot() throws Exception {
  381. BlobData data = new BlobData();
  382. data.setId(252);
  383. String s = "zhong'gu";
  384. byte[] bytes = s.getBytes();
  385. data.setBlob(bytes);
  386. data.setDatetime(new Date());
  387. data.setQuality(Quality.GOOD);
  388. boolean b = snap.putBlobSnapshot(data);
  389. System.out.println(b);
  390. }
  391. // 写入批量blob类型的快照
  392. public static void putBlobSnapshots() throws Exception {
  393. List<BlobData> datas = new ArrayList<BlobData>();
  394. BlobData data = new BlobData();
  395. data.setId(242);
  396. String s = "中";
  397. byte[] bytes = s.getBytes();
  398. data.setBlob(bytes);
  399. data.setDatetime(new Date());
  400. data.setQuality(Quality.GOOD);
  401. datas.add(data);
  402. int result = snap.putBlobSnapshots(datas);
  403. System.out.println(result);
  404. }
  405. // 批量标签点快照改变的通知订阅
  406. public static void subscribeSnapshots() throws Exception {
  407. int[] ids = { 1 };
  408. String[] str ={"test.f"};
  409. snap.subscribeSnapshots(str, new RSDataChange() {
  410. @Override
  411. public void run(RtdbData[] rtdbDatas) {
  412. System.out.print(rtdbDatas.length + "条数据 ");
  413. for (int i = 0; i < rtdbDatas.length; i++) {
  414. System.out.print(" "+rtdbDatas[i].getValue() + " , ");
  415. }
  416. System.out.println(" end");
  417. }
  418. });
  419. }
  420. // 取消标签点快照更改通知订阅
  421. public static void cancelSubscribeSnapshots() throws Exception {
  422. subscribeSnapshots();
  423. Thread.sleep(5000);
  424. snap.cancelSubscribeSnapshots();
  425. subscribsnapshotsEx();
  426. Thread.sleep(20000);
  427. snap.cancelSubscribeSnapshots();
  428. }
  429. }