123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import json
- import logging
- import urllib2
- from six.moves.urllib import parse
- from typing import TYPE_CHECKING
- from apps.web.constant import Const
- from apps.web.dealer.models import Dealer
- from apps.web.device.models import Group, Device
- if TYPE_CHECKING:
- from apps.web.device.models import DeviceDict
- logger = logging.getLogger(__name__)
- class YuhuanNorther(object):
- ipPort = 'http://111.3.65.79:8084'
- appId = 'ictzjtzn'
- secretId = '34F20709880311E985D09CE374D0A1A9'
- token = ''
- tokenExpiredTime = datetime.datetime.now()
- @staticmethod
- def get_token():
- if YuhuanNorther.token == '' or YuhuanNorther.tokenExpiredTime <= datetime.datetime.now():
- # url, method="POST", isNeedResponse=True,**kwargs
- url = '%s/mhssp/api' % YuhuanNorther.ipPort
- result = send_url_request_to_yuhuan(url, action = 'token', method = 'getToken', grant_type = 'client',
- appid = YuhuanNorther.appId, secret = YuhuanNorther.secretId)
- if result['code'] != '1':
- logger.error('get token error,code=%s,desc=%s' % (result['code'], result['desc']))
- return None
- YuhuanNorther.token = result['data']['token']
- YuhuanNorther.tokenExpiredTime = datetime.datetime.now() + datetime.timedelta(
- seconds = result['data']['expires'])
- return YuhuanNorther.token
- @staticmethod
- def send_dev_info(dev):
- dealer = Dealer.objects.get(id = dev['ownerId'])
- feature = dealer.query_feature_by_list(['yuhuanNorther'])
- if not feature['yuhuanNorther']:
- logger.info(' send_dev_info yuhuanNorther switch is not open,please open it')
- return
- group = Group.get_group(dev['groupId'])
- devObj = Device.objects.get(devNo = dev['devNo'])
- devCtrInfo = Device.get_dev_control_cache(dev['devNo'])
- allports = devCtrInfo.get('allPorts', 10)
- ports = [str(_ + 1) for _ in range(allports)]
- devInfo = {
- 'fchargpile_uuid': dev['logicalCode'],
- 'fchargpile_name': u'佳泰-%s-%s' % (group['groupName'], dev['groupNumber']),
- 'fprovince_code': '330000',
- 'fcity_code': '331000',
- 'fcounty_code': '331083',
- 'ftown_code': group.get('town', ''),
- 'fvillage_code': group.get('village', ''),
- 'faddress': group['address'],
- 'flink_man': dealer['nickname'],
- 'ftel_no': dealer['username'],
- 'flongitude': devObj.location['coordinates'][0] if devObj.location is not None and devObj.location.has_key(
- 'coordinates') else 0.0,
- 'flatitude': devObj.location['coordinates'][1] if devObj.location is not None and devObj.location.has_key(
- 'coordinates') else 0.0,
- 'fis_active': '1' if dev['status'] not in [Const.DEV_WORK_STATUS_FAULT,
- Const.DEV_WORK_STATUS_FORBIDDEN] else '0',
- 'fnum': ports
- }
- url = '%s/mhssp/api' % YuhuanNorther.ipPort
- token = YuhuanNorther.get_token()
- result = send_url_request_to_yuhuan(
- url = url,
- action = 'obj.interface',
- method = 'cagChargPileInfo',
- token = token,
- transdata = json.dumps(devInfo)
- )
- if result['ret_code'] != '1':
- logger.error('send_dev_info send dev info error,code=%s,desc=%s' % (result['ret_code'], result['data']))
- logger.info('send OK! send_dev_info devNo=%s' % dev['devNo'])
- return result
- @staticmethod
- def send_dev_status(dev, port, status): # 1,开始充电,2,结束充电
- # type:(DeviceDict, str, str)->None
- try:
- if not dev.is_registered:
- logger.info('device<{}> is not registered. no need to send_dev_status'.format(repr(dev)))
- return
- dealer = Dealer.objects.get(id = dev['ownerId'])
- feature = dealer.query_feature_by_list(['yuhuanNorther'])
- if not feature['yuhuanNorther']:
- logger.info('send_dev_status yuhuanNorther switch is not open,please open it')
- return
- statusInfo = {
- 'fchargpile_uuid': dev['logicalCode'],
- 'fnum': str(port),
- 'fstatus': str(status),
- 'fcome_time': datetime.datetime.now().strftime("%Y%m%d%H%M%S")
- }
- url = '%s/mhssp/api' % YuhuanNorther.ipPort
- token = YuhuanNorther.get_token()
- result = send_url_request_to_yuhuan(
- url = url,
- action = 'obj.interface',
- method = 'cabChargRev',
- token = token,
- transdata = json.dumps(statusInfo)
- )
- if result.has_key('ret_code') and result['ret_code'] == '1':
- logger.info('send OK! send_dev_status devNo=%s' % dev['devNo'])
- else:
- logger.error(
- ' send_dev_status send dev info error,result=%s' % (result))
- return result
- except Exception as e:
- logger.exception(e)
- @staticmethod
- def send_dev_event(dev, eventCode, port): #
- dealer = Dealer.objects.get(id = dev['ownerId'])
- feature = dealer.query_feature_by_list(['yuhuanNorther'])
- if not feature['yuhuanNorther']:
- logger.info(' send_dev_event yuhuanNorther switch is not open,please open it')
- return
- devTypeCode = dev['devType']['code']
- if not Const.YUHUAN_EVENT_TYPE_DICT.has_key(devTypeCode):
- logger.info('send_dev_event YUHUAN_EVENT_TYPE_DICT has not find the type code =%s' % devTypeCode)
- return
- if not Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode].has_key(eventCode):
- logger.info('send_dev_event YUHUAN_EVENT_TYPE_DICT has not find the eventCode code =%s' % eventCode)
- return
- ftype = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['ftype']
- fisok = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['fisok']
- fhandlmemo = Const.YUHUAN_EVENT_TYPE_DICT[devTypeCode][eventCode]['fhandlmemo']
- eventInfo = {
- 'fchargpile_uuid': dev['logicalCode'],
- 'fnum': str(port),
- 'f_type': ftype,
- 'fcome_time': datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
- 'fisok': fisok,
- 'fhandlername': dealer.nickname,
- 'fisok': fisok,
- 'fhandltime': datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
- 'fhandlmemo': fhandlmemo,
- }
- url = '%s/mhssp/api' % YuhuanNorther.ipPort
- token = YuhuanNorther.get_token()
- result = send_url_request_to_yuhuan(
- url = url,
- action = 'obj.interface',
- method = 'cabChargAlarm',
- token = token,
- transdata = json.dumps(eventInfo)
- )
- if result['ret_code'] != '1':
- logger.error('send_dev_event send dev info error,code=%s,desc=%s' % (result['ret_code'], result['data']))
- logger.info('send OK! send_dev_event devNo=%s' % dev['devNo'])
- return result
- def send_url_request_to_yuhuan(url, **kwargs):
- paras = {}
- paras.update(kwargs)
- req = urllib2.Request(url = url, data = parse.urlencode(paras))
- response = urllib2.urlopen(req, timeout = 15)
- return json.loads(response.read())
|