from db import db_handler

# 提现接口
def withdraw_interface(name, money):  # 定义提现接口,传入name与money参数

    user_dic = db_handler.select(name)
    # 从数据库模块下面提取查找文件函数功能,传入name
    # 拿到返回值赋值给便连忙user_dic

    money2 = money * 1.05
    # 钱2 = 提取的钱x1.05 (加了手续费)

    money3 = money * 0.05

    if user_dic['balance'] >= money2:
        # 如果用户信息字典中的额度 大于 提现与手续费之和

        user_dic['balance'] -= money2
        # 把用户信息字典中的额度 减去 提现与手续费之和的结果赋值给用户信息字典

        info = '用户:[%s] 提现:[%s¥],手续费:[%s]!' % (name, money, money3)  # info接收要打印出去的用户提现信息
        user_dic['flow'].append(info)  # 在用户流水列表中添加流水信息

        db_handler.save(user_dic)
        # 在数据库模块下面的保存功能函数中,存入最新的字典信息
        return True, info  # 返回 info接收要打印出去的用户提现信息
    else:
        return False, '尊敬的用户,您的余额不足,请充值!'

# 转账接口
def transfer_interface(from_name, to_name, money):
    # (传入来自用户,给谁,钱数的整型)

    # 1.先查找给谁的用户名是否存在
    to_user_dic = db_handler.select(to_name)
    # 查找给谁的用户名是否存在 将返回结果(用户信息字典/None)给变量名to_user_dic

    if not to_user_dic:
        # 如果to_user_dic接收到的返回值是None,说明目标用户信息不存在
        # if not to_user_dic等同于if true,执行后续代码
        return False, '目标用户不存在!'
        # 返回False给前端flag,打印'目标用户不存在!'

    # 2.查找给谁的用户名是否存在,并拿到返回值,用户信息字典中的余额
    from_user_dic = db_handler.select(from_name)
    # 查找给谁的用户名是否存在,并拿到返回值,

    if from_user_dic['balance'] >= money:
        # 如果用户信息字典中的balance作为K对应的值 大于等于 输入的money整型

        from_user_dic['balance'] -= money
        # 将来自用户的信息字典中 balance作为K对应的值 减去 money整型,重新赋值给from_user_dic['balance']的值
        to_user_dic['balance'] += money
        # 将目标用户的信息字典中 balance作为K对应的值 加上 money整型,重新赋值给to_user_dic['balance']的值

        # 添加流水

        info_from_user = '转账成功,用户[%s]转账给用户[%s] %s $!' % (from_name, to_name, money)  # info接收要打印出去的用户提现信息
        info_to_user = '接收转账,用户[%s]转账给用户[%s] %s $!' % (from_name, to_name, money)  # info接收要打印出去的用户提现信息

        from_user_dic['flow'].append(info_from_user)  # 在用户流水列表中添加流水信息
        to_user_dic['flow'].append(info_from_user)  # 在用户流水列表中添加流水信息

        db_handler.save(from_user_dic)
        # 调用数据模块下面的save保存功能函数,存入修改过balance值的 来源 用户信息字典
        db_handler.save(to_user_dic)
        # 调用数据模块下面的save保存功能函数,存入修改过balance值的 目标 用户信息字典

        return True, info_from_user
    else:
        return False, '尊敬的用户,您的余额不足,请充值!'
        # 如果用户信息字典中的balance作为K对应的值 (没有)大于等于 输入的money整型
        # 说明来源用户的余额不足,无法完成转账

# 还款接口
def repay_interface(name, money):  # 定义还款接口
    user_dic = db_handler.select(name)  # 在数据模块中调出name的路径,拿到返回值用户信息字典
    user_dic['balance'] += money  # 用户信息字典中的余额 = 用户信息字典中的余额 + money整型还款金额
    db_handler.save(user_dic)  # 调用数据模块下面的保存功能函数,保存更新的用户信息字典
    return '还款[%s]成功!' % money  # 返回还款额数

# 流水接口
def check_flow_interface(name):  # 定义查看流水接口功能函数
    user_dic = db_handler.select(name)  # 使用数据库模块里面的查找用户名路径函数
    # 拿到返回值 用户信息字典 赋值给变量名 user_dic
    return user_dic['flow']
    # 返回用户信息字典中以flow(流水)作为K的值

# 查询余额接口
def check_balance_interface(name):
    user_dic = db_handler.select(name)
    return user_dic['balance']

# 支付接口
def pay_interface(name, cost):  # 定义支付功能函数,传参(用户姓名,商品总额)
    user_dic = db_handler.select(name)  # 调用db数据模块下面的查询路径函数,得到返回值(用户信息字典)
    if user_dic['balance'] >= cost:  # 如果用户信息字典中的余额 大于等于 商品总额
        user_dic['balance'] -= cost  # 用户信息字典中的余额 减去 商品总额 再赋值给 用户信息字典中的余额

        user_dic['shopping_cart'] = {} # 支付过后,清空购物车

        db_handler.save(user_dic)  # 调用db数据模块的保存功能函数,存入用户更新了余额的信息字典
        return True, '支付成功!'  # 返回给外界 True,'支付成功!'
    else:  # 其他情况,即余额小于商品总额的情况
        return False, '消费失败!'  # 返回给外界 False,'消费失败!'

入门项目 A5-1 interface-bank 第三方接口1的更多相关文章

  1. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  2. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  3. Java Web系统经常使用的第三方接口

    1. Web Service 接口 1.1 接口方式说明和长处 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为client去调用第三方提供的接口时,大部分时候都是使用 Web  Se ...

  4. Java Web系统常用的第三方接口

    1.    Web Service 接口 1.1 接口方式说明和优点 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为客户端去调用第三方提供的接口时,大部分时候都是使用 Web  Se ...

  5. 使用HttpClient调用第三方接口

    最近项目中需要调用第三方的Http接口,这里我用到了HttpClient. 首先我们要搞明白第三方接口中需要我们传递哪些参数.数据,搞明白参数以后我们就可以使用HttpClient调用接口了. 1.调 ...

  6. SpringMVC 结合HttpClient调用第三方接口实现

    使用HttpClient 依赖jar包 1:commons-httpclient-3.0.jar 2:commons-logging-1.1.1.jar 3:commons-codec-1.6.jar ...

  7. 30分钟入门Java8之默认方法和静态接口方法

    30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...

  8. 根据ip地址从第三方接口获取详细的地理位置

    最近项目某个功能需要根据ip地址从第三方接口获取详细的地理位置,从网上找了很多例子,主要接口有新浪的,淘宝的,腾讯的.试了淘宝的,如果是数量级小的还可以,如果数量级达到上十万级就速度慢了,会导致系统崩 ...

  9. ASP.NET和支付宝合作开发第三方接口的注意事项

    最近公司和支付宝合作开发第三方接口的项目,这里把过程中需要注意的地方说明一下: 前提:一般来说单个银行不接收个人或私企开通支付接口.因此,和第三方支付公司合作,签订合约开放接口就是通行的做法. 流程: ...

  10. 调用支付宝第三方接口(沙箱环境) SpringMVC+Maven

    一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登陆

随机推荐

  1. Poj1258 Agri-Net (最小生成树 Prim算法 模板题)

    题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One ...

  2. kubernetes1.4新特性(一):支持sysctl命令

    sysctl是一个允许改变正在运行中的Linux系统内核参数的接口.可以通过sysctl修改Linux系统内核中的TCP/IP 堆栈和虚拟内存系统的高级选项,而且不需要重新启动Linux系统,就可以实 ...

  3. Shift键的三个妙用!Word又现神操作!

    1.Shift+Alt+上下方向键 :调整段落顺序 同时按这三个键,能够调整段落的顺序,也可以用来调整表格中的行序. 2.Shift+F3:英文大写/小写/首字母大写,这三种模式切换 PS:如果中间夹 ...

  4. Consul 介绍

    Consul 介绍 Consul是一个分布式.高可用性,在基础设施中发现和配置服务的工具. 主要功能 服务发现 通过DNS或HTTP接口使得消费者发现服务,应用程序可以轻松找到所依赖的服务. 健康检查 ...

  5. SpringBoot执行定时任务

    1.在启动类中加入@EnableScheduling来开启定时任务. package com.example.demo; import org.springframework.boot.SpringA ...

  6. Java 基础 类加载器和双亲委派机制 学习笔记

    转自博客:https://blog.csdn.net/weixin_38118016/article/details/79579657 文章不是我写的,但是感觉写的挺通俗易懂的,然后防止以后丢失,就转 ...

  7. Intellj IDEA光标问题

    Intellj IDEA光标为insert状态,无法删除内容以前用得是社区版的IDEA,今天装了14版本的,结果导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标, ...

  8. 【Python】【运算符】

    [取模] 所谓取模运算,就是计算两个数相除之后的余数,符号是%.如a % b就是计算a除以b的余数.用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得a = n * ...

  9. JxBrowser之一:Java嵌入Chrome浏览器

    1.JxBrowser是一个让Java可以轻松集成Chrome浏览器的跨平台库:一般用于网络爬虫或者网页自动化测试等. 官方网址:https://jxbrowser.support.teamdev.c ...

  10. 第 8 章 容器网络 - 066 - Weave 如何与外网通信?

    Weave 与外网通信 weave 是一个私有的 VxLAN 网络,默认与外部网络隔离. 外部网络如果要访问到 weave 中的容器:1.首先将主机加入到 weave 网络.2.然后把主机当作访问 w ...