| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | <?phpnamespace App\Http\Controllers\Mobile\Lottery;use App\Http\Controllers\Mobile\MobileBaseController;use App\Models\LotteryLog;use App\Models\LotteryPrize;use App\Models\LotteryWin;use App\Models\Thirdlogin;use App\Services\Auth\AuthService;use App\Services\Common\WechatService;use Illuminate\Http\Request;use Illuminate\Support\Facades\Session;class LotteryController extends MobileBaseController{    /**     * @var WechatService     */    private $wechatService;    /**     * @var AuthService     */    private $authService;    public function __construct(WechatService $wechatService, AuthService $authService)    {        $this->wechatService = $wechatService;        $this->authService   = $authService;    }    /**     * 微信登录     */    public function login(Request $request)    {        //type:web-电脑端,mobile-手机端,        $app_id       = subsite_config('aix.system.oauth.wechat_official.app_id');        $redirect_uri = urlencode(route('mobile.lottery.wechat_back'));        $type         = $request->input('type', 1);        $wechat_url   = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$type}#wechat_redirect";        return redirect($wechat_url);    }    /**     * 微信回调     */    public function wechat_back(Request $request)    {        //微信登录        $officialAccount = $this->wechatService->getOfficialAccount();        $wechatUser      = $officialAccount->oauth->user()->getOriginal();        $thirdlogin      = Thirdlogin::where('openid', $wechatUser['openid'])->first();        if (!$thirdlogin && $wechatUser['unionid']) {            $thirdlogin = Thirdlogin::where('unionid', $wechatUser['unionid'])->first();        }        if ($thirdlogin) {            $member = $thirdlogin->member()->withTrashed()->first();            $this->authService->login($member, 1);        } else {            Session::put('open_id', $wechatUser['openid']);            Session::put('union_id', $wechatUser['unionid'] ?: '');            Session::save();        }        $type = $request->input('state', 1);        $url  = route('mobile.active.spring', ['type' => $type]);        return redirect($url);    }    /**     * 抽奖页     */    public function index(Request $request)    {        //是否登录        $user = auth('web-member')->user();        if (empty($user)) {            $open_id = Session::get('open_id');            if (empty($open_id)) {                return redirect(route('mobile.lottery.login'));            }        } else {            $third   = Thirdlogin::where('uid', $user->id)->first();            $open_id = $third['openid'];        }//        $open_id = '11';        //抽奖次数        $type   = $request->input('type', 1);        $date   = date('Y-m-d');        $log    = LotteryLog::where([            ['create_time', '=', $date],            ['type', '=', $type],            ['open_id', '=', $open_id],        ])->first();        $number = 1;        if (!empty($log)) {            $number = 0;        }        //奖品列表        $prize       = LotteryPrize::all();        $ids         = [];        $restaraunts = [];        $colors      = [];        $images      = [];        foreach ($prize as $v) {            $ids[]         = $v->id;            $restaraunts[] = $v->prize_name;            $colors[]      = $v->prize_bg;            $images[]      = upload_asset($v->prize_image);        }        $return_data = [            'open_id'     => $open_id,            'current_url' => \Illuminate\Support\Facades\Request::getRequestUri(),            'number'      => $number,            'type'        => $type,            'prize'       => $prize,            'ids'         => $ids,            'restaraunts' => $restaraunts,            'colors'      => $colors,            'images'      => $images,            'wap_title'   => '抽奖',            'share_title' => '抽奖',            'share_desc'  => '找工作还可抽奖',            'share_link'  => route('mobile.lottery.login'),        ];        return view('mobile.app.lottery.index', $return_data);    }    /**     * 抽奖     */    public function lottery_post(Request $request)    {        //抽奖次数        $data = $request->all();//        $date = date('Y-m-d');        $date = "2025-01-01";        $log  = LotteryLog::where([            ['create_time', '=', $date],            ['type', '=', $data['type']],            ['open_id', '=', $data['open_id']],        ])->first();        if (!empty($log)) {            return response()->json(['status' => 0, 'msg' => '您已抽过奖!']);        }        //奖品列表        $model     = new LotteryPrize();        $prize_arr = $model->where('prize_number', '>', 0)->get();        $arr       = [];        foreach ($prize_arr as $key => $val) {            $arr[$val['id']] = $val['prize_odds'] * 100;        }        if (array_sum($arr) == 0) {            return response()->json(['status' => 0, 'msg' => '奖品已全部抽完,请联系管理员!']);        }        //增加抽奖记录        LotteryLog::create([            'create_time' => $date,            'type'        => $data['type'],            'number'      => 1,            'open_id'     => $data['open_id'],        ]);        $rid = $this->_get_rand($arr); //根据概率获取奖项id        //增加奖品        $prize_win = $model->where('id', $rid)->first();        $prize_win->prize_number--;        $prize_win->save();        $user = auth('web-member')->user();        if (empty($user)) {            Session::put('prize_id', $rid);            Session::save();        } else {            $prize           = LotteryPrize::where('id', $rid)->first();            $win             = new LotteryWin();            $win->member_id  = $user->id;            $win->prize_id   = $rid;            $win->prize_name = $prize->prize_name;            $win->created_at = date('Y-m-d H:i:s');            $win->save();        }        return response()->json(['status' => 1, 'msg' => '恭喜你,获得' . $prize_win->prize_name.'。请点击领奖按钮进行领奖。', 'id' => $rid]);    }    private function _get_rand($proArr)    {        $result = '';        //概率数组的总概率精度        $proSum  = array_sum($proArr);        //概率数组循环        foreach ($proArr as $key => $proCur) {            $randNum = mt_rand(1, $proSum);            if ($randNum <= $proCur) {                $result = $key;                break;            } else {                $proSum -= $proCur;            }        }        return $result;    }}
 |