PHP 学习记录 设计实现抢红包系统

抢红包是一个常见的任务,这里作为PHP语言的练习。

一、用例分析。

用户管理:注册、登录。

账户管理:充值、提现。

红包管理:发红包、抢红包、红包超时。

二、实体分析。

实体是真实物体或者虚拟物体,但是是有逻辑意义的。

这里设计了几个实体:用户、账户、银行卡、转账记录、红包、小红包、小红包领取记录、充值提现记录。

用户:描述一个用户基本信息。包括 uid name pwd

账户:存储钱的客观账户。包括 account uid val type

银行卡:抽象的银行账户。包括 cardid pwd

转账记录:描述账户之间交易记录。包括tid 入账账户 出账账户 金额 时间

红包:描述红包信息。包括 bid val uid msg num type 创建时间 超时时间

小红包:描述大红包细分的小红包。包括 mid bid val 领取状态

小红包领取记录:描述小红包被领取情况。包括 mid 领取人uid 领取时间

充值提现记录:描述充值提现记录。 包括 tsid account val type(+/-) time cardid

三、接口

返回结构体格式

{

st  //状态 0、1

err_id:

err_msg:

data: //所有有意义的结果放在data里

}

1、注册 POST /user.php

{

name

pwd

}

2、登录 POST /login.php

{

name

pwd

}

返回设置cookie:  id  token  用来判别身份

3、充值 POST /account/charge.php

{

carid

pwd

val

}

4、提现 POST /account/draw.php

{

carid

val

}

5、查余额 GET /account.php

返回 data=val

6、发红包 POST /bribery.php

{

val  //金额

msg 

num // 消息

type // 1 均分 2 随机

}

返回

data = mid

7 、抢红包 GET /bribery?id=mid

返回

{
  "st": 1,
  "data": {
    "val": "4.48",
    "bribery_status": {
      "uid": "1",
      "name": "1",
      "msg": "恭喜发财",
      "val": "10",
      "type": "2",
      "num": "4",
      "ptime": "2016-08-04 19:25:11",
      "count": 2,
      "status": {
        "2": {
          "val": "4.48",
          "uid": "2",
          "name": "2",
          "time": "2016-08-04 19:27:01"
        },
        "3": {
          "val": "1.25",
          "uid": "3",
          "name": "3",
          "time": "2016-08-04 19:25:42"
        }
      }
    }
  }

}

8、查询领取情况 GET /bribery/st?id=mid

返回

{
  "st": 1,
  "error_id": null,
  "error_msg": null,
  "data": {
    "uid": "1",
    "name": "1",
    "msg": "恭喜发财",
    "val": "10",
    "type": "2",
    "num": "4",
    "ptime": "2016-08-04 19:25:11",
    "count": 2,
    "status": {
      "2": {
        "val": "4.48",
        "uid": "2",
        "name": "2",
        "time": "2016-08-04 19:27:01"
      },
      "3": {
        "val": "1.25",
        "uid": "3",
        "name": "3",
        "time": "2016-08-04 19:25:42"
      }
    }
  }
}

四、实现

1、mysql 使用事务 将转账变更等操作放在一个事务中。不然不能保证统一。

2、关于并发。不用用户抢同一个红包,卡在取到的第一个未领取的红包相同。所以只能有一个人mysql流程可以生效。其他的人要重试,再去抢。

具体实现在github



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值