169 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace addons\notice\controller;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\notice\library\Service;
							 | 
						||
| 
								 | 
							
								use app\admin\library\Auth;
							 | 
						||
| 
								 | 
							
								use app\admin\model\notice\NoticeEvent;
							 | 
						||
| 
								 | 
							
								use app\admin\model\notice\NoticeTemplate;
							 | 
						||
| 
								 | 
							
								use think\Cache;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Api extends \app\common\controller\Api
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protected $noNeedRight = ['*'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected $noNeedLogin = ['cache', 'miniapptemplate', 'getminiappopenid'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 未读消息数量
							 | 
						||
| 
								 | 
							
								    public function unread()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUser();
							 | 
						||
| 
								 | 
							
								        $count = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'user')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								            ->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $count);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 我的站内消息
							 | 
						||
| 
								 | 
							
								    public function index()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUser();
							 | 
						||
| 
								 | 
							
								        $list = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'user')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->paginate();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $is = true;
							 | 
						||
| 
								 | 
							
								        if ($is) {
							 | 
						||
| 
								 | 
							
								            \app\admin\model\notice\Notice::where('id', 'in',array_column($list->items(), 'id'))
							 | 
						||
| 
								 | 
							
								                ->update(['readtime' => time()]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $list);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 标记为已读
							 | 
						||
| 
								 | 
							
								    public function mark()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUser();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $where = [];
							 | 
						||
| 
								 | 
							
								        if (input('id')) {
							 | 
						||
| 
								 | 
							
								            $where['id'] = input('id');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'user')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								            ->update(['readtime' => time()]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $count);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 获取最新一条未读数据
							 | 
						||
| 
								 | 
							
								    public function statistical()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $user = $this->auth->getUserInfo();
							 | 
						||
| 
								 | 
							
								        $statisticalTime = Cache::get('notice_user_statistical_time_'.$user['id'], 0);
							 | 
						||
| 
								 | 
							
								        $new = \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								            ->where('platform', 'user')
							 | 
						||
| 
								 | 
							
								            ->where('type','msg')
							 | 
						||
| 
								 | 
							
								            ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								            ->where('createtime','>', $statisticalTime)
							 | 
						||
| 
								 | 
							
								            ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        if ($new) {
							 | 
						||
| 
								 | 
							
								            Cache::set('notice_user_statistical_time_'.$user['id'], time());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'num' => \app\admin\model\notice\Notice::where('to_id', $user['id'])
							 | 
						||
| 
								 | 
							
								                ->where('platform', 'user')
							 | 
						||
| 
								 | 
							
								                ->where('type','msg')
							 | 
						||
| 
								 | 
							
								                ->order('id', 'desc')
							 | 
						||
| 
								 | 
							
								                ->whereNull('readtime')
							 | 
						||
| 
								 | 
							
								                ->count()
							 | 
						||
| 
								 | 
							
								            ,
							 | 
						||
| 
								 | 
							
								            'new' => $new,
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $data );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 缓存最后提示站内消息时间
							 | 
						||
| 
								 | 
							
								    public function cache()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!$this->request->isPost()) {
							 | 
						||
| 
								 | 
							
								            $this->error('请求方式错误');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $type = input('module', 'admin');
							 | 
						||
| 
								 | 
							
								        $time = input('time');
							 | 
						||
| 
								 | 
							
								        if ($type == 'admin') {
							 | 
						||
| 
								 | 
							
								            $adminAuth = Auth::instance();
							 | 
						||
| 
								 | 
							
								            if (!$adminAuth->isLogin()) {
							 | 
						||
| 
								 | 
							
								                $this->error('未登录');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            Cache::set('notice_admin_statistical_time_'.$adminAuth->id, $time);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($type == 'index') {
							 | 
						||
| 
								 | 
							
								            $auth = $this->auth;
							 | 
						||
| 
								 | 
							
								            if (!$auth->isLogin()) {
							 | 
						||
| 
								 | 
							
								                $this->error('未登录');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Cache::set('notice_user_statistical_time_'.$auth->id, $time);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('ok');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取微信小程序订阅消息模板
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function miniappTemplate()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $params = $this->request->only(['event', 'platform']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $params['platform'] = $params['platform'] ?? 'user';
							 | 
						||
| 
								 | 
							
								        $params['event'] = explode(',', $params['event']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $notice_event_ids = NoticeEvent::where('event', 'in', $params['event'])->where("find_in_set('miniapp', type)")->column('id');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $template = NoticeTemplate::where('platform', $params['platform'])
							 | 
						||
| 
								 | 
							
								            ->where('notice_event_id', 'in', $notice_event_ids)
							 | 
						||
| 
								 | 
							
								            ->where('type', 'miniapp')
							 | 
						||
| 
								 | 
							
								            ->column('mptemplate_id');
							 | 
						||
| 
								 | 
							
								        $template = array_values(array_filter($template));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', [
							 | 
						||
| 
								 | 
							
								            'template' => $template
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取微信小程序openid -- 测试使用 -- 非测试情况下请关闭
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getMiniappOpenid()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $config = get_addon_config('notice');
							 | 
						||
| 
								 | 
							
								        if (!$config['is_test_miniapp_template']) {
							 | 
						||
| 
								 | 
							
								            $this->error('配置未启微信订阅消息测试模式');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $app = Service::getMini();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $res = $app->auth->session(input('code'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->success('', $res);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |