def withdraw(acc_data): ''' 取款,显示余额,判断是否可以取款,记录日志 :param acc_data: user_data :return: ''' # 根据用户id 打印余额信息 account_data = accounts.load_balance(acc_data['account_id']) balance_info = '''---------余额信息---------\033[33;1m Credit: %s Balance: %s \033[0m''' % (account_data['credit'], account_data['balance']) print(balance_info) # RETURN_FLAG = False while True: print("\033[32;1m --------Tips press [b] to back!--------\033[0m") withdraw_amount = input("请输入取款金额>>>:".strip()) # 根据用户输入,获取为 b 返回上一级 if withdraw_amount == 'b': return True # 获取输入金额是否大于0并且为数字,进行取款操作,并记录日志 elif len(withdraw_amount) > 0 and withdraw_amount.isdigit: curr_balance = transaction.make_transaction( transaction_logger, account_data, 'withdraw', withdraw_amount) time.sleep(1) # 解决数据返回bug # print(curr_balance) if curr_balance: print("\033[32;1m您当前的余额为:%s\033[0m" % curr_balance['balance']) else: print("\033[31;1m输入格式错误,只允许输入数字,或 按 [b] 返回!\033[0m") continue
def get_user_bill(account_id): ''' 获取用户账单 :param account_id: :return: ''' i = datetime.datetime.now() # 当前时间 year_month = "%s" % (datetime.datetime.strftime(i, "%Y-%m")) # 帐单年月 account_data = accounts.load_balance(account_id) # 获取帐户信息 balance = account_data["balance"] # 可用额度 credit = account_data["credit"] # 信用额度 if i.day != settings.BILL_DAY: print("\033[31;1mToday is not the bill generation day!\033[0m") # return # 此处为了演示,先注释 # 判断额度,判定是否提示还款 if balance >= credit: repay_amount = 0 bill_info = "Account [\033[32;1m%s\033[0m] needn't to repay." % account_id else: repay_amount = credit - balance bill_info = "Account [\033[32;1m%s\033[0m] need to repay [\033[33;1m%s\033[0m]" \ % (account_id, repay_amount) print(bill_info) log_path = db_handler.db_handler(settings.LOG_DATABASE) bill_log = "%s/%s.bills" % (log_path, account_id) # 记录账单信息 with open(bill_log, "a+") as f: f.write("bill_date: %s account_id: %s need_repay: %d\n" % (year_month, account_id, repay_amount))
def save(acc_data): ''' 用户存款操作 :param acc_data: :return: ''' # 获取当前余额信息 account_data = accounts.load_balance(acc_data['account_id']) balance_info = '''---------余额信息---------\033[33;1m Credit: %s Balance: %s \033[0m''' % (account_data['credit'], account_data['balance']) print(balance_info) while True: print("\033[32;1m --------Tips press [b] to back!--------\033[0m") # 获取存入金额 save_amount = input("请输入存款金额>>>:".strip()) if save_amount == 'b': return True # 判断存入金额是否为大于0的数字 elif len(save_amount) > 0 and save_amount.isdigit: # 进行存款操作 curr_balance = transaction.make_transaction( transaction_logger, account_data, 'save', save_amount) time.sleep(1) # print(curr_balance) if curr_balance: print("\033[32;1m您当前的余额为:%s\033[0m" % curr_balance['balance']) else: print("\033[31;1m输入格式错误,只允许输入数字,或 按 [b] 返回!\033[0m") continue
def repay(acc_data): ''' 还款 :param acc_data: user_data :return: ''' # 打印余额信息 account_data = accounts.load_balance(acc_data['account_id']) balance_info = '''---------余额信息---------\033[33;1m Credit: %s Balance: %s \033[0m''' % (account_data['credit'], account_data['balance']) print(balance_info) while True: print("\033[32;1m --------Tips press [b] to back!--------\033[0m") repay_amount = input("请输入您的还款金额".strip()) if repay_amount == 'b': return True # 判断 还款金额是否为大于0的数字,进行还款交易操作 elif len(repay_amount) > 0 and repay_amount.isdigit: curr_balance = transaction.make_transaction( transaction_logger, account_data, 'repay', repay_amount) if curr_balance: print("\033[32;1m您当前的余额为:%s\033[0m" % curr_balance['balance']) else: print("\033[31;1m输入格式错误,只允许输入数字,或 按 [b] 返回!\033[0m") continue
def transfer(acc_data): ''' 用户转账操作 :param acc_data: :return: ''' # 打印余额 account_data = accounts.load_balance(acc_data['account_id']) balance_info = '''---------余额信息---------\033[33;1m Credit: %s Balance: %s \033[0m''' % (account_data['credit'], account_data['balance']) print(balance_info) while True: # print("\033[32;1m --------Tips press [b] to back!--------\033[0m") # 获取 要转入账户ID recv_id = input("\033[32;1m请输入要转入的账户ID>>>:\033[0m".strip()) if auth.check_account( recv_id): # True return account_data 判断接收账户是否存在和过期 recv_acc_data = auth.check_account(recv_id) # print("recv_acc_data",recv_acc_data) if recv_acc_data: # 被转入账户存在,则获取转入金额 print( "\033[32;1m --------Tips press [b] to back!--------\033[0m" ) trans_amount = input("\033[33;1m请输入转账金额>>>:\033[0m") if trans_amount == 'b': return True # 判断要转出金额的输入是否为小于 当前余额的数字 elif float(trans_amount) < account_data[ 'balance'] and trans_amount.isdigit(): # 进行转账操作 curr_balance = transaction.make_transaction( transaction_logger, account_data, 'transfer', trans_amount) # 记录转账日志 transaction.make_transaction(transaction_logger, recv_acc_data, 'receive', trans_amount) # 转账后显示余额 print("您当前的余额为:%s" % curr_balance['balance']) time.sleep(1) return True else: print("您输入的金额[%s]过大或者不符合输入要求,请重新输入不超过您余额[%s]的额度" % (trans_amount, account_data['balance'])) continue else: print("\033[31;1m您输入的账户不存在,请重新输入\033[0m") continue
def payApi(amount): ''' 交易接口,提供给其他消费方式调用 :param amount: :return: ''' amount = int(amount) acc_data = get_user_data() # print("\033[42;1m payApi \033[0m",acc_data) # 根据获取到的用户id 获取用户数据 account_data = accounts.load_balance(acc_data['account_id']) # 判断交易金额 是否大于,交易大于0 则进行交易操作 if amount > 0: new_balance = transaction.make_transaction(transaction_logger, account_data, 'pay', amount) if new_balance: return True else: print("你的输入 [%s] 有误,请输入数字金额" % amount) return None