Raffle.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\model\Jwttoken;
  5. use app\admin\model\Raffle as Raf;
  6. use think\Config;
  7. use think\Db;
  8. use think\Request;
  9. use function fast\e;
  10. /**
  11. * 首页接口
  12. */
  13. class Raffle extends Api
  14. {
  15. protected $noNeedLogin = ['*'];
  16. protected $noNeedRight = ['*'];
  17. protected $userInfo;
  18. /**
  19. * 首页
  20. *
  21. */
  22. public function _initialize()
  23. {
  24. date_default_timezone_set('America/New_York');
  25. $token = $this->request->server('HTTP_TOKEN');
  26. if(empty($token)){
  27. $this->error('请输入Token');
  28. }
  29. $jwt = new Jwttoken();
  30. $info =$jwt->verifyJwt($token);
  31. if($info['status']!=0){
  32. $msg =$info['msg'];
  33. $this->error($msg);
  34. }
  35. $this->userInfo=$info['info'];
  36. parent::_initialize();
  37. }
  38. public function getRaffle()
  39. {
  40. $userinfo =$this->userInfo;
  41. $web=$userinfo['website'];
  42. $list = Db::name('raffle')->where("website='{$web}' and status ='normal' ")->order('id desc')->find();
  43. $data['id']=$list['id'];
  44. $data['website']=$list['website'];
  45. $data['name']=$list['name'];
  46. $data['image']=$list['image'];
  47. $data['prize']=$this->getPrize($list['id'])['new'];
  48. $this->success('',$data);
  49. }
  50. public function getPrize($rid){
  51. $list = Db::name('raprize')->where("r_id='$rid' and status ='normal' ")->order('id desc')->select();
  52. $new=array();
  53. $prize =array();
  54. foreach ($list as $k=>$v){
  55. $new[$k]['id']=$v['id'];
  56. $new[$k]['title']=$v['t_type_name'];
  57. $new[$k]['price']=$v['price'];
  58. if($v['t_type_name']=='CASH'||$v['t_type_name']=='Coupon'){
  59. $str='$';
  60. $new[$k]['price']=$str.$v['price'];
  61. }
  62. if($v['t_type_name']=='DiscountCoupon'){
  63. $str='%';
  64. $new[$k]['price']=$v['price'].$str;
  65. }
  66. $new[$k]['image']=$v['image'];
  67. $prize[$k]=$v;
  68. $prize[$k]['prize']= $new[$k]['price'].' '.$new[$k]['title'];
  69. }
  70. $data['new']=$new;
  71. $data['prize']=$prize;
  72. return $data;
  73. }
  74. //分享增加抽奖次数
  75. public function shareAdd(){
  76. $where=$this->getWhere();
  77. $list = Db::name('rashare')->where($where)->find();
  78. if(empty($list)){
  79. $where['createtime'] =time();
  80. Db::name('rashare')->insertGetId($where);
  81. $this->success('success');
  82. }else{
  83. $this->error('今天已分享');
  84. }
  85. }
  86. //获取积分,抽奖次数
  87. public function getPoints(){
  88. $where=$this->getWhere();
  89. $data['points'] =$this->getUserPoints($where);
  90. $data['nums']=$this->getRanums($where);
  91. $this->success('success',$data);
  92. }
  93. //获取抽奖次数
  94. public function getRanums($where){
  95. $num=5;//抽奖次数 初始5次
  96. $list = Db::name('rashare')->where($where)->find();
  97. if($list){
  98. $num=$num+1;// 分享加1
  99. }
  100. $nums = Db::name('rafflelog')->where($where)->count();
  101. $cnums =$num-$nums;
  102. return $cnums;
  103. }
  104. //获取积分
  105. public function getUserPoints($where){
  106. $params['token']=$this->request->server('HTTP_TOKEN');
  107. $re= make_curl($where,'app-api/user/getUserPoints',$params);
  108. if($re['code']==200){
  109. $point =$re['data']['points'];
  110. }else{
  111. $this->error('error');
  112. return;
  113. }
  114. return $point;
  115. }
  116. public function getWhere(){
  117. $userinfo =$this->userInfo;
  118. $where['uid'] = $userinfo['uid'];
  119. $where['website'] = $userinfo['website'];
  120. $where['r_id'] = input('rid');
  121. if(empty($where['r_id'])){
  122. $this->error('活动ID不能为空');
  123. }
  124. $where['create_day'] =date('Y-m-d');
  125. return $where;
  126. }
  127. //抽奖
  128. public function raffle(){
  129. $info = $this->getWhere();
  130. if(cache($info['uid'])){ //限制抽奖点击频率
  131. $this->error('Click too fast');
  132. }
  133. $ponits = $this->getUserPoints($info);
  134. if($ponits<10){//检测抽奖积分是否足够
  135. $this->error('Insufficient points!');
  136. }
  137. $nums = $this->getRanums($info);
  138. if($nums<1){//查询抽奖次数
  139. $this->error('No lucky draw times!');
  140. }
  141. cache($info['uid'], 1, 3);
  142. $prize_arr = $this->getPrize($info['r_id'])['prize'];
  143. // 把奖品id 设置为键名
  144. $prize_arr = array_combine(array_column($prize_arr, 'id'), $prize_arr);
  145. $arr=array();
  146. foreach($prize_arr as $key => $val)
  147. {
  148. $arr[$val['id']] = $val['probability'];
  149. }
  150. $rid = get_rand($arr); //根据概率获取奖项id
  151. $res['id'] = $prize_arr[$rid]['id']; //中奖ID
  152. $res['result'] = $prize_arr[$rid]['prize']; //中奖项
  153. $data=$prize_arr[$rid];
  154. $data['ra_id']=$data['id'];
  155. unset($data['id']);
  156. unset($data['image']);
  157. unset($data['createtime']);
  158. unset($data['updatetime']);
  159. unset($data['status']);
  160. unset($data['prize']);
  161. $data['createtime']=time();
  162. $data=array_merge($data,$info);
  163. $re=false;
  164. Db::startTrans();
  165. try {
  166. $re = Db::name('rafflelog')->insertGetId($data);
  167. if($re){//向网站传递抽奖数据,并扣除积分
  168. $result = $this->addRafflePrize($info,$data);
  169. if($result['code']==200){
  170. Db::commit();
  171. $this->success('success',$res);
  172. }else{
  173. $this->error();
  174. }
  175. }
  176. } catch (ValidateException $e) {
  177. Db::rollback();
  178. $this->error($e->getMessage());
  179. } catch (PDOException $e) {
  180. Db::rollback();
  181. $this->error($e->getMessage());
  182. } catch (Exception $e) {
  183. Db::rollback();
  184. $this->error($e->getMessage());
  185. }
  186. if ($re) {
  187. $this->success('success',$res);
  188. } else {
  189. $this->error(__('No rows were inserted'));
  190. }
  191. }
  192. //传递数据,并扣除积分
  193. public function addRafflePrize($info,$data){
  194. $url ='app-api/user/addUserPrize';
  195. $data['token']=$this->request->server('HTTP_TOKEN');
  196. $re= make_curl($info,$url,$data);
  197. return $re;
  198. }
  199. //获取抽奖记录
  200. public function getRaffleList(){
  201. $info = $this->getWhere();
  202. $prize_arr = $this->getPrize($info['r_id'])['new'];
  203. $data=array();
  204. $alphabet = "abcdefghijklmnopqrstuvwxyz";
  205. for($i=0;$i<20;$i++){
  206. $alphabet = str_shuffle($alphabet);
  207. $result = substr($alphabet, 0, 1);
  208. $nums = mt_rand(0,count($prize_arr)-1);
  209. $prize = $prize_arr[$nums];
  210. $data[$i]['name']=$result."*****";
  211. $data[$i]['prize']=$prize['price']." ".$prize['title'];
  212. }
  213. $this->success('success',$data);
  214. }
  215. }