MessageController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. <?php
  2. namespace app\admin\controller;
  3. use cmf\controller\AdminBaseController;
  4. use think\Db;
  5. use think\Session;
  6. class MessageController extends AdminBaseController{
  7. public function index(){
  8. //分类信息
  9. $param = $this->request->param();
  10. isset($param['cate_id']) or $param['cate_id']=0;
  11. $this->assign('cate_id',$param['cate_id']);
  12. $username = $_SESSION['think']['name'];
  13. $userinfo = Db::name('user')->where('user_login',$username)->find();
  14. $catid = isset($param['catid'])?$param['catid']:0;
  15. $this->assign("catid",$catid);
  16. if($userinfo['user_type']== 1){
  17. //分类信息
  18. $cate_tree=$this->getAccessTreeData();
  19. $this->assign('cate_tree',json_encode($cate_tree));
  20. $map = array();
  21. $query = array();
  22. if($catid){
  23. $query['catid'] = $catid;
  24. //如果是一级分类则查找所有的子分类
  25. $cateinfo = Db::name('category')->where('id',$catid)->find();
  26. if($cateinfo['parent_id']==0){
  27. $sonarr = Db::name('category')->where('parent_id',$catid)->select()->toArray();
  28. $cate_arr = array();
  29. foreach ($sonarr as $kk=>$vv){
  30. $cate_arr[] = $vv['id'];
  31. }
  32. $map[] = ['catid','in',$cate_arr];
  33. }else{
  34. $map['catid'] = $catid;
  35. }
  36. }
  37. $this->assign('qx',1);
  38. $users = Db::name('user')->where('id','gt',1)->select();
  39. $this->assign('users',$users);
  40. //超级管理员
  41. $lists = Db::name('message')->where($map)->order('create_time desc')->paginate(20,false,['query'=>$query]);
  42. $this->assign('lists',$lists);
  43. }else{
  44. $map = array();
  45. if($catid){
  46. $map['catid'] = $catid;
  47. }
  48. //普通用户
  49. $this->assign('qx',0);
  50. $userinfo = Db::name('user')->where('user_login',$username)->find();
  51. $userid = $userinfo['id'];
  52. //分配的信息id
  53. $fenpei = Db::name('user_fp')->where('userid',$userid)->find();
  54. // print_r($fenpei);exit;
  55. if(empty($fenpei)){
  56. $lists = array();
  57. }else{
  58. // $cates = explode(',',$fenpei['cates']);
  59. $cates = $fenpei['cates'];
  60. $from = $fenpei['tiaoshu'];
  61. $map[] = ['create_time','>',$fenpei['from_time']];
  62. //ppppp
  63. if($fenpei['enable']==1){
  64. $map2[] = ['p1.create_time','>',$fenpei['from_time']];
  65. $field=['p1.*','concat(LEFT(p1.mobile,4),"****",RIGHT(p1.mobile,3))'=>'mobile','count(p2.id)'=> 'vid' ];
  66. $lists = Db::name('message')
  67. ->alias('p1')
  68. ->leftJoin('mobile_log p2','p1.`id`=p2.`msg_id`')
  69. ->group('p1.`id`')
  70. ->order('p1.create_time','asc')
  71. ->field($field)->where('p1.catid','in',$cates)->where($map2)->limit(0,$from)->select();
  72. $lists=$this->covermobile($lists,$this->returnmobile());
  73. }else{
  74. $field=['*'];
  75. $lists = Db::name('message')->field($field)->where('catid','in',$cates)->where($map)->order('create_time','asc')->limit(0,$from)->select();
  76. }
  77. $lists=$this->array_fan($lists);
  78. array_multisort(array_column($lists,'create_time'), SORT_DESC, $lists);
  79. }
  80. $this->assign('fenpei',$fenpei);
  81. $this->assign('lists',$lists);
  82. }
  83. return $this->fetch();
  84. }
  85. //已经查看的手机号
  86. public function returnmobile()
  87. {
  88. $map = array();
  89. $username = $_SESSION['think']['name'];
  90. $userinfo = Db::name('user')->where('user_login',$username)->find();
  91. $userid = $userinfo['id'];
  92. //分配的信息id
  93. $fenpei = Db::name('user_fp')->where('userid',$userid)->find();
  94. $data=array();
  95. if(!empty($fenpei))
  96. {
  97. $cates = $fenpei['cates'];
  98. $from = $fenpei['tiaoshu'];
  99. $map[] = ['create_time','>',$fenpei['from_time']];
  100. if($fenpei['enable']==1){
  101. $map2[] = ['p1.create_time','>',$fenpei['from_time']];
  102. $field=['p1.*','FROM_UNIXTIME(p1.create_time)'=>'create_time' ];
  103. $data = Db::name('message')
  104. ->alias('p1')
  105. ->leftJoin('mobile_log p2','p1.`id`=p2.`msg_id`')
  106. ->field($field)->where('p1.catid','in',$cates)->where($map2)->where('p2.user_id',$userid)->limit(0,$from)->select();
  107. }
  108. }
  109. return $data;
  110. }
  111. /**
  112. * 替换已经查看的手机,使*号变为原来手机号码,二维数组
  113. *
  114. * */
  115. private function covermobile($lists,$data)
  116. {
  117. $j=0;
  118. $re_list=array();
  119. foreach ($lists as $val)
  120. {
  121. $re_list[$j]=$val;
  122. foreach ($data as $arr)
  123. {
  124. if($val['id']==$arr['id'])
  125. {
  126. $re_list[$j]['mobile']=$arr['mobile'];
  127. }
  128. }
  129. $j++;
  130. }
  131. return $re_list;
  132. }
  133. //把二维数组反转
  134. public function array_fan($arr)
  135. {
  136. $data=array();
  137. if(!empty($arr))
  138. {
  139. $num= count($arr);
  140. $j=0;
  141. $data=array();
  142. for($i=$num-1;$i>=0;$i--)
  143. {
  144. $data[$i]=$arr[$j];
  145. $j++;
  146. }
  147. }
  148. return $data;
  149. }
  150. /***
  151. * @throws \think\Exception
  152. * @throws \think\db\exception\DataNotFoundException
  153. * @throws \think\db\exception\ModelNotFoundException
  154. * @throws \think\exception\DbException
  155. * @throws \think\exception\PDOException
  156. */
  157. public function tomobile()
  158. {
  159. $param = $this->request->param();
  160. $username = $_SESSION['think']['name'];
  161. $userinfo = Db::name('user')->where('user_login',$username)->find();
  162. $userid = $userinfo['id'];
  163. //分配的信息id
  164. $fenpei = Db::name('user_fp')->where('userid',$userid)->find();
  165. $bol=0;
  166. if(!empty($fenpei))
  167. {
  168. //判断是否超过3次
  169. $msg_id=$param['id'];
  170. $msg=Db::name('mobile_log')->where('msg_id',$msg_id)->count();
  171. if($msg>2){
  172. $this->error('该条信息已经被人查看');
  173. }
  174. $cates = $fenpei['cates'];
  175. $from = $fenpei['tiaoshu'];
  176. $map[] = ['create_time','>',$fenpei['from_time']];
  177. $fromid=['id'=>$param['id']];
  178. $lists = Db::name('message')->field(['id'])->where('catid','in',$cates)->where($map)->order('id')->limit(0,$from)->select()->toArray();
  179. $message = Db::name('message')->field(['id','mobile'])->where('catid','in',$cates)->where($map)->where($fromid)->limit(0,$from)->find();
  180. // dump(Db::table('message')->getLastSql());
  181. foreach ($lists as $value) {
  182. if(in_array($message['id'], $value)){
  183. $bol=$message['mobile'];
  184. }
  185. }
  186. //检查记录
  187. if(!empty($message)){
  188. $mobile_where=['user_id'=>$userid,'msg_id'=>$message['id']];
  189. $mobile_log=Db::name('mobile_log')->where($mobile_where)->find();
  190. if(empty($mobile_log))
  191. {
  192. //如果为空则需要插入记录并在user_fp减少一个点数
  193. //先判断是否还有点数
  194. if($fenpei['points']>0){
  195. $mobile_in['user_id']=$userid;
  196. $mobile_in['msg_id']=$message['id'];
  197. $mobile_in['create_time']=time();
  198. $res=Db::name('mobile_log')->insert($mobile_in);
  199. if($res){
  200. Db::name('user_fp')->where('userid',$userid)->dec('points', 1)->update();
  201. $arr=array(
  202. 'points'=>$fenpei['points']-1,
  203. 'mobile'=>$message['mobile']
  204. );
  205. $this->success($arr);
  206. }
  207. }else{
  208. $this->error('你的点数已经用尽');
  209. }
  210. }else{
  211. $arr=array(
  212. 'points'=>$fenpei['points'],
  213. 'mobile'=>$message['mobile']
  214. );
  215. $this->success($arr);
  216. }
  217. }else{
  218. $this->error('数据获取错误');
  219. }
  220. }
  221. }
  222. public function add(){
  223. return $this->fetch();
  224. }
  225. public function export()
  226. {
  227. $map = array();
  228. $username = $_SESSION['think']['name'];
  229. $userinfo = Db::name('user')->where('user_login',$username)->find();
  230. $userid = $userinfo['id'];
  231. //分配的信息id
  232. $fenpei = Db::name('user_fp')->where('userid',$userid)->find();
  233. if(!empty($fenpei))
  234. {
  235. $cates = $fenpei['cates'];
  236. $from = $fenpei['tiaoshu'];
  237. $map[] = ['create_time','>',$fenpei['from_time']];
  238. if($fenpei['enable']==1){
  239. $map2[] = ['p1.create_time','>',$fenpei['from_time']];
  240. $field=['p1.*','FROM_UNIXTIME(p1.create_time)'=>'create_time' ];
  241. $data = Db::name('message')
  242. ->alias('p1')
  243. ->leftJoin('mobile_log p2','p1.`id`=p2.`msg_id`')
  244. ->field($field)->where('p1.catid','in',$cates)->where($map2)->where('p2.user_id',$userid)->limit(0,$from)->select();
  245. }else{
  246. $field=['*'];
  247. $data = Db::name('message')->field($field)->where('catid','in',$cates)->where($map)->order('id')->limit(0,$from)->select();
  248. }
  249. }
  250. $field = array(
  251. 'A' => array('jm_title', '品牌'),
  252. 'B' => array('news_kw', '新闻'),
  253. 'C' => array('catname', '分类'),
  254. 'D' => array('name', '姓名'),
  255. 'E' => array('ip', 'IP'),
  256. 'F' => array('tzed', '投资额度'),
  257. 'G' => array('mobile', '电话'),
  258. 'H' => array('content', '留言内容'),
  259. 'I' => array('create_time', '留言时间'),
  260. );
  261. $this->exportExcel($field, $data,date('Y-m-d'));
  262. }
  263. private function exportExcel($field, $list, $title='name')
  264. {
  265. $objPHPExcel = new \PHPExcel();
  266. $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式
  267. $objPHPExcel->getActiveSheet()->setTitle('用户信息表');
  268. foreach ($list as $key => $value) {
  269. foreach ($field as $k => $v) {
  270. if ($key == 0) {
  271. $objPHPExcel->getActiveSheet()->setCellValue($k . '1', $v[1]);
  272. }
  273. $i = $key + 2;
  274. $objPHPExcel->getActiveSheet()->setCellValue($k . $i, $value[$v[0]]);
  275. }
  276. }
  277. ob_end_clean();
  278. header("Pragma: public");
  279. header("Expires: 0");
  280. header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
  281. header("Content-Type:application/force-download");
  282. header("Content-Type:application/vnd.ms-execl");
  283. header("Content-Type:application/octet-stream");
  284. header("Content-Type:application/download");;
  285. header('Content-Disposition:attachment;filename='.$title.'.xls');
  286. header("Content-Transfer-Encoding:binary");
  287. $objWriter->save('php://output');
  288. }
  289. public function addPost(){
  290. $param = $this->request->param();
  291. if($param['jm_id']){
  292. $info = Db::name('jiameng')->field('title')->where('id',$param['jm_id'])->find();
  293. if(empty($info)){
  294. $this->error('品牌id无效');
  295. }else{
  296. $param['jm_title'] = $info['title'];
  297. }
  298. }
  299. if(!empty($param['jm_title']))
  300. {
  301. $info_title = Db::name('jiameng')->field('id')->where('title',$param['jm_title'])->find();
  302. if(!$info_title)
  303. {
  304. $this->error('没有该品牌信息');
  305. }
  306. $param['jm_id']=$info_title['id'];
  307. }
  308. //mobile
  309. if(strlen($param['mobile']) == 11)
  310. {
  311. if(!$this->checkPhoneNumberValidate($param['mobile'])){
  312. $this->error('手机号码不正确');
  313. }
  314. }else{
  315. $this->error('手机号码不正确');
  316. }
  317. if(empty($param['catname']))
  318. {
  319. $this->error('分类不能为空');
  320. }
  321. //$week_time=time()-604800;
  322. // $res_mobile=Db::name('category')->where('mobile',$param['mobile'])->where('create_time','>',$week_time)->find();
  323. // if($res_mobile)
  324. // {
  325. // $this->error('手机号码一个周内只能留一次');
  326. // }
  327. // $ip=get_client_ip();
  328. // $start_time=strtotime(date('Y-m-d') );
  329. // $ip_count=Db::name('category')->where('ip',$ip)->where('create_time','>',$start_time)->count();
  330. // if($ip_count>1)
  331. // {
  332. // $this->error('同一个ip一天只可以留言2次');
  333. // }
  334. // ppppppppp
  335. if($param['catname']){
  336. $cat=Db::name('category')->where('catname',$param['catname'])->find();
  337. if(!empty($cat)){
  338. $param['catid']=$cat['id'];
  339. }else{
  340. $this->error('添加失败,没有该分类');
  341. }
  342. }
  343. // ppppppppp
  344. $param['create_time'] = time();
  345. $res = Db::name('message')->insert($param);
  346. if($res){
  347. $this->success('添加成功');
  348. }else{
  349. $this->error('添加失败');
  350. }
  351. }
  352. private function checkPhoneNumberValidate($phone_number){
  353. $g = "/^1[34578]\d{9}$/";
  354. $g2 = "/^19[89]\d{8}$/";
  355. $g3 = "/^166\d{8}$/";
  356. if(preg_match($g, $phone_number)){
  357. return true;
  358. }else if(preg_match($g2, $phone_number)){
  359. return true;
  360. }else if(preg_match($g3, $phone_number)){
  361. return true;
  362. }
  363. return false;
  364. }
  365. /**
  366. * 信息分配给用户
  367. */
  368. public function fenpei(){
  369. $param = $this->request->param();
  370. if(count($param['msg'])<1){
  371. $this->error('请选择信息');
  372. }
  373. if(count($param['members'])<1){
  374. $this->error('请选择用户');
  375. }
  376. foreach($param['msg'] as $k=>$v){
  377. foreach($param['members'] as $kk=>$vv){
  378. $data = array(
  379. 'msg_id' => $v,
  380. 'user_id'=> $vv
  381. );
  382. $yicha = Db::name('message_fp')->where($data)->count();
  383. if($yicha){
  384. }else{
  385. $data['create_time'] = time();
  386. Db::name('message_fp')->insert($data);
  387. }
  388. }
  389. }
  390. $this->success('分配成功');
  391. }
  392. public function edit(){
  393. $param = $this->request->param();
  394. isset($param['id']) or $this->error('需要id');
  395. $users = Db::name('user')->where('id','gt',1)->select();
  396. $this->assign('users',$users);
  397. //已分配的
  398. $yifen = Db::name('Message_fp')->where('msg_id',$param['id'])->select();
  399. $yifenarr = array();
  400. foreach($yifen as $k=>$v){
  401. $yifenarr[] = $v['user_id'];
  402. }
  403. $this->assign('yifenarr',$yifenarr);
  404. $info = Db::name('Message')->where('id',$param['id'])->find();
  405. $this->assign('info',$info);
  406. return $this->fetch();
  407. }
  408. public function editPost(){
  409. $param = $this->request->param();
  410. isset($param['id']) or $this->error('需要id');
  411. //先删掉
  412. Db::name('Message_fp')->where('msg_id',$param['id'])->delete();
  413. foreach($param['members'] as $kk=>$vv){
  414. $data = array(
  415. 'msg_id' => $param['id'],
  416. 'user_id'=> $vv,
  417. 'create_time' => time()
  418. );
  419. Db::name('message_fp')->insert($data);
  420. }
  421. $this->success('调整成功');
  422. }
  423. public function edit1(){
  424. $param = $this->request->param();
  425. isset($param['id']) or $this->error('需要id');
  426. $info = Db::name('Message')->where('id',$param['id'])->find();
  427. $this->assign('info',$info);
  428. return $this->fetch();
  429. }
  430. public function editCatePost(){
  431. $param = $this->request->param();
  432. isset($param['id']) or $this->error('需要id');
  433. //先删掉
  434. // ppppppppp
  435. if($param['catname']){
  436. $cat=Db::name('category')->where('catname',$param['catname'])->find();
  437. if(!empty($cat)){
  438. $param['catid']=$cat['id'];
  439. }else{
  440. $this->error('添加失败,没有该分类');
  441. }
  442. }
  443. // ppppppppp
  444. $res = Db::name('message')->update($param);
  445. $this->success('修改成功');
  446. }
  447. public function delete(){
  448. $param = $this->request->param();
  449. isset($param['id']) or $this->error('需要id');
  450. $res = Db::name('Message')->where('id',$param['id'])->delete();
  451. if($res){
  452. $this->success('删除成功');
  453. }else{
  454. $this->error('删除失败');
  455. }
  456. }
  457. /**
  458. * 获取树的信息
  459. */
  460. public function getAccessTreeData(){
  461. $rs_array=[];
  462. $list=Db::name('category')->order(["list_order" => "ASC"])->select()->toArray();
  463. if(!empty($list)){
  464. foreach($list as $k=>$v){
  465. $rs_array[$v['id']]=$v;
  466. $parents=$this->getDeepParent($v);
  467. foreach($parents as $pv){
  468. $rs_array[$pv['id']]=$pv;
  469. }
  470. }
  471. }else{
  472. $rs_array=$list;
  473. }
  474. if(!empty($rs_array)){
  475. foreach($rs_array as $k=>$v){
  476. $rs_array[$k]['name']=$v['catname'];
  477. $rs_array[$k]['iconSkin']='dept';
  478. }
  479. }
  480. return array_values($rs_array);
  481. }
  482. /**
  483. * 父节点数据
  484. */
  485. public function getDeepParent($data){
  486. $temp_array=[];
  487. $parent_data_info=Db::name('category')->where('id',$data['parent_id'])->find();
  488. if(empty($parent_data_info)){
  489. return $temp_array;
  490. }
  491. if(!empty($parent_data_info)){
  492. $temp_array[$parent_data_info['id']]=$parent_data_info;
  493. $rs_array=$this->getDeepParent($parent_data_info);
  494. }
  495. return array_merge($temp_array,$rs_array);
  496. }
  497. public function shanghu(){
  498. $param = $this->request->param();
  499. $shname = isset($param['shname'])?trim($param['shname']):'';
  500. $map = array();
  501. if($shname){
  502. $map['a.user_login'] = $shname;
  503. }
  504. $shanghu_list = Db::name('user')->alias('a')->field('a.user_login,a.id as shid,b.*')->leftJoin('jm_user_fp b','a.id=b.userid')->where('a.user_type',3)->where($map)->paginate(20);
  505. $this->assign('lists',$shanghu_list);
  506. //分类信息
  507. $cates = Db::name('category')->select();
  508. $cate_arr = array();
  509. foreach($cates as $k=>$v){
  510. $cate_arr[$v['id']] = $v['catname'];
  511. }
  512. $this->assign('shname',$shname);
  513. $this->assign('cate_arr',$cate_arr);
  514. return $this->fetch();
  515. }
  516. /**
  517. * 编辑商户
  518. */
  519. public function shanghuEdit(){
  520. $param = $this->request->param();
  521. isset($param['userid']) or $this->error('需要id');
  522. $info = array();
  523. $info = Db::name('user_fp')->where('userid',$param['userid'])->find();
  524. $userinfo = Db::name('user')->where('id',$param['userid'])->find();
  525. if(empty($info)){
  526. $ypz = 0;
  527. }else{
  528. $ypz = 1;
  529. }
  530. //分类信息
  531. $cates = Db::name('category')->where('parent_id','gt',0)->select();
  532. $this->assign('cates',$cates);
  533. $this->assign('userinfo',$userinfo);
  534. $this->assign('ypz',$ypz);
  535. $this->assign('info',$info);
  536. return $this->fetch();
  537. }
  538. public function shanghuPost(){
  539. $param = $this->request->param();
  540. isset($param['from_time'])&&$param['from_time']!='' or $this->error('需要开始时间');
  541. // isset($param['end_time'])&&$param['end_time']!='' or $this->error('需要开始时间');
  542. isset($param['cates'])&&count($param['cates'])>0 or $this->error('请选择至少一个分类');
  543. $param['cates'] = implode(",",$param['cates']);
  544. $param['from_time'] = strtotime($param['from_time']);
  545. $param['end_time'] = strtotime($param['end_time']);
  546. //pppppp
  547. if(!$param['enable']){
  548. $param['enable']='2';
  549. }
  550. //pppppp
  551. if($param['ypz']==1){
  552. //更新
  553. unset($param['ypz']);
  554. $param['update_time'] = time();
  555. $res = Db::name('user_fp')->where('userid',$param['userid'])->update($param);
  556. }else{
  557. //添加
  558. unset($param['ypz']);
  559. $param['create_time'] = time();
  560. $res = Db::name('user_fp')->insert($param);
  561. }
  562. if($res){
  563. $this->success('调整成功');
  564. }else{
  565. $this->error('调整失败');
  566. }
  567. }
  568. }