UserController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Modes\AccountLog;
  4. use App\Modes\Advertising;
  5. use App\Modes\Area;
  6. use App\Modes\Proxy;
  7. use App\Modes\ProxyArea;
  8. use App\Modes\Upgrade;
  9. use App\Modes\User;
  10. use App\Modes\UserBank;
  11. use App\Modes\UserMsg;
  12. use App\Rules\BankNum;
  13. use App\Rules\IdCard;
  14. use App\Rules\Phone;
  15. use DemeterChain\C;
  16. use Doctrine\DBAL\Driver\PDOException;
  17. use Illuminate\Http\Request;
  18. use App\Http\Controllers\Controller;
  19. use Mockery\Exception;
  20. use SimpleSoftwareIO\QrCode\Facades\QrCode;
  21. use Illuminate\Support\Facades\DB;
  22. class UserController extends Controller
  23. {
  24. public function getUser(Request $request)
  25. {
  26. $mobile = $request->post('mobile', null);
  27. $user=User::whereMobile($mobile)->select(['id', 'mobile', 'nick_name'])->first();
  28. $user->coin=round($user->coin,2);
  29. return showJsonSucc('获取用户信息成功',$user );
  30. }
  31. /**
  32. * 用户资料
  33. * @author lyh
  34. * @date 2019/3/19
  35. * @description
  36. */
  37. public function show()
  38. {
  39. $user = \Auth::user();
  40. //查看用户代理的区域 wsl 20190702
  41. $dailistr='';
  42. if(!empty($user)&&$user['level']>5){
  43. $row=ProxyArea::whereUid($user->id)->whereIn('status',[2,3])->select('province','city','district')->first();
  44. if(!empty($row)){
  45. $daili[]=Area::whereId($row->province)->value('name');
  46. $daili[]=Area::whereId($row->city)->value('name');
  47. $daili[]=Area::whereId($row->district)->value('name');
  48. if(!empty($daili))$dailistr=implode(' ',$daili);
  49. }
  50. }
  51. $userdatas = DB::select('select * from zx_user where id = :id', ['id' => \Auth::id()]);
  52. // $auth = Upgrade::condition(\Auth::id());
  53. // var_dump($auth);exit;
  54. return showJsonSucc(1001, [
  55. 'id' => $user->id,
  56. 'mobile' => $user->mobile,
  57. 'nick_name' => $user->nick_name,
  58. 'avatar' => $user->avatar,
  59. 'real_name' => $user->real_name,
  60. 'balance' => $user->balance,
  61. 'coin' => $user->coin,
  62. 'is_apply' => $user->is_apply,
  63. 'invitor' => User::getInfo($user->invitor, ['id', 'nick_name','mobile']),
  64. 'invite_code' => $user->invite_code,
  65. 'invite_image' => User::getInviteImage($user->invite_code),
  66. 'province' => Area::getName($user->province),
  67. 'city' => Area::getName($user->city),
  68. 'district' => Area::getName($user->district),
  69. 'level' => $user->level,
  70. 'status' => $user->status,
  71. 'created_at' => $userdatas[0]->created_at,
  72. 'commission' => AccountLog::getSumMoney(\Auth::id(), [10, 11, 12, 13, 20, 21, 22, 23]), // 佣金
  73. 'url' => env('APP_URL'),
  74. 'upGrade' => Upgrade::condition(\Auth::id()), // 判断是否达到升级条件
  75. 'proxy_area'=>$dailistr
  76. ]);
  77. }
  78. public function getPayQrcode(Request $request){
  79. $param=$request->all();
  80. if(empty($param['code_url'])){
  81. return showJsonErr('code_url 必填');
  82. }
  83. $res=User::getPayCode($param['code_url']);
  84. if(!empty($res)) return $res;
  85. return '';
  86. }
  87. /*
  88. * 修改支付密码
  89. * wsl
  90. * 20190726
  91. * */
  92. public function modifyPayPass(Request $request){
  93. $validator = \Validator::make($param = $request->post(), [
  94. 'pay_password' => 'required|min:6',
  95. 'sms' => 'required|size:4'
  96. ],['sms.required'=>'验证码不能为空','sms.size'=>'验证码长度为4']);
  97. if ($validator->fails()) {
  98. return showJson(102, $validator->errors()->first());
  99. }
  100. // 验证短信
  101. $smsProvider = \App::make('sms');
  102. $sms = $smsProvider->verifySms(\Auth::user()->mobile, $param['sms']);
  103. if ($sms == false) {
  104. return showJson(102, '短信验证码错误');
  105. }
  106. $update = User::whereId(\Auth::id())->update(['pay_password' => md5(md5($param['pay_password']))]);
  107. if (empty($update)) {
  108. return showJson(102, '修改失败');
  109. }
  110. return showJson(101, '修改成功');
  111. }
  112. /**
  113. * 代理明细
  114. * @author lyh
  115. * @date 2019/3/19
  116. * @description
  117. */
  118. public function invitor(Request $request)
  119. {
  120. $validator = \Validator::make($param = $request->post(), [
  121. 'type' => 'required|between:0,2',
  122. 'page' => 'required|numeric'
  123. ]);
  124. if ($validator->fails()) {
  125. return showJson(102, $validator->errors()->first());
  126. }
  127. $userinfo=User::whereId(\Auth::id())->first()->toArray();
  128. if ($param['type'] == 1) {
  129. $ids = User::getInviteeOne(\Auth::id());
  130. //获取当前间1配置的百分比
  131. $pct=0;
  132. if($userinfo['level']!=1){
  133. $pct=Proxy::getJianPct($userinfo,1,1,$ids);
  134. }
  135. } elseif ($param['type'] == 2) {
  136. $ids = User::getInviteeTwo(\Auth::id());
  137. $pct=0;
  138. if($userinfo['level']!=1) {
  139. $pct = Proxy::getJianPct($userinfo, 2, 1, $ids);
  140. }
  141. } else {
  142. $ids = User::getInvitee(\Auth::id());
  143. $pctarr = Proxy::getSettingByAreaAndLevel($userinfo['level'],$userinfo['province'],$userinfo['city'],$userinfo['district']);
  144. $pct=$pctarr['proxy_invite'];
  145. }
  146. $user = User::getList($ids, ['nick_name', 'id', 'mobile']);
  147. if ($user->isNotEmpty()) {
  148. collect($user->items())->each(function ($item, $key) {
  149. $item['invitorNum'] = User::whereInvitor($item['id'])->count('id'); // 下级数量
  150. $item['performance'] = Upgrade::whereUid($item['id'])->whereStatus(3)->sum('money'); // 待完善 代理费业绩
  151. });
  152. }
  153. return showJsonSucc('获取数据成功', [
  154. 'user' => $user,
  155. 'pct' => $pct,
  156. 'count' => count($ids),
  157. 'totalPerformance' => Upgrade::whereStatus(3)->whereIn('uid', $ids)->sum('money')
  158. ]);
  159. }
  160. /**
  161. * 完善信息
  162. * @author lyh
  163. * @date 2019/3/21
  164. * @description
  165. */
  166. public function update(Request $request)
  167. {
  168. $validator = \Validator::make($param = $request->post(), [
  169. 'id_card' => [new IdCard],
  170. 'real_name' => 'string',
  171. 'nick_name' => 'string',
  172. 'province' => 'required_with_all:city,district|numeric|exists:area,id',
  173. 'city' => 'required_with_all:province,district|numeric|exists:area,id',
  174. 'district' => 'required_with_all:province,city|numeric|exists:area,id',
  175. 'username' => 'string',
  176. 'phone' => [new Phone],
  177. //'bank_number' => [new BankNum],
  178. 'bank_name' => 'string',
  179. ]);
  180. if ($validator->fails()) {
  181. return showJson(102, $validator->errors()->first());
  182. }
  183. $userParam = array_filter($param, function ($v, $k) {
  184. return !empty($v) && in_array($k, [
  185. 'id_card',
  186. 'real_name',
  187. 'nick_name',
  188. 'district',
  189. 'city',
  190. 'province',
  191. ]);
  192. }, ARRAY_FILTER_USE_BOTH);
  193. $userBankParam['username']=empty($param['username'])?'':trim($param['username']);
  194. $userBankParam['phone']=empty($param['phone'])?'':trim($param['phone']);
  195. $userBankParam['bank_name']=empty($param['bank_name'])?'':trim($param['bank_name']);
  196. $userBankParam['bank_number']=empty($param['bank_number'])?'':trim($param['bank_number']);
  197. $userBankParam['province']=empty($param['province'])?0:trim($param['province']);
  198. $userBankParam['city']=empty($param['city'])?0:trim($param['city']);
  199. $userBankParam['district']=empty($param['district'])?0:trim($param['district']);
  200. if (isset($param['province'])) {
  201. if (Area::isRealation($param['province'], $param['city'], $param['district']) == false) {
  202. return showJsonErr('地区关系错误');
  203. }
  204. }
  205. \DB::beginTransaction();
  206. try {
  207. if ($userParam) {
  208. User::whereId(\Auth::id())->update($userParam);
  209. }
  210. $bank = UserBank::whereUid(\Auth::id())->first();
  211. if ($userBankParam) {
  212. $userBankParam['status'] = 2;
  213. $userBankParam['uid'] = \Auth::id();
  214. if ($bank) {
  215. UserBank::whereUid(\Auth::id())->update($userBankParam);
  216. } else {
  217. UserBank::whereUid(\Auth::id())->insert($userBankParam);
  218. }
  219. }
  220. \DB::commit();
  221. } catch (Exception $exception) {
  222. \DB::rollBack();
  223. return showJsonErr($exception->getMessage());
  224. }
  225. // 确认信息完善则修改等级否则不做操作
  226. $this->fullStatus();
  227. return showJsonSucc('更新数据成功');
  228. }
  229. /**
  230. * 修改登录密码
  231. * @author lyh
  232. * @date 2019/4/19
  233. * @param Request $request
  234. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  235. * @description
  236. */
  237. public function modifyPassword(Request $request)
  238. {
  239. $validator = \Validator::make($param = $request->all(), [
  240. 'new_pass' => 'required|min:6',
  241. 'comfirm_pass' => 'required|same:new_pass',
  242. 'mobile' => [
  243. 'integer',
  244. new Phone()
  245. ],
  246. 'sms' => 'required|numeric|digits_between:4,4',
  247. 'type' => 'required|integer|between:1,2'
  248. ]);
  249. if ($validator->fails()) {
  250. return showJsonErr($validator->errors()->first());
  251. }
  252. if ($param['mobile'] != \Auth::user()->mobile) {
  253. return showJsonErr('抱歉,请输入正确的手机号码');
  254. }
  255. $smsProvider = \App::make('sms');
  256. $sms = $smsProvider->verifySms($param['mobile'], $param['sms']);
  257. if ($sms == false) {
  258. return showJson(102, '短信验证码错误');
  259. }
  260. if ($param['type'] == 1) {
  261. $field = 'password';
  262. } else {
  263. $field = 'pay_password';
  264. }
  265. $result = User::whereMobile($param['mobile'])->update([$field => User::encodePassword($param['new_pass'])]);
  266. if (!$result) {
  267. return showJsonErr('修改密码失败');
  268. }
  269. return showJsonSucc('修改密码成功');
  270. }
  271. /**
  272. * 修改用户信息完善状态、等级
  273. * @author lyh
  274. * @date 2019/3/21
  275. * @description
  276. */
  277. private function fullStatus()
  278. {
  279. if (\Auth::user()->level == 0) {
  280. $user = User::whereId(\Auth::id())->select(['nick_name', 'real_name', 'id_card', 'province', 'city', 'district', 'level'])->first()->toArray();
  281. if ($bank = UserBank::whereUid(\Auth::id())->select(['id'])->first()) {
  282. $bank = $bank->toArray();
  283. $checkData = array_merge($user, $bank);
  284. }
  285. // 如果未通过则进行验证
  286. if ($bank && $checkData['level'] == 0) {
  287. $isFull = true;
  288. foreach ($checkData as $key => $item) {
  289. if (empty($item) && $key != 'level') {
  290. $isFull = false;
  291. }
  292. }
  293. User::whereId(\Auth::id())->update(['level' => $isFull == true ? 1 : 0]);
  294. }
  295. }
  296. }
  297. }