123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import json
- import logging
- import requests
- from typing import TYPE_CHECKING
- from apps.web.agent.models import Agent
- from apps.web.api.models import APIServiceStartRecord
- from apps.web.device.models import Group, Device
- from apps.web.dealer.models import Dealer
- if TYPE_CHECKING:
- from apps.web.device.models import DeviceDict
- logger = logging.getLogger(__name__)
- def notify_event_to_north(dealer, device, level, desc, dataDict = None):
- # type: (Dealer, DeviceDict, str, str, dict)->None
- agent = Agent.objects.get(id = dealer.agentId)
- if (not agent.openAPI) or (agent.domain == ''):
- return
- group = Group.get_group(device.groupId)
- paras = {'level': level, 'description': desc,
- 'sign': agent.mySign, 'channel': str(dealer.id),
- 'createTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
- 'deviceCode': device.logicalCode,
- 'groupName': group['groupName'],
- 'address': group['address']}
- if dataDict is not None:
- paras.update(dataDict)
- data = json.dumps(paras)
- response = requests.post(url = "https://%s/notify/fault" % agent.domain, data = data, timeout = 15)
- logger.info(str(response))
- def notify_event_to_north_v2(devNo, dataDict):
- logger.info('start to send notify event')
- try:
- device = Device.objects(devNo=devNo).first()
- if device is None:
- logger.error('device is not defined to send north api, devNo={}'.format(devNo))
- return
- else:
- dealer = Dealer.objects(id=device.ownerId).first()
- if dealer is None:
- logger.error('device is not registered to send north api, devNo={}'.format(devNo))
- return
- else:
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
- return
- else:
- # need Protocol Header Style, full address
- url = dealer.domain
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- if dealer.username == u'18600113016':
- response = requests.post(url=url, json=data, headers={'Content-Type': 'application/json'}, timeout=15)
- else:
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'},
- timeout=15)
- logger.info(str(response))
- except Exception as e:
- logger.error(e)
- def handle_and_notify_event_to_north_cy4(device, dataDict): # type:(DeviceDict, dict) -> None
- try:
- dealer = device.owner
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(device.devNo))
- return
- if 'cy4EventApi' not in dealer.features:
- return
- if dataDict.get('consumeType', '') == 'card':
- APIServiceStartRecord.record_4_cy4_card(dataDict)
- elif dataDict.get('consumeType', '') == 'mobile':
- APIServiceStartRecord.record_4_cy4_mobile(dataDict)
- else:
- return
- url = dealer.domain
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- except Exception as e:
- logger.error(e)
- def handle_and_notify_event_to_north_cy4_new(device, dataDict):
- # TODO 正式上线需要配置到数据库里
- dealer = device.owner
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(device.devNo))
- return
- url = dealer.domain
- # url = "http://0.0.0.0:4000/api/ft_north/get/onlytest"
- # url = "https://test.hchc.vhebi.com/api/response/cyrec"
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- def handle_and_notify_event_to_north_ytb(devNo, dataDict):
- try:
- device = Device.objects(devNo=devNo).first()
- if device is None:
- logger.error('device is not defined to send north api, devNo={}'.format(devNo))
- return
- else:
- dealer = Dealer.objects(id=device.ownerId).first()
- if dealer is None:
- logger.error('device is not registered to send north api, devNo={}'.format(devNo))
- return
- else:
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
- return
- else:
- if 'ytbEventApi' not in dealer.features:
- return
- else:
- logger.info('api push service started! devNo={}'.format(devNo))
- # need Protocol Header Style, full address
- url = dealer.domain
- if 'order' in dataDict:
- dataDict['order'].pop('order_acked')
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- except Exception as e:
- logger.error(e)
- def handle_and_notify_event_to_north_Dc(devNo, dataDict):
- try:
- device = Device.objects(devNo=devNo).first()
- if device is None:
- logger.error('device is not defined to send north api, devNo={}'.format(devNo))
- return
- else:
- dealer = Dealer.objects(id=device.ownerId).first()
- if dealer is None:
- logger.error('device is not registered to send north api, devNo={}'.format(devNo))
- return
- else:
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
- return
- else:
- if 'dcEventApi' not in dealer.features:
- return
- else:
- # need Protocol Header Style, full address
- url = dealer.domain
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- except Exception as e:
- logger.error(e)
- def handle_and_notify_event_to_north_Jh(devNo, dataDict):
- try:
- device = Device.objects(devNo=devNo).first()
- if device is None:
- logger.error('device is not defined to send north api, devNo={}'.format(devNo))
- return
- else:
- dealer = Dealer.objects(id=device.ownerId).first()
- if dealer is None:
- logger.error('device is not registered to send north api, devNo={}'.format(devNo))
- return
- else:
- if dealer.domain == '' or dealer.domain is None:
- logger.error('device is not allowed to send north api, devNo={}'.format(devNo))
- return
- else:
- if 'jhEventApi' not in dealer.features:
- return
- else:
- # need Protocol Header Style, full address
- url = dealer.domain
- data = json.dumps(dataDict)
- logger.info('url=%s, data=%s' % (url, data))
- response = requests.post(url=url, data=data, headers={'Content-Type': 'application/json'}, timeout=15)
- logger.info(str(response))
- except Exception as e:
- logger.error(e)
|