# -*- coding: utf-8 -*- #!/usr/bin/env python import datetime import logging from apps.web.constant import Const from apps.web.device.models import Group, Device from apps.web.eventer.base import FaultEvent, WorkEvent from apps.web.eventer import EventBuilder from apps.web.user.models import MyUser logger = logging.getLogger(__name__) class builder(EventBuilder): def __getEvent__(self, device_event): event_data = self.deviceAdapter.analyze_event_data(device_event['data']) if event_data is None: return None if 'faultCode' in event_data and event_data['faultCode']: return FaultEvent(self.deviceAdapter, event_data) return ChargingKyxnWorkEvent(self.deviceAdapter, event_data) class ChargingKyxnWorkEvent(WorkEvent): def __init__(self, smartBox, event_data): super(ChargingKyxnWorkEvent, self).__init__(smartBox, ) self.curDevInfo = event_data def do(self, **args): logger.info('Kaiyuanxinneng charging event detected, devNo=%s' % (self.device['devNo'],)) try: devInfo = Device.update_port_control_cache(self.device['devNo'], self.curDevInfo) if (not devInfo.has_key('openId')) or devInfo['openId'] is None: return user = MyUser.objects(openId = devInfo['openId'], groupId = self.device['groupId']).first() group = Group.get_group(self.device['groupId']) self.notify_user(user.managerialOpenId if user else '', 'service_complete', **{ 'title': u'您订购的服务已经完成', 'service': u'充电服务(设备编号:%s, 地址:%s)' % (self.device['logicalCode'],group['address']), 'finishTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'remark': u'谢谢您的支持' }) finally: Device.clear_port_control_cache(self.device['devNo'], str(self.curDevInfo['port'])) class ChargingKyxnFault(FaultEvent): def get_desc(self): if self.event_data is None: return '' for line,info in self.event_data.items(): desc = u'第%s路出现了:%s' % (line,Const.EVENT_CODE_DESC.get(info['faultCode'],'')) return desc