TurntableController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <?php
  2. namespace Modules\Web\Controllers;
  3. use App\Constants\CommentConstant;
  4. use App\Model\TurntablePrizeLogModel;
  5. use App\Model\UserModel;
  6. use App\Repositories\Service\CommonService;
  7. use App\Repositories\UserRepository;
  8. use Carbon\Carbon;
  9. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  10. use Psr\SimpleCache\CacheInterface;
  11. class TurntableController extends BaseController
  12. {
  13. private $prize = [
  14. [
  15. 'name' => '1日vip',
  16. 'weights' => 100,
  17. 'key' => 'vip1d'
  18. ],
  19. [
  20. 'name' => 'iphone 13',
  21. 'weights' => 0,
  22. 'key' => 'iphone',
  23. ],
  24. [
  25. 'name' => '空降白虎',
  26. 'weights' => 0,
  27. 'key' => 'kjmn'
  28. ],
  29. [
  30. 'name' => '5000个金币',
  31. 'weights' => 0,
  32. 'key' => 'jb5000',
  33. ],
  34. [
  35. 'name' => '2000个金币',
  36. 'weights' => 0,
  37. 'key' => 'jb2000'
  38. ],
  39. [
  40. 'name' => '1v1语音10分钟',
  41. 'weights' => 0,
  42. 'key' => '1v1'
  43. ],
  44. [
  45. 'name' => '500个金币',
  46. 'weights' => 0,
  47. 'key' => 'jb500',
  48. ],
  49. [
  50. 'name' => '1月VIP',
  51. 'weights' => 0,
  52. 'key' => 'vip1y'
  53. ],
  54. ];
  55. private $smsUrl = 'http://101.132.165.21:9198';
  56. /**
  57. * 发送短信
  58. *
  59. * @return mixed|void
  60. * @throws \GuzzleHttp\Exception\GuzzleException
  61. */
  62. public function sendVerifyCode()
  63. {
  64. $inputData = request()->all();
  65. $rules = [
  66. 'phone' => 'required|string|max:11',
  67. 'user_uid' => 'required',
  68. ];
  69. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  70. if ($validator->fails()) {
  71. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  72. return $this->jsonFail($validator->errors()->first());
  73. }
  74. $info = TurntablePrizeLogModel::query()->where(['phone' => $inputData['phone'], 'prize_date' => date('m')])->first();
  75. if (!empty($info)) {
  76. return $this->jsonFail('该手机号本月已参与过活动,请勿重复绑定');
  77. }
  78. $user = UserModel::query()->where('code', $inputData['user_uid'])->first(['id']);
  79. if (empty($user)) {
  80. return $this->jsonFail('该用户不存在');
  81. }
  82. $url = $this->smsUrl . '/support/sendMsmNew?phone=' . $inputData['phone'] . '&accountId=31';
  83. $res = make(CommonService::class)->httpGet($url);
  84. if (empty($res)) {
  85. return $this->jsonFail('验证码发送失败');
  86. }
  87. $res = json_decode($res, true);
  88. if ($res['code'] == 200) {
  89. return $this->jsonSuccess([], $res['message']);
  90. } else {
  91. return $this->jsonFail($res['message']);
  92. }
  93. }
  94. /**
  95. * 验证码验证
  96. *
  97. * @return mixed
  98. */
  99. public function authVerifyCode()
  100. {
  101. $inputData = request()->all();
  102. $rules = [
  103. 'phone' => 'required|string|max:11',
  104. 'code' => 'required',
  105. ];
  106. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  107. if ($validator->fails()) {
  108. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  109. return $this->jsonFail($validator->errors()->first());
  110. }
  111. $url = $this->smsUrl . '/support/loginSubmitNew?phone=' . $inputData['phone'] . '&accountId=31&code=' . $inputData['code'];
  112. $res = make(CommonService::class)->httpGet($url);
  113. if (empty($res)) {
  114. return $this->jsonFail('验证码异常');
  115. }
  116. $res = json_decode($res, true);
  117. if ($res['code'] == 200) {
  118. $cache = make(CacheInterface::class);
  119. $cache->set('phone:code:' . $inputData['phone'], $inputData['code'], 600);
  120. return $this->jsonSuccess([], $res['message']);
  121. } else {
  122. return $this->jsonFail($res['message']);
  123. }
  124. }
  125. /**
  126. * 抽奖
  127. *
  128. * @return mixed|void
  129. * @throws \Psr\SimpleCache\InvalidArgumentException
  130. */
  131. public function lottery()
  132. {
  133. $inputData = request()->all();
  134. $rules = [
  135. 'user_uid' => 'required',
  136. 'phone' => 'required|string|max:11',
  137. ];
  138. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  139. if ($validator->fails()) {
  140. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  141. return $this->jsonFail($validator->errors()->first());
  142. }
  143. $cache = make(CacheInterface::class);
  144. $code = $cache->get('phone:code:' . $inputData['phone']);
  145. if (empty($code)) {
  146. return $this->jsonFail('改手机号已过期,请重新绑定验证');
  147. }
  148. $userInfo = make(UserRepository::class)->getUserInfoFromCache($inputData['user_uid']);
  149. if (empty($userInfo)) {
  150. return $this->jsonFail('该用户不存在');
  151. }
  152. $info = TurntablePrizeLogModel::query()->where(['phone' => $inputData['phone'], 'prize_date' => date('m')])->first();
  153. if (!empty($info)) {
  154. return $this->jsonFail('该手机号本月已参与过活动,请勿重复绑定');
  155. }
  156. // 抽奖
  157. $pricze = countWeight($this->prize);
  158. //写日志
  159. $logArray = [
  160. 'prize_name' => $pricze['name'],
  161. 'user_uid' => $userInfo['code'],
  162. 'user_name' => $userInfo['nick'],
  163. 'prize_date' => date('m'),
  164. 'phone' => $inputData['phone'],
  165. ];
  166. TurntablePrizeLogModel::query()->create($logArray);
  167. //加会员天数 todo 发奖后期可该异步
  168. if ($userInfo['is_vip'] == 'y') {
  169. $vipTime = Carbon::parse($userInfo['vip_expired'])
  170. ->addDays(1)
  171. ->toDateTimeString();
  172. } else {
  173. $vipTime = Carbon::now()
  174. ->addDays(1)
  175. ->toDateTimeString();
  176. }
  177. UserModel::query()->where('id', $userInfo['id'])->update(['vip_expired' => $vipTime]);
  178. //清除用户信息redis缓存
  179. make(UserRepository::class)->delUserCache($inputData['user_uid']);
  180. $res = [
  181. 'uid' => $userInfo['code'],
  182. 'key' => $pricze['key'],
  183. 'name' => $pricze['name'],
  184. ];
  185. return $this->jsonSuccess($res);
  186. }
  187. /**
  188. * 中奖记录
  189. *
  190. * @return mixed
  191. */
  192. public function winRecord()
  193. {
  194. // $inputData = request()->all();
  195. // $rules = [
  196. // 'page' => 'required|int',
  197. // 'page_size' => 'required|int',
  198. // ];
  199. //
  200. // $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  201. // if ($validator->fails()) {
  202. // // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  203. // return $this->jsonFail($validator->errors()->first());
  204. // }
  205. //
  206. // $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  207. // if ($pageSize > 100) {
  208. // $pageSize = CommentConstant::PAGE_SIZE;
  209. // }
  210. // $page = format_page($inputData['page']);
  211. // $pageSize = intval($pageSize);
  212. //
  213. // $result = TurntablePrizeLogModel::query()
  214. // ->orderByDesc('id')
  215. // ->paginate((int)$pageSize, ['prize_name', 'user_name', 'phone', 'created_at'], 'page', (int)$page);
  216. $result = [
  217. 'lists' =>
  218. [
  219. [
  220. 'prize_name' => '1v1语音10分钟',
  221. 'user_name' => '羞涩的茉莉',
  222. 'phone' => '1576099*****',
  223. 'created_at' => '2022-07-28',
  224. ],
  225. [
  226. 'prize_name' => '500个金币',
  227. 'user_name' => '结实的含羞草',
  228. 'phone' => '152950*****',
  229. 'created_at' => '2022-07-28',
  230. ],
  231. [
  232. 'prize_name' => '1v1语音10分钟',
  233. 'user_name' => '幸福的巨人',
  234. 'phone' => '157257*****',
  235. 'created_at' => '2022-07-28',
  236. ],
  237. [
  238. 'prize_name' => '2000个金币',
  239. 'user_name' => '简单的花瓣',
  240. 'phone' => '15760990737',
  241. 'created_at' => '2022-07-28',
  242. ],
  243. [
  244. 'prize_name' => '1v1语音10分钟',
  245. 'user_name' => '眼睛大的手机',
  246. 'phone' => '182439*****',
  247. 'created_at' => '2022-07-28',
  248. ],
  249. [
  250. 'prize_name' => '1月VIP',
  251. 'user_name' => '美好的鸵鸟',
  252. 'phone' => '156981*****',
  253. 'created_at' => '2022-07-28',
  254. ],
  255. [
  256. 'prize_name' => '1月VIP',
  257. 'user_name' => '善良的天空',
  258. 'phone' => '199665*****',
  259. 'created_at' => '2022-07-28',
  260. ],
  261. [
  262. 'prize_name' => '空降白虎',
  263. 'user_name' => '清脆的向日葵',
  264. 'phone' => '180913*****',
  265. 'created_at' => '2022-07-28',
  266. ],
  267. [
  268. 'prize_name' => '1月VIP',
  269. 'user_name' => '开心的草莓',
  270. 'phone' => '176621*****',
  271. 'created_at' => '2022-07-28',
  272. ],
  273. [
  274. 'prize_name' => '1月VIP',
  275. 'user_name' => '有魅力的小熊猫',
  276. 'phone' => '191215*****',
  277. 'created_at' => '2022-07-28',
  278. ],
  279. [
  280. 'prize_name' => '1v1语音10分钟',
  281. 'user_name' => '迷路的钢笔',
  282. 'phone' => '186805*****',
  283. 'created_at' => '2022-07-28',
  284. ],
  285. [
  286. 'prize_name' => '1日vip',
  287. 'user_name' => '酷炫的秀发',
  288. 'phone' => '182904*****',
  289. 'created_at' => '2022-07-28',
  290. ],
  291. [
  292. 'prize_name' => '1日vip',
  293. 'user_name' => '玩命的白云',
  294. 'phone' => '137349*****',
  295. 'created_at' => '2022-07-28',
  296. ],
  297. [
  298. 'prize_name' => '1日vip',
  299. 'user_name' => '疯狂的棒球',
  300. 'phone' => '181652*****',
  301. 'created_at' => '2022-07-28',
  302. ],
  303. [
  304. 'prize_name' => '2000个金币',
  305. 'user_name' => '温婉的洋葱',
  306. 'phone' => '171100*****',
  307. 'created_at' => '2022-07-28',
  308. ],
  309. [
  310. 'prize_name' => '500个金币',
  311. 'user_name' => '隐形的水壶',
  312. 'phone' => '130677*****',
  313. 'created_at' => '2022-07-28',
  314. ],
  315. [
  316. 'prize_name' => '1v1语音10分钟',
  317. 'user_name' => '活力的飞鸟',
  318. 'phone' => '155092*****',
  319. 'created_at' => '2022-07-28',
  320. ],
  321. [
  322. 'prize_name' => '1日vip',
  323. 'user_name' => '稳重的咖啡豆',
  324. 'phone' => '151885*****',
  325. 'created_at' => '2022-07-28',
  326. ],
  327. ],
  328. 'id' => '7f14b800629e7735509c652f9e4d23e5',
  329. 'prize' => $this->prize,
  330. 'app_name' => '雏姬'
  331. ];
  332. return $this->jsonSuccess($result);
  333. }
  334. }