123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- # -*- coding: utf-8 -*-
- from apps.web.core.adapter.base import *
- from apps.web.device.models import Device
- class DepartmentShower(SmartBox):
- def __init__(self, device):
- super(DepartmentShower, self).__init__(device)
-
- # 设备上报事件
- def analyze_event_data(self, data):
- pass
-
- def support_count_down(self,openId=None,port=None):
- return True
-
- def test(self, coins):
- return MessageSender.send(self.device, DeviceCmdCode.PAY_MONEY, {'IMEI': self._device['devNo'], 'duration': 60})
- def start_device(self, package, openId, attachParas):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.GET_DEVINFO, {'IMEI': self._device['devNo']})
-
- if devInfo.has_key('rst') and devInfo['rst'] != 0:
- raise ServiceException({'result': 2, 'description': u'淋浴器正在玩命找网络,建议您稍后再试或者试试刷卡使用'})
-
- if devInfo['remainder_time'] > 0 and devInfo.has_key('startMode') and devInfo['startMode'] == 'card':
- raise ServiceException({'result': 2, 'description': u'淋浴器正在忙,并且使用的是卡,不允许刷卡的时候再扫码使用!'})
-
- lastRemainderTime = devInfo['remainder_time']
- duration = int(package['time']*60)
- coins = float(package['coins'])
-
- devInfo = MessageSender.send(device = self.device,
- cmd = DeviceCmdCode.PAY_MONEY,
- payload = {
- 'IMEI': self._device['devNo'], 'duration': duration
- },
- timeout = MQTT_TIMEOUT.START_DEVICE)
- if devInfo.has_key('rst') and devInfo['rst'] != 0:
- if devInfo['rst'] == 3:
- raise ServiceException({'result': 2, 'description': u'淋浴器正在刷卡使用,,请您等刷卡使用结束后,再使用'})
-
- raise ServiceException({'result': 2, 'description': u'淋浴器正在玩命找网络,您的金币还在,重试不会扣款,建议您稍后再试或者试试刷卡使用'})
-
- devCtrInfo = Device.get_dev_control_cache(devNo = self._device['devNo'])
- if devCtrInfo.has_key('openId') and devCtrInfo['openId'] != openId:
- devCtrInfo['coins'] = coins
- devCtrInfo['needTime'] = duration/60.0
- else:
- if ( not devCtrInfo.has_key('coins') ) or ( lastRemainderTime == 0.0 ):
- devCtrInfo['coins'] = coins
- else:
- devCtrInfo['coins'] += coins
-
- if ( not devCtrInfo.has_key('needTime') ) or ( lastRemainderTime == 0.0 ):
- devCtrInfo['needTime'] = duration/60.0
- else:
- devCtrInfo['needTime'] += duration/60.0
- devCtrInfo.update({
- 'openId': openId,
- 'status': Const.DEV_WORK_STATUS_WORKING,
- 'finishedTime': int(time.time()) + devInfo['remainder_time']
- })
-
- Device.update_dev_control_cache(self._device['devNo'], devCtrInfo)
- return devInfo
-
- def recharge_card(self, cardNo, money, orderNo=None):
- try:
- devInfo = MessageSender.send(self.device, 303,
- {'IMEI': self._device['devNo'], "cardNo": cardNo, 'balance': money * 100})
- if devInfo['rst'] != 0:
- if devInfo['rst'] == ErrorCode.DEVICE_CONN_FAIL:
- return {
- 'result': ErrorCode.DEVICE_CONN_FAIL,
- 'description': u'当前淋浴器正在玩命找网络,请您稍候再试'
- }, None
- else:
- return {
- 'result': ErrorCode.IC_RECHARGE_FAIL,
- 'description': u'当前充值的卡正在淋浴器上使用,无法进行充值'
- }, None
- return {
- 'result': ErrorCode.SUCCESS,
- 'description': ''
- }, None
- except Exception as e:
- logger.exception(e)
- return {
- 'result': ErrorCode.EXCEPTION,
- 'description': e.message
- }, None
-
- def set_dev_setting(self,setConf):
- minuteFee = setConf['minuteFee']
- devInfo = MessageSender.send(self.device, 306, {'IMEI': self._device['devNo'], "minuteFee": minuteFee})
-
- if 'rst' in devInfo and devInfo['rst'] != 0:
- if devInfo['rst'] == -1:
- raise ServiceException({'result': 2, 'description': u'当前淋浴器正在玩命找网络,请您稍候再试'})
- else:
- raise ServiceException({'result': 2, 'description': u'当前淋浴器忙,无法进行充值'})
-
- devObj = Device.objects.get(devNo = self._device['devNo'])
- devObj.otherConf['minuteFee'] = minuteFee
- devObj.save()
-
- return devInfo
-
- def get_dev_setting(self):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.GET_DEVINFO, {'IMEI': self._device['devNo']})
- if 'rst' in devInfo and devInfo['rst'] != 0:
- if devInfo['rst'] == -1:
- raise ServiceException({'result': 2, 'description': u'当前淋浴器正在玩命找网络,请您稍候再试'})
- else:
- raise ServiceException({'result': 2, 'description': u'当前淋浴器忙,无法进行充值'})
-
- return {'minuteFee':devInfo['minuteFee']}
-
- def set_device_function_param(self,request,lastSetConf):
- if request.POST.has_key('minuteFee'):
- lastSetConf.update({'minuteFee': int(request.POST.get('minuteFee', 0))})
- self.set_dev_setting(lastSetConf)
-
- def get_left_time(self):
- devCtrInfo = Device.get_dev_control_cache(devNo = self._device['devNo'])
- if (devCtrInfo is None) or (not devCtrInfo.has_key('status')) or (devCtrInfo['status'] == Const.DEV_WORK_STATUS_IDLE):
- return 0.0,0.0
- if not devCtrInfo.has_key('needTime'):
- return 0.0,0.0
-
- needTime = devCtrInfo['needTime']
-
- devInfo = MessageSender.send(self.device, DeviceCmdCode.GET_DEVINFO, {'IMEI': self._device['devNo']})
- if devInfo.has_key('rst') and devInfo['rst'] != 0:
- raise ServiceException({'result': 2, 'description': u'淋浴器正在玩命找网络,建议您稍后再试或者试试刷卡使用'})
-
- leftTime = devInfo['remainder_time']/60.0
- if leftTime <= 0:
- return 0.0,needTime
-
- return leftTime,needTime
-
- def count_down(self,request,dev,agent,group,devType,lastOpenId,port=None):
- surplus, sumtime = self.get_left_time()
- orderProcessing = False
- if surplus == 0.0 and sumtime == 0.0:
- orderProcessing = False
- return JsonResponse(
- {
- 'result': 1,
- 'description': '',
- 'payload': {
- 'surplus': surplus,
- 'sum': sumtime,
- 'name': group['groupName'],
- 'address': group['address'],
- 'code': devType.get('code'),
- 'orderProcessing': orderProcessing,
- 'logicalCode': dev['logicalCode'],
- 'user': 'me' if lastOpenId == request.user.openId else 'notme',
- 'agentFeatures': agent.features,
- }
- })
-
- def stop(self,port=None):
- devInfo = MessageSender.send(self.device, DeviceCmdCode.STOP_DEVICE, {'IMEI': self._device['devNo']})
- if devInfo.has_key('rst') and devInfo['rst'] != 0:
- return JsonResponse({"result": 0, "description": u'网络连接异常,停止设备失败,请您重新尝试停掉设备', "payload": ''})
- devInfo['remainder_time'] = int(devInfo['remainder_time'] / 60.0)
- return devInfo
-
- #按照秒来退费
- def calc_stop_back_coins(self,totalFee,remainderTime,totalTime):
- refundFee = round(totalFee * (float(remainderTime) / (totalTime*60.0)),2)
- if refundFee > totalFee:
- refundFee = totalFee
- if refundFee <= 0.0:
- refundFee = 0.00
-
- return refundFee
|