UserController.php 17 KB

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