# -*- 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)