123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: 老猫 <thinkcmf@126.com>
- // +----------------------------------------------------------------------
- namespace app\love\controller;
- use app\love\model\UserFriendModel;
- use app\love\model\UserInviteModel;
- use app\love\model\UserMessageModel;
- use app\love\model\UserModel;
- class MessageController extends LoveBaseController
- {
- /**
- * 好友列表
- */
- public function index()
- {
- $user_id = cmf_get_current_user_id();
- $list = UserFriendModel::with('friend')->where('user_id', $user_id)->select();
- foreach ($list as $v) {
- $v['last_msg_time_text'] = date('m-d H:i', $v['last_msg_time']);
- }
- $this->assign('list', $list);
- //未读消息数
- $unread_num = UserFriendModel::where('user_id', $user_id)->sum('unread_num');
- //收到邀请数
- $invite_num = UserInviteModel::where('to_id', $user_id)
- ->where('status', 1)
- ->count();
- $this->assign('unread_num', $unread_num + $invite_num);
- $this->assign('invite_num', $invite_num);
- return $this->fetch();
- }
- /**
- * 聊天页
- */
- public function detail()
- {
- //错误判断
- $id = $this->request->get('id');
- if (empty($id)) {
- $this->error('该用户不存在');
- }
- $my_id = cmf_get_current_user_id();
- if ($id == $my_id) {
- $this->error('不能和自己对话');
- }
- $user = UserModel::get($id);
- if (empty($user)) {
- $this->error('该用户不存在');
- }
- $this->assign('user', $user);
- $this->assign('to_id', $id);
- $this->assign('from_id', $my_id);
- //好友
- $friend = UserFriendModel::get(['user_id' => $my_id, 'friend_id' => $id]);
- if (empty($friend)) {
- $this->error('请等待对方通过聊天邀请');
- } else {
- $friend->unread_num = 0;
- $friend->save();
- }
- //获取消息
- $message = UserMessageModel::with('toUser,fromUser')
- ->where(function ($query) use ($id, $my_id) {
- $query->where(function ($query) use ($id, $my_id) {
- $query->where([
- ['from_id', '=', $id],
- ['to_id', '=', $my_id],
- ]);
- })->whereOr(
- function ($query) use ($id, $my_id) {
- $query->where([
- ['from_id', '=', $my_id],
- ['to_id', '=', $id],
- ]);
- });
- })->order('create_time desc')->limit(10)->select();
- $this->assign('last_message_time', $message->isEmpty() ? 0 : $message[0]['create_time']);
- foreach ($message as $v) {
- $v['create_time_text'] = date('m-d H:i', $v['create_time']);
- }
- $message = $message->reverse();
- $this->assign('first_message_time', $message->isEmpty() ? time() : $message[0]['create_time']);
- $this->assign('message', $message);
- //更多
- $count = UserMessageModel::with('toUser,fromUser')
- ->where([
- ['from_id', '=', $id],
- ['to_id', '=', $my_id],
- ])->whereOr([
- ['from_id', '=', $my_id],
- ['to_id', '=', $id],
- ])->count();
- $this->assign('has_more', $count > 10 ? 'true' : 'false');
- return $this->fetch();
- }
- /**
- * 发送消息
- */
- public function sendMessage()
- {
- $data = $this->request->post();
- $user_id = cmf_get_current_user_id();
- $time = time();
- //增加聊天记录
- UserMessageModel::create([
- 'from_id' => $user_id,
- 'to_id' => $data['to_id'],
- 'message' => $data['message'],
- 'create_time' => $time,
- ]);
- //增加最后聊天消息
- UserFriendModel::update(['last_msg' => '我:' . $data['message'], 'last_msg_time' => $time], ['user_id' => $user_id, 'friend_id' => $data['to_id']]);
- $friend = UserFriendModel::get(['user_id' => $data['to_id'], 'friend_id' => $user_id]);
- $friend->last_msg = '对方:' . $data['message'];
- $friend->last_msg_time = $time;
- $friend->unread_num++;
- $friend->save();
- //获取消息
- $message = UserMessageModel::with('toUser,fromUser')
- ->where(function ($query) use ($user_id, $data) {
- $query->where(function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $user_id],
- ['to_id', '=', $data['to_id']],
- ]);
- })->whereOr(
- function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $data['to_id']],
- ['to_id', '=', $user_id],
- ]);
- });
- })->where(
- function ($query) use ($data) {
- $query->where('create_time', '>', $data['message_time']);
- })
- ->order('create_time asc')->select();
- $this->result($message, 1);
- }
- /**
- * 获取消息
- */
- public function getMessage()
- {
- $data = $this->request->post();
- $user_id = cmf_get_current_user_id();
- //获取消息
- $message = UserMessageModel::with('toUser,fromUser')
- ->where(function ($query) use ($user_id, $data) {
- $query->where(function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $user_id],
- ['to_id', '=', $data['to_id']],
- ]);
- })->whereOr(
- function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $data['to_id']],
- ['to_id', '=', $user_id],
- ]);
- });
- })->where(
- function ($query) use ($data) {
- $query->where('create_time', '>', $data['message_time']);
- })
- ->order('create_time asc')->select();
- $this->result($message, 1);
- }
- /**
- * 更多记录
- */
- public function moreMessage()
- {
- $data = $this->request->post();
- $user_id = cmf_get_current_user_id();
- //获取消息
- $list = UserMessageModel::with('toUser,fromUser')
- ->where(function ($query) use ($user_id, $data) {
- $query->where(function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $user_id],
- ['to_id', '=', $data['to_id']],
- ]);
- })->whereOr(
- function ($query) use ($user_id, $data) {
- $query->where([
- ['from_id', '=', $data['to_id']],
- ['to_id', '=', $user_id],
- ]);
- });
- })->where(
- function ($query) use ($data) {
- $query->where('create_time', '<', $data['message_time']);
- })
- ->order('create_time desc')->limit(10)->select();
- foreach ($list as $v) {
- $v['create_time_text'] = date('m-d H:i', $v['create_time']);
- }
- $list = $list->reverse();
- $this->result($list, 1);
- }
- /**
- * 邀请
- */
- public function invite()
- {
- $list = UserInviteModel::with('from_user')
- ->where('to_id', '=', cmf_get_current_user_id())
- ->limit(10)
- ->order('status asc,create_time desc')
- ->select();
- foreach ($list as $v) {
- $v['user'] = $v['from_user'];
- $v['user']['age'] = empty($v['user']['birthday']) ? 0 : date('Y') - date('Y', $v['user']['birthday']);
- $v['create_time'] = date('m-d H:i', $v['create_time']);
- }
- $this->assign('list1', $list);
- $list = UserInviteModel::with('to_user')
- ->where('from_id', '=', cmf_get_current_user_id())
- ->limit(10)
- ->order('status asc,create_time desc')
- ->select();
- foreach ($list as $v) {
- $v['user'] = $v['to_user'];
- $v['user']['age'] = empty($v['user']['birthday']) ? 0 : date('Y') - date('Y', $v['user']['birthday']);
- $v['create_time'] = date('m-d H:i', $v['create_time']);
- }
- $this->assign('list2', $list);
- return $this->fetch();
- }
- /**
- * 邀请列表
- */
- public function inviteList()
- {
- $param = $this->request->post();
- $user_id = cmf_get_current_user_id();
- $where = [];
- $with = 'from_user';
- if ($param['status'] == 0) {
- $where[] = ['to_id', '=', $user_id];
- } elseif ($param['status'] == 1) {
- $where[] = ['from_id', '=', $user_id];
- $with = 'to_user';
- }
- $list = UserInviteModel::with($with)
- ->where($where)
- ->page($param['page'])
- ->limit(10)
- ->order('status asc,create_time desc')
- ->select();
- foreach ($list as $v) {
- if ($param['status'] == 0) {
- $v['user'] = $v['from_user'];
- } elseif ($param['status'] == 1) {
- $v['user'] = $v['to_user'];
- }
- $v['user']['age'] = empty($v['user']['birthday']) ? 0 : date('Y') - date('Y', $v['user']['birthday']);
- $v['create_time'] = date('m-d H:i', $v['create_time']);
- }
- $this->result($list, 1);
- }
- /**
- * 处理邀请
- */
- public function dealInvite()
- {
- $post = $this->request->post();
- $user_id = cmf_get_current_user_id();
- $info = UserInviteModel::get(['from_id' => $post['id'], 'to_id' => $user_id]);
- if (empty($info)) {
- $this->error('请刷新页面');
- }
- //更改状态
- $info->status = $post['status'];
- $info->save();
- //增加好友
- if ($post['status'] == 2) {
- UserFriendModel::create([
- 'user_id' => $post['id'],
- 'friend_id' => $user_id,
- 'last_msg_time' => time(),
- ]);
- UserFriendModel::create([
- 'user_id' => $user_id,
- 'friend_id' => $post['id'],
- 'last_msg_time' => time(),
- ]);
- $this->error('', url('detail') . '?id=' . $post['id']);
- } else {
- $this->success('');
- }
- }
- }
|