kyxn.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import datetime
  4. import logging
  5. from apps.web.constant import Const
  6. from apps.web.device.models import Group, Device
  7. from apps.web.eventer.base import FaultEvent, WorkEvent
  8. from apps.web.eventer import EventBuilder
  9. from apps.web.user.models import MyUser
  10. logger = logging.getLogger(__name__)
  11. class builder(EventBuilder):
  12. def __getEvent__(self, device_event):
  13. event_data = self.deviceAdapter.analyze_event_data(device_event['data'])
  14. if event_data is None:
  15. return None
  16. if 'faultCode' in event_data and event_data['faultCode']:
  17. return FaultEvent(self.deviceAdapter, event_data)
  18. return ChargingKyxnWorkEvent(self.deviceAdapter, event_data)
  19. class ChargingKyxnWorkEvent(WorkEvent):
  20. def __init__(self, smartBox, event_data):
  21. super(ChargingKyxnWorkEvent, self).__init__(smartBox, )
  22. self.curDevInfo = event_data
  23. def do(self, **args):
  24. logger.info('Kaiyuanxinneng charging event detected, devNo=%s' % (self.device['devNo'],))
  25. try:
  26. devInfo = Device.update_port_control_cache(self.device['devNo'], self.curDevInfo)
  27. if (not devInfo.has_key('openId')) or devInfo['openId'] is None:
  28. return
  29. user = MyUser.objects(openId = devInfo['openId'], groupId = self.device['groupId']).first()
  30. group = Group.get_group(self.device['groupId'])
  31. self.notify_user(user.managerialOpenId if user else '', 'service_complete', **{
  32. 'title': u'您订购的服务已经完成',
  33. 'service': u'充电服务(设备编号:%s, 地址:%s)' % (self.device['logicalCode'],group['address']),
  34. 'finishTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
  35. 'remark': u'谢谢您的支持'
  36. })
  37. finally:
  38. Device.clear_port_control_cache(self.device['devNo'], str(self.curDevInfo['port']))
  39. class ChargingKyxnFault(FaultEvent):
  40. def get_desc(self):
  41. if self.event_data is None:
  42. return ''
  43. for line,info in self.event_data.items():
  44. desc = u'第%s路出现了:%s' % (line,Const.EVENT_CODE_DESC.get(info['faultCode'],''))
  45. return desc