yuhuan_fire.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import json
  5. import logging
  6. import urllib2
  7. from six.moves.urllib import parse
  8. from typing import TYPE_CHECKING
  9. from apps.web.constant import Const
  10. from apps.web.dealer.models import Dealer
  11. from apps.web.device.models import Group, Device
  12. if TYPE_CHECKING:
  13. from apps.web.device.models import DeviceDict
  14. logger = logging.getLogger(__name__)
  15. class YuhuanNorther(object):
  16. ipPort = 'http://111.3.65.79:8084'
  17. appId = 'ictzjtzn'
  18. secretId = '34F20709880311E985D09CE374D0A1A9'
  19. token = ''
  20. tokenExpiredTime = datetime.datetime.now()
  21. @staticmethod
  22. def get_token():
  23. if YuhuanNorther.token == '' or YuhuanNorther.tokenExpiredTime <= datetime.datetime.now():
  24. # url, method="POST", isNeedResponse=True,**kwargs
  25. url = '%s/mhssp/api' % YuhuanNorther.ipPort
  26. result = send_url_request_to_yuhuan(url, action = 'token', method = 'getToken', grant_type = 'client',
  27. appid = YuhuanNorther.appId, secret = YuhuanNorther.secretId)
  28. if result['code'] != '1':
  29. logger.error('get token error,code=%s,desc=%s' % (result['code'], result['desc']))
  30. return None
  31. YuhuanNorther.token = result['data']['token']
  32. YuhuanNorther.tokenExpiredTime = datetime.datetime.now() + datetime.timedelta(
  33. seconds = result['data']['expires'])
  34. return YuhuanNorther.token
  35. @staticmethod
  36. def send_dev_info(dev):
  37. dealer = Dealer.objects.get(id = dev['ownerId'])
  38. feature = dealer.query_feature_by_list(['yuhuanNorther'])
  39. if not feature['yuhuanNorther']:
  40. logger.info(' send_dev_info yuhuanNorther switch is not open,please open it')
  41. return
  42. group = Group.get_group(dev['groupId'])
  43. devObj = Device.objects.get(devNo = dev['devNo'])
  44. devCtrInfo = Device.get_dev_control_cache(dev['devNo'])
  45. allports = devCtrInfo.get('allPorts', 10)
  46. ports = [str(_ + 1) for _ in range(allports)]
  47. devInfo = {
  48. 'fchargpile_uuid': dev['logicalCode'],
  49. 'fchargpile_name': u'佳泰-%s-%s' % (group['groupName'], dev['groupNumber']),
  50. 'fprovince_code': '330000',
  51. 'fcity_code': '331000',
  52. 'fcounty_code': '331083',
  53. 'ftown_code': group.get('town', ''),
  54. 'fvillage_code': group.get('village', ''),
  55. 'faddress': group['address'],
  56. 'flink_man': dealer['nickname'],
  57. 'ftel_no': dealer['username'],
  58. 'flongitude': devObj.location['coordinates'][0] if devObj.location is not None and devObj.location.has_key(
  59. 'coordinates') else 0.0,
  60. 'flatitude': devObj.location['coordinates'][1] if devObj.location is not None and devObj.location.has_key(
  61. 'coordinates') else 0.0,
  62. 'fis_active': '1' if dev['status'] not in [Const.DEV_WORK_STATUS_FAULT,
  63. Const.DEV_WORK_STATUS_FORBIDDEN] else '0',
  64. 'fnum': ports
  65. }
  66. url = '%s/mhssp/api' % YuhuanNorther.ipPort
  67. token = YuhuanNorther.get_token()
  68. result = send_url_request_to_yuhuan(
  69. url = url,
  70. action = 'obj.interface',
  71. method = 'cagChargPileInfo',
  72. token = token,
  73. transdata = json.dumps(devInfo)
  74. )
  75. if result['ret_code'] != '1':
  76. logger.error('send_dev_info send dev info error,code=%s,desc=%s' % (result['ret_code'], result['data']))
  77. logger.info('send OK! send_dev_info devNo=%s' % dev['devNo'])
  78. return result
  79. @staticmethod
  80. def send_dev_status(dev, port, status): # 1,开始充电,2,结束充电
  81. # type:(DeviceDict, str, str)->None
  82. try:
  83. if not dev.is_registered:
  84. logger.info('device<{}> is not registered. no need to send_dev_status'.format(repr(dev)))
  85. return
  86. dealer = Dealer.objects.get(id = dev['ownerId'])
  87. feature = dealer.query_feature_by_list(['yuhuanNorther'])
  88. if not feature['yuhuanNorther']:
  89. logger.info('send_dev_status yuhuanNorther switch is not open,please open it')
  90. return
  91. statusInfo = {
  92. 'fchargpile_uuid': dev['logicalCode'],
  93. 'fnum': str(port),
  94. 'fstatus': str(status),
  95. 'fcome_time': datetime.datetime.now().strftime("%Y%m%d%H%M%S")
  96. }
  97. url = '%s/mhssp/api' % YuhuanNorther.ipPort
  98. token = YuhuanNorther.get_token()
  99. result = send_url_request_to_yuhuan(
  100. url = url,
  101. action = 'obj.interface',
  102. method = 'cabChargRev',
  103. token = token,
  104. transdata = json.dumps(statusInfo)
  105. )
  106. if result.has_key('ret_code') and result['ret_code'] == '1':
  107. logger.info('send OK! send_dev_status devNo=%s' % dev['devNo'])
  108. else:
  109. logger.error(
  110. ' send_dev_status send dev info error,result=%s' % (result))
  111. return result
  112. except Exception as e:
  113. logger.exception(e)
  114. @staticmethod
  115. def send_dev_event(dev, eventCode, port): #
  116. dealer = Dealer.objects.get(id = dev['ownerId'])
  117. feature = dealer.query_feature_by_list(['yuhuanNorther'])
  118. if not feature['yuhuanNorther']:
  119. logger.info(' send_dev_event yuhuanNorther switch is not open,please open it')
  120. return
  121. devTypeCode = dev['devType']['code']
  122. if not Const.YUHUAN_EVENT_TYPE_DICT.has_key(devTypeCode):
  123. logger.info('send_dev_event YUHUAN_EVENT_TYPE_DICT has not find the type code =%s' % devTypeCode)
  124. return
  125. if not Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode].has_key(eventCode):
  126. logger.info('send_dev_event YUHUAN_EVENT_TYPE_DICT has not find the eventCode code =%s' % eventCode)
  127. return
  128. ftype = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['ftype']
  129. fisok = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['fisok']
  130. fhandlmemo = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['fhandlmemo']
  131. eventInfo = {
  132. 'fchargpile_uuid': dev['logicalCode'],
  133. 'fnum': str(port),
  134. 'f_type': ftype,
  135. 'fcome_time': datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
  136. 'fisok': fisok,
  137. 'fhandlername': dealer.nickname,
  138. 'fisok': fisok,
  139. 'fhandltime': datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
  140. 'fhandlmemo': fhandlmemo,
  141. }
  142. url = '%s/mhssp/api' % YuhuanNorther.ipPort
  143. token = YuhuanNorther.get_token()
  144. result = send_url_request_to_yuhuan(
  145. url = url,
  146. action = 'obj.interface',
  147. method = 'cabChargAlarm',
  148. token = token,
  149. transdata = json.dumps(eventInfo)
  150. )
  151. if result['ret_code'] != '1':
  152. logger.error('send_dev_event send dev info error,code=%s,desc=%s' % (result['ret_code'], result['data']))
  153. logger.info('send OK! send_dev_event devNo=%s' % dev['devNo'])
  154. return result
  155. def send_url_request_to_yuhuan(url, **kwargs):
  156. paras = {}
  157. paras.update(kwargs)
  158. req = urllib2.Request(url = url, data = parse.urlencode(paras))
  159. response = urllib2.urlopen(req, timeout = 15)
  160. return json.loads(response.read())