Member.php 16 KB

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