# -*- coding: utf-8 -*- #!/usr/bin/env python # TODO 每家驱动有自己的adapter, eventer, 以及自定义的常亮定义. 需要后续以驱动为包来组织 # 本文件包含霍珀门禁设备的相关定义 import simplejson as json from typing import TYPE_CHECKING from apilib.monetary import RMB from apps import serviceCache if TYPE_CHECKING: from typing import Dict class DefaultParams(object): DEFAULT_MAX_PARKING = 200 DEFAULT_VIP_MAX_PARKING = 200 DEFAULT_SN_NUM = u"请配置" DEFAULT_FREE_TIME = 0 DEFAULT_MAX_CONSUME = 0 # 四个常量 SIGN = "1" DUTOU_NUM = '1' STAY_NUM = '0' AUTH_NUM = '0' INSTRUCT_FORMAT = "#{snNum},1,{dutou},{auth},{stay}@" class CacheKeyTemplate(object): PARKING_KEY_TEMPLATE = "parking-num-{groupId}_service" class HuopoCacheMgr(object): @classmethod def get_parking_cache(cls, group_id): # type: (basestring)->Dict cache_key = CacheKeyTemplate.PARKING_KEY_TEMPLATE.format(groupId = group_id) cache_value = serviceCache.get(cache_key) if cache_value: return json.loads(cache_value) else: return None @classmethod def set_parking_cache(cls, group_id, value): # type: (basestring, Dict)->Dict cache_key = CacheKeyTemplate.PARKING_KEY_TEMPLATE.format(groupId = group_id) serviceCache.set(cache_key, json.dumps(value)) class Caculater(object): def __init__(self, duration, package): """ 价格计算器 :param duration: :param package: """ self._duration = duration self._cycleHour, self._cyclePrice = int(package.get("maxHour", 0)), RMB(package.get("price", 0)) assert self._cycleHour and self._cyclePrice @property def cycle(self): """ 计费周期 :return: """ cycleSecond = self._cycleHour * 3600 return self._duration // cycleSecond + int(bool(self._duration % cycleSecond)) def caculate(self): return self._cyclePrice * self.cycle