123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import logging
- import uuid
- from apilib.monetary import RMB, VirtualCoin
- 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, RechargeRecord
- 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 or 'cmdCode' not in event_data:
- return None
- if event_data.get('cmdCode') == 100 and event_data.has_key('type'):
- return ChargingTOUSHIWorkEvent(self.deviceAdapter, event_data)
- if event_data.get('cmdCode') == 100:
- return TOUSHIFaultEvent(self.deviceAdapter, event_data)
- class TOUSHIFaultEvent(FaultEvent):
- def do(self, **args):
- try:
- group = Group.get_group(self.device['groupId'])
- lineInfo = Device.get_dev_control_cache(self.device['devNo'])
- # 确认是用户不当引起的故障
- if lineInfo:
- openId = lineInfo.get('openId')
- if not openId:
- logger.error("Array has an error,lose openId")
- return
- user = MyUser.objects(openId = openId, groupId = self.device['groupId']).first()
- coins = RMB(lineInfo['coins'])
- try:
- MyUser.get_collection().update({'openId': lineInfo['openId'], 'groupId': self.device['groupId']},
- {'$inc': {'balance': coins.mongo_amount}})
- except Exception, e:
- logger.error('feedback coins error=%s' % e)
- return
- # 添加一条充值记录
- orderNo = str(uuid.uuid4())
- try:
- newRcd = RechargeRecord(orderNo = orderNo,
- coins = VirtualCoin(coins), openId = lineInfo['openId'],
- groupId = self.device['groupId'],
- devNo = self.device['devNo'], logicalCode = self.device['logicalCode'],
- ownerId = self.device['ownerId'], groupName = group['groupName'],
- groupNumber = self.device['groupNumber'], address = group['address'],
- wxOrderNo = u'设备退币',
- devTypeName = self.device.devTypeName, nickname = '',
- result = 'success', via = 'refund')
- newRcd.save()
- except Exception, e:
- logger.exception('update record for feedback coins error=%s,orderNo=%s' % (e, orderNo))
- # 提示用户关闭盖子或者洗衣机故障
- self.notify_user(user.managerialOpenId if user else '', 'refund_coins', **{
- 'title': u'本次您订购的{}洗衣未成功进行,金币已经退给您的账户,请查看洗衣机是否关闭机盖或者联系管理员处理哦'.format(lineInfo['washName']),
- 'backCount': u'金币:{}'.format(coins),
- 'finishTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- })
- # 不是人为引起的
- else:
- self.notify_dealer('device_fault', **{
- 'title': u'注意!注意!您的设备发生故障',
- 'device': u'组号::%s, 二维码编号:%s' % (self.device['groupNumber'], self.device['logicalCode']),
- 'location': u'组名称:%s, 地址:%s' % (group['groupName'], group['address']),
- 'fault': self.event_data['faultReason'],
- 'notifyTime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- })
- finally:
- Device.update_dev_control_cache(self.device['devNo'], {})
- class ChargingTOUSHIWorkEvent(WorkEvent):
- def do(self, **args):
- if self.event_data['faultCode'] == '01':
- try:
- lineInfo = Device.get_dev_control_cache(self.device['devNo'])
- openId = lineInfo.get('openId')
- if not openId:
- logger.error("Array has an error,lose openId")
- return
- user = MyUser.objects(openId = openId, groupId = self.device['groupId']).first()
- managerialOpenId = user.managerialOpenId if user else ''
- if not managerialOpenId:
- return
- group = Group.get_group(self.device['groupId'])
- self.notify_user(managerialOpenId, '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'谢谢您的支持'
- })
- except Exception, e:
- logger.exception('you have an error in ChargingTOUSHIWorkEvent,error info is {}' % (e))
- finally:
- Device.update_dev_control_cache(self.device['devNo'], {})
|