Exemplo n.º 1
0
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
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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())
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
def get_user_battery(username):
    battery = Battery.get(Battery.user == username)
    battery_record = BatteryRecord.get(battery=battery, situation="借用中")
    return battery, battery_record