WelfareController.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. namespace App\Http\Controllers\Channel\Welfare;
  3. use App\Http\Controllers\Channel\BaseController;
  4. use App\Modules\Channel\Services\ChannelUserService;
  5. use App\Modules\Channel\Services\CompanyService;
  6. use App\Modules\Welfare\Services\WelfareBookService;
  7. use App\Modules\Welfare\Services\WelfarePriceSerivce;
  8. use App\Modules\Welfare\Services\WelfareRecordService;
  9. use App\Modules\Welfare\Services\WelfareUserService;
  10. use Cookie;
  11. use DB;
  12. use Illuminate\Http\Request;
  13. use Log;
  14. use Hashids;
  15. class WelfareController extends BaseController
  16. {
  17. private $_welfare_key = 'welfare^-^zhuishuyun^_^';
  18. /**
  19. * @apiDefine Welfare 福利
  20. */
  21. /**
  22. * @apiVersion 1.0.0
  23. * @api {GET} Welfare/welfare 查询奖励
  24. * @apiGroup Welfare
  25. * @apiName welfare
  26. * @apiSuccess {Object} data 结果集
  27. * @apiSuccess {Object} data.prize 抽奖信息
  28. * @apiSuccess {Number} data.prize.is_has_prize 是否有奖励.
  29. * @apiSuccess {Number} data.prize.url 抽奖地址.
  30. * @apiSuccess {Object} data.book 图书信息
  31. * @apiSuccess {Object} data.book.book_name 书名
  32. * @apiSuccessExample {json} Success-Response:
  33. *
  34. * {
  35. * "code": 0,
  36. * "msg": "",
  37. * "data":
  38. * prize:{
  39. * "is_has_prize": 1,
  40. * "url": "/aa?token=1233445fghdfthrthy45ktja",
  41. * }
  42. * books:[]
  43. * }
  44. */
  45. public function welfare(Request $request)
  46. {
  47. $channel_user_id = $this->getChannelUserId();
  48. $res = WelfarePriceSerivce::isCanPrize($channel_user_id, date('Y-m-d'));
  49. $data = [];
  50. $data['prize']['is_has_prize'] = 0;
  51. $data['prize']['url'] = '';
  52. $data['prize']['is_alert'] = 0;
  53. $open_welfare_channel = env('OPEN_WELFARE_CHANNEL');
  54. $is_open_welfare = false;
  55. if($open_welfare_channel){
  56. if($open_welfare_channel == 'all'){
  57. $is_open_welfare = true;
  58. }else{
  59. $open_welfare_channel_array = explode(',',$open_welfare_channel);
  60. if(in_array($channel_user_id,$open_welfare_channel_array)){
  61. $is_open_welfare = true;
  62. }
  63. }
  64. }
  65. if ($res > 0) {
  66. $now = time();
  67. $sign_array = ['channel_user_id' => $channel_user_id, 'time' => $now];
  68. $token = _sign($sign_array, $this->_welfare_key);
  69. DB::table('welfare_pre_prizes')->insert([
  70. 'channel_user_id' => $channel_user_id,
  71. 'token' => $token,
  72. 'created_at' => date('Y-m-d H:i:s'),
  73. 'updated_at' => date('Y-m-d H:i:s', $now),
  74. 'is_enable' => 1
  75. ]);
  76. $data['prize']['is_alert'] = 1;
  77. $data['prize']['is_has_prize'] = 1;
  78. $data['prize']['url'] = 'https://' . _domain() . '/welfare/prizeView?token=' . $token;
  79. }
  80. if($res == 0){
  81. $data['prize']['is_alert'] = 1;
  82. $data['prize']['is_has_prize'] = 0;
  83. }
  84. if($res == -1){
  85. $data['prize']['is_alert'] = 0;
  86. $data['prize']['is_has_prize'] = 0;
  87. }
  88. if(!$is_open_welfare){
  89. $data['prize']['is_alert'] = 0;
  90. $data['prize']['is_has_prize'] = 0;
  91. }
  92. $channel_user_info = ChannelUserService::getById($channel_user_id);
  93. $company = CompanyService::getCompany($channel_user_info->company_id);
  94. if ($company && $company->is_important == 1) {
  95. $data['books'] = WelfareBookService::getByImportantType(1);
  96. }else{
  97. $data['books'] = WelfareBookService::getByImportantType(0);
  98. }
  99. if( $data['books']){
  100. foreach ($data['books'] as &$v){
  101. $v->bid = Hashids::encode($v->bid);
  102. }
  103. }
  104. return response()->success($data);
  105. }
  106. //领取页面
  107. public function prizeView(Request $request)
  108. {
  109. $token = $request->get('token');
  110. if (empty($token)) {
  111. return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'非法访问']),'amount'=>0]);
  112. }
  113. $openid = $request->get('openid');
  114. $welfare_user_id = Cookie::get('welfare_user');
  115. if (!$openid && !$welfare_user_id) {
  116. //没有coookie且没有openid 则授权获取openid
  117. $h5_scheme = 'https';
  118. $params = $request->except('_url');
  119. $url = str_replace('http://', $h5_scheme . '://', url()->current() . '?' . http_build_query($params));
  120. $auth_url = $this->getAuthUrl($url);
  121. return redirect($auth_url);
  122. }
  123. //根据token获取抽奖信息
  124. $res = DB::table('welfare_pre_prizes')->join('welfare_prizes', 'welfare_prizes.channel_user_id', '=', 'welfare_pre_prizes.channel_user_id')
  125. ->select('welfare_pre_prizes.channel_user_id', 'welfare_prizes.left', 'welfare_pre_prizes.id','welfare_prizes.id as prize_id')
  126. ->where('welfare_pre_prizes.token', $token)
  127. ->where('welfare_prizes.date', date('Y-m-d'))
  128. ->where('welfare_pre_prizes.created_at', '>', date('Y-m-d'))
  129. ->where('welfare_pre_prizes.is_enable', '=', 1)
  130. ->first();
  131. if (!$res) {
  132. return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'非法访问']),'is_prize'=>0,'amount'=>0]);
  133. }
  134. if (!$welfare_user_id) {
  135. $welfare_user = WelfareUserService::createUser($openid, $res->channel_user_id);
  136. Cookie::queue('welfare_user', $welfare_user->id);
  137. $welfare_user_id = $welfare_user->id;
  138. }
  139. DB::table('welfare_pre_prizes')->where('id', $res->id)->update(['is_enable' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
  140. if ($res->left <= 0) {
  141. return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'']),'is_prize'=>0,'amount'=>0]);
  142. }
  143. //抽奖记录 一个用户一天只能抽一次
  144. $info = WelfareRecordService::getByUid($welfare_user_id);
  145. if ($info) {
  146. //已经抽过讲了
  147. return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'']),'is_prize'=>0,'amount'=>0]);
  148. }
  149. //机会减一次
  150. WelfarePriceSerivce::decrementLeft($res->prize_id);
  151. //保存抽奖记录
  152. $price_pool =$this->getPriceList();
  153. $amount = array_random($price_pool);
  154. WelfareRecordService::create([
  155. 'prize_id' => $res->prize_id,
  156. 'welfare_uid' => $welfare_user_id,
  157. 'amount' => $amount,
  158. 'status' => 'PENDING'
  159. ]);
  160. return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>1,'msg'=>'']),'is_prize'=>1,'amount'=>$amount]);
  161. }
  162. private function getPriceList(){
  163. $str = '247,2,5,254,13,255,108,256,121,262,425,263,166,267,172,275,184,290,200,292,217,300,229,308,236,311,17,334,154,341,167,345,195,350,228,365,429,376,160,381,207,232,426,176,399,424,404';
  164. $channel_user_id = $this->getChannelUserId();
  165. if(in_array($channel_user_id,explode(',',$str))){
  166. //return $price_pool = [0.1, 0.1, 0.1];
  167. }
  168. return [1, 1, 1];
  169. }
  170. public function getAuthUrl($redirect_url){
  171. $params['redirect_url'] = $redirect_url;
  172. $params['timestamp'] = time();
  173. $params['gzh_app_id'] = 'wxe559e68b007476f6';
  174. $params['sign'] = _sign($params,env('OAUTH_KEY') );
  175. $auth_base = 'https://zsyauth.aizhuishu.com/user_oauth';
  176. $redirect = $auth_base . '?' . http_build_query($params);
  177. return $redirect;
  178. }
  179. /**
  180. * @apiVersion 1.0.0
  181. * @api {GET} Welfare/prize 抽奖
  182. * @apiGroup Welfare
  183. * @apiName prize
  184. * @apiSuccess {Number} is_prize 是否中奖
  185. * @apiSuccess {Number} amount 中将金额
  186. * @apiSuccessExample {json} Success-Response:
  187. *
  188. * {
  189. * "code": 0,
  190. * "msg": "",
  191. * "data":
  192. * {
  193. * "is_prize": 1,
  194. * "amount": 0,
  195. * }
  196. *
  197. * }
  198. */
  199. public function prize(Request $request)
  200. {
  201. $welfare_user_id = Cookie::get('welfare_user');
  202. if (!$welfare_user_id) {
  203. //没有用户信息
  204. return response()->success(['is_prize' => 0, 'amount' => 0]);
  205. }
  206. //抽奖记录 一个用户一天只能抽一次
  207. $info = WelfareRecordService::getByUid($welfare_user_id);
  208. if ($info) {
  209. //已经抽过讲了
  210. return response()->success(['is_prize' => 0, 'amount' => 0]);
  211. }
  212. $welfare_user = WelfareUserService::getByUid($welfare_user_id);
  213. $price = WelfarePriceSerivce::getByToday($welfare_user->channel_user_id);
  214. if (!$price) {
  215. //异常
  216. return response()->success(['is_prize' => 0, 'amount' => 0]);
  217. }
  218. if ($price->left <= 0) {
  219. //没有抽奖机会了
  220. return response()->success(['is_prize' => 0, 'amount' => 0]);
  221. }
  222. //机会减一次
  223. WelfarePriceSerivce::where('id', $price->id)->decrement('left');
  224. //保存抽奖记录
  225. $price_pool = [1.8, 5.8, 8.8];
  226. $amount = array_random($price_pool);
  227. WelfareRecordService::create([
  228. 'prize_id' => $price->id,
  229. 'welfare_uid' => $welfare_user_id,
  230. 'amount' => $amount,
  231. 'status' => 'PENDING'
  232. ]);
  233. return response()->success(['is_prize' => 1, 'amount' => $amount]);
  234. }
  235. }