MemberController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  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('address', $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('address', '');
  110. if (empty($mobile)) {
  111. return $this->apiResponseError('地址信息错误');
  112. }
  113. $member = Member::where('address', $mobile)->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  114. if (empty($member)) {
  115. return $this->apiResponseError('当前账户未注册');
  116. }
  117. $token_str = PassServer::creatServer()->getMemberToken($member->{'id'});
  118. Member::where('id', $member->{'id'})->update(['token_str' => $token_str]);
  119. return $this->apiResponseSuccess('登陆成功', ['token' => $token_str]);
  120. }
  121. /**
  122. * 修改登录密码
  123. * @return \Illuminate\Http\JsonResponse
  124. */
  125. function retrievePassword()
  126. {
  127. $mobile = request()->input('phone', '13900139110');
  128. $password = request()->input('password', '123456');
  129. $password = str_replace(' ', '', $password);
  130. if (empty($password)) {
  131. return $this->apiResponseError('请设置登录密码');
  132. }
  133. if (strlen($password) < 6) {
  134. return $this->apiResponseError('登录密码最低6位');
  135. }
  136. $code = request()->input('code', '1234');
  137. if (empty($code)) {
  138. return $this->apiResponseError('请输入验证码');
  139. }
  140. $send_server = SmsServer::creatServer();
  141. $code_ret = $send_server->verifyCode($mobile, $code, 'retrieve');
  142. if (empty($code_ret)) {
  143. return $this->apiResponseError($send_server->getErrorMsg() ?: '验证码错误');
  144. }
  145. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  146. $pass_server = PassServer::creatServer($password, $member->{'encrypt'});
  147. $new_pass = $pass_server->creatPassword();
  148. $ret = $member->update(['password' => $new_pass['password']]);
  149. if (empty($ret)) {
  150. return $this->apiResponseError('密码修改失败');
  151. } else {
  152. return $this->apiResponseSuccess('密码修改成功');
  153. }
  154. }
  155. /**
  156. * 修改登录密码
  157. * @return \Illuminate\Http\JsonResponse
  158. */
  159. function setPassword()
  160. {
  161. $old_password = request()->input('old_password', '123456');
  162. if (empty($old_password)) {
  163. return $this->apiResponseError('请输入旧密码');
  164. }
  165. $password = request()->input('password', '123456');
  166. $password = str_replace(' ', '', $password);
  167. if (empty($password)) {
  168. return $this->apiResponseError('请设置登录密码');
  169. }
  170. $pass_two = request()->input('pass_two', '123456');
  171. if ($password != $pass_two) {
  172. return $this->apiResponseError('两次密码输入不一致');
  173. }
  174. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt'])->first();
  175. $pass_server = PassServer::creatServer($old_password, $member->{'encrypt'});
  176. if (!$pass_server->verifyPass($member->{'password'})) {
  177. return $this->apiResponseError('旧密码错误');
  178. }
  179. $pass_server->setPassword($password);
  180. $new_pass = $pass_server->creatPassword();
  181. $ret = $member->update(['password' => $new_pass['password']]);
  182. if (empty($ret)) {
  183. return $this->apiResponseError('密码修改失败');
  184. } else {
  185. return $this->apiResponseSuccess('密码修改成功');
  186. }
  187. }
  188. /**
  189. * 设置支付密码
  190. * @return \Illuminate\Http\JsonResponse
  191. */
  192. function setPayPass()
  193. {
  194. $password = request()->input('pay_pass', '123456');
  195. $password = str_replace(' ', '', $password);
  196. if (empty($password)) {
  197. return $this->apiResponseError('请设置登录密码');
  198. }
  199. $pass_two = request()->input('pass_two', '123456');
  200. if ($password != $pass_two) {
  201. return $this->apiResponseError('两次密码输入不一致');
  202. }
  203. if (!is_numeric($password) || strlen($password) != 6) {
  204. return $this->apiResponseError('支付密码必须为6为数字');
  205. }
  206. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'password', 'encrypt', 'phone'])->first();
  207. $update=[];
  208. $code = request()->input('code', '1234');
  209. if (empty($code)) {
  210. return $this->apiResponseError('请输入验证码');
  211. }
  212. $ret = SmsServer::creatServer()->verifyCode($member->{'phone'}, $code, 'set_pay_pass');
  213. if (empty($ret)) {
  214. return $this->apiResponseError('验证码错误');
  215. }
  216. $pass_server = PassServer::creatServer($password, $member->{'encrypt'});
  217. $new_pass = $pass_server->creatPassword();
  218. $update['pay_pass']=$new_pass['password'];
  219. $update['encrypt']=$new_pass['encrypt'];
  220. $ret = $member->update($update);
  221. if (empty($ret)) {
  222. return $this->apiResponseError('支付密码修改失败');
  223. } else {
  224. MemberServer::creatServer()->delMemberCache($member->{'id'});
  225. return $this->apiResponseSuccess('支付密码修改成功');
  226. }
  227. }
  228. /**
  229. * 获取用户资产信息
  230. */
  231. function getMoneyInfo()
  232. {
  233. $member = Member::where('id', request()->member['id'])->where('status',1)->select(['id', 'money'])->first();
  234. return $this->apiResponseSuccess('获取成功', $member);
  235. }
  236. /**
  237. * 获取会员详情
  238. */
  239. function getMemberInfo()
  240. {
  241. $m_id = request()->member['id'];
  242. //弹幕广播
  243. $info['m_id'] = $m_id;
  244. $member = RedisDataServer::creatServer()->getData('member_' . $m_id, 'json');
  245. if (empty($member) ) {
  246. $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();
  247. if (empty($member)) {
  248. return $this->apiResponseError('账户信息错误', 401);
  249. }
  250. //获取推荐关联信息
  251. $member->recomMember();
  252. $member->{'phone_num'} = $member->{'phone'};
  253. $member->{'money'} = CommonServer::creatServer()->setFormatNum($member->{'money'});;
  254. $member->{'head_img'} = CommonServer::creatServer()->ossCompress($member->{'head_img'}, 50, 2);
  255. if ($member->{'phone'}) {
  256. $member->{'phone'} = CommonServer::creatServer()->concealStr($member->{'phone'}, 0, 4, 4, 4);
  257. }
  258. $member->{'level_name'} = MemberServer::creatServer()->getLevelName($member->{'level_id'});
  259. $member->{'recommend_name'} = $member->recomMember->{'nickname'};
  260. RedisDataServer::creatServer()->setData('member_' . $m_id, $member, 'json', 30);
  261. }
  262. return $this->apiResponseSuccess('获取信息成功', $member);
  263. }
  264. /**
  265. * 保存会员信息
  266. * @return \Illuminate\Http\JsonResponse
  267. */
  268. function updateMemberInfo()
  269. {
  270. $nickname = CommonServer::creatServer()->filtrationStr('nickname');
  271. $sex = request()->input('sex', '');
  272. $head_img = request()->input('head_img', '');
  273. $update = compact('nickname', 'sex', 'head_img');
  274. $update = array_filter($update);
  275. if ($sex != '' && !in_array($sex, ['3', '1', '2','0'])) {
  276. return $this->apiResponseError('性别选择错误');
  277. }elseif ($sex==''){
  278. $update['sex']='0';
  279. }else{
  280. $update['sex']=$sex;
  281. }
  282. if (empty($update)) {
  283. return $this->apiResponseError('暂无可以更新的内容');
  284. }
  285. $m_id = request()->member['id'];
  286. $ret = Member::where('id', $m_id)->update($update);
  287. if ($ret) {
  288. $renew['group_type'] = 1;
  289. $renew['name'] = $nickname;
  290. $renew['logo'] = $head_img;
  291. //进入队列
  292. MemberServer::creatServer()->delMemberCache(request()->member['id']);
  293. return $this->apiResponseSuccess('信息保存成功');
  294. } else {
  295. return $this->apiResponseError('信息保存失败');
  296. }
  297. }
  298. /**
  299. * 获取推广团队基本信息
  300. * @return \Illuminate\Http\JsonResponse
  301. */
  302. function getTeamInfo()
  303. {
  304. $m_id = request()->member['id'];
  305. $member = Member::where('id', $m_id)->select(['id', 'nickname', 'head_img', 'recom_id'])->first();
  306. if (empty($member->{'recom_id'})) {
  307. $parent = ['id' => 0, 'nickname' => '', 'head_img' => ''];
  308. } else {
  309. $parent = Member::where('id', $member->{'recom_id'})->select(['id', 'nickname', 'head_img', 'recom_id'])->first();
  310. }
  311. $total_num = MemberClan::from('member_clans as c')
  312. ->leftJoin('members as m', 'm.id', '=', 'c.m_id')
  313. ->where('c.one_m_id', $m_id)
  314. ->where([['m.status',1], ['m.is_del',0]])
  315. ->count();
  316. return $this->apiResponseSuccess('获取数据成功', ['parent' => $parent, 'member' => $member, 'team_num' => $total_num]);
  317. }
  318. /**
  319. * 获取团队列表
  320. * @return \Illuminate\Http\JsonResponse
  321. */
  322. function getTeamList()
  323. {
  324. $type = request()->input('type', '1');
  325. $m_id = request()->member['id'];
  326. $where = [];
  327. if ($type == 1) {
  328. $where[] = ['c.one_m_id', $m_id];
  329. } elseif ($type == 2) {
  330. $where[] = ['c.two_m_id', $m_id];
  331. } else {
  332. $where[] = ['c.one_m_id', '=', $m_id, 'or'];
  333. $where[] = ['c.two_m_id', '=', $m_id, 'or'];
  334. }
  335. $list = MemberClan::from('member_clans as c')
  336. ->leftJoin('members as m', 'm.id', '=', 'c.m_id')
  337. ->where($where)
  338. ->where([['status',1], ['is_del',0]])
  339. ->select(['m.id', 'm.recom_id', 'nickname', 'head_img', 'm.created_at'])
  340. ->paginate(15);
  341. foreach ($list as $item) {
  342. $item->{'type'} = $item->{'recom_id'} == $m_id ? 1 : 2;
  343. }
  344. return $this->apiResponseSuccess('获取数据成功', ['total_num' => $list->total(), 'items' => $list->items()]);
  345. }
  346. }