MemberController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\FrontController;
  4. use App\Jobs\BarrageJob;
  5. use App\Jobs\MemberShareJob;
  6. use App\Jobs\SaveImGroup;
  7. use App\Models\Comment;
  8. use App\Models\Express;
  9. use App\Models\Goods;
  10. use App\Models\GoodsBrowse;
  11. use App\Models\GoodsCollect;
  12. use App\Models\Member;
  13. use App\Models\MemberAddress;
  14. use App\Models\MemberClan;
  15. use App\Models\MemberCoupon;
  16. use App\Models\MemberOpenId;
  17. use App\Models\Members;
  18. use App\Models\MoneyDetail;
  19. use App\Models\MoneyRecord;
  20. use App\Models\Order;
  21. use App\Models\RefundOrder;
  22. use App\Models\SeckillGoods;
  23. use App\Models\Shop;
  24. use App\Models\ShopCollect;
  25. use App\Models\ShopOrder;
  26. use App\Servers\AddressServer;
  27. use App\Servers\CommonServer;
  28. use App\Servers\ExpressServer;
  29. use App\Servers\GoodsServer;
  30. use App\Servers\ImgServer;
  31. use App\Servers\KdnServer;
  32. use App\Servers\MemberLogsServer;
  33. use App\Servers\MemberServer;
  34. use App\Servers\MergeServer;
  35. use App\Servers\MoneyDetailServer;
  36. use App\Servers\PassServer;
  37. use App\Servers\RedisDataServer;
  38. use App\Servers\SensitiveServer;
  39. use App\Servers\SmsServer;
  40. use App\Servers\WeixinServer;
  41. use App\Servers\WxTemplateServer;
  42. use Carbon\Carbon;
  43. use SimpleSoftwareIO\QrCode\Facades\QrCode;
  44. use SwooleTW\Http\Websocket\Facades\Websocket;
  45. class MemberController extends FrontController
  46. {
  47. public function __construct()
  48. {
  49. parent::__construct();
  50. }
  51. function index()
  52. {
  53. }
  54. /**
  55. * 会员注册
  56. * @return \Illuminate\Http\JsonResponse
  57. */
  58. function register()
  59. {
  60. $invite_code = request()->input('invite_code', '');
  61. if (!empty($invite_code)) {
  62. $p_member = Member::where('invite_code', $invite_code)->where('status',1)->select(['id', 'phone'])->first();
  63. }
  64. if (empty($p_member)) {
  65. $p_member = Member::where('id', 1)->select(['id', 'phone'])->first();
  66. }
  67. $nickname = request()->input('nickname', '张三');
  68. if(empty($nickname)){
  69. return $this->apiResponseError('请输入昵称');
  70. }
  71. $mobile = request()->input('phone', '13900139110');
  72. $password = request()->input('password', '123456');
  73. $password = str_replace(' ', '', $password);
  74. if (empty($password)) {
  75. return $this->apiResponseError('请设置登录密码');
  76. }
  77. if (strlen($password) < 6) {
  78. return $this->apiResponseError('登录密码最低6位');
  79. }
  80. $code = request()->input('code', '1234');
  81. if (empty($code)) {
  82. return $this->apiResponseError('请输入验证码');
  83. }
  84. $send_server = SmsServer::creatServer();
  85. $code_ret = $send_server->verifyCode($mobile, $code, 'register');
  86. if (empty($code_ret)) {
  87. return $this->apiResponseError($send_server->getErrorMsg() ?: '验证码错误');
  88. }
  89. $member = Member::where('phone', $mobile)->where('status',1)->select(['id', 'token_str'])->first();
  90. if ($member) {
  91. $token_str = PassServer::creatServer()->getMemberToken($member->{'id'});
  92. Member::where('id', $member->{'id'})->update(['token_str' => $token_str]);
  93. return $this->apiResponseSuccess('登陆成功', ['m_id' => $member->{'id'}, 'token' => $token_str]);
  94. } else {
  95. $ret = MemberServer::creatServer()->register($mobile, $p_member->{'id'}, $password, '');
  96. if (empty($ret)) {
  97. return $this->apiResponseError('注册失败');
  98. } else {
  99. return $this->apiResponseSuccess('注册成功', $ret);
  100. }
  101. }
  102. }
  103. /**
  104. * 会员登录
  105. * @return \Illuminate\Http\JsonResponse
  106. */
  107. function login()
  108. {
  109. $mobile = request()->input('phone', '13900139110');
  110. if (empty($mobile)) {
  111. return $this->apiResponseError('请输入手机号码');
  112. }
  113. $password = request()->input('password', '123456');
  114. if (empty($password)) {
  115. return $this->apiResponseError('请输入登录密码');
  116. }
  117. $member = Member::where('phone', $mobile)->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  118. if (empty($member)) {
  119. return $this->apiResponseError('当前账户未注册');
  120. }
  121. $pass_server = PassServer::creatServer($password, $member->{'encrypt'});
  122. if (!$pass_server->verifyPass($member->{'password'})) {
  123. return $this->apiResponseError('登陆密码错误');
  124. }
  125. $token_str = PassServer::creatServer()->getMemberToken($member->{'id'});
  126. Member::where('id', $member->{'id'})->update(['token_str' => $token_str]);
  127. return $this->apiResponseSuccess('登陆成功', ['m_id' => $member->{'id'}, 'token' => $token_str]);
  128. }
  129. /**
  130. * 修改登录密码
  131. * @return \Illuminate\Http\JsonResponse
  132. */
  133. function retrievePassword()
  134. {
  135. $mobile = request()->input('phone', '13900139110');
  136. $password = request()->input('password', '123456');
  137. $password = str_replace(' ', '', $password);
  138. if (empty($password)) {
  139. return $this->apiResponseError('请设置登录密码');
  140. }
  141. if (strlen($password) < 6) {
  142. return $this->apiResponseError('登录密码最低6位');
  143. }
  144. $code = request()->input('code', '1234');
  145. if (empty($code)) {
  146. return $this->apiResponseError('请输入验证码');
  147. }
  148. $send_server = SmsServer::creatServer();
  149. $code_ret = $send_server->verifyCode($mobile, $code, 'retrieve');
  150. if (empty($code_ret)) {
  151. return $this->apiResponseError($send_server->getErrorMsg() ?: '验证码错误');
  152. }
  153. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  154. $pass_server = PassServer::creatServer($password, $member->{'encrypt'});
  155. $new_pass = $pass_server->creatPassword();
  156. $ret = $member->update(['password' => $new_pass['password']]);
  157. if (empty($ret)) {
  158. return $this->apiResponseError('密码修改失败');
  159. } else {
  160. return $this->apiResponseSuccess('密码修改成功');
  161. }
  162. }
  163. /**
  164. * 修改登录密码
  165. * @return \Illuminate\Http\JsonResponse
  166. */
  167. function setPassword()
  168. {
  169. $old_password = request()->input('old_password', '123456');
  170. if (empty($old_password)) {
  171. return $this->apiResponseError('请输入旧密码');
  172. }
  173. $password = request()->input('password', '123456');
  174. $password = str_replace(' ', '', $password);
  175. if (empty($password)) {
  176. return $this->apiResponseError('请设置登录密码');
  177. }
  178. $pass_two = request()->input('pass_two', '123456');
  179. if ($password != $pass_two) {
  180. return $this->apiResponseError('两次密码输入不一致');
  181. }
  182. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  183. $pass_server = PassServer::creatServer($old_password, $member->{'encrypt'});
  184. if (!$pass_server->verifyPass($member->{'password'})) {
  185. return $this->apiResponseError('旧密码错误');
  186. }
  187. $pass_server->setPassword($password);
  188. $new_pass = $pass_server->creatPassword();
  189. $ret = $member->update(['password' => $new_pass['password']]);
  190. if (empty($ret)) {
  191. return $this->apiResponseError('密码修改失败');
  192. } else {
  193. return $this->apiResponseSuccess('密码修改成功');
  194. }
  195. }
  196. /**
  197. * 设置支付密码
  198. * @return \Illuminate\Http\JsonResponse
  199. */
  200. function setPayPass()
  201. {
  202. $password = request()->input('pay_pass', '123456');
  203. $password = str_replace(' ', '', $password);
  204. if (empty($password)) {
  205. return $this->apiResponseError('请设置登录密码');
  206. }
  207. $pass_two = request()->input('pass_two', '123456');
  208. if ($password != $pass_two) {
  209. return $this->apiResponseError('两次密码输入不一致');
  210. }
  211. if (!is_numeric($password) || strlen($password) != 6) {
  212. return $this->apiResponseError('支付密码必须为6为数字');
  213. }
  214. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt', 'phone'])->first();
  215. $update=[];
  216. $code = request()->input('code', '1234');
  217. if (empty($code)) {
  218. return $this->apiResponseError('请输入验证码');
  219. }
  220. $ret = SmsServer::creatServer()->verifyCode($member->{'phone'}, $code, 'set_pay_pass');
  221. if (empty($ret)) {
  222. return $this->apiResponseError('验证码错误');
  223. }
  224. $pass_server = PassServer::creatServer($password, $member->{'encrypt'});
  225. $new_pass = $pass_server->creatPassword();
  226. $update['pay_pass']=$new_pass['password'];
  227. $update['encrypt']=$new_pass['encrypt'];
  228. $ret = $member->update($update);
  229. if (empty($ret)) {
  230. return $this->apiResponseError('支付密码修改失败');
  231. } else {
  232. MemberServer::creatServer()->delMemberCache($member->{'id'});
  233. return $this->apiResponseSuccess('支付密码修改成功');
  234. }
  235. }
  236. /**
  237. * 获取用户资产信息
  238. */
  239. function getMoneyInfo()
  240. {
  241. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'money'])->first();
  242. return $this->apiResponseSuccess('获取成功', $member);
  243. }
  244. /**
  245. * 获取会员详情
  246. */
  247. function getMemberInfo()
  248. {
  249. $m_id = request()->member['id'];
  250. //弹幕广播
  251. $info['m_id'] = $m_id;
  252. $member = RedisDataServer::creatServer()->getData('member_' . $m_id, 'json');
  253. if (empty($member) ) {
  254. $member = Member::where('id', $m_id)->where('status',1)->select(['id', 'money', 'phone', 'nickname', 'head_img', 'invite_code', 'level_id', 'sex','describe','recom_id'])->first();
  255. if (empty($member)) {
  256. return $this->apiResponseError('账户信息错误', 401);
  257. }
  258. //获取推荐关联信息
  259. $member->recomMember();
  260. $member->{'phone_num'} = $member->{'phone'};
  261. $member->{'money'} = CommonServer::creatServer()->setFormatNum($member->{'money'});;
  262. $member->{'head_img'} = CommonServer::creatServer()->ossCompress($member->{'head_img'}, 50, 2);
  263. if ($member->{'phone'}) {
  264. $member->{'phone'} = CommonServer::creatServer()->concealStr($member->{'phone'}, 0, 4, 4, 4);
  265. }
  266. $member->{'level_name'} = MemberServer::creatServer()->getLevelName($member->{'level_id'});
  267. $member->{'recommend_name'} = $member->recomMember->{'nickname'};
  268. RedisDataServer::creatServer()->setData('member_' . $m_id, $member, 'json', 30);
  269. }
  270. return $this->apiResponseSuccess('获取信息成功', $member);
  271. }
  272. /**
  273. * 保存会员信息
  274. * @return \Illuminate\Http\JsonResponse
  275. */
  276. function updateMemberInfo()
  277. {
  278. $nickname = CommonServer::creatServer()->filtrationStr('nickname');
  279. $sex = request()->input('sex', '');
  280. $head_img = request()->input('head_img', '');
  281. $update = compact('nickname', 'sex', 'head_img');
  282. $update = array_filter($update);
  283. if ($sex != '' && !in_array($sex, ['3', '1', '2','0'])) {
  284. return $this->apiResponseError('性别选择错误');
  285. }elseif ($sex==''){
  286. $update['sex']='0';
  287. }else{
  288. $update['sex']=$sex;
  289. }
  290. if (empty($update)) {
  291. return $this->apiResponseError('暂无可以更新的内容');
  292. }
  293. $m_id = request()->member['id'];
  294. $ret = Member::where('id', $m_id)->update($update);
  295. if ($ret) {
  296. $renew['group_type'] = 1;
  297. $renew['name'] = $nickname;
  298. $renew['logo'] = $head_img;
  299. //进入队列
  300. MemberServer::creatServer()->delMemberCache(request()->member['id']);
  301. return $this->apiResponseSuccess('信息保存成功');
  302. } else {
  303. return $this->apiResponseError('信息保存失败');
  304. }
  305. }
  306. /**
  307. * 获取推广团队基本信息
  308. * @return \Illuminate\Http\JsonResponse
  309. */
  310. function getTeamInfo()
  311. {
  312. $m_id = request()->member['id'];
  313. $member = Member::where('id', $m_id)->select(['id', 'nickname', 'head_img', 'recom_id'])->first();
  314. if (empty($member->{'recom_id'})) {
  315. $parent = ['id' => 0, 'nickname' => '', 'head_img' => ''];
  316. } else {
  317. $parent = Member::where('id', $member->{'recom_id'})->select(['id', 'nickname', 'head_img', 'recom_id'])->first();
  318. }
  319. $total_num = MemberClan::from('member_clans as c')
  320. ->leftJoin('members as m', 'm.id', '=', 'c.m_id')
  321. ->where('c.one_m_id', $m_id)
  322. ->where([['m.status',1], ['m.is_del',0]])
  323. ->count();
  324. return $this->apiResponseSuccess('获取数据成功', ['parent' => $parent, 'member' => $member, 'team_num' => $total_num]);
  325. }
  326. /**
  327. * 获取团队列表
  328. * @return \Illuminate\Http\JsonResponse
  329. */
  330. function getTeamList()
  331. {
  332. $type = request()->input('type', '1');
  333. $m_id = request()->member['id'];
  334. $where = [];
  335. if ($type == 1) {
  336. $where[] = ['c.one_m_id', $m_id];
  337. } elseif ($type == 2) {
  338. $where[] = ['c.two_m_id', $m_id];
  339. } else {
  340. $where[] = ['c.one_m_id', '=', $m_id, 'or'];
  341. $where[] = ['c.two_m_id', '=', $m_id, 'or'];
  342. }
  343. $list = MemberClan::from('member_clans as c')
  344. ->leftJoin('members as m', 'm.id', '=', 'c.m_id')
  345. ->where($where)
  346. ->where([['status',1], ['is_del',0]])
  347. ->select(['m.id', 'm.recom_id', 'nickname', 'head_img', 'm.created_at'])
  348. ->paginate(15);
  349. foreach ($list as $item) {
  350. $item->{'type'} = $item->{'recom_id'} == $m_id ? 1 : 2;
  351. }
  352. return $this->apiResponseSuccess('获取数据成功', ['total_num' => $list->total(), 'items' => $list->items()]);
  353. }
  354. }