UserModel.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. <?php
  2. namespace app\common\model;
  3. use app\api\services\UserServices;
  4. use app\common\model\TimeModel;
  5. //use app\model\RedPoolModel;
  6. //use app\model\RedStorePoolModel;
  7. use app\common\model\UserDataModel;
  8. use Darabonba\GatewaySpi\Models\InterceptorContext\request;
  9. use services\CacheServices;
  10. use think\Exception;
  11. use think\facade\Db;
  12. use think\Model;
  13. class UserModel extends Model
  14. {
  15. protected $name = "user";
  16. // 更改用户密码
  17. public function editLoginPass($request){
  18. $params = $request->param();
  19. //
  20. if (!vertifyPass(AESjiemi($params['password']))){
  21. throw new Exception('密码必须包含字母和数字,长度大于8位');
  22. }
  23. // 验证短信验证码
  24. $phone = $params['phone'];
  25. if (!self::where(['mobile'=>$phone])->find()){
  26. return api_error_return(['msg'=>'账号未注册', 'data'=>null, 'code'=>503]);
  27. }
  28. $userser = new UserServices();
  29. if (!$userser->checkSmsCode($params['code'], 'editpass', $params['phone'])){
  30. throw new Exception('验证码错误或过期');
  31. }
  32. Db::startTrans();
  33. try {
  34. self::where(['mobile'=>$params['phone']])->update(['password'=>md5($params['password']), 'pass_enable'=>AESjiemi($params['password'])]);
  35. Db::commit();
  36. return api_succ_return('设置成功');
  37. }catch (\Exception $e){
  38. Db::rollBack();
  39. return api_error_return($e->getMessage());
  40. }
  41. }
  42. // 更改用户密码
  43. public function editSecurityPass($request){
  44. $params = $request->param();
  45. // try {
  46. // validate(UserValidate::class)->scene('register')->check($params);
  47. //
  48. if (!vertifySecurityPass(AESjiemi($params['password']))){
  49. throw new Exception('密码必须是6位数字');
  50. }
  51. // 验证短信验证码
  52. $phone = $params['phone'];
  53. if (!self::where(['mobile'=>$phone])->find()){
  54. return api_error_return(['msg'=>'账号未注册', 'data'=>null, 'code'=>503]);
  55. }
  56. $userser = new UserServices();
  57. if (!$userser->checkSmsCode($params['code'], 'securitypass', $params['phone'])){
  58. throw new Exception('验证码错误或过期');
  59. }
  60. Db::startTrans();
  61. try {
  62. self::where(['mobile'=>$params['phone']])->update(['pay_pass'=>md5($params['password']), 'pay_pass_enable'=>AESjiemi($params['password'])]);
  63. Db::commit();
  64. return api_succ_return('设置成功');
  65. }catch (\Exception $e){
  66. Db::rollBack();
  67. return api_error_return($e->getMessage());
  68. }
  69. }
  70. /**
  71. * 用户关联信息
  72. * @return \think\model\relation\HasOne
  73. */
  74. public function userData ()
  75. {
  76. return self::hasOne(UserDataModel::class, 'uid', 'id')->field('data_id,uid,email,sex,intro,qq,alipay,alipay_name,real_name,idcard,idname,rz_money,area_code_ids,area_text,birthday,bank_no,bank_name');
  77. }
  78. public function getUserDetailByUid($uid){
  79. $user = self::where(['id'=>$uid])->field('user_name,nickname,green_score,user_type,scan_green_score,mobile,code,total_profit_money,pid,total_number,profit_money,total_performance,performance_me,money,money_income,store_expire_time,score,level,avatar,status,deny_reason,login_count,login_ip,login_time,password,id,total_money_excharge,total_withdraw,recycle_count,store_type,total_appoint_count,total_box,today_box')->where('id', $uid)->find();
  80. // $user['avatar'] = ($user['avatar']=='static/img/user/default_avatar.jpg'?(__HTTPLOCALIMG($user['avatar']).'?time'=time()) :__HTTPIMG($user['avatar']));
  81. $user['avatar'] = getWebUrl().'/'.$user['avatar'].'?time='.time();
  82. $user['share_url'] = getWebUrl(). '/api/' . 'registerH5web?code=' . $user['code'] . '&type=1'.' 请复制注册链接到浏览器打开注册';
  83. $user['share_url_orgin'] = getWebUrl(). '/api/' . 'registerH5web?code=' . $user['code'] . '&type=1';
  84. // 本来计划是 隐藏首页的分类, 但是如果用户不登录的情况下
  85. $user['has_hiddencate'] = 0;
  86. if($user['id'] == '5344494'){
  87. $user['has_hiddencate'] = 1;
  88. }
  89. if ($user['level'] == 4){
  90. $user['level'] = 3;
  91. }
  92. return $user->toArray();
  93. }
  94. // public function getUserDetailByMobile($mobile){
  95. // return self::where(['mobile'=>$mobile])->field('is_auth,level,nickname, mobile, code, px_code, score, password, status, avatar, id, login_count, login_time, login_ip, money')->find()->toArray();
  96. // }
  97. public function updateUserLoginInfo($uid){
  98. $user = self::where(['id'=>$uid])->field('*')->find();
  99. $time = time();
  100. // 更新登录信息
  101. $data['login_time'] = $user['login_time'] = $time;
  102. $data['login_ip'] = $user['login_ip'] = get_client_ip();
  103. $data['login_count'] = $user['login_count'] = $user['login_count'] + 1;
  104. self::update($data, ['id' => $user['id']]);
  105. }
  106. public function getUserInfo (array $map, string $field = '*')
  107. {
  108. return self::field($field)->withAttr('avatar', function ($val, $data){return __HTTPLOCALIMG($val);})->where($map)->find()->toArray();
  109. }
  110. // 获得团队数据
  111. public function getFansData(int $uid)
  112. {
  113. $user = $this->getUserInfo(['id' => $uid], 'total_number,total_number_real,path,total_active,pid,total_performance,performance_me,today_number_real,is_regup');
  114. //团队总人数
  115. $data['total_number'] = $user['total_number'];
  116. //今日团队总人数
  117. // $data['today_number_real'] = $user['today_number_real'];
  118. // // 实名人数
  119. // $data['total_number_real'] = $user['total_number_real'];
  120. // 团队总活跃
  121. // $data['total_active_number'] = $this->whereFindInSet('path', $user['path'])->where('active_time', '>', 0)->count('active_time');
  122. // 团队总活跃点
  123. // $data['total_active'] = $user['total_active'];
  124. // $data['active_me'] = $user['active_me'];
  125. // sr_throw();
  126. // 小区活跃点
  127. // $data['xiaoqu_active'] = $this->xiaoquActive($uid);
  128. // 小区总人数
  129. // $data['xiaoqu_number'] = $this->xiaoquNumber($uid);
  130. // 小区实名人数
  131. // $data['xiaoqu_real_number'] = $this->xiaoquNumber($uid, true);
  132. // 小区活跃人数
  133. // $data['xiaoqu_active_number'] = 0;
  134. // 直推人数
  135. // $total_direct = $this->getRecNumber(intval($uid));
  136. // $total_direct = Db::name('user')->where('pid', $uid)->count('id');
  137. //
  138. // $data['direct_number'] = $total_direct;
  139. //
  140. // $data['share_total_number'] = Db::name('user')->whereFindInSet('path', $uid)->count('id');
  141. // 直推实名人数
  142. $direct_real_number = $this->getRecNumber(intval($uid), 1);
  143. // $data['direct_real_number'] = $direct_real_number;
  144. // 直推无效人数
  145. // $data['direct_invalid_number'] = $total_direct - $direct_real_number;
  146. // 个人活跃点
  147. // $data['active_me'] = $user['active_me'];
  148. // $data['xiaoqu_performance'] = $this->xiaoquPerformance($uid);
  149. // 总活跃
  150. // $data['total_active'] = $user['total_active'];
  151. // 团队总业绩
  152. // $data['total_performance'] = $user['total_performance'];
  153. // 个人总业绩
  154. // $data['performance_me'] = number_format($user['performance_me'], 0,'', '');
  155. // 认购卷有效直推
  156. // $zt_couponcount = self::where('pid', $uid)->where('is_auth', 1)->where('performance_me', '>', 0)->count('id');
  157. // $zt_num = Db::name('user')->where('pid', $uid)->where('is_seven_valid', 2)->count('id');
  158. // $data['coupon_zt_num'] = $zt_num>0?$zt_num:0;
  159. $data['inviter'] = null;
  160. // sr_throw();
  161. // if ($user['is_regup'] == 1 && $user['pid']) {
  162. // $data['inviter'] = $this->getUserInfo(['id' => $user['pid']], 'avatar,nickname,level,mobile');
  163. // }
  164. if (Db::name('user')->where('id', $user['pid'])->find()){
  165. $data['inviter'] = Db::name('user')->where('id', $user['pid'])->withAttr('avatar', function ($val, $data){
  166. return getWebUrl() . '/'.$val;
  167. })->withAttr('mobile', function ($val, $data){
  168. return substr($val, 0, 3).'****'.substr($val, 7);
  169. })->field('avatar,nickname,level,mobile')->find();
  170. }
  171. return $data;
  172. }
  173. // 获得小区活跃点
  174. public function xiaoquActive (int $uid)
  175. {
  176. // $user = self::where('id', $uid)->field('active_me,total_active')->find()->toArray();
  177. // $max_active = self::where('pid', $uid)->order('total_active desc')->limit(0, 2)->sum('total_active');
  178. // if ($max_active <= 0) return 0; // 没有小区
  179. // return $user['total_active'] - $user['active_me'] - $max_active > 0 ? $user['total_active'] - $user['active_me'] - $max_active : 0;
  180. // $user = self::where('id', $uid)->field('active_me,total_active')->find()->toArray();
  181. $count = self::where('pid', $uid)->count('id');
  182. if ($count < 2){
  183. return 0;
  184. }
  185. $max_active = self::where('pid', $uid)->max('total_active');
  186. $max_activeinfo = self::where('pid', $uid)->order('total_active desc')->limit(0, 1)->field('active_me,total_active,id')->select()->toArray();
  187. $xiaoqu_active = self::where('pid', $uid)->where('id', 'not in', [$max_activeinfo[0]['id']])->sum('total_active');
  188. return $xiaoqu_active;
  189. // return number_format($xiaoqu_active, 4, '.', '');
  190. }
  191. // 获得小区业绩
  192. public function xiaoquPerformance (int $uid)
  193. {
  194. $count = self::where('pid', $uid)->count('id');
  195. if ($count < 2){
  196. return 0;
  197. }
  198. $max_activeinfo = self::where('pid', $uid)->order('total_performance desc')->limit(0, 1)->field('active_me,total_active,id')->select()->toArray();
  199. $xiaoqu_active = self::where('pid', $uid)->where('id', 'not in', [$max_activeinfo[0]['id']])->sum('total_performance');
  200. return $xiaoqu_active;
  201. // return number_format($xiaoqu_active, 4, '.', '');
  202. }
  203. // 获得小区总人数
  204. public function xiaoquNumber (int $uid, $is_auth = false)
  205. {
  206. $field = 'total_number';
  207. $is_auth && $field = 'total_number_real';
  208. $user = self::where('id', $uid)->field('total_number,total_number_real')->find()->toArray();
  209. $max_active = self::where('pid', $uid)->order('total_active desc')->limit(0, 1)->sum($field);
  210. if ($max_active <= 0) return 0; // 没有小区
  211. return $user[$field] - $max_active > 0 ? $user[$field] - $max_active : 0;
  212. }
  213. // 获得直推人数
  214. public function getRecNumber (int $uid, $is_auth = 0)
  215. {
  216. if ($is_auth == 0){
  217. $count = self::where('pid', $uid)->count('id');
  218. return $count>0?$count:0;
  219. }else{
  220. $count = self::where('pid', $uid)->where('is_auth', 1)->count('id');
  221. return $count>0?$count:0;
  222. }
  223. }
  224. public function getFansList($uid, $limit, $type, $keyworld)
  225. {
  226. $where = array();
  227. if (!empty($keyworld)){
  228. $where = [['user_name|mobile', 'LIKE', '%'.$keyworld.'%']];
  229. }
  230. // $list = self::whereFindInSet('path', $uid)
  231. // ->withAttr('avatar', function ($val, $data){
  232. // return getWebUrl().'/'.$val;
  233. // })
  234. // ->where($where)
  235. // ->where('pid', $uid)
  236. // ->field('id,avatar,nickname,mobile,level,total_number,total_team_box,total_box,today_team_box,today_box,today_money,todayaward_money,zt_num')
  237. // ->withAttr('mobile', function ($val, $data){
  238. // return substr($val, 0, 3).'****'.substr($val, 7);
  239. // })
  240. // ->paginate($limit)
  241. // ->toArray();
  242. $list = self::where('pid', $uid)
  243. ->withAttr('avatar', function ($val, $data){
  244. return getWebUrl().'/'.$val;
  245. })
  246. ->where($where)
  247. ->field('id,avatar,nickname,mobile,level,total_number,total_team_box,total_box,today_team_box,today_box,today_money,todayaward_money,zt_num,store_type,has_fd')
  248. ->withAttr('mobile', function ($val, $data){
  249. return substr($val, 0, 3).'****'.substr($val, 7);
  250. })
  251. ->paginate($limit)
  252. ->toArray();
  253. foreach ($list['data'] as $key=>&$val){
  254. $services_count = Db::name('user')->whereFindInSet('path', $val['id'])->where('store_type', 1)->count();
  255. $val['services_count'] = $services_count;
  256. $total_real_count = Db::name('user')->whereFindInSet('path', $val['id'])->where('has_fd', 1)->count();
  257. $val['total_real_count'] = $total_real_count;
  258. $zt_total_real_count = Db::name('user')->where('pid', $val['id'])->where('has_fd', 1)->count();
  259. $val['zt_total_real_count'] = $zt_total_real_count;
  260. }
  261. return $list['data'];
  262. }
  263. // 直推列表
  264. public function getDirectList ($uid, $is_auth, $limit, $keyworld)
  265. {
  266. $where = [];
  267. if (!empty($keyworld)){
  268. $where = [['mobile', 'LIKE', '%'.$keyworld.'%']];
  269. }
  270. $list = self::where('pid', $uid)
  271. ->withAttr('avatar', function ($val, $data){
  272. return getWebUrl().'/'.$val;
  273. })
  274. ->where($where)
  275. // ->whereIn('is_auth', $is_auth)
  276. ->field('id,avatar,nickname,code,reg_time,is_auth,xz_level,mobile,total_active,total_number,total_number_real,today_number_real,total_performance,active_me,level')
  277. ->paginate($limit)
  278. ->toArray();
  279. foreach ($list['data'] as $key=>$val){
  280. $count = Db::name('user')->where('pid', $val['id'])->count('id');
  281. $list['data'][$key]['zt_num'] = $count;
  282. if ($val['is_auth'] == 1){
  283. // 如果已经实名并且星钻的日志
  284. if (!Db::name('xz_log')->where([['uid', '=', $val['id']],['type','=', 3],['create_at','>', sr_getcurtime(time()-86400*3)]])->find()){
  285. if (time() > strtotime('+3 day', strtotime($val['reg_time']))){
  286. $list['data'][$key]['tips'] = '他已经三天没有做任务了';
  287. }else{
  288. $list['data'][$key]['tips'] = '刚注册未满三天';
  289. }
  290. }else{
  291. $list['data'][$key]['tips'] = '';
  292. }
  293. }else{
  294. $list['data'][$key]['tips'] = '还未进行实名认证';
  295. }
  296. }
  297. return $list['data'];
  298. }
  299. // 直推列表
  300. public function getDirectDataList ($uid, $limit)
  301. {
  302. $where = [];
  303. $list = self::where('pid', $uid)
  304. ->withAttr('avatar', function ($val, $data){
  305. return getWebUrl().'/'.$val;
  306. })
  307. ->where($where)
  308. // ->whereIn('is_auth', $is_auth)
  309. ->field('id,avatar,nickname,code,reg_time,mobile,performance_me,total_number,total_performance,level')
  310. ->order('total_performance desc')
  311. ->paginate($limit)
  312. ->toArray();
  313. return $list['data'];
  314. }
  315. // 购买商品
  316. public function buyGoodsSuccess($uid, $money){
  317. $scale = env('coupon.BUY_GOODS_SCALE')/100;
  318. $de_score = number_format($scale * $money, 2, '.', '');
  319. edit_user_score(5, $uid, $de_score);
  320. $dered_score = number_format((1-$scale) * $money, 2, '.', '');
  321. edit_user_redscore(1, $uid, $dered_score);
  322. }
  323. // 勋章兑换
  324. public function medalExchange($uid, $number){
  325. if (intval($number) <= 0 ){
  326. throw new Exception('参数错误');
  327. }
  328. $user = self::where('id', $uid)->field('is_reward, id, is_auth, xz_num, medal, score')->find()->toArray();
  329. if ($user['is_auth'] != 1){
  330. throw new Exception('还未实名');
  331. }
  332. if ($user['is_reward'] != 1){
  333. throw new Exception('该账户禁止交易');
  334. }
  335. $canxz = true;
  336. $xz_error_text = '';
  337. $canscore = true;
  338. $score_error_text = '';
  339. if ($user['xz_num'] < 10){
  340. $canxz = false;
  341. $xz_error_text = '星钻必需大于10个才能兑换';
  342. // throw new Exception('星钻必需大于10个才能兑换');
  343. }
  344. if ($user['xz_num'] < $number){
  345. $canxz = false;
  346. $xz_error_text = '星钻不足';
  347. // throw new Exception('星钻不足');
  348. }
  349. if ($user['xz_num'] - $number <= 10){
  350. $canxz = false;
  351. $xz_error_text = '账户必须预留10个星钻';
  352. // throw new Exception('账户必须预留10个星钻');
  353. }
  354. if ($canxz){
  355. edit_user_xz(1, $uid, $number);
  356. edit_user_medal(1, $uid, $number);
  357. }else{
  358. if ($user['score'] < $number * 5){
  359. $canscore = false;
  360. $score_error_text = '积分不足';
  361. // throw new Exception('积分不足');
  362. }
  363. if ($canscore){
  364. // 积分
  365. edit_user_score(23, $uid, $number * 5);
  366. edit_user_medal(1, $uid, $number);
  367. }
  368. }
  369. if (!empty($score_error_text)){
  370. sr_throw($score_error_text);
  371. }
  372. if (!empty($xz_error_text)){
  373. sr_throw($xz_error_text);
  374. }
  375. }
  376. // 积分兑换成余额
  377. public function scoreExchangeMoney($uid, $score){
  378. $userinfo = self::where('id', $uid)->field('id,money,score,is_reward,status')->find();
  379. if ($userinfo['is_reward'] !=1){
  380. throw new Exception('账号被禁止交易');
  381. }
  382. if ($userinfo['status'] != 1){
  383. throw new Exception('账号状态异常');
  384. }
  385. if ($score < 10){
  386. throw new Exception('10积分起提');
  387. }
  388. if ($userinfo['score'] < $score){
  389. throw new Exception('用户积分不足');
  390. }
  391. // $begin = env('api.EXCHANGETOMONEY_BEGIN');
  392. // $scale = env('api.EXCHANGETOMONEY_SCALE');
  393. // $shouxu = $score * $scale/100 + $begin;
  394. $shouxu = 0;
  395. $income = number_format($score-$shouxu, 4, '.', '');
  396. edit_user_money(4, $uid, $income);
  397. edit_user_score(12, $uid, $score);
  398. $m_exchange = new ScoreExchangeModel();
  399. $m_exchange->insert([
  400. 'uid'=>$uid,
  401. 'score'=>$score,
  402. 'begin_money'=>0,
  403. 'begin_scale'=>0,
  404. 'in_money'=> $income,
  405. 'create_time'=>sr_getcurtime(time())
  406. ]);
  407. }
  408. // 余额兑换成积分
  409. public function moneyExchangeScore($uid, $money){
  410. $userinfo = self::where('id', $uid)->field('id,money,score,is_reward,status')->find();
  411. if ($userinfo['is_reward'] !=1){
  412. throw new Exception('账号被禁止交易');
  413. }
  414. if ($userinfo['status'] != 1){
  415. throw new Exception('账号状态异常');
  416. }
  417. // if ($money < 10){
  418. // throw new Exception('1起提');
  419. // }
  420. if ($userinfo['money'] < $money){
  421. throw new Exception('余额不足');
  422. }
  423. // $begin = env('api.EXCHANGETOMONEY_BEGIN');
  424. // $scale = env('api.EXCHANGETOMONEY_SCALE');
  425. // $shouxu = $score * $scale/100 + $begin;
  426. // $shouxu = 0;
  427. // $income = number_format($score-$shouxu, 4, '.', '');
  428. edit_user_money(11, $uid, $money);
  429. edit_user_score(19, $uid, $money);
  430. // $m_exchange = new ScoreExchangeModel();
  431. // $m_exchange->insert([
  432. // 'uid'=>$uid,
  433. // 'score'=>$score,
  434. // 'begin_money'=>0,
  435. // 'begin_scale'=>0,
  436. // 'in_money'=> $income,
  437. // 'create_time'=>sr_getcurtime(time())
  438. // ]);
  439. }
  440. public function test(){
  441. // sr_throw();
  442. throw new Exception('aa');
  443. }
  444. public function getRecycleCard($uid, $type, $user_info){
  445. if (!in_array($type, ['everyday', 'direct'])){
  446. sr_throw('类型错误');
  447. }
  448. if ($type == 'everyday'){
  449. if (Db::name('recyclecard_log')->whereDay('create_at', 'today')->where('uid', $uid)->where('type', 1)->find()){
  450. sr_throw('今日已领取,请明天再来');
  451. }
  452. if ($user_info['store_type'] == 1){
  453. edit_user_recyclecard(1, $uid, 120);
  454. }else{
  455. edit_user_recyclecard(1, $uid, 20);
  456. }
  457. }
  458. if ($type == 'direct'){
  459. if (Db::name('recyclecard_log')->whereDay('create_at', 'today')->where('uid', $uid)->where('type', 2)->find()){
  460. sr_throw('今日已领取,请明天再来');
  461. }
  462. $count = Db::name('user')->where('pid', $uid)->where('has_fd', 1)->count('id');
  463. if ($count > 0){
  464. edit_user_recyclecard(2, $uid, $count * env('boxsetting.ONE_DIRECT_RECYCLE_COUNT'));
  465. }else{
  466. sr_throw('暂无有效直推');
  467. }
  468. }
  469. }
  470. public function getUserTeamMoney($uid){
  471. $user_info = Db::name('user')->where('id', $uid)->find();
  472. if ($user_info['store_type'] != 1){
  473. sr_throw('还未开通服务商');
  474. }
  475. $cur_time = time();
  476. $day = sr_getcurtime($cur_time, 'Y-m-d');
  477. $next_day = sr_getcurtime($cur_time+86400, 'Y-m-d');
  478. // 10:00:00-01:59:59
  479. $get_teammoneysetting = env('teamsetting.EVERYDAY_GET_TEAM_MONEY');
  480. $setting_times = explode('-', $get_teammoneysetting);
  481. $has_yesterday = false;
  482. // 如果是在24点之前就要查询预约记录
  483. if ($cur_time > strtotime($day.' '.$setting_times[0]) && $cur_time < strtotime($next_day.' '.'00:00:00')){
  484. $has_yesterday = true;
  485. if (!Db::name('box_record')->where('uid', $uid)->whereDay('create_time', 'today')->find()){
  486. sr_throw('今日还未预约福袋');
  487. }
  488. }
  489. if (!($cur_time > strtotime($next_day.' '.'00:00:00') && $cur_time < strtotime($next_day.' '.$setting_times[1]))){
  490. sr_throw('领取失败,不在领取时间内');
  491. }
  492. if ($user_info['today_money'] > 0){
  493. $today_money = $user_info['today_money'];
  494. edit_user_money(6, $uid, $today_money);
  495. Db::name('user')->where('id', $uid)->save([
  496. 'today_money'=>0
  497. ]);
  498. // Db::name('user')->where('id', $uid)->inc('yesterday_money', )
  499. // 累计奖金
  500. Db::name('user')->where('id', $uid)->inc('todayaward_money', $user_info['today_money'])->update();
  501. }else{
  502. sr_throw('暂无奖金');
  503. }
  504. }
  505. public function getUserIncomeTeam($uid){
  506. $user_info = Db::name('user')->where('id', $uid)->find();
  507. if ($user_info['profit_money'] < 100){
  508. sr_throw('利润小于100,结算失败');
  509. }else{
  510. $profit_endmoney = (int)$user_info['profit_money'];
  511. $profit_endmoney = $profit_endmoney - $profit_endmoney % 100;
  512. edit_user_money(8, $uid, $profit_endmoney);
  513. Db::name('user')->where('id', $uid)->inc('total_profit_money', $profit_endmoney)->update();
  514. Db::name('user')->where('id', $uid)->dec('profit_money', $profit_endmoney)->update();
  515. }
  516. }
  517. public function bussinessApply($uid, $params){
  518. if (Db::name('business_apply')->where('uid', $uid)->where('mobile', $params['mobile'])->where('status', 1)->find()){
  519. sr_throw('您好,你已提交申请,请耐心等待客服联系');
  520. }
  521. Db::name('business_apply')->insert([
  522. 'name'=>$params['name'],
  523. 'mobile'=>$params['mobile'],
  524. 'message'=>$params['message'],
  525. 'uid'=>$uid,
  526. 'create_time'=>sr_getcurtime(time())
  527. ]);
  528. }
  529. public function bangUpFriend($uid, $params){
  530. $user_info = Db::name('user')->where('id', $uid)->find();
  531. if ($user_info['pid'] > 0){
  532. return api_succ_return('你已经绑定成功,无需在绑定');
  533. }
  534. $pid_info = Db::name('user')->where('code', $params['invite_code'])->find();
  535. if (!$pid_info){
  536. sr_throw('绑定失败,未查询到你的好友');
  537. }
  538. Db::startTrans();
  539. try {
  540. $ser_user = new UserServices();
  541. $ser_user->bindRelation($params['invite_code'], $uid);
  542. Db::commit();
  543. }catch (\Exception $e){
  544. Db::rollback();
  545. return api_error_return('绑定失败');
  546. }
  547. return api_succ_return('绑定成功');
  548. }
  549. }