123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/8/19
- * Time: 2:11 PM
- */
- namespace App\Http\Controllers\V1;
- use App\Events\CardCertifiedEvent;
- use App\Handlers\IdCardHandler;
- use App\Handlers\ImageUploadHandler;
- use App\Http\Requests\BindMobileRequest;
- use App\Http\Requests\InviteNewUsersRewardRequest;
- use App\Http\Requests\MobileCodeRequest;
- use App\Http\Requests\RealNameRequest;
- use App\Http\Requests\UserFormIdRequest;
- use App\Http\Requests\WechatEncryptorMobileRequest;
- use App\Jobs\SendSMSCodeJob;
- use App\Models\FormId;
- use App\Models\InviteNewUsersConfig;
- use App\Models\User;
- use App\Repositories\InviteNewUserRepository;
- use App\Repositories\InviteNewUsersConfigRepository;
- use App\Repositories\InviteNewUsersGiveGiftLogRepository;
- use App\Repositories\UserRepository;
- use App\Repositories\WalletLogRepository;
- use App\Transformers\RegisterUsersTransformer;
- use App\Transformers\UserStatusTransformer;
- use App\Transformers\WalletLogTransformer;
- use Carbon\Carbon;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Intervention\Image\ImageManagerStatic as Image;
- use Laravel\Lumen\Http\Request;
- use Overtrue\EasySms\Exceptions\Exception;
- /**
- * 用户模块
- * Class UserController
- * @package App\Http\Controllers\V1
- */
- class UserController extends BaseController
- {
- /**
- * 实名认证
- * @param RealNameRequest $request
- * @return mixed
- * User: Mead
- */
- public function realNameAuthentication(RealNameRequest $request)
- {
- try {
- $card_id = $request->get('card_id');
- $name = $request->get('name');
- $age = idCard2age($card_id);
- $is_match_ride_age = ($age >= 16);
- User::where('id', $this->user->id)->update([
- 'card_id' => $card_id,
- 'truename' => $name,
- 'is_card_certified' => User::CARD_NO,
- 'is_match_ride_age' => $is_match_ride_age
- ]);
- if (!$is_match_ride_age) {
- return $this->errorNoValidation('不满16周岁禁止骑车!');
- }
- // $status = IdCardHandler::main($card_id, $name);
- // if ($status['code']) {
- // return $this->errorNoValidation($status['msg']);
- // }
- $user = User::where('id', $this->user->id)->update([
- 'is_card_certified' => User::CARD_OK
- ]);
- event(new CardCertifiedEvent($this->user()));
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- return $this->response->array([
- 'is_card_certified' => !!$user
- ]);
- }
- public function bindWechatMobile(WechatEncryptorMobileRequest $request)
- {
- try {
- // $session = $request->get('session_key');
- $session = Cache::get('login:user:session_key:auth:' . $this->user->id);
- $iv = $request->get('iv');
- $encryptedData = $request->get('encryptedData');
- $miniProgram = app('wechat.mini_program');
- $decryptedData = $miniProgram->encryptor->decryptData($session, $iv, $encryptedData);
- $mobile = $decryptedData['purePhoneNumber'];
- $user = User::where('id', $this->user->id)->update([
- 'mobile' => $mobile,
- 'is_bind_mobile' => User::BIND_MOBILE_OK
- ]);
- return $this->response->array([
- 'is_bind_mobile' => !!$user
- ]);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 绑定手机号
- * @param BindMobileRequest $request
- * User: Mead
- */
- public function bindMobile(BindMobileRequest $request)
- {
- try {
- $mobile = $request->get('mobile');
- $code = $request->get('code', false);
- $v_code = Cache::get("verification_code_{$mobile}", '');
- if (empty($v_code)) {
- return $this->errorNoValidation('验证码已过期');
- }
- if ((string)$v_code !== (string)$code) {
- return $this->errorNoValidation('验证码错误');
- }
- $user = User::where('id', $this->user->id)->update([
- 'mobile' => $mobile,
- 'is_bind_mobile' => User::BIND_MOBILE_OK
- ]);
- return $this->response->array([
- 'is_bind_mobile' => !!$user
- ]);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 发送验证码
- * @param MobileCodeRequest $request
- * @return mixed
- * User: Mead
- */
- public function sendVerificationCode(MobileCodeRequest $request)
- {
- $mobile = $request->get('mobile');
- $type = $request->get('type');
- $code = rand(1000, 9999);
- if ($type == 2) {
- // 仅仅表示换绑手机号
- if ((bool)$this->user()->is_bind_mobile) {
- $verify_mobile = $this->user()->mobile ?? '';
- if ($verify_mobile == $mobile) return $this->errorNoValidation('与旧手机号码相同,无需更改');
- }
- $verify_user = User::query()->where('mobile', $mobile)->exists();
- if ($verify_user) return $this->errorNoValidation('您绑定得手机号已存在,如有疑问请致电客服');
- } elseif ($type == 3) {
- // 仅仅换账号登录时
- $verify_user = User::query()->where('mobile', $mobile)->exists();
- if (!$verify_user) return $this->errorNoValidation('您登录得手机号不存在,如有疑问请致电客服');
- }
- try {
- // $this->dispatch(new SendSMSCodeJob($mobile, $code));
- app('easy_sms')->send($mobile, [
- 'template' => '1251374',
- 'data' => [
- 'code' => $code
- ]
- ]);
- Cache::put("verification_code_{$mobile}", $code, Carbon::now()->addMinutes(5));
- return $this->response->array([
- 'is_send_sms' => true
- ]);
- } catch (Exception $exception) {
- $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 获取时间戳
- * @param UserRepository $userRepository
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function userStatus(UserRepository $userRepository)
- {
- try {
- $user = $userRepository->byIdGetUserStatus($this->user->id);
- return $this->response->item($user, UserStatusTransformer::class);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 存储用户的form_id
- * User: Mead
- */
- public function storeFormId(UserFormIdRequest $request)
- {
- try {
- $form_id = $request->get('form_id');
- FormId::create([
- 'user_id' => $this->user->id,
- 'form_id' => $form_id,
- 'timestamp' => (time() + 604800)
- ]);
- return $this->success();
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 用户钱包记录 userWallerLogList
- *
- * @param WalletLogRepository $walletLogRepository
- * @return \Dingo\Api\Http\Response|void
- * @author Fx
- *
- */
- public function userWallerLogList(WalletLogRepository $walletLogRepository)
- {
- try {
- $data = $walletLogRepository->byUserIdGetWalletLog($this->user->id);
- return $this->response->paginator($data, WalletLogTransformer::class);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- public function getInviteWechatQrcode(ImageUploadHandler $imageUploadHandler)
- {
- try {
- $folder = storage_path('app/public/img/invite_new_users/qrcode/');
- $endfilename = 'qrcode.png';
- $user_id = $this->user->id;
- // $user_id = 212;
- $user_qrcode_file = $folder . $user_id . $endfilename;
- if (!file_exists($user_qrcode_file)) {
- if (!is_dir($folder . 'qrcode')) {
- mkdir($folder . 'qrcode');
- }
- if (!$imageUploadHandler->createWechatQrcode($folder, $user_id, $endfilename)) {
- return $this->errorNoValidation('系统错误,请稍后重试');
- }
- }
- return $this->response->array([
- 'path' => config('app.url') . '/storage/img/invite_new_users/qrcode/' . $user_id . $endfilename,
- ]);
- } catch (\Exception $e) {
- return $this->errorNoValidation($e->getMessage());
- }
- }
- public function getInvitePoster(InviteNewUsersConfigRepository $inviteNewUsersConfigRepository, ImageUploadHandler $imageUploadHandler)
- {
- try {
- $folder = storage_path('app/public/img/invite_new_users/');
- $endfilename = 'qrcode.png';
- $user_id = $this->user->id;
- $register_area_id = $this->user->register_area_id;
- $posterEndFileName = 'register_area_id_' . $register_area_id . '_user_id_' . $user_id . '_poster.png';
- $path = $folder . 'poster/' . $posterEndFileName;
- if (!is_dir($folder . 'poster')) {
- mkdir($folder . 'poster');
- }
- if (!file_exists($path)) {
- $user_qrcode_file = $folder . 'qrcode/' . $user_id . $endfilename;
- if (!file_exists($user_qrcode_file)) {
- if (!is_dir($folder . 'qrcode')) {
- mkdir($folder . 'qrcode');
- }
- if (!$imageUploadHandler->createWechatQrcode($folder . 'qrcode/', $user_id, $endfilename)) {
- return $this->errorNoValidation('系统错误,请稍后重试');
- }
- }
- $inviteConfig = $inviteNewUsersConfigRepository->getInviteNewUsersConfigByAreaId($register_area_id);
- if (empty($inviteConfig) || empty($inviteConfig->background_image)) return $this->errorNoValidation('系统错误,请稍后重试');
- $background_image = $inviteConfig->background_image;
- // Log::info($background_image);
- $img = Image::make($background_image);
- // Log::info(111);
- $watermark = Image::make($user_qrcode_file);
- $img->insert($watermark, 'bottom', 0, 635);
- $img->save($path);
- }
- return $this->response->array([
- 'path' => config('app.url') . '/storage/img/invite_new_users/poster/' . $posterEndFileName,
- ]);
- } catch (\Exception $e) {
- return $this->errorNoValidation($e->getMessage());
- }
- }
- public function getInviteNewUsersReward(InviteNewUsersRewardRequest $request, InviteNewUsersConfigRepository $inviteNewUsersConfigRepository, InviteNewUserRepository $inviteNewUserRepository, InviteNewUsersGiveGiftLogRepository $inviteNewUsersGiveGiftLogRepository)
- {
- try {
- $invite_new_users_configs_id = $request->get('invite_new_users_configs_id');
- $gift_type = $request->get('gift_type');
- $gift_id = $request->get('gift_id');
- $gift_num = $request->get('gift_num');
- $num = $request->get('num');
- $data = [
- 'user_id' => $this->user->id,
- 'invite_new_users_configs_id' => $invite_new_users_configs_id,
- 'gift_type' => $gift_type,
- 'gift_id' => $gift_id,
- 'gift_num' => $gift_num,
- ];
- $invite_new_users_configs = $inviteNewUsersConfigRepository->byIdGetModel($invite_new_users_configs_id);
- if (empty($invite_new_users_configs)) return $this->errorNoValidation('找不到该互动,或活动已过期');
- $is_repeat = $invite_new_users_configs->is_repeat;
- if ($is_repeat == InviteNewUsersConfig::REPEAT_NO) {
- // 不可重复
- if ($inviteNewUsersGiveGiftLogRepository->checkExist($data)) return $this->errorNoValidation('您已经领取过该礼物,不可重复领取');
- }
- $condition = $invite_new_users_configs->condition;
- $register_ids = $inviteNewUserRepository->isCondition($this->user->id, $condition, $num);
- if (!$register_ids) return $this->errorNoValidation('暂未达成条件,请稍后重试');
- // 达成条件
- $res = DB::transaction(function () use ($inviteNewUserRepository, $register_ids, $inviteNewUsersGiveGiftLogRepository, $data) {
- // 更新用户名额失效
- $inviteNewUserRepository->updateStatus($register_ids);
- // 送礼
- $logs = $inviteNewUsersGiveGiftLogRepository->logs($data);
- return $logs;
- });
- if ($res) {
- // 成功获得
- return $this->response->array(['status' => true]);
- } else {
- return $this->errorNoValidation('赠送失败');
- }
- } catch (\Exception $e) {
- return $this->errorNoValidation($e->getMessage());
- }
- }
- public function getInviteUsers(InviteNewUserRepository $inviteNewUserRepository)
- {
- try {
- $inviteUsers = $inviteNewUserRepository->getInviteUsers($this->user->id);
- return $this->response->collection($inviteUsers, RegisterUsersTransformer::class);
- } catch (\Exception $exception) {
- return $this->errorNoValidation($exception->getMessage());
- }
- }
- }
|