You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
7.4 KiB

<?php
namespace app\chat\controller\api;
use app\base\model\mpweixin\MpweixinUser;
use app\base\model\user\User;
use app\base\model\user\UserInfo;
use app\chat\model\ChatFriendsRoom;
use app\chat\model\ChatFriendsRoomMessage;
use app\chat\model\ChatFriendsRoomUser;
use app\fire\logic\Notice;
/**
* 个人私聊
* @date 2022-07-29
*/
class FriendsChat extends Base
{
//*************************************************************列表页************************************************
/**
* 开启个人聊天会话
* @param int $to_user_id 对方用户ID
* @date 2022-07-29
*/
public function updateChatRoom()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 开启个人聊天会话并返回聊天房间ID
$result = $friends_chat_logic->updateChatRoom($param['to_user_id'],$param['client_id']);
if ($result['code'] != 0) {
return json($result);
}
$return_data = [
'room_id' => $result['data']['room_id']
];
return sendSuccessMessage($return_data);
}
/**
* 获取聊天的用户列表
* @date 2022-08-01
*/
public function listChatRoom()
{
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 获取聊天的用户列表
$result = $friends_chat_logic->listChatRoom();
$r_data = [
'room_list' => $result
];
return sendSuccessMessage($r_data);
}
/**
* 删除个人聊天会话
* @param int $to_user_id 对方用户ID
* @date 2022-07-29
*/
public function deleteChatRoom()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 删除个人聊天会话
$result = $friends_chat_logic->deleteChatRoom($param['room_id']);
if ($result['code'] != 0) {
return json($result);
}
return json($result);
}
//******************************************************socket绑定用户***********************************************
/**
* 绑定用户
* @date 2022-08-16
*/
public function bindUser()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 绑定用户
$result = $friends_chat_logic->bindUser($param['client_id']);
return sendSuccessMessage();
}
//*************************************************************详情页************************************************
/**
* 获取聊天详情
* @date 2022-08-03
*/
public function getChatRoomDetail()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 获取房间双方头像以及好友昵称
$room_user = $friends_chat_logic->getChatRoomDetail($param['room_id']);
return sendSuccessMessage([
'room_user' => $room_user
]);
}
/**
* 更改聊天室用户在线状态
* @date 2022-08-16
*/
public function updateUserOnlineStatus()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 更改聊天室用户在线状态
$result = $friends_chat_logic->updateUserOnlineStatus($param['room_id'], $param['is_online']);
if (!$result['code']) {
return json($result);
}
return sendSuccessMessage();
}
/**
* 发送聊天消息
* @date 2022-08-03
*/
public function insertChatMessage()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 组合附加数据
$attach = [];
if ($param['type'] == 2) {
$attach = [
'record_seconds' => $param['record_seconds']
];
} else if ($param['type'] == 4) {
$attach = [
'name' => $param['name'],
'address' => $param['address'],
'lat' => $param['lat'],
'lng' => $param['lng']
];
} else if ($param['type'] == 5) {
$attach = [
'product_id' => $param['product_id'],
'product_name' => $param['product_name'],
'product_cover_img' => $param['product_cover_img'],
];
}
$friend_room_user_model = new ChatFriendsRoomUser();
$to_user_id = $friend_room_user_model->getFriendUserId($param['room_id']);
$room_model = new ChatFriendsRoom();
$message_model = new ChatFriendsRoomMessage();
$room = $room_model->getOneData(['id'=>$param['room_id'],'user_id'=>USER_ID,'another_user_id'=>$to_user_id]);
if($room)
{
$today_is_first = $message_model->where([['user_id','=',$room['user_id']],['to_user_id','=',$room['another_user_id']],['create_time','between',[strtotime(date('Y-m-d')),strtotime(date('Y-m-d'))+86400]]])->find();
if(!$today_is_first)
{
$user_model = new MpweixinUser();
$notice_logic = new Notice();
$user_openid = $user_model->getUserWechatOpenid($room['another_user_id']);
$user_info_model = new UserInfo();
$user_nickname = $user_info_model->getOneData(['user_id'=>USER_ID],'nick_name');
if($user_openid)
{
$template_data = [
'touser' => $user_openid,
'template_id' => 'EorRyJAQw3HzCrfN72VY0ifFMUP9dKcE7Z404R50zPM',
// 'url' => $url . $order_id,
'miniprogram' => [
'appid' => 'wx97ac1cdaca155146',
'pagepath' => 'pages/chat/message?room_id='.$room['id'],
],
'data' => [
'first' => '您有新的消息',
'keyword1' => $user_nickname,
'keyword2' => '',
'keyword3' => '',
'remark' => '立即进入小程序,查看专家解答详情~',
],
];
$notice_logic->notice($template_data);
}
}
}
// 获取房间双方头像以及好友昵称
$result = $friends_chat_logic->insertChatMessage($param['room_id'], $param['content'], $param['type'], $attach);
if (!$result['code']) {
return json($result);
}
return json($result);
}
/**
* 获取聊天记录
* @date 2022-08-03
*/
public function listChatRoomMessage()
{
$param = input('post.');
$friends_chat_logic = new \app\chat\logic\FriendsChat();
// 获取聊天记录
$chat_message_list = $friends_chat_logic->listChatRoomMessage($param['room_id'], $param['cur_first_message_id']);
$r_data = [
'up_list' => $chat_message_list
];
return sendSuccessMessage($r_data);
}
/**
* 获取用户未读消息数量
* @return \think\response\Json
*/
public function getNoReadNumber()
{
$message_model = new ChatFriendsRoomMessage();
$number = $message_model->where(['to_user_id'=>USER_ID,'is_read'=>0])->count();
return sendMessage(['number'=>$number]);
}
}