DataClient.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package testExport;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.happy.Model.QueryUrlEnum;
  5. import com.happy.Unitil_elc.*;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10. public class DataClient {
  11. static String token = "c19ac221e0504552b6c2ebed4b2b069b";
  12. public static void main(String[] args) {
  13. getToken();
  14. getUserAccountInfo();
  15. // queryBuildingUsed();
  16. // queryBuilding();
  17. // queryDataCenter();
  18. // customerRegister();
  19. // getAccountInfo();
  20. // customerInfoModify();
  21. // getUserAccountInfo();
  22. // recharege();
  23. // disconnect();
  24. // powerRealData();
  25. // getPowerLastHistoryCumulant();
  26. // getHistoryCumulant();
  27. // getMonthBill();
  28. // getLastHistoryCumulant();
  29. }
  30. /* 除获取token外的所有请求都需要带有token数据,demo中简单起见未做token的保存处理,实际使用中请自行实现 */
  31. public static void getToken() {
  32. HashMap<String, String> map = new HashMap<>();
  33. map.put("operatorSecret", Globals.OPERATOR_SECRET);
  34. try {
  35. JSONObject jsonObject = queryData(QueryUrlEnum.QUERY_TOKEN.getUrl(), map, null);
  36. String data = jsonObject.getString("data");
  37. JSONObject dataObject = JSONObject.parseObject(data);
  38. token = dataObject.getString("accessToken");
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. // 查询建筑日/小时用量数据
  44. public static void queryBuildingUsed() {
  45. HashMap<String, String> map = new HashMap<>();
  46. map.put("buildingCode", "JHEQ-2#");//建筑编码
  47. map.put("type", "1");//数据类型
  48. map.put("dataTime", "2019091717");//数据时间
  49. try {
  50. queryData(QueryUrlEnum.QUERY_BUILDING_USED.getUrl(), map, token);
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. // 查询建筑信息
  56. public static void queryBuilding() {
  57. HashMap<String, String> map = new HashMap<>();
  58. map.put("buildingCode", "JHEQ-1#");//建筑编码
  59. map.put("dataCenterCode", "000000");//数据中心编码
  60. try {
  61. queryData(QueryUrlEnum.QUERY_BUILDING.getUrl(), map, token);
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. // 查询数据中心信息
  67. public static void queryDataCenter() {
  68. HashMap<String, String> map = new HashMap<>();
  69. map.put("dataCenterCode", "000001");//数据中心编码
  70. try {
  71. queryData(QueryUrlEnum.QUERY_DATACENTER.getUrl(), map, token);
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. // 电费月账单(水费月账单参数相同,只有接口不同,)
  77. public static JSONObject getMonthBill(String user_id, String months) {
  78. HashMap<String, String> map = new HashMap<>();
  79. map.put("userId", user_id);//户号"HZJH201901220010"
  80. map.put("queryTimes", months);//查询时间点 [yyyy-MM,yyyy-MM……]
  81. Object money = null;
  82. try {
  83. return queryData(QueryUrlEnum.POWER_MONTH_BILL.getUrl(), map, token);
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. return null;
  87. }
  88. }
  89. // 账户信息
  90. public static JSONObject getAccountInfo(String user_id) {
  91. HashMap<String, String> map = new HashMap<>();
  92. map.put("userId", user_id);//户号
  93. try {
  94. return queryData(QueryUrlEnum.ACCOUNT_INFO.getUrl(), map, token);
  95. } catch (Exception e) {
  96. e.printStackTrace();
  97. return null;
  98. }
  99. }
  100. // 用户信息
  101. public static void getUserAccountInfo() {
  102. HashMap<String, String> map = new HashMap<>();
  103. map.put("userId", "HZJH201903190022");//户号
  104. try {
  105. queryData(QueryUrlEnum.USER_INFO.getUrl(), map, token);
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. // 用户注册
  111. public static void customerRegister() {
  112. HashMap<String, String> map = new HashMap<>();
  113. map.put("userId", "HZJH201903190022");//户号 注意不可重复
  114. map.put("phone", "18888888888");//手机号
  115. map.put("time", "2019-03-06 14:00:00");//注册时间
  116. map.put("name", "李华");//名称
  117. map.put("linkman", "李华");//联系人
  118. try {
  119. queryData(QueryUrlEnum.ACCOUNT_REGISTER.getUrl(), map, token);
  120. } catch (Exception e) {
  121. e.printStackTrace();
  122. }
  123. }
  124. // 用户充值
  125. public static void recharege() {
  126. HashMap<String, String> map = new HashMap<>();
  127. map.put("userId", "HZJH201903190022");//户号 注意不可重复
  128. map.put("tradeNo", "2018090101010103");//交易号 一个交易号只能充值一次
  129. map.put("money", "1");//金额
  130. try {
  131. queryData(QueryUrlEnum.ACCOUNT_RECHARGE.getUrl(), map, token);
  132. } catch (Exception e) {
  133. e.printStackTrace();
  134. }
  135. }
  136. // 用户信息修改
  137. public static void customerInfoModify() {
  138. HashMap<String, String> map = new HashMap<>();
  139. map.put("userId", "HZJH201903190022");//户号 注意不可重复
  140. map.put("phone", "18888888888");//手机号
  141. map.put("linkman", "Li-Hua");//注册时间
  142. map.put("name", "李华");//名称
  143. try {
  144. queryData(QueryUrlEnum.ACCOUNT_MODIFY.getUrl(), map, token);
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. }
  148. }
  149. // 历史数据
  150. public static void getHistoryCumulant() {
  151. HashMap<String, String> map = new HashMap<>();
  152. map.put("pointId", "610112W005000044");//表计编码
  153. map.put("startTime", "20190813");//开始时间
  154. map.put("endTime", "20190831");//结束时间
  155. map.put("pointType", "1");//设备类型信息:1电表;2水表
  156. map.put("type", "0");//数据类型 0, 所有(可以理解为,最小采集周期间隔的数据,如小时数据); 1, 按天,采集周期为天的数据
  157. try {
  158. queryData(QueryUrlEnum.HISTORY_CUMULANT.getUrl(), map, token);
  159. } catch (Exception e) {
  160. e.printStackTrace();
  161. }
  162. }
  163. // 电表最新一条历史数据
  164. public static void getPowerLastHistoryCumulant() {
  165. HashMap<String, String> map = new HashMap<>();
  166. map.put("pointId", "000000000001");//表计编码
  167. try {
  168. queryData(QueryUrlEnum.LAST_HISTORY.getUrl(), map, token);
  169. } catch (Exception e) {
  170. e.printStackTrace();
  171. }
  172. }
  173. // 最新一条历史数据
  174. public static void getLastHistoryCumulant() {
  175. HashMap<String, String> map = new HashMap<>();
  176. map.put("pointId", "00000090409190");//表计编码
  177. map.put("pointType", "2");
  178. try {
  179. queryData(QueryUrlEnum.LAST_HISTORY_CUMULANT.getUrl(), map, token);
  180. } catch (Exception e) {
  181. e.printStackTrace();
  182. }
  183. }
  184. // 拉合闸
  185. public static void disconnect() {
  186. HashMap<String, String> map = new HashMap<>();
  187. map.put("pointId", "000000000001");//表计编号
  188. map.put("operType", "1");//1.拉闸2.合闸
  189. try {
  190. queryData(QueryUrlEnum.REMOTE_DISCONNECT.getUrl(), map, token);
  191. } catch (Exception e) {
  192. e.printStackTrace();
  193. }
  194. }
  195. // 电表实时信息 电表实时信息抄读时间较长,注意设置连接的超时时间
  196. public static void powerRealData() {
  197. String token = "23fff64f891e4bca8280224d916e789a";
  198. HashMap<String, String> map = new HashMap<>();
  199. map.put("pointId", "000000000001");//表计编号
  200. try {
  201. queryData(QueryUrlEnum.METER_REAL_INFO.getUrl(), map, token);
  202. } catch (Exception e) {
  203. e.printStackTrace();
  204. }
  205. }
  206. /**
  207. * 请求数据
  208. *
  209. * @param path 请求接口
  210. * @param dataMap 所需的数据Map
  211. */
  212. public static JSONObject queryData(String path, Map<String, String> dataMap, String token) throws Exception {
  213. // 加密data部分
  214. String encode = CodeUtil.dataEncode(JSON.toJSONString(dataMap), Globals.DATA_SECRET, Globals.DATA_SECRET_IV);
  215. /*组装必要参数 start */
  216. String seq = "0001";
  217. String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
  218. Map<String, String> map = new HashMap<>();
  219. map.put("operatorId", Globals.OPERATOR_ID);
  220. map.put("data", encode);
  221. map.put("timeStamp", timeStamp);
  222. map.put("seq", seq);
  223. /*组装必要参数 end */
  224. if (encode == null) return null;
  225. /*生成签名 start*/
  226. // 为防止+在收发过程中被变成空格,将加密后的密文中的所有空格替换一下
  227. // 需要签名的参数: operatorId + 加密后的data + 时间戳 + 自增序列
  228. String signSrc = Globals.OPERATOR_ID + encode.replaceAll(" ", "+") + timeStamp + seq;
  229. String sig = CodeUtil.getSign(signSrc, Globals.SIGN_KEY);
  230. //将签名放入参数Map
  231. map.put("sig", sig);
  232. /*生成签名 start*/
  233. /*执行请求,使用可以附加token的doPost方*/
  234. HttpClientHelper instance = HttpClientHelper.getInstance();
  235. //token也可以放进参数列表
  236. String result = instance.doPost(Globals.URL_PREFIX + (path.startsWith("/") ? path : ("/" + path)), map, token);
  237. if (StringUtil.isEmpty(result)) return null;
  238. /*解析数据 start*/
  239. JSONObject jsonObject = JSON.parseObject(result);
  240. // 失败
  241. if (!"0".equals(jsonObject.getString("ret"))) {
  242. printJsonMessage("send Error:", jsonObject);
  243. return null;
  244. }
  245. // 验签,注意生成签名的参数顺序应和发送时一样
  246. // 为防止'+'在收发过程中被变成' ',将加密后的密文中的所有空格替换一下
  247. String resultSigStr = jsonObject.getString("operatorId") + jsonObject.getString("data").replaceAll(" ", "+")
  248. + jsonObject.getString("msg") + jsonObject.getString("ret");
  249. String resultSig = CodeUtil.getSign(resultSigStr, Globals.SIGN_KEY);
  250. if (StringUtil.isNotEmpty(jsonObject.getString("sig")) && jsonObject.getString("sig").equals(resultSig)) {
  251. // 解密数据,需要数据秘钥和秘钥初始化向量
  252. String data = CodeUtil.dataDecode(jsonObject.getString("data"), Globals.DATA_SECRET, Globals.DATA_SECRET_IV);
  253. jsonObject.put("data", data);
  254. }
  255. /*解析数据 end*/
  256. // 打印 or 其他操作
  257. // printJsonMessage("Send Message:", map);
  258. // printJsonMessage("Receive Message:", result);
  259. // printJsonMessage("Decode Message:", jsonObject);
  260. return jsonObject;
  261. }
  262. public static void printJsonMessage(String prefix, Object obj) {
  263. System.out.println(prefix + JsonUtil.JsonFormart(JSON.toJSONString(obj)));
  264. }
  265. }