123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <?php
- namespace App\Http\Controllers\Channel\Welfare;
- use App\Http\Controllers\Channel\BaseController;
- use App\Modules\Channel\Services\ChannelUserService;
- use App\Modules\Channel\Services\CompanyService;
- use App\Modules\Welfare\Services\WelfareBookService;
- use App\Modules\Welfare\Services\WelfarePriceSerivce;
- use App\Modules\Welfare\Services\WelfareRecordService;
- use App\Modules\Welfare\Services\WelfareUserService;
- use Cookie;
- use DB;
- use Illuminate\Http\Request;
- use Log;
- use Hashids;
- class WelfareController extends BaseController
- {
- private $_welfare_key = 'welfare^-^zhuishuyun^_^';
- /**
- * @apiDefine Welfare 福利
- */
- /**
- * @apiVersion 1.0.0
- * @api {GET} Welfare/welfare 查询奖励
- * @apiGroup Welfare
- * @apiName welfare
- * @apiSuccess {Object} data 结果集
- * @apiSuccess {Object} data.prize 抽奖信息
- * @apiSuccess {Number} data.prize.is_has_prize 是否有奖励.
- * @apiSuccess {Number} data.prize.url 抽奖地址.
- * @apiSuccess {Object} data.book 图书信息
- * @apiSuccess {Object} data.book.book_name 书名
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":
- * prize:{
- * "is_has_prize": 1,
- * "url": "/aa?token=1233445fghdfthrthy45ktja",
- * }
- * books:[]
- * }
- */
- public function welfare(Request $request)
- {
- $channel_user_id = $this->getChannelUserId();
- $res = WelfarePriceSerivce::isCanPrize($channel_user_id, date('Y-m-d'));
- $data = [];
- $data['prize']['is_has_prize'] = 0;
- $data['prize']['url'] = '';
- $data['prize']['is_alert'] = 0;
- $open_welfare_channel = env('OPEN_WELFARE_CHANNEL');
- $is_open_welfare = false;
- if($open_welfare_channel){
- if($open_welfare_channel == 'all'){
- $is_open_welfare = true;
- }else{
- $open_welfare_channel_array = explode(',',$open_welfare_channel);
- if(in_array($channel_user_id,$open_welfare_channel_array)){
- $is_open_welfare = true;
- }
- }
- }
- if ($res > 0) {
- $now = time();
- $sign_array = ['channel_user_id' => $channel_user_id, 'time' => $now];
- $token = _sign($sign_array, $this->_welfare_key);
- DB::table('welfare_pre_prizes')->insert([
- 'channel_user_id' => $channel_user_id,
- 'token' => $token,
- 'created_at' => date('Y-m-d H:i:s'),
- 'updated_at' => date('Y-m-d H:i:s', $now),
- 'is_enable' => 1
- ]);
- $data['prize']['is_alert'] = 1;
- $data['prize']['is_has_prize'] = 1;
- $data['prize']['url'] = 'https://' . _domain() . '/welfare/prizeView?token=' . $token;
- }
- if($res == 0){
- $data['prize']['is_alert'] = 1;
- $data['prize']['is_has_prize'] = 0;
- }
- if($res == -1){
- $data['prize']['is_alert'] = 0;
- $data['prize']['is_has_prize'] = 0;
- }
- if(!$is_open_welfare){
- $data['prize']['is_alert'] = 0;
- $data['prize']['is_has_prize'] = 0;
- }
- $channel_user_info = ChannelUserService::getById($channel_user_id);
- $company = CompanyService::getCompany($channel_user_info->company_id);
- if ($company && $company->is_important == 1) {
- $data['books'] = WelfareBookService::getByImportantType(1);
- }else{
- $data['books'] = WelfareBookService::getByImportantType(0);
- }
- if( $data['books']){
- foreach ($data['books'] as &$v){
- $v->bid = Hashids::encode($v->bid);
- }
- }
- return response()->success($data);
- }
- //领取页面
- public function prizeView(Request $request)
- {
- $token = $request->get('token');
- if (empty($token)) {
- return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'非法访问']),'amount'=>0]);
- }
- $openid = $request->get('openid');
- $welfare_user_id = Cookie::get('welfare_user');
- if (!$openid && !$welfare_user_id) {
- //没有coookie且没有openid 则授权获取openid
- $h5_scheme = 'https';
- $params = $request->except('_url');
- $url = str_replace('http://', $h5_scheme . '://', url()->current() . '?' . http_build_query($params));
- $auth_url = $this->getAuthUrl($url);
- return redirect($auth_url);
- }
- //根据token获取抽奖信息
- $res = DB::table('welfare_pre_prizes')->join('welfare_prizes', 'welfare_prizes.channel_user_id', '=', 'welfare_pre_prizes.channel_user_id')
- ->select('welfare_pre_prizes.channel_user_id', 'welfare_prizes.left', 'welfare_pre_prizes.id','welfare_prizes.id as prize_id')
- ->where('welfare_pre_prizes.token', $token)
- ->where('welfare_prizes.date', date('Y-m-d'))
- ->where('welfare_pre_prizes.created_at', '>', date('Y-m-d'))
- ->where('welfare_pre_prizes.is_enable', '=', 1)
- ->first();
- if (!$res) {
- return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'非法访问']),'is_prize'=>0,'amount'=>0]);
- }
- if (!$welfare_user_id) {
- $welfare_user = WelfareUserService::createUser($openid, $res->channel_user_id);
- Cookie::queue('welfare_user', $welfare_user->id);
- $welfare_user_id = $welfare_user->id;
- }
- DB::table('welfare_pre_prizes')->where('id', $res->id)->update(['is_enable' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
- if ($res->left <= 0) {
- return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'']),'is_prize'=>0,'amount'=>0]);
- }
- //抽奖记录 一个用户一天只能抽一次
- $info = WelfareRecordService::getByUid($welfare_user_id);
- if ($info) {
- //已经抽过讲了
- return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>0,'msg'=>'']),'is_prize'=>0,'amount'=>0]);
- }
- //机会减一次
- WelfarePriceSerivce::decrementLeft($res->prize_id);
- //保存抽奖记录
- $price_pool =$this->getPriceList();
- $amount = array_random($price_pool);
- WelfareRecordService::create([
- 'prize_id' => $res->prize_id,
- 'welfare_uid' => $welfare_user_id,
- 'amount' => $amount,
- 'status' => 'PENDING'
- ]);
- return view('channel.web.welfare.index', ['options' => json_encode(['is_access'=>1,'msg'=>'']),'is_prize'=>1,'amount'=>$amount]);
- }
- private function getPriceList(){
- $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';
- $channel_user_id = $this->getChannelUserId();
- if(in_array($channel_user_id,explode(',',$str))){
- //return $price_pool = [0.1, 0.1, 0.1];
- }
- return [1, 1, 1];
- }
- public function getAuthUrl($redirect_url){
- $params['redirect_url'] = $redirect_url;
- $params['timestamp'] = time();
- $params['gzh_app_id'] = 'wxe559e68b007476f6';
- $params['sign'] = _sign($params,env('OAUTH_KEY') );
- $auth_base = 'https://zsyauth.aizhuishu.com/user_oauth';
- $redirect = $auth_base . '?' . http_build_query($params);
- return $redirect;
- }
- /**
- * @apiVersion 1.0.0
- * @api {GET} Welfare/prize 抽奖
- * @apiGroup Welfare
- * @apiName prize
- * @apiSuccess {Number} is_prize 是否中奖
- * @apiSuccess {Number} amount 中将金额
- * @apiSuccessExample {json} Success-Response:
- *
- * {
- * "code": 0,
- * "msg": "",
- * "data":
- * {
- * "is_prize": 1,
- * "amount": 0,
- * }
- *
- * }
- */
- public function prize(Request $request)
- {
- $welfare_user_id = Cookie::get('welfare_user');
- if (!$welfare_user_id) {
- //没有用户信息
- return response()->success(['is_prize' => 0, 'amount' => 0]);
- }
- //抽奖记录 一个用户一天只能抽一次
- $info = WelfareRecordService::getByUid($welfare_user_id);
- if ($info) {
- //已经抽过讲了
- return response()->success(['is_prize' => 0, 'amount' => 0]);
- }
- $welfare_user = WelfareUserService::getByUid($welfare_user_id);
- $price = WelfarePriceSerivce::getByToday($welfare_user->channel_user_id);
- if (!$price) {
- //异常
- return response()->success(['is_prize' => 0, 'amount' => 0]);
- }
- if ($price->left <= 0) {
- //没有抽奖机会了
- return response()->success(['is_prize' => 0, 'amount' => 0]);
- }
- //机会减一次
- WelfarePriceSerivce::where('id', $price->id)->decrement('left');
- //保存抽奖记录
- $price_pool = [1.8, 5.8, 8.8];
- $amount = array_random($price_pool);
- WelfareRecordService::create([
- 'prize_id' => $price->id,
- 'welfare_uid' => $welfare_user_id,
- 'amount' => $amount,
- 'status' => 'PENDING'
- ]);
- return response()->success(['is_prize' => 1, 'amount' => $amount]);
- }
- }
|