Member.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | [ WE CAN DO IT MORE SIMPLE ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2018-2020 rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: TABLE ME
  8. // +----------------------------------------------------------------------
  9. // | Date: 2020-08-31 20:43
  10. // +----------------------------------------------------------------------
  11. namespace app\system\controller\v1;
  12. use app\BaseController;
  13. use app\model\api\MemberDetail;
  14. use app\model\system\Member as MemberModel;
  15. use app\model\system\MemberFollow;
  16. use app\model\system\MemberLevel;
  17. use library\services\UtilService;
  18. use library\utils\IpLocation;
  19. use app\Request;
  20. class Member extends BaseController
  21. {
  22. /**
  23. *
  24. * @param Request $request
  25. * @return mixed
  26. */
  27. public function getMember(Request $request)
  28. {
  29. $pageSize = 50;
  30. $post = UtilService::getMore([
  31. ['page',1],
  32. ['keyword',''],
  33. ['i_uid',''],
  34. ['sassid',''],
  35. ['mobile',''],
  36. ['level',''],
  37. ['uid',''],
  38. ['follow_type',''],
  39. ['timeVal',[]],
  40. ['not_buy',''],
  41. ['label',''],
  42. ['admin_id',''],
  43. ['not_follow',''],
  44. ['lately_login',''],
  45. ['type','']
  46. ]);
  47. list($pageCount,$data) = (new MemberModel())
  48. ->getList($post['page'],$post,$pageSize,'*','uid desc');
  49. $result = UtilService::getParam([
  50. 'uid',
  51. 'mobile',
  52. 'label',
  53. 'weixin_name',
  54. 'nickname',
  55. 'sex',
  56. 'avatar',
  57. 'address',
  58. 'money',
  59. 'name',
  60. "tx_money",
  61. "level_name",
  62. "site_name",
  63. 'status',
  64. 'follow_type',
  65. 'levelid',
  66. 'order_count',
  67. 'recharge_count',
  68. 'order_info_count',
  69. ['last_con_time','last_con_time','getLastTime($1)'],
  70. // 'i_mobile',
  71. 'i_nickname',
  72. 'i_uid',
  73. 'sassid',
  74. 'regip',
  75. ['regtime','regtime','date("Y-m-d H:i:s",$1)'],
  76. ['lasttime','lasttime','date("Y-m-d H:i:s",$1)'],
  77. ['ipara','regip',function($item){
  78. return (new IpLocation())->getlocation($item)['country'];
  79. }],
  80. 'last_follow_time'
  81. ],$data);
  82. return app('json')->success([
  83. 'list' => $result,
  84. 'pageCount' => $pageCount,
  85. 'pageSize' => $pageSize,
  86. 'page' => $post['page']
  87. ]);
  88. }
  89. public function down(Request $request) {
  90. $where = UtilService::getMore([
  91. ['page',1],
  92. ['keyword',''],
  93. ['i_uid',''],
  94. ['sassid',''],
  95. ['mobile',''],
  96. ['level',''],
  97. ['uid',''],
  98. ['follow_type',''],
  99. ['timeVal',[]],
  100. ['not_buy',''],
  101. ['label',''],
  102. ['admin_id',''],
  103. ['not_follow',''],
  104. ['lately_login',''],
  105. ['type','']
  106. ]);
  107. $data = (new MemberModel())
  108. ->field("m.*,s.name as site_name,l.name as level_name,
  109. (select count(*) from table_order where uid = m.uid and status > 0) as order_count,
  110. (select sum(v) from table_recharge where status = 1 and uid = m.uid ) as recharge_count,
  111. (select count(*) from table_order_info where status > 0 and uid = m.uid ) as order_info_count,
  112. (select nickname from table_member where uid = m.i_uid) as i_nickname
  113. "
  114. )
  115. ->alias("m")
  116. ->join('site s','s.sassid=m.sassid')
  117. ->leftJoin("member_level l","l.id=m.levelid")
  118. ->when(!empty($where),function ($query) use($where){
  119. //keyword
  120. if(!empty($where['keyword'])) {
  121. $query->whereLike('m.nickname',"%{$where['keyword']}%");
  122. }
  123. if(!empty($where['timeVal'][0]) && !empty($where['timeVal'][1])) {
  124. $query->where('regtime','>',strtotime($where['timeVal'][0]));
  125. $query->where('regtime','<',strtotime($where['timeVal'][1]));
  126. }
  127. if(!empty($where['not_buy'])) {
  128. //今日消费
  129. if($where['not_buy'] == 'today') {
  130. $query->whereTime("last_con_time",'today');
  131. }
  132. //7天内消费
  133. if($where['not_buy'] == '1_7day') {
  134. $time = time() - 6*24*3600;
  135. $query->where("last_con_time",'>',$time);
  136. $query->order("last_con_time","desc");
  137. }
  138. //7-13天未消费
  139. if($where['not_buy'] == '7day') {
  140. $time = time() - 13*24*3600;
  141. $times = time() - 6*24*3600;
  142. $query->where("last_con_time",'>',$time);
  143. $query->where("last_con_time",'<',$times);
  144. $query->order("last_con_time","desc");
  145. }
  146. //14天未消费
  147. if($where['not_buy'] == '14day') {
  148. $time = time() - 13*24*3600;
  149. $query->where("last_con_time",'<',$time);
  150. $query->where("last_con_time",'<>',0);
  151. $query->order("last_con_time","desc");
  152. }
  153. //1个月未消费
  154. if($where['not_buy'] == 'month') {
  155. $time = strtotime('-1 month');
  156. $query->where("last_con_time",'<',$time);
  157. $query->where("last_con_time",'<>',0);
  158. $query->order("last_con_time","desc");
  159. }
  160. //从无消费
  161. if($where['not_buy'] == 'nothing') {
  162. $query->where("last_con_time",0);
  163. }
  164. }
  165. if(!empty($where['mobile'])) {
  166. $query->whereLike('m.mobile',"%{$where['mobile']}%");
  167. }
  168. if(!empty($where['level'])) {
  169. $query->where('m.levelid',$where['level']);
  170. }
  171. if(strlen($where['follow_type']) > 0) {
  172. $query->where('m.follow_type',$where['follow_type']);
  173. }
  174. if(!empty($where['sassid'])) {
  175. //判断是否多个
  176. $sassIds = explode(',',(string)$where['sassid']);
  177. if(count($sassIds) > 1)
  178. $query->whereIn('m.sassid',$sassIds);
  179. else
  180. $query->where('m.sassid',$where['sassid']);
  181. }
  182. if(!empty($where['i_uid'])) {
  183. $query->where('m.i_uid',$where['i_uid']);
  184. }
  185. if(!empty($where['uid'])) {
  186. $query->where('m.uid',$where['uid']);
  187. }
  188. if(!empty($where['label'])) {
  189. $query->where('m.label',$where['label']);
  190. }
  191. if(!empty($where['admin_id'])) {
  192. $query->where('m.admin_id',$where['admin_id']);
  193. }
  194. if(!empty($where['not_follow'])) {
  195. if($where['not_follow']=='3day'){
  196. $time = time() - 3*24*3600;
  197. $query->where("last_follow_time",'<',$time);
  198. }else{
  199. $time = time() - 7*24*3600;
  200. $query->where("last_follow_time",'<',$time);
  201. }
  202. }
  203. if(!empty($where['lately_login'])) {
  204. $time = time() - 3*24*3600;
  205. $query->where("lasttime",'>',$time);
  206. }
  207. if(!empty($where['type'])) {
  208. if($where['type']=='new'){
  209. $query->where("last_con_time",'=',0);
  210. }else{
  211. $query->where("last_con_time",'<>',0);
  212. }
  213. }
  214. })
  215. ->order('uid desc')
  216. ->select()
  217. ->toArray();
  218. $result = UtilService::getParam([
  219. 'uid',
  220. 'mobile',
  221. 'weixin_name',
  222. 'nickname',
  223. 'sex',
  224. 'avatar',
  225. 'address',
  226. 'money',
  227. 'name',
  228. "tx_money",
  229. "level_name",
  230. "site_name",
  231. 'status',
  232. 'follow_type',
  233. 'levelid',
  234. 'order_count',
  235. 'recharge_count',
  236. 'order_info_count',
  237. // 'i_mobile',
  238. 'i_nickname',
  239. 'i_uid',
  240. 'sassid',
  241. 'regip',
  242. ['regtime','regtime','date("Y-m-d H:i:s",$1)'],
  243. ['lasttime','lasttime','date("Y-m-d H:i:s",$1)'],
  244. ['ipara','regip',function($item){
  245. return (new IpLocation())->getlocation($item)['country'];
  246. }]
  247. ],$data);
  248. return app('json')->success($result);
  249. }
  250. /**
  251. * 获取会员数据
  252. * @param Request $request
  253. * @return mixed
  254. */
  255. public function getItem(Request $request)
  256. {
  257. $pageSize = 50;
  258. $post = UtilService::getMore([
  259. ['uid',1]
  260. ]);
  261. $data = (new MemberModel())->getItem($post['uid']);
  262. $result = UtilService::getParam([
  263. 'uid',
  264. 'mobile',
  265. 'nickname',
  266. 'sex',
  267. 'avatar',
  268. 'address',
  269. 'money',
  270. 'name',
  271. "tx_money",
  272. "level_name",
  273. "site_name",
  274. 'status',
  275. 'levelid',
  276. 'order_count',
  277. 'recharge_count',
  278. 'order_info_count',
  279. 'regip',
  280. ['regtime','regtime','date("Y-m-d H:i:s",$1)'],
  281. ['lasttime','lasttime','date("Y-m-d H:i:s",$1)'],
  282. ['ipara','regip',function($item){
  283. return (new IpLocation())->getlocation($item)['country'];
  284. }]
  285. ],[$data]);
  286. return app('json')->success(empty($result) ? [] : $result[0]);
  287. }
  288. /**
  289. * 会员等级
  290. * @param Request $request
  291. * @return mixed
  292. */
  293. public function getMemberLevel(Request $request)
  294. {
  295. $pageSize = 50;
  296. $post = UtilService::getMore([
  297. ['page',1]
  298. ]);
  299. list($pageCount,$data) = (new MemberLevel())
  300. ->getList($post['page'],[function($query) use($post){
  301. }
  302. ],$pageSize,'*','id desc');
  303. $result = UtilService::getParam([
  304. 'id',
  305. 'name',
  306. 'code'
  307. ],$data);
  308. return app('json')->success([
  309. 'list' => $result,
  310. 'pageCount' => $pageCount,
  311. 'pageSize' => $pageSize,
  312. 'page' => $post['page']
  313. ]);
  314. }
  315. /**
  316. * 获取跟进管理员
  317. */
  318. public function getAdmin()
  319. {
  320. $admin = MemberFollow::alias("f")
  321. ->leftjoin('system_admin a','f.admin_id=a.id')
  322. ->field('a.id,a.name,a.username')
  323. ->where('a.id','<>','')
  324. ->group('f.admin_id')
  325. ->select()->toArray();
  326. return app('json')->success($admin);
  327. }
  328. /**
  329. * 修改会员数据
  330. * @param Request $request
  331. */
  332. public function memberUpdate(Request $request) {
  333. $post = UtilService::getMore([
  334. ['levelid','0'],
  335. ['mobile','','isMobile','请输入手机号码'],
  336. ['nickname',''],
  337. ['status','0'],
  338. ['name',''],
  339. ['password',''],
  340. ['avatar',''],
  341. ['sex','0'],
  342. ['uid','0','empty','参数错误']
  343. ], $request);
  344. $save = [
  345. 'mobile' => $post['mobile'],
  346. 'nickname' => $post['nickname'],
  347. 'sex' => $post['sex'],
  348. 'name' => $post['name'],
  349. 'levelid' => $post['levelid'],
  350. 'status' => $post['status'],
  351. 'avatar' => $post['avatar']
  352. ];
  353. if(!empty($post['password'])) {
  354. $save['password'] = md5($post['password']);
  355. }
  356. //
  357. (new MemberModel)->where('uid',$post['uid'])->save($save);
  358. return app('json')->success('修改成功');
  359. }
  360. /**
  361. * 操作明细
  362. * @param Request $request
  363. */
  364. public function detailList(Request $request) {
  365. $pageSize = 10;
  366. $post = UtilService::getMore(
  367. [
  368. ['page',1],
  369. ['uid','0'],
  370. ['time',[]]
  371. ],$request
  372. );
  373. $where['uid'] = $post['uid'];
  374. if(!empty($post['tabType']) && $post['tabType'] != 'all') {
  375. $where['code'] = $post['tabType'];
  376. }
  377. if(!empty($post['time'])) {
  378. $where['time'] = [[strtotime($post['time'][0]),strtotime($post['time'][1])],'whereBetween'];
  379. }
  380. $detail = new MemberDetail();
  381. list($pageCount,$data) = $detail->getList($post['page'],$where,$pageSize,"*","time desc");
  382. $result = UtilService::getParam([
  383. "id",
  384. "code",
  385. "v",
  386. 'title',
  387. 'content',
  388. "type",
  389. ["time","time","date('Y-m-d H:i:s',$1)"]
  390. ],$data);
  391. return app('json')->success([
  392. 'list' => $result,
  393. 'pageCount' => $pageCount,
  394. 'pageSize' => $pageSize,
  395. 'page' => $post['page']
  396. ]);
  397. }
  398. /**
  399. * 修改推荐人
  400. * @param Request $request
  401. */
  402. public function editTj(Request $request) {
  403. $post = UtilService::getMore(
  404. [
  405. ['uid','','empty','参数错误'],
  406. ['i_uid','0']
  407. ],$request
  408. );
  409. if($post['uid'] == $post['i_uid']) {
  410. return app('json')->fail('自己无法挂载自己下面');
  411. }
  412. (new \app\model\system\Member)->where('uid',$post['uid'])->save(['i_uid'=>$post['i_uid']]);
  413. return app('json')->success('操作成功');
  414. }
  415. /**
  416. * 转账操作
  417. */
  418. public function sendMoney(Request $request){
  419. $post = UtilService::getMore(
  420. [
  421. ['uid','','empty','参数错误'],
  422. ['type','','empty','请输入转账类型'],
  423. ['money','0','empty','请输入转账金额'],
  424. ['mono','']
  425. ],$request
  426. );
  427. $member = \app\model\system\Member::where('uid',$post['uid'])->find();
  428. if(empty($member)) {
  429. return app('json')->fail('找不到用户数据');
  430. }
  431. $detail = new MemberDetail();
  432. //减少
  433. if($post['type'] == 'jdd') {
  434. $detail->adminInc(
  435. $post['money'],
  436. $post['uid'],
  437. ['time'=>date('Y-m-d'),'money'=>$post['money'],'mono'=>empty($post['mono']) ? '无': $post['mono']],
  438. $member['sassid'],
  439. $post['type']
  440. );
  441. }
  442. //添加
  443. if($post['type'] == 'add') {
  444. $detail->adminInc(
  445. $post['money'],
  446. $post['uid'],
  447. ['time'=>date('Y-m-d'),'money'=>$post['money'],'mono'=>empty($post['mono']) ? '无': $post['mono']],
  448. $member['sassid'],
  449. $post['type']
  450. );
  451. }
  452. return app('json')->success('操作成功');
  453. }
  454. /**
  455. * 操作明细
  456. * @param Request $request
  457. */
  458. public function followUpList(Request $request) {
  459. $pageSize = 5;
  460. $post = UtilService::getMore(
  461. [
  462. ['page',1],
  463. ['uid','0'],
  464. ['time',[]]
  465. ],$request
  466. );
  467. $where['uid'] = $post['uid'];
  468. if(!empty($post['time'])) {
  469. $where['time'] = [[strtotime($post['time'][0]),strtotime($post['time'][1])],'whereBetween'];
  470. }
  471. $detail = new MemberFollow();
  472. list($pageCount,$data) = $detail->getList($post['page'],$where,$pageSize,"*","time desc");
  473. $result = UtilService::getParam([
  474. "id",
  475. 'title',
  476. 'content',
  477. "type",
  478. ['name',"username"],
  479. ["time","time","date('Y-m-d H:i:s',$1)"]
  480. ],$data);
  481. return app('json')->success([
  482. 'list' => $result,
  483. 'pageCount' => $pageCount,
  484. 'pageSize' => $pageSize,
  485. 'page' => $post['page']
  486. ]);
  487. }
  488. /**
  489. * 会员跟进
  490. * @param Request $request
  491. */
  492. public function followUpSave(Request $request) {
  493. $post = UtilService::getMore(
  494. [
  495. ['uid','','empty','参数错误'],
  496. ['title','','empty','参数错误'],
  497. ['content','','empty','参数错误'],
  498. ['type','0'],
  499. ],$request
  500. );
  501. $user = (new \app\model\system\Member)->where('uid',$post['uid'])->find();
  502. if(empty($user))
  503. return app('json')->fail('参数错误');
  504. $memberFollow = new MemberFollow;
  505. $memberFollow->insert([
  506. 'uid' => $post['uid'],
  507. 'title' => $post['title'],
  508. 'content' => $post['content'],
  509. 'admin_id' => $this->request->adminInfo['id'],
  510. 'time' => time(),
  511. 'sassid' =>$user['sassid'],
  512. 'type' => $post['type']
  513. ]);
  514. (new \app\model\system\Member)->where('uid',$post['uid'])->save(['follow_type'=>$post['type'],'last_follow_time'=>time()]);
  515. return app("json")->success('操作成功');
  516. }
  517. }