UserController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. <?php
  2. namespace app\api\controller\user;
  3. use app\http\validates\user\AddressValidate;
  4. use think\exception\ValidateException;
  5. use app\Request;
  6. use crmeb\services\ExpressService as Express;
  7. use app\admin\model\system\SystemAttachment;
  8. use app\models\routine\RoutineQrcode;
  9. use app\models\user\UserLevel;
  10. use app\models\user\UserSign;
  11. use app\models\routine\RoutineCode;
  12. use app\models\routine\RoutineFormId;
  13. use app\models\store\StoreBargain;
  14. use app\models\store\StoreCombination;
  15. use app\models\store\StoreCouponUser;
  16. use app\models\store\StoreOrder;
  17. use app\models\store\StoreOrderCartInfo;
  18. use app\models\store\StoreProductRelation;
  19. use app\models\store\StoreProductReply;
  20. use app\models\store\StoreSeckill;
  21. use app\models\user\User;
  22. use app\models\user\UserAddress;
  23. use app\models\user\UserBill;
  24. use app\models\user\UserExtract;
  25. use app\models\user\UserNotice;
  26. use app\models\user\UserRecharge;
  27. use crmeb\services\CacheService;
  28. use crmeb\services\GroupDataService;
  29. use crmeb\services\SystemConfigService;
  30. use crmeb\services\UploadService;
  31. use crmeb\services\UtilService;
  32. use think\facade\Cache;
  33. use think\facade\Db;
  34. /**
  35. * 用户类
  36. * Class UserController
  37. * @package app\api\controller\store
  38. */
  39. class UserController
  40. {
  41. /**
  42. * 获取用户信息
  43. * @param Request $request
  44. * @return mixed
  45. */
  46. public function userInfo(Request $request)
  47. {
  48. return app('json')->success($request->user()->toArray());
  49. }
  50. /**
  51. * 用户资金统计
  52. * @param Request $request
  53. * @return mixed
  54. * @throws \think\Exception
  55. * @throws \think\db\exception\DataNotFoundException
  56. * @throws \think\db\exception\ModelNotFoundException
  57. * @throws \think\exception\DbException
  58. */
  59. public function balance(Request $request)
  60. {
  61. $uid = $request->uid();
  62. $user['now_money'] = User::getUserInfo($uid, 'now_money')['now_money'];//当前总资金
  63. $user['recharge'] = UserBill::getRecharge($uid);//累计充值
  64. $user['orderStatusSum'] = StoreOrder::getOrderStatusSum($uid);//累计消费
  65. return app('json')->successful($user);
  66. }
  67. /**
  68. * 个人中心
  69. * @param Request $request
  70. * @return mixed
  71. */
  72. public function user(Request $request)
  73. {
  74. $user = $request->user();
  75. $user = $user->toArray();
  76. $user['couponCount'] = StoreCouponUser::getUserValidCouponCount($user['uid']);
  77. $user['like'] = StoreProductRelation::getUserIdCollect($user['uid']);
  78. $user['orderStatusNum'] = StoreOrder::getOrderData($user['uid']);
  79. $user['notice'] = UserNotice::getNotice($user['uid']);
  80. $user['brokerage'] = UserBill::getBrokerage($user['uid']);//获取总佣金
  81. $user['recharge'] = UserBill::getRecharge($user['uid']);//累计充值
  82. $user['orderStatusSum'] = StoreOrder::getOrderStatusSum($user['uid']);//累计消费
  83. $user['extractTotalPrice'] = UserExtract::userExtractTotalPrice($user['uid']);//累计提现
  84. $user['extractPrice'] = $user['brokerage_price'];//可提现
  85. $user['statu'] = (int)SystemConfigService::get('store_brokerage_statu');
  86. if(!SystemConfigService::get('vip_open'))
  87. $user['vip']=false;
  88. else{
  89. $vipId=UserLevel::getUserLevel($user['uid']);
  90. $user['vip']=$vipId !==false ? true : false;
  91. if($user['vip']){
  92. $user['vip_id']=$vipId;
  93. $user['vip_icon']=UserLevel::getUserLevelInfo($vipId,'icon');
  94. $user['vip_name']=UserLevel::getUserLevelInfo($vipId,'name');
  95. }
  96. }
  97. $user['yesterDay'] = UserBill::yesterdayCommissionSum($user['uid']);
  98. $user['recharge_switch'] = (int)SystemConfigService::get('recharge_switch');//充值开关
  99. $user['adminid'] = (boolean)\app\models\store\StoreService::orderServiceStatus($user['uid']);
  100. if($user['phone'] && $user['user_type'] != 'h5'){
  101. $user['switchUserInfo'][] = $request->user();
  102. if($h5UserInfo = User::where('account',$user['phone'])->where('user_type','h5')->find()){
  103. $user['switchUserInfo'][] = $h5UserInfo;
  104. }
  105. }else if($user['phone'] && $user['user_type'] == 'h5'){
  106. if($wechatUserInfo = User::where('phone',$user['phone'])->where('user_type','<>','h5')->find()){
  107. $user['switchUserInfo'][] = $wechatUserInfo;
  108. }
  109. $user['switchUserInfo'][] = $request->user();
  110. }else if(!$user['phone']){
  111. $user['switchUserInfo'][] = $request->user();
  112. }
  113. return app('json')->successful($user);
  114. }
  115. /**
  116. * 地址 获取单个
  117. * @param Request $request
  118. * @param $id
  119. * @return mixed
  120. * @throws \think\db\exception\DataNotFoundException
  121. * @throws \think\db\exception\ModelNotFoundException
  122. * @throws \think\exception\DbException
  123. */
  124. public function address(Request $request, $id)
  125. {
  126. $addressInfo = [];
  127. if($id && is_numeric($id) && UserAddress::be(['is_del'=>0,'id'=>$id,'uid'=>$request->uid()])){
  128. $addressInfo = UserAddress::find($id)->toArray();
  129. }
  130. return app('json')->successful($addressInfo);
  131. }
  132. /**
  133. * 地址列表
  134. * @param Request $request
  135. * @param $page
  136. * @param $limit
  137. * @return mixed
  138. */
  139. public function address_list(Request $request)
  140. {
  141. list($page, $limit) = UtilService::getMore([['page',0], ['limit',20]],$request, true);
  142. $list = UserAddress::getUserValidAddressList($request->uid(),$page,$limit,'id,real_name,phone,province,city,district,detail,is_default');
  143. return app('json')->successful($list);
  144. }
  145. /**
  146. * 设置默认地址
  147. *
  148. * @param Request $request
  149. * @return mixed
  150. */
  151. public function address_default_set(Request $request)
  152. {
  153. list($id) = UtilService::getMore([['id',0]],$request, true);
  154. if(!$id || !is_numeric($id)) return app('json')->fail('参数错误!');
  155. if(!UserAddress::be(['is_del'=>0,'id'=>$id,'uid'=>$request->uid()]))
  156. return app('json')->fail('地址不存在!');
  157. $res = UserAddress::setDefaultAddress($id,$request->uid());
  158. if(!$res)
  159. return app('json')->fail('地址不存在!');
  160. else
  161. return app('json')->successful();
  162. }
  163. /**
  164. * 获取默认地址
  165. * @param Request $request
  166. * @return mixed
  167. */
  168. public function address_default(Request $request)
  169. {
  170. $defaultAddress = UserAddress::getUserDefaultAddress($request->uid(),'id,real_name,phone,province,city,district,detail,is_default');
  171. if($defaultAddress) {
  172. $defaultAddress = $defaultAddress->toArray();
  173. return app('json')->successful('ok',$defaultAddress);
  174. }
  175. return app('json')->successful('empty',[]);
  176. }
  177. /**
  178. * 修改 添加地址
  179. * @param Request $request
  180. * @return mixed
  181. */
  182. public function address_edit(Request $request)
  183. {
  184. $addressInfo = UtilService::postMore([
  185. ['address',[]],
  186. ['is_default',false],
  187. ['real_name',''],
  188. ['post_code',''],
  189. ['phone',''],
  190. ['detail',''],
  191. ['id',0]
  192. ], $request);
  193. if(!isset($addressInfo['address']['province'])) return app('json')->fail('收货地址格式错误!');
  194. if(!isset($addressInfo['address']['city'])) return app('json')->fail('收货地址格式错误!');
  195. if(!isset($addressInfo['address']['district'])) return app('json')->fail('收货地址格式错误!');
  196. $addressInfo['province'] = $addressInfo['address']['province'];
  197. $addressInfo['city'] = $addressInfo['address']['city'];
  198. $addressInfo['district'] = $addressInfo['address']['district'];
  199. $addressInfo['is_default'] = (int)$addressInfo['is_default'] == true ? 1 : 0;
  200. $addressInfo['uid'] = $request->uid();
  201. unset($addressInfo['address']);
  202. try {
  203. validate(AddressValidate::class)->check($addressInfo);
  204. } catch (ValidateException $e) {
  205. return app('json')->fail($e->getError());
  206. }
  207. if($addressInfo['id'] && UserAddress::be(['id'=>$addressInfo['id'],'uid'=>$request->uid(),'is_del'=>0])){
  208. $id = $addressInfo['id'];
  209. unset($addressInfo['id']);
  210. if(UserAddress::edit($addressInfo,$id,'id')){
  211. if($addressInfo['is_default'])
  212. UserAddress::setDefaultAddress($id,$request->uid());
  213. return app('json')->successful();
  214. }else
  215. return app('json')->fail('编辑收货地址失败!');
  216. }else{
  217. $addressInfo['add_time'] = time();
  218. if($address = UserAddress::create($addressInfo))
  219. {
  220. if($addressInfo['is_default'])
  221. {
  222. UserAddress::setDefaultAddress($address->id,$request->uid());
  223. }
  224. return app('json')->successful(['id'=>$address->id]);
  225. }else{
  226. return app('json')->fail('添加收货地址失败!');
  227. }
  228. }
  229. }
  230. /**
  231. * 删除地址
  232. *
  233. * @param Request $request
  234. * @return mixed
  235. */
  236. public function address_del(Request $request)
  237. {
  238. list($id) = UtilService::postMore([['id',0]], $request, true);
  239. if(!$id || !is_numeric($id)) return app('json')->fail('参数错误!');
  240. if(!UserAddress::be(['is_del'=>0,'id'=>$id,'uid'=>$request->uid()]))
  241. return app('json')->fail('地址不存在!');
  242. if(UserAddress::edit(['is_del'=>'1'],$id,'id'))
  243. return app('json')->successful();
  244. else
  245. return app('json')->fail('删除地址失败!');
  246. }
  247. /**
  248. * 获取收藏产品
  249. *
  250. * @param Request $request
  251. * @return mixed
  252. */
  253. public function collect_user(Request $request)
  254. {
  255. list($page, $limit) = UtilService::getMore([
  256. ['page',0],
  257. ['limit',0]
  258. ], $request, true);
  259. if(!(int)$limit) return app('json')->successful([]);
  260. $productRelationList = StoreProductRelation::getUserCollectProduct($request->uid(), (int)$page, (int)$limit);
  261. return app('json')->successful($productRelationList);
  262. }
  263. /**
  264. * 添加收藏
  265. * @param Request $request
  266. * @param $id
  267. * @param $category
  268. * @return mixed
  269. */
  270. public function collect_add(Request $request)
  271. {
  272. list($id, $category) = UtilService::postMore([['id',0], ['category','product']], $request, true);
  273. if(!$id || !is_numeric($id)) return app('json')->fail('参数错误');
  274. $res = StoreProductRelation::productRelation($id, $request->uid(),'collect', $category);
  275. if(!$res) return app('json')->fail(StoreProductRelation::getErrorInfo());
  276. else return app('json')->successful();
  277. }
  278. /**
  279. * 取消收藏
  280. *
  281. * @param Request $request
  282. * @return mixed
  283. */
  284. public function collect_del(Request $request)
  285. {
  286. list($id, $category) = UtilService::postMore([['id',0], ['category','product']], $request, true);
  287. if(!$id || !is_numeric($id)) return app('json')->fail('参数错误');
  288. $res = StoreProductRelation::unProductRelation($id, $request->uid(),'collect', $category);
  289. if(!$res) return app('json')->fail(StoreProductRelation::getErrorInfo());
  290. else return app('json')->successful();
  291. }
  292. /**
  293. * 批量收藏
  294. * @param Request $request
  295. * @return mixed
  296. */
  297. public function collect_all(Request $request)
  298. {
  299. $collectInfo = UtilService::postMore([
  300. ['id',[]],
  301. ['category','product'],
  302. ], $request);
  303. if(!count($collectInfo['id'])) return app('json')->fail('参数错误');
  304. $productIdS = $collectInfo['id'];
  305. $res = StoreProductRelation::productRelationAll($productIdS, $request->uid(),'collect', $collectInfo['category']);
  306. if(!$res) return app('json')->fail(StoreProductRelation::getErrorInfo());
  307. else return app('json')->successful('收藏成功');
  308. }
  309. /**
  310. * 添加点赞
  311. *
  312. * @param Request $request
  313. * @return mixed
  314. */
  315. // public function like_add(Request $request)
  316. // {
  317. // list($id, $category) = UtilService::postMore([['id',0], ['category','product']], $request, true);
  318. // if(!$id || !is_numeric($id)) return app('json')->fail('参数错误');
  319. // $res = StoreProductRelation::productRelation($id,$request->uid(),'like',$category);
  320. // if(!$res) return app('json')->fail(StoreProductRelation::getErrorInfo());
  321. // else return app('json')->successful();
  322. // }
  323. /**
  324. * 取消点赞
  325. *
  326. * @param Request $request
  327. * @return mixed
  328. */
  329. // public function like_del(Request $request)
  330. // {
  331. // list($id, $category) = UtilService::postMore([['id',0], ['category','product']], $request, true);
  332. // if(!$id || !is_numeric($id)) return app('json')->fail('参数错误');
  333. // $res = StoreProductRelation::unProductRelation($id, $request->uid(),'like',$category);
  334. // if(!$res) return app('json')->fail(StoreProductRelation::getErrorInfo());
  335. // else return app('json')->successful();
  336. // }
  337. /**
  338. * 签到 配置
  339. * @return mixed
  340. * @throws \think\db\exception\DataNotFoundException
  341. * @throws \think\db\exception\ModelNotFoundException
  342. * @throws \think\exception\DbException
  343. */
  344. public function sign_config()
  345. {
  346. $signConfig = GroupDataService::getData('sign_day_num') ?? [];
  347. return app('json')->successful($signConfig);
  348. }
  349. /**
  350. * 签到 列表
  351. * @param Request $request
  352. * @param $page
  353. * @param $limit
  354. * @return mixed
  355. */
  356. public function sign_list(Request $request)
  357. {
  358. list($page, $limit) = UtilService::getMore([
  359. ['page',0],
  360. ['limit',0]
  361. ], $request, true);
  362. if(!$limit) return app('json')->successful([]);
  363. $signList = UserSign::getSignList($request->uid(),(int)$page,(int)$limit);
  364. if($signList) $signList = $signList->toArray();
  365. return app('json')->successful($signList);
  366. }
  367. /**
  368. * 签到
  369. * @param Request $request
  370. * @return mixed
  371. */
  372. public function sign_integral(Request $request)
  373. {
  374. $signed = UserSign::getIsSign($request->uid());
  375. if($signed) return app('json')->fail('已签到');
  376. if(false !== ($integral = UserSign::sign($request->uid())))
  377. return app('json')->successful('签到获得'.floatval($integral).'积分',['integral'=>$integral]);
  378. return app('json')->fail(UserSign::getErrorInfo('签到失败'));
  379. }
  380. /**
  381. * 签到用户信息
  382. * @param Request $request
  383. * @return mixed
  384. */
  385. public function sign_user(Request $request)
  386. {
  387. list($sign,$integral,$all) = UtilService::postMore([
  388. ['sign',0],
  389. ['integral',0],
  390. ['all',0],
  391. ],$request,true);
  392. $user = $request->user();
  393. //是否统计签到
  394. if($sign || $all){
  395. $user['sum_sgin_day'] = UserSign::getSignSumDay($user['uid']);
  396. $user['is_day_sgin'] = UserSign::getIsSign($user['uid']);
  397. $user['is_YesterDay_sgin'] = UserSign::getIsSign($user['uid'],'yesterday');
  398. if(!$user['is_day_sgin'] && !$user['is_YesterDay_sgin']){ $user['sign_num'] = 0;}
  399. }
  400. //是否统计积分使用情况
  401. if($integral || $all){
  402. $user['sum_integral'] = (int)UserBill::getRecordCount($user['uid'],'integral','sign,system_add,gain');
  403. $user['deduction_integral'] = (int)UserBill::getRecordCount($user['uid'],'integral','deduction') ?? 0;
  404. $user['today_integral'] = (int)UserBill::getRecordCount($user['uid'],'integral','sign,system_add,gain','today');
  405. }
  406. unset($user['pwd']);
  407. if(!$user['is_promoter']){
  408. $user['is_promoter']=(int)SystemConfigService::get('store_brokerage_statu') == 2 ? true : false;
  409. }
  410. return app('json')->successful($user->hidden(['account','real_name','birthday','card_id','mark','partner_id','group_id','add_time','add_ip','phone','last_time','last_ip','spread_uid','spread_time','user_type','status','level','clean_time','addres'])->toArray());
  411. }
  412. /**
  413. * 签到列表(年月)
  414. *
  415. * @param Request $request
  416. * @return mixed
  417. */
  418. public function sign_month(Request $request)
  419. {
  420. list($page, $limit) = UtilService::getMore([
  421. ['page',0],
  422. ['limit',0]
  423. ], $request, true);
  424. if(!$limit) return app('json')->successful([]);
  425. $userSignList = UserSign::getSignMonthList($request->uid(), (int)$page, (int)$limit);
  426. return app('json')->successful($userSignList);
  427. }
  428. /**
  429. * 获取活动状态
  430. * @return mixed
  431. */
  432. public function activity()
  433. {
  434. $data['is_bargin'] = StoreBargain::validBargain() ? true : false;
  435. $data['is_pink'] = StoreCombination::getPinkIsOpen() ? true : false;
  436. $data['is_seckill'] = StoreSeckill::getSeckillCount() ? true : false;
  437. return app('json')->successful($data);
  438. }
  439. /**
  440. * 用户修改信息
  441. * @param Request $request
  442. * @return mixed
  443. */
  444. public function edit(Request $request)
  445. {
  446. list($avatar,$nickname) = UtilService::postMore([
  447. ['avatar',''],
  448. ['nickname',''],
  449. ],$request,true);
  450. if(User::editUser($avatar,$nickname,$request->uid())) return app('json')->successful('修改成功');
  451. return app('json')->fail('修改失败');
  452. }
  453. /**
  454. * 推广人排行
  455. * @param Request $request
  456. * @return mixed
  457. * @throws \think\db\exception\DataNotFoundException
  458. * @throws \think\db\exception\ModelNotFoundException
  459. * @throws \think\exception\DbException
  460. */
  461. public function rank(Request $request){
  462. $data = UtilService::getMore([
  463. ['page',''],
  464. ['limit',''],
  465. ['type','']
  466. ],$request);
  467. $users = User::getRankList($data);
  468. return app('json')->success($users);
  469. }
  470. /**
  471. * 佣金排行
  472. * @param Request $request
  473. * @return mixed
  474. */
  475. public function brokerage_rank(Request $request){
  476. $data = UtilService::getMore([
  477. ['page',''],
  478. ['limit'],
  479. ['type']
  480. ],$request);
  481. return app('json')->success([
  482. 'rank' => User::brokerageRank($data),
  483. 'position'=> User::currentUserRank($request->user()['brokerage_price'])
  484. ]);
  485. }
  486. }