def get_on_load_battery(username=None): if username: battery = Battery.get(user=username, on_loan=True) return battery else: battery = Battery.select().where(Battery.on_loan == True) return battery
def rent_battery(**kwargs): """ modify using status :param kwargs: b_id: battery id owner: user of battery :return: """ serial_number = kwargs["serial_number"] username = kwargs["username"] battery = Battery.get(serial_number=serial_number) # 检查是否已经租用电池 if check_user_on_load(username): raise Error("还未归还电池") # 检查电池状态 if battery.on_loan: raise Error("电池已被租用") # 检查账户状态 virtual_card_service.check_status(username) battery.on_loan = True battery.user = username battery_record_service.add_record(username, battery) return battery.save()
def get_battery(serial_number): """ get battery rent information :param serial_number: battery id :return: information """ battery = Battery.get(Battery.serial_number == serial_number) return battery
def add(**kwargs): """ add new virtual card to database :param kwargs: parameters to insert to database :return: """ serial_number = serial_number_service.get_available_battery_code() battery = Battery.create(serial_number=serial_number, **kwargs) return battery
def get_all_paginate(page, paginate_by, **kwargs): battery = Battery.select() serial_number = kwargs["serial_number"] if serial_number: battery = battery.\ where(Battery.serial_number.regexp(kwargs["serial_number"])) total = battery.count() battery = battery.paginate(page=page, paginate_by=paginate_by) return battery, total
def add_script(): """ add new virtual card to database :return: """ for count in range(0, 800): serial_number = serial_number_service.get_available_battery_code() battery = Battery.create(serial_number=serial_number, ) print(count) print(battery)
def add_repair_report(serial_number): """ apply a repair report :param serial_number: :return: """ battery = Battery.get(serial_number=serial_number) return BatteryReport.create(battery=serial_number, current_owner=battery.user, report_time=datetime.utcnow())
def return_deposit(**kwargs): """ return deposit :param kwargs: card_no: card number :return: """ card_no = kwargs["card_no"] # 获取支付押金订单号 out_trade_no = VirtualCard.get(card_no=card_no).out_trade_no on_loan = Battery.select().where(Battery.user == card_no) if on_loan: raise Error("电池使用中") virtual_card = VirtualCard.get(VirtualCard.card_no == card_no) deposit = virtual_card.deposit if deposit <= 0: raise Error("无可退还押金") else: virtual_card.deposit = 0 result = virtual_card.save() record = ConsumeRecord.create( card=card_no, consume_event="return deposit", consume_date_time=datetime.utcnow(), consume_fee=-deposit, balance=virtual_card.balance) # 记录退款 refund_record = refund_table_service.add( user=kwargs["card_no"], out_trade_no=out_trade_no, type="退虚拟卡押金", value=deposit, ) print("退虚拟卡押金" + str(deposit)) return result, record, refund_record
def return_battery(username, serial_number): battery = Battery.get(serial_number=serial_number) # 通过电池,找到借用中电池记录 battery_records = battery.battery_records battery_record = get_using_record(battery_records) battery_record.return_date = datetime.utcnow() # 30分钟内不允许归还 if convert_timedelta( battery_record.return_date - battery_record.rent_date)\ < BasicConstant.battery_return_min_minutes: raise Error("%s分钟内无法归还" % BasicConstant.battery_return_min_minutes) # 扣款计算 price = calculate_price(battery_record.rent_date, battery_record.return_date) battery_record.price = price battery_record.situation = "已归还" # 更改电池状态 battery.on_loan = False battery.user = None battery.save() battery_record.save() # 扣款 virtual_card_service.consume_virtual_card(card_no=username, amount=price) # 当超出一个月归还,冻结账户 delta = battery_record.return_date - battery_record.rent_date if delta > timedelta(days=BasicConstant.maximum_rent_days): result = virtual_card_service.freeze(battery_record.user, "电池租用超一月") print("result", result) return battery_record
def get_user_battery(username): battery = Battery.get(Battery.user == username) battery_record = BatteryRecord.get(battery=battery, situation="借用中") return battery, battery_record