@qq286531097
2018-01-04T07:21:45.000000Z
字数 2884
阅读 355
b2b2c


syspromotion_lottery(转盘抽奖规则表)
| field | 描述 |
|---|---|
| lottery_id | 活动ID |
| lottery_name | 活动名称 |
| lottery_desc | 活动描述 |
| status | 是否启用('stop'/'active') |
| lottery_type | 0(全部)/1(初始可抽奖)/2(积分兑换) |
| used_platform | 使用平台(0-全场/1-pc/2-wap) |
| lottery_joint_limit | 初始可抽奖次数 |
| lottery_point_num | 兑换抽奖所需积分 |
| lottery_rules | 奖项设置规则 |
syspromotion_lottery_result(转盘抽奖结果列表)
| field | 描述 |
|---|---|
| result_id | 获奖ID |
| lottery_id | 转盘ID(关联字段) |
| user_id | 会员ID |
| loginName | 登录名 |
| lottery_name | 转盘名称(通过主表获得) |
| bonus_type | 奖项设置('custom'自定义/'hongbao'红包/'point'积分) |
| bonus_desc | 奖项描述 |
| prizeInfo | 奖品信息 |
| receiver_name | 收货人姓名 |
| receiver_area | 收货人地区 |
| addr | 收货人详细地址 |
| receiver_zip | 收货人邮编 |
| receiver_phone | 收货人电话 |
输入
Array([lottery_id] => 3[lottery_joint_limit] => 93[last_modified_time] => 1499138818)
获取对应的规则数据(syspromotion_lottery)
$lotteryInfo = app::get('topc')->rpcCall('promotion.lottery.get',$params);
接口输出
Array([lottery_id] => 3[lottery_name] => 配送活动测试[lottery_desc] => 配送活动测试[status] => active[lottery_type] => 0[used_platform] => 1[lottery_joint_limit] => 100[lottery_point_num] => 1[lottery_rules] => Array([0] => Array([bonus_type] => none[bonus_desc] => 感谢您的参与[rate] => 10[color] => #cccccc)[1] => Array([bonus_type] => custom[bonus_desc] => 小红书包[img] => /images/b1/2f/29/e1211.png[is_delivery] => on[rate] => 90[color] => #ff0000))[created_time] => 1499138818[modified_time] => 1499138818)
获得对应的使用次数(redis进行记录)
$jointNum = redis::scene('syspromotion')->get('lottery_joint_limit_'.$user_id.'-'.$data['lottery_id']);
对其中的规则进行重组
foreach ($lotteryInfo['lottery_rules'] as $key => $value) {$arr[$key] = $value['rate'];}
拼凑后的结果为
Array([0] => 10[1] => 90)获得的KEY值为规则ID,value值为对应的概率
核心算法获得对应的规则
调用
$prizeNum = $this->getRand($arr);
核心调用算法
//获取奖项id算法public function getRand($proArr){$result = "";$proSum = array_sum($proArr);foreach ($proArr as $key => $proCur) {$randNum = mt_rand(1, $proSum);if ($randNum <= $proCur) {$result = $key;break;} else {$proSum -= $proCur;}}unset ($proArr);return $result;}
拿到对应的ID后,进行数据拼凑
拼凑后的结果为
Array([user_id] => 76[lottery_id] => 3[bonus_type] => custom[prizeInfo] => Array([bonus_type] => custom[bonus_desc] => 小红书包[img] => /images/b1/2f/29/e1211d10f251ed8e39a69d6a5f060e08bebac7ea.png[is_delivery] => on[rate] => 90[color] => #ff0000[lottery_id] => 3)[lottery_name] => 配送活动测试)
调用对应的接口(发放奖励)(promotion.bonus.issue)
输入为上部拼凑的结果
prizeInfo字段(下属数据进行对应的序列化操作[serialize])其他的字段做对应的拼凑使用Array([bonus_type] => custom[bonus_desc] => 小红书包[is_delivery] => on[img] => /images/b1/2f/29/e1211d10f251ed8e39a69d6a5f060e08bebac7ea.png)实际是对syspromotion_lottery_result进行数据储存使用
最终302跳转页面,以及对应的数据返回
Array([bonus_type] => custom[bonus_desc] => 小红书包[img] => /images/b1/2f/29/e1211d10f251ed8e39a69d6a5f060e08bebac7ea.png[is_delivery] => on[rate] => 90[color] => #ff0000[lottery_joint_limit] => 87[id] => 1[hongbaomoney] => 1)
http返回前端数据格式
{ "success" : TRUE,"message" :{ "bonus_type" : "custom","bonus_desc" : "\u5c0f\u7ea2\u4e66\u5305","img" : "\/images\/b1\/2f\/29\/e1211d10f251ed8e39a69d6a5f060e08bebac7ea.png","is_delivery" : "on","rate" : "90","color" : "#ff0000","lottery_joint_limit" : 86,"id" : 1,"hongbaomoney" : TRUE }, "redirect" : "http:\/\/c.com\/jifen\/public\/index.php\/lottery.html?lottery_id=3" }