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