| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | <?phpnamespace 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]);    }}
 |