# -*- coding: utf-8 -*- # !/usr/bin/env python from library.validator.fields import IntegerField, BoolField, FloatField, ListField, DictField from library.validator import Validator from apilib.systypes import IntEnum from apps.web.constant import Const STATUS_MAP = { "01": Const.DEV_WORK_STATUS_IDLE, "02": Const.DEV_WORK_STATUS_WORKING, "03": Const.DEV_WORK_STATUS_FORBIDDEN, "04": Const.DEV_WORK_STATUS_FAULT, } REASON_MAP = { 0x00: u"订购额度使用完毕", 0x01: u"充电插头脱落,终止充电", 0x02: u"电量已充满,设备自动停止", 0x03: u"设备端口故障,终止充电", 0x04: u"充电功率超限,终止充电", 0x05: u"刷卡结束", 0x06: u"未检测到充电设备,终止充电", 0x07: u"远程停止充电", 0x08: u"设备烟雾告警,终止充电", -2: u"检测未在充电状态,主动关闭订单" } class BillingType(IntEnum): ELEC = 1 TIME = 0 class CARD_STATUS(IntEnum): SUCCESS = 1 ILLEGAL = 3 FROZEN = 4 class CARD_OPT(IntEnum): DEDUCT = 1 REFUND = 3 class KeHangPowerStepValidator(Validator): power = IntegerField(required=True, max_value=5000, strict=False) ratio = IntegerField(required=True, min_value=0, max_value=100, strict=False) class KeHangDeviceSettingsValidator(Validator): maxPower = IntegerField(min_value=0, max_value=0xFFFF, required=True, strict=False) cardCost = FloatField(min_value=0, max_value=20, required=True, strict=False) # 单位转换 coin1Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) coin2Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) coin3Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) card1Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) card2Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) card3Time = IntegerField(min_value=0, max_value=999, required=True, strict=False) isCardRefund = BoolField(required=True, strict=False) isAutoStop = BoolField(required=True, strict=False) isFree = BoolField(required=True, strict=False) isCoinEnable = BoolField(required=True, strict=False) isCardEnable = BoolField(required=True, strict=False) voice = IntegerField(min_value=0, max_value=8, required=True, strict=False) minConsume = FloatField(min_value=0, max_value=2.2, required=True, strict=False) floatPower = FloatField(min_value=0, max_value=99.9, required=True, strict=False) floatTime = IntegerField(min_value=120, max_value=7200, required=True, strict=False) noloadPower = FloatField(min_value=0, max_value=30.0, required=True, strict=False) noloadTime = IntegerField(min_value=3, max_value=999, required=True, strict=False) consumeType = IntegerField(min_value=0, max_value=1, required=True, strict=False) billingType = IntegerField(min_value=0, max_value=2, required=True, strict=False) powerStep = ListField(field=DictField(validator=KeHangPowerStepValidator), max_length=6, min_length=5) def suit_data(self): if not self.validated_data: return {} data = self.validated_data.copy() data["cardCost"] = int(data["cardCost"] * 10) data["floatPower"] = int(data["floatPower"] * 10) data["noloadPower"] = int(data["noloadPower"] * 10) data["minConsume"] = int(data["minConsume"] * 10) return data