113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * User: hnh0000
							 | 
						||
| 
								 | 
							
								 * Time: 2021/2/21 3:11 下午
							 | 
						||
| 
								 | 
							
								 * QQ: 1123416584
							 | 
						||
| 
								 | 
							
								 * Blog: blog@hnh117.com
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\admin\controller\notice;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\notice\library\Service;
							 | 
						||
| 
								 | 
							
								use app\admin\model\AdminLog;
							 | 
						||
| 
								 | 
							
								use app\common\controller\Backend;
							 | 
						||
| 
								 | 
							
								use think\Cache;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Admin extends Backend
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected $noNeedRight = ['mark', 'statistical'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUserInfo();
							 | 
						||
| 
								 | 
							
								        $list = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'admin')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->paginate(20);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $config = get_addon_config('notice');
							 | 
						||
| 
								 | 
							
								        // 是否有未读的
							 | 
						||
| 
								 | 
							
								        $haveUnread = false;
							 | 
						||
| 
								 | 
							
								        // 判断是否需要自动标记为已读
							 | 
						||
| 
								 | 
							
								        $auto_read = $config['auto_read'] ?? false;
							 | 
						||
| 
								 | 
							
								        if ($auto_read) {
							 | 
						||
| 
								 | 
							
								            \app\admin\model\notice\Notice::where('id', 'in',array_column($list->items(), 'id'))
							 | 
						||
| 
								 | 
							
								                ->update(['readtime' => time()]);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            foreach ($list->items() as $item) {
							 | 
						||
| 
								 | 
							
								                if ($item['readtime'] === null) {
							 | 
						||
| 
								 | 
							
								                    $haveUnread = true;
							 | 
						||
| 
								 | 
							
								                    break;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assign('haveUnread', $haveUnread);
							 | 
						||
| 
								 | 
							
								        $this->assign('list', $list);
							 | 
						||
| 
								 | 
							
								        $this->assign('title', '我的消息');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $this->view->fetch();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 标记为已读
							 | 
						||
| 
								 | 
							
								    public function mark()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUserInfo();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $where = [];
							 | 
						||
| 
								 | 
							
								        if (input('id')) {
							 | 
						||
| 
								 | 
							
								            $where['id'] = input('id');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'admin')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								            ->update(['readtime' => time()]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $count);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 统计
							 | 
						||
| 
								 | 
							
								    public function statistical()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        AdminLog::setIgnoreRegex('/./');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUserInfo();
							 | 
						||
| 
								 | 
							
								        $statisticalTime = Cache::get('notice_admin_statistical_time_'.$user['id'], 0);
							 | 
						||
| 
								 | 
							
								        $new = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'admin')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->where('createtime','>', $statisticalTime)
							 | 
						||
| 
								 | 
							
								            ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        if ($new) {
							 | 
						||
| 
								 | 
							
								            Cache::set('notice_admin_statistical_time_'.$user['id'], time());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $noticeData = Service::getNoticeData();
							 | 
						||
| 
								 | 
							
								        $waitData = Service::getWaitData();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'num' => \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								                ->where('platform', 'admin')
							 | 
						||
| 
								 | 
							
								                ->where('type','msg')
							 | 
						||
| 
								 | 
							
								                ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								                ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								                ->count()
							 | 
						||
| 
								 | 
							
								            ,
							 | 
						||
| 
								 | 
							
								            'new' => $new,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            'notice_data' => $noticeData,
							 | 
						||
| 
								 | 
							
								            'wait_data' => $waitData,
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', '', $data);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |