DataClient.java 15 KB

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