RotarytableprizeController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace app\index\controller;
  3. use think\exception\ValidateException;
  4. use app\model\RotarytablePrize;
  5. use app\model\RotarytableLog;
  6. use app\model\Member;
  7. use app\model\CouponReceive;
  8. use app\model\Coupon;
  9. use app\model\Points;
  10. use app\model\Config;
  11. class RotarytableprizeController extends Base
  12. {
  13. public function index()
  14. {
  15. $config = Config::getconfig('rotarytable');
  16. $data['config'] = $config;
  17. $prizelist = RotarytablePrize::where(['weid' => weid()])->order('sort asc,id desc')->select()->toArray();
  18. for ($i = 0; $i < count($prizelist); $i++) {
  19. $data['prizelist'][$i]['prizeId'] = $prizelist[$i]['id'];
  20. $data['prizelist'][$i]['prizeName'] = $prizelist[$i]['title'];
  21. $data['prizelist'][$i]['prizeWeight'] = $prizelist[$i]['probability'];
  22. $data['prizelist'][$i]['prizeImage'] = $prizelist[$i]['image'];
  23. }
  24. foreach ($data['prizelist'] as $vo) {
  25. if ($vo['quantity'] > 0) {
  26. $prizeWeight[$vo['prizeId']] = $vo['prizeWeight'];
  27. }
  28. }
  29. $prizeId = $this->get_rand($prizeWeight); //根据概率获取奖项id
  30. $data['prizeId'] = $prizeId;
  31. return $this->json(['data' => $data]);
  32. }
  33. function drawstart()
  34. {
  35. $uid = UID();
  36. $config = Config::getconfig('rotarytable');
  37. if ($config['participate_rules'] == 1) {
  38. $query = RotarytableLog::where(['uid' => $uid, 'weid' => weid()]);
  39. $query->where('create_time', '>=', strtotime(date('Y-m-d')));
  40. $query->where('create_time', '<=', strtotime(date('Y-m-d')) + 86400);
  41. $participate_num = $query->count();
  42. if ($participate_num >= $config['participate_num']) {
  43. return $this->json(['errno' => 1, 'msg' => '您今天的抽奖机会已经用完了']);
  44. }
  45. } else {
  46. $query = RotarytableLog::where(['weid' => weid()]);
  47. $query->where('create_time', '>=', strtotime(date('Y-m-d')));
  48. $query->where('create_time', '<=', strtotime(date('Y-m-d')) + 86400);
  49. $participate_num = $query->count();
  50. if ($participate_num >= $config['participate_num']) {
  51. return $this->json(['errno' => 1, 'msg' => '今天的抽奖机会已经用完了,请明天再来吧']);
  52. }
  53. }
  54. $member = Member::find($uid);
  55. if (!empty($member)) {
  56. if ($member['points'] < $config['pay_points']) {
  57. return $this->json(['errno' => 1, 'msg' => '您的积分不足']);
  58. }else{
  59. Member::where('id', $uid)
  60. ->dec('points', $config['pay_points'])
  61. ->update();
  62. }
  63. }
  64. return $this->json(['data' => $data]);
  65. }
  66. function getprizeid()
  67. {
  68. $uid = UID();
  69. $config = Config::getconfig('rotarytable');
  70. $prizelist = RotarytablePrize::where(['weid' => weid()])->order('sort asc,id desc')->select()->toArray();
  71. foreach ($prizelist as $vo) {
  72. $prizeWeight[$vo['id']] = $vo['probability'];
  73. }
  74. $prizeId = $this->get_rand($prizeWeight); //根据概率获取奖项id
  75. $data['prizeId'] = $prizeId;
  76. foreach ($prizelist as $vo) {
  77. if ($vo['id'] == $prizeId) {
  78. RotarytableLog::create([
  79. 'uid' => $uid,
  80. 'weid' => weid(),
  81. 'rid' => 0,
  82. 'ptype' => $vo['ptype'],
  83. 'title' => $vo['title'],
  84. 'image' => $vo['image'],
  85. 'price' => $vo['price'],
  86. 'points' => $vo['points'],
  87. 'coupon_id' => $vo['coupon_id']
  88. ]);
  89. if ($vo['ptype'] == 2) {
  90. Member::where('id', $uid)
  91. ->inc('balance', $vo['price'])
  92. ->update();
  93. }
  94. if ($vo['ptype'] == 3 && $vo['coupon_id']) {
  95. $Coupondata = Coupon::where(['weid' => weid(), 'id' => $vo['coupon_id']])->find();
  96. if (!empty($Coupondata)) {
  97. $Coupondata = $Coupondata->toArray();
  98. unset($Coupondata['id']);
  99. $Coupondata['uid'] = $uid;
  100. $Coupondata['coupon_id'] = $vo['coupon_id'];
  101. CouponReceive::create($Coupondata);
  102. }
  103. }
  104. if ($vo['ptype'] == 4 && $vo['points'] > 0) {
  105. Points::create([
  106. 'weid' => weid(),
  107. 'uid' => $uid,
  108. 'order_id' => 0,
  109. 'points' => $vo['points'],
  110. 'description' => '抽奖得积分',
  111. 'prefix' => 1,
  112. 'creat_time' => time(),
  113. 'type' => 3
  114. ]);
  115. Member::where('id', $uid)
  116. ->inc('points', (int) $vo['points'])
  117. ->update();
  118. }
  119. }
  120. }
  121. return $this->json(['data' => $data]);
  122. }
  123. function get_rand($proArr)
  124. {
  125. $result = '';
  126. //概率数组的总概率精度
  127. $proSum = array_sum($proArr);
  128. //概率数组循环
  129. foreach ($proArr as $key => $proCur) {
  130. $randNum = mt_rand(1, $proSum);
  131. if ($randNum <= $proCur) {
  132. $result = $key;
  133. break;
  134. } else {
  135. $proSum -= $proCur;
  136. }
  137. }
  138. unset($proArr);
  139. return $result;
  140. }
  141. }