api.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import json
  5. import logging
  6. import requests
  7. from apps.web.constant import Const
  8. from apps.web.south_intf.bj_north.models import BeiJingFengTai
  9. from apps.web.south_intf.bj_north.utils import get_station_info, get_token, get_equipment_info, get_port_normal_info, \
  10. get_order_info, get_port_charge_info, get_port_status
  11. from apps.web.device.models import Device
  12. logger = logging.getLogger(__name__)
  13. # 提交充电站信息
  14. def push_station_info(groupId):
  15. try:
  16. norther = BeiJingFengTai.objects.filter().first()
  17. operatorId = str(norther.operatorId)
  18. url = norther.join_url("platform/management/station")
  19. stationInfo = get_station_info(groupId,operatorId)
  20. token = get_token(norther)
  21. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  22. sig = norther.make_signature(timeDate,token)
  23. return norther.send_request(url=url, mode='POST',sig=sig, timeDate=timeDate,token=token,**stationInfo)
  24. except Exception as e:
  25. logger.exception(e)
  26. # 删除充电站信息
  27. def delete_station_info(groupId):
  28. try:
  29. norther = BeiJingFengTai.objects.filter().first()
  30. operatorId = norther.operatorId
  31. url = norther.join_url("platform/management/station?stationId={}&operatorId={}".format(groupId,operatorId))
  32. token = get_token(norther)
  33. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  34. sig = norther.make_signature(timeDate,token)
  35. return norther.send_request(url=url, mode='DELETE',sig=sig, timeDate=timeDate, token=token)
  36. except:
  37. pass
  38. # 修改一个充电站信息
  39. def update_station_info(groupId):
  40. try:
  41. norther = BeiJingFengTai.objects.filter().first()
  42. url = norther.join_url("platform/management/station")
  43. stationInfo = get_station_info(groupId)
  44. token = get_token(norther)
  45. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  46. sig = norther.make_signature(timeDate,token)
  47. return norther.send_request(url=url, mode='PUT',sig=sig, timeDate=timeDate,token=token,**stationInfo)
  48. except Exception as e:
  49. logger.exception(e)
  50. # 分页查询多个充电站信息列表
  51. def get_stations_info(groupId,pageIndex,pageSize):
  52. try:
  53. norther = BeiJingFengTai.objects.filter().first()
  54. operatorId = norther.operatorId
  55. url = norther.join_url("platform/management/station?operatorId={}&pageIndex={}&pageSize={}"\
  56. .format(operatorId,pageIndex,pageSize))
  57. token = get_token(norther)
  58. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  59. sig = norther.make_signature(timeDate,token)
  60. return norther.send_request(url=url, mode='GET', sig=sig, timeDate=timeDate, token=token)
  61. except:
  62. pass
  63. # 提交一个充电设施信息
  64. def push_device_info(devNo):
  65. try:
  66. norther = BeiJingFengTai.objects.filter().first()
  67. url = norther.join_url("platform/management/equipment")
  68. devInfo = get_equipment_info(devNo,str(norther.operatorId))
  69. token = get_token(norther)
  70. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  71. sig = norther.make_signature(timeDate,token)
  72. return norther.send_request(url=url, mode='POST',sig=sig, timeDate=timeDate,token=token,**devInfo)
  73. except Exception as e:
  74. logger.exception(e)
  75. # 修改一个充电设施信息
  76. def update_device_info(devNo):
  77. try:
  78. norther = BeiJingFengTai.objects.filter().first()
  79. url = norther.join_url("platform/management/equipment")
  80. devInfo = get_equipment_info(devNo,str(norther.operatorId))
  81. token = get_token(norther)
  82. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  83. sig = norther.make_signature(timeDate,token)
  84. return norther.send_request(url=url, mode='PUT',sig=sig, timeDate=timeDate,token=token,**devInfo)
  85. except Exception as e:
  86. logger.exception(e)
  87. # 分页查询多个充电设施信息列表
  88. def get_devices_info(devNo,pageIndex,pageSize):
  89. try:
  90. norther = BeiJingFengTai.objects.filter().first()
  91. operatorId = norther.operatorId
  92. url = norther.join_url("platform/management/equipment?operatorId={}&pageIndex={}&pageSize={}"\
  93. .format(operatorId,pageIndex,pageSize))
  94. token = get_token(norther)
  95. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  96. sig = norther.make_signature(timeDate,token)
  97. return norther.send_request(url=url, mode='GET', sig=sig, timeDate=timeDate, token=token)
  98. except:
  99. pass
  100. # 提交一个充电口信息
  101. def push_port_info(devNo, port):
  102. try:
  103. norther = BeiJingFengTai.objects.filter().first()
  104. url = norther.join_url("platform/management/cell")
  105. portInfo = get_port_normal_info(devNo, port,str(norther.operatorId))
  106. token = get_token(norther)
  107. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  108. sig = norther.make_signature(timeDate,token)
  109. return norther.send_request(url=url, mode='POST',sig=sig, timeDate=timeDate,token=token,**portInfo)
  110. except Exception as e:
  111. logger.exception(e)
  112. # 删除一个充电口信息
  113. def delete_port_info(devNo, port):
  114. cellId = Device.get_logicalCode_by_devNo(devNo) + '_' + str(port)
  115. try:
  116. norther = BeiJingFengTai.objects.filter().first()
  117. operatorId = norther.operatorId
  118. url = norther.join_url("platform/management/cell?cellId={}id&operatorId={}".format(cellId,operatorId))
  119. token = get_token(norther)
  120. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  121. sig = norther.make_signature(timeDate,token)
  122. return norther.send_request(url=url, mode='DELETE',sig=sig, timeDate=timeDate, token=token)
  123. except:
  124. pass
  125. # 修改一个充电口信息
  126. def update_port_info(devNo,port):
  127. try:
  128. norther = BeiJingFengTai.objects.filter().first()
  129. url = norther.join_url("platform/management/cell")
  130. portInfo = get_port_normal_info(devNo, port,str(norther.operatorId))
  131. token = get_token(norther)
  132. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  133. sig = norther.make_signature(timeDate,token)
  134. return norther.send_request(url=url, mode='PUT',sig=sig, timeDate=timeDate,token=token,**portInfo)
  135. except Exception as e:
  136. logger.exception(e)
  137. # 分页查询多个充电口信息列表
  138. def get_ports_info(pageIndex,pageSize):
  139. try:
  140. norther = BeiJingFengTai.objects.filter().first()
  141. operatorId = norther.operatorId
  142. url = norther.join_url("platform/management/cell?operatorId={}&pageIndex={}&pageSize={}"\
  143. .format(operatorId,pageIndex,pageSize))
  144. token = get_token(norther)
  145. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  146. sig = norther.make_signature(timeDate,token)
  147. return norther.send_request(url=url, mode='GET', sig=sig, timeDate=timeDate, token=token)
  148. except:
  149. pass
  150. # 修改上报失败回调地址
  151. # 删除上报失败回调地址
  152. # (运营商实现该接口)处理上报失败
  153. def update_fault_proce(request):
  154. data = request.data
  155. payload = json.dumps(data)
  156. try:
  157. norther = BeiJingFengTai.objects.filter().first()
  158. url = norther.join_url("/example/handleReportFailure")
  159. token = get_token(norther)
  160. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  161. sig = norther.make_signature(timeDate,token)
  162. return norther.send_request(url=url, mode='POST', sig=sig, timeDate=timeDate, token=token, **payload)
  163. except Exception as e:
  164. logger.exception(e)
  165. # 修改查询充电口实时数据回调地址
  166. # 修改请求上报充电过程数据地址
  167. # (运营商实现该接口)处理请求上报充电过程数据
  168. # 上报充电口实时信息
  169. def post_charging_meta_info(devNo, port):
  170. try:
  171. norther = BeiJingFengTai.objects.filter().first()
  172. url = norther.join_url("platform/report/chargingMetaInfo")
  173. token = get_token(norther)
  174. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  175. sig = norther.make_signature(timeDate,token)
  176. operatorId = norther.operatorId
  177. chargingMetaInfo = get_port_charge_info(devNo, port,operatorId)
  178. return norther.send_request(url=url, mode='POST', sig=sig, timeDate=timeDate, token=token, **chargingMetaInfo)
  179. except Exception as e:
  180. logger.exception(e)
  181. # 重新上报充电口实时信息
  182. # 批量上报充电口实时信息
  183. def post_charging_meta_info_list(devNo):
  184. try:
  185. workingPortList = []
  186. devCache = Device.get_dev_control_cache(devNo)
  187. for k,v in devCache.items():
  188. if isinstance(v, dict):
  189. if 'status' in v:
  190. if v['status'] == Const.DEV_WORK_STATUS_WORKING:
  191. workingPortList.append(k)
  192. for port in workingPortList:
  193. norther = BeiJingFengTai.objects.filter().first()
  194. url = norther.join_url("platform/report/chargingMetaInfo")
  195. token = get_token(norther)
  196. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  197. sig = norther.make_signature(timeDate, token)
  198. operatorId = norther.operatorId
  199. chargingMetaInfo = get_port_charge_info(devNo, port, operatorId)
  200. norther.send_request(url=url, mode='POST', sig=sig, timeDate=timeDate, token=token, **chargingMetaInfo)
  201. except Exception as e:
  202. logger.exception(e)
  203. # 提交一个充电记录信息
  204. def post_charging_record_info(orderNo):
  205. try:
  206. norther = BeiJingFengTai.objects.filter().first()
  207. url = norther.join_url("platform/management/chargingRecord")
  208. token = get_token(norther)
  209. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  210. sig = norther.make_signature(timeDate,token)
  211. operatorId = str(norther.operatorId)
  212. orderInfo = get_order_info(orderNo,operatorId)
  213. return norther.send_request(url=url, mode='POST', sig=sig, timeDate=timeDate, token=token, **orderInfo)
  214. except Exception as e:
  215. logger.exception(e)
  216. # 分页查询多个充电记录信息列表
  217. def get_charging_record_info(pageIndex,pageSize):
  218. try:
  219. norther = BeiJingFengTai.objects.filter().first()
  220. operatorId = norther.operatorId
  221. url = norther.join_url("platform/management/chargingRecord?operatorId={}&pageIndex={}&pageSize={}"\
  222. .format(operatorId,pageIndex,pageSize))
  223. token = get_token(norther)
  224. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  225. sig = norther.make_signature(timeDate,token)
  226. return norther.send_request(url=url, mode='GET', sig=sig, timeDate=timeDate, token=token)
  227. except:
  228. pass
  229. # 提交充电记录信息列表
  230. def post_charging_records_info(orderNos):
  231. try:
  232. norther = BeiJingFengTai.objects.filter().first()
  233. url = norther.join_url("platform/management/chargingRecordList")
  234. token = get_token(norther)
  235. timeDate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  236. sig = norther.make_signature(timeDate,token)
  237. operatorId = norther.operatorId
  238. orderInfos = []
  239. for orderNo in orderNos:
  240. orderInfo = get_order_info(orderNo, operatorId)
  241. orderInfos.append(orderInfo)
  242. # return norther.send_request(url=url, mode='POST', sig=sig, timeDate=timeDate, token=token, orderInfos)
  243. headers = {
  244. 'Datetime': timeDate,
  245. 'OperatorId': operatorId,
  246. 'Token': token,
  247. 'Signature': sig,
  248. 'User-Agent': 'Apifox/1.0.0 (https://www.apifox.cn)',
  249. 'Content-Type': 'application/json'
  250. }
  251. payload = json.dumps(orderInfos)
  252. response = requests.request("POST", url, headers=headers, data=payload)
  253. if response.status_code != 200:
  254. return dict()
  255. return response.json()
  256. except Exception as e:
  257. logger.exception(e)
  258. # 修改安全预警回调地址
  259. # (桩企实现)安全预警接口举例
  260. # 跟新每个接口的状态
  261. def get_update_port_num(devNo):
  262. workingPorts = get_port_status(devNo)
  263. for port in workingPorts:
  264. update_port_info(devNo,port)