platform.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import json
  5. import logging
  6. import requests
  7. from typing import TYPE_CHECKING
  8. from apps.web.agent.models import Agent
  9. from apps.web.api.models import APIServiceStartRecord
  10. from apps.web.device.models import Group, Device
  11. from apps.web.dealer.models import Dealer
  12. if TYPE_CHECKING:
  13. from apps.web.device.models import DeviceDict
  14. logger = logging.getLogger(__name__)
  15. def notify_event_to_north(dealer, device, level, desc, dataDict = None):
  16. # type: (Dealer, DeviceDict, str, str, dict)->None
  17. agent = Agent.objects.get(id = dealer.agentId)
  18. if (not agent.openAPI) or (agent.domain == ''):
  19. return
  20. group = Group.get_group(device.groupId)
  21. paras = {'level': level, 'description': desc,
  22. 'sign': agent.mySign, 'channel': str(dealer.id),
  23. 'createTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
  24. 'deviceCode': device.logicalCode,
  25. 'groupName': group['groupName'],
  26. 'address': group['address']}
  27. if dataDict is not None:
  28. paras.update(dataDict)
  29. data = json.dumps(paras)
  30. response = requests.post(url = "https://%s/notify/fault" % agent.domain, data = data, timeout = 15)
  31. logger.info(str(response))
  32. def notify_event_to_north_v2(devNo, dataDict):
  33. logger.info('start to send notify event')
  34. try:
  35. device = Device.objects(devNo=devNo).first()
  36. if device is None:
  37. logger.error('device is not defined to send north api, devNo={}'.format(devNo))
  38. return
  39. else:
  40. dealer = Dealer.objects(id=device.ownerId).first()
  41. if dealer is None:
  42. logger.error('device is not registered to send north api, devNo={}'.format(devNo))
  43. return
  44. else:
  45. if dealer.domain == '' or dealer.domain is None:
  46. logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
  47. return
  48. else:
  49. # need Protocol Header Style, full address
  50. url = dealer.domain
  51. data = json.dumps(dataDict)
  52. logger.info('url=%s, data=%s' % (url, data))
  53. if dealer.username == u'18600113016':
  54. response = requests.post(url=url, json=data, headers={'Content-Type': 'application/json'}, timeout=15)
  55. else:
  56. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'},
  57. timeout=15)
  58. logger.info(str(response))
  59. except Exception as e:
  60. logger.error(e)
  61. def handle_and_notify_event_to_north_cy4(device, dataDict): # type:(DeviceDict, dict) -> None
  62. try:
  63. dealer = device.owner
  64. if dealer.domain == '' or dealer.domain is None:
  65. logger.error('device is not allowed to send north api, devNo={}'.format(device.devNo))
  66. return
  67. if 'cy4EventApi' not in dealer.features:
  68. return
  69. if dataDict.get('consumeType', '') == 'card':
  70. APIServiceStartRecord.record_4_cy4_card(dataDict)
  71. elif dataDict.get('consumeType', '') == 'mobile':
  72. APIServiceStartRecord.record_4_cy4_mobile(dataDict)
  73. else:
  74. return
  75. url = dealer.domain
  76. data = json.dumps(dataDict)
  77. logger.info('url=%s, data=%s' % (url, data))
  78. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
  79. logger.info(str(response))
  80. except Exception as e:
  81. logger.error(e)
  82. def handle_and_notify_event_to_north_cy4_new(device, dataDict):
  83. # TODO 正式上线需要配置到数据库里
  84. dealer = device.owner
  85. if dealer.domain == '' or dealer.domain is None:
  86. logger.error('device is not allowed to send north api, devNo={}'.format(device.devNo))
  87. return
  88. url = dealer.domain
  89. # url = "http://0.0.0.0:4000/api/ft_north/get/onlytest"
  90. # url = "https://test.hchc.vhebi.com/api/response/cyrec"
  91. data = json.dumps(dataDict)
  92. logger.info('url=%s, data=%s' % (url, data))
  93. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
  94. logger.info(str(response))
  95. def handle_and_notify_event_to_north_ytb(devNo, dataDict):
  96. try:
  97. device = Device.objects(devNo=devNo).first()
  98. if device is None:
  99. logger.error('device is not defined to send north api, devNo={}'.format(devNo))
  100. return
  101. else:
  102. dealer = Dealer.objects(id=device.ownerId).first()
  103. if dealer is None:
  104. logger.error('device is not registered to send north api, devNo={}'.format(devNo))
  105. return
  106. else:
  107. if dealer.domain == '' or dealer.domain is None:
  108. logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
  109. return
  110. else:
  111. if 'ytbEventApi' not in dealer.features:
  112. return
  113. else:
  114. logger.info('api push service started! devNo={}'.format(devNo))
  115. # need Protocol Header Style, full address
  116. url = dealer.domain
  117. if 'order' in dataDict:
  118. dataDict['order'].pop('order_acked')
  119. data = json.dumps(dataDict)
  120. logger.info('url=%s, data=%s' % (url, data))
  121. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
  122. logger.info(str(response))
  123. except Exception as e:
  124. logger.error(e)
  125. def handle_and_notify_event_to_north_Dc(devNo, dataDict):
  126. try:
  127. device = Device.objects(devNo=devNo).first()
  128. if device is None:
  129. logger.error('device is not defined to send north api, devNo={}'.format(devNo))
  130. return
  131. else:
  132. dealer = Dealer.objects(id=device.ownerId).first()
  133. if dealer is None:
  134. logger.error('device is not registered to send north api, devNo={}'.format(devNo))
  135. return
  136. else:
  137. if dealer.domain == '' or dealer.domain is None:
  138. logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
  139. return
  140. else:
  141. if 'dcEventApi' not in dealer.features:
  142. return
  143. else:
  144. # need Protocol Header Style, full address
  145. url = dealer.domain
  146. data = json.dumps(dataDict)
  147. logger.info('url=%s, data=%s' % (url, data))
  148. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
  149. logger.info(str(response))
  150. except Exception as e:
  151. logger.error(e)
  152. def handle_and_notify_event_to_north_Jh(devNo, dataDict):
  153. try:
  154. device = Device.objects(devNo=devNo).first()
  155. if device is None:
  156. logger.error('device is not defined to send north api, devNo={}'.format(devNo))
  157. return
  158. else:
  159. dealer = Dealer.objects(id=device.ownerId).first()
  160. if dealer is None:
  161. logger.error('device is not registered to send north api, devNo={}'.format(devNo))
  162. return
  163. else:
  164. if dealer.domain == '' or dealer.domain is None:
  165. logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
  166. return
  167. else:
  168. if 'jhEventApi' not in dealer.features:
  169. return
  170. else:
  171. # need Protocol Header Style, full address
  172. url = dealer.domain
  173. data = json.dumps(dataDict)
  174. logger.info('url=%s, data=%s' % (url, data))
  175. response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
  176. logger.info(str(response))
  177. except Exception as e:
  178. logger.error(e)