huopo.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. # TODO 每家驱动有自己的adapter, eventer, 以及自定义的常亮定义. 需要后续以驱动为包来组织
  4. # 本文件包含霍珀门禁设备的相关定义
  5. import simplejson as json
  6. from typing import TYPE_CHECKING
  7. from apilib.monetary import RMB
  8. from apps import serviceCache
  9. if TYPE_CHECKING:
  10. from typing import Dict
  11. class DefaultParams(object):
  12. DEFAULT_MAX_PARKING = 200
  13. DEFAULT_VIP_MAX_PARKING = 200
  14. DEFAULT_SN_NUM = u"请配置"
  15. DEFAULT_FREE_TIME = 0
  16. DEFAULT_MAX_CONSUME = 0
  17. # 四个常量
  18. SIGN = "1"
  19. DUTOU_NUM = '1'
  20. STAY_NUM = '0'
  21. AUTH_NUM = '0'
  22. INSTRUCT_FORMAT = "#{snNum},1,{dutou},{auth},{stay}@"
  23. class CacheKeyTemplate(object):
  24. PARKING_KEY_TEMPLATE = "parking-num-{groupId}_service"
  25. class HuopoCacheMgr(object):
  26. @classmethod
  27. def get_parking_cache(cls, group_id):
  28. # type: (basestring)->Dict
  29. cache_key = CacheKeyTemplate.PARKING_KEY_TEMPLATE.format(groupId = group_id)
  30. cache_value = serviceCache.get(cache_key)
  31. if cache_value:
  32. return json.loads(cache_value)
  33. else:
  34. return None
  35. @classmethod
  36. def set_parking_cache(cls, group_id, value):
  37. # type: (basestring, Dict)->Dict
  38. cache_key = CacheKeyTemplate.PARKING_KEY_TEMPLATE.format(groupId = group_id)
  39. serviceCache.set(cache_key, json.dumps(value))
  40. class Caculater(object):
  41. def __init__(self, duration, package):
  42. """
  43. 价格计算器
  44. :param duration:
  45. :param package:
  46. """
  47. self._duration = duration
  48. self._cycleHour, self._cyclePrice = int(package.get("maxHour", 0)), RMB(package.get("price", 0))
  49. assert self._cycleHour and self._cyclePrice
  50. @property
  51. def cycle(self):
  52. """
  53. 计费周期
  54. :return:
  55. """
  56. cycleSecond = self._cycleHour * 3600
  57. return self._duration // cycleSecond + int(bool(self._duration % cycleSecond))
  58. def caculate(self):
  59. return self._cyclePrice * self.cycle