MailController.php 3.6 KB
<?php

namespace App\Http\Controllers\Bside\Mail;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Mail\MailLogic;
use App\Models\Mail\Mail as MailModel;
use App\Models\Mail\MailUser as MailUserModel;

class MailController extends BaseController
{
    const STATUS_ZERO = 0; //状态为未读状态
    const STATUS_ONE = 1; //状态为已读状态
    /**
     * @name :当前用户站内信列表
     * @author :liyuhang
     * @method
     */
    public function lists(){
        $mailModel = new MailModel();
        //获取当前用户下的所有站内信
        $lists = $mailModel->where('status',0)->where($this->map)
            ->where('user_list','like','%,'.$this->uid.',%')
            ->orWhere('user_list', '')
            ->select(['*'])->orderBy($this->order,'desc')
            ->paginate($this->row, ['*'], 'page', $this->page);
        if(!empty($lists)){
            $lists = $lists->toArray();
        }
        $mailUserModel = new MailUserModel();
        $lists['unreadNum'] = $this->unreadNum($mailUserModel,$lists['total']);
        if(!empty($lists['list'])){
            //验证未读还是已读
            $lists['list'] = $this->verifyRead($mailUserModel,$lists['list']);
        }
        $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @name   :(验证已读还是未读)verifyRead
     * @author :lyh
     * @method :post
     * @time   :2023/6/17 15:02
     */
    public function verifyRead(&$mailUserModel,$list){
        $data = [];
        foreach ($list as $k => $v){
            //获取用户已读还是未读
            $info = $mailUserModel->read(['mail_id'=>$v['id'],'user_id'=>$this->uid]);
            if($info !== false){
                $v['read_status'] = $this::STATUS_ONE;//
            }else{
                $v['read_status'] = $this::STATUS_ZERO;
            }
            $data[] = $v;
        }
        return $data;
    }

    /**
     * @name   :(未读数量)readNum
     * @author :lyh
     * @method :post
     * @time   :2023/6/17 13:58
     */
    public function unreadNum(&$mailUserModel,$total){
        //已读数量
        $count = $mailUserModel->where(['user_id'=>$this->uid])->count();
        $num = $total - $count;
        return $num;
    }

    /**
     * @name :获取站内信详情
     * @author :liyuhang
     * @method
     */
    public function info(MailLogic $mailLogic){
        $this->request->validate([
            'id'=>['required']
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $info = $mailLogic->mail_info();
        $this->response('success',Code::SUCCESS,$info);
    }

    /**
     * @remark :一键已读
     * @name   :oneClickRead
     * @author :lyh
     * @method :post
     * @time   :2023/7/5 17:50
     */
    public function oneClickRead(){
        //获取所有已读的站内信
        $mailUserModel = new MailUserModel();
        $list = $mailUserModel->list(['user_id'=>$this->user['id']],'id',['id','mail_id']);
        $arr = [];
        foreach ($list as  $v){
            $arr[] = $v['mail_id'];
        }
        $mailModel = new MailModel();
        $mail_list = $mailModel->list(['id'=>['not in',$arr]]);
        $data = [];
        foreach ($mail_list as $k => $v){
            $data[] = [
                'user_id'=>$this->user['id'],
                'mail_id'=>$v['id'],
                'created_at'=>date('Y-m-d H:i:s'),
                'updated_at'=>date('Y-m-d H:i:s'),
            ];
        }
        $rs = $mailUserModel->insert($data);
        if($rs === false){
            $this->response('error',Code::SYSTEM_ERROR);
        }
        $this->response('success');
    }
}