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.

293 lines
10 KiB

<?php
namespace app\chat\service;
use app\chat\model\ChatFriendsRoomMessage;
use app\chat\model\ChatFriendsRoomUser;
class FriendsChat extends Base
{
/**
* 更新双方加入聊天用户表
* @param int $room_id 房间ID
* @param int $to_user_id 对方user_id
* @date 2022-08-02
*/
public function updateRoomUser($room_id, $to_user_id)
{
$friend_room_user_model = new ChatFriendsRoomUser();
// 插入主用户为自己的记录
$data_1 = [
'uid' => $this->mid,
'room_id' => $room_id,
'user_id' => $this->userId,
'to_user_id' => $to_user_id,
];
// 查询条件
$where_1 = $data_1;
// 查询是否有该记录
$room_user_id_1 = $friend_room_user_model->getOneData($where_1, 'id');
// 无记录则新增
if (empty($room_user_id_1)) {
$data_1['id'] = $room_user_id_1;
$res = $friend_room_user_model->dataUpdate($data_1);
if (!$res) {
return sendErrorArray(2001, '插入用户失败');
}
}
// 插入主用户为好友的记录
$data_2 = [
'uid' => $this->mid,
'room_id' => $room_id,
'user_id' => $to_user_id,
'to_user_id' => $this->userId,
];
// 查询条件
$where_2 = $data_2;
// 查询是否有该记录
$room_user_id_2 = $friend_room_user_model->getOneData($where_2, 'id');
// 无记录则新增
if (empty($room_user_id_2)) {
$data_2['id'] = $room_user_id_2;
$res = $friend_room_user_model->dataUpdate($data_2);
if (!$res) {
return sendErrorArray(2001, '插入用户失败');
}
}
return sendSuccessArray();
}
/**
* 获取聊天的用户列表
* @date 2022-09-15
*/
public function listChatRoom()
{
$friend_room_user_model = new ChatFriendsRoomUser();
// 获取聊天的用户列表
$data_list = $friend_room_user_model->listChatRoom();
// 修改展示时间
foreach ($data_list as $k => $v) {
// 显示文案
$data_list[$k]['show_message_text'] = $this->getShowMessageText($v['last_message_type'], $v['last_message_content']);
// 展示时间
$data_list[$k]['show_time'] = $this->listTimeShow(strtotime($v['update_time']));
// 释放关联数据 和 无关数据
unset($data_list[$k]['userInfo']);
unset($data_list[$k]['last_message_content']);
unset($data_list[$k]['update_time']);
}
return $data_list;
}
/**
* 更改消息已读并清空未读数量
* @param int $room_id 房间ID
* @date 2022-08-16
*/
public function allMessageHasRead($room_id)
{
$friend_room_user_model = new ChatFriendsRoomUser();
$friend_room_message_model = new ChatFriendsRoomMessage();
// 更改所有未读消息为已读
$result = $friend_room_message_model->updateAllUnreadMessage($room_id);
if (!$result) {
return sendErrorArray(2001, '更改所有未读消息为已读失败');
}
// 清空未读数量
$result = $friend_room_user_model->emptyRoomUnreadMessage($room_id);
if (!$result) {
return sendErrorArray(2002, '清空未读数量失败');
}
return sendSuccessArray();
}
/**
* 时间显示规格-仿微信聊天详情时间显示规则
* @param int $create_time 时间戳
* @param int $type 1--24小时制 2--12小时制
* @date 2022-08-09
*/
public function timeShow($create_time, $type = 1)
{
// 今天时间戳
$today = strtotime(date('Y-m-d'));
// 昨天时间戳
$yesterday = $today - 86400;
// 一周前的时间戳(含今天的时间)
$last_week_day = $today - 86400 * 6;
// 今年1月1日时间戳
$this_year = strtotime(date('Y') . '-01-01');
// 今天的时间
if ($create_time >= $today) {
if ($type == 1) {
$show_time = date("H:i", $create_time);
} else if ($type == 2) {
// 创建时间大于创建时间当天的中午12:00
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = '下午 ' . date("h:i", $create_time);
} else {
$show_time = '上午 ' . date("h:i", $create_time);
}
}
// 昨天的时间
} else if ($create_time >= $yesterday) {
if ($type == 1) {
$show_time = '昨天 ' . date("H:i", $create_time);
} else if ($type == 2) {
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = '昨天 ' . date("h:i", $create_time);
} else {
$show_time = '昨天 ' . date("h:i", $create_time);
}
}
// 上周的时间
} else if ($create_time >= $last_week_day) {
if ($type == 1) {
$show_time = '星期' . week_to_upper(date("w", $create_time)) . ' ' . date("H:i", $create_time);
} else if ($type == 2) {
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = '星期' . week_to_upper(date("w", $create_time)) . ' 下午 ' . date("h:i", $create_time);
} else {
$show_time = '星期' . week_to_upper(date("w", $create_time)) . ' 上午 ' . date("h:i", $create_time);
}
}
// 今年的时间
} else if ($create_time >= $this_year) {
if ($type == 1) {
$show_time = date("m月d日", $create_time) . ' ' . date("H:i", $create_time);
} else if ($type == 2) {
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = date("m月d日", $create_time) . ' 下午 ' . date("h:i", $create_time);
} else {
$show_time = date("m月d日", $create_time) . ' 上午 ' . date("h:i", $create_time);
}
}
// 再之前的时间
} else {
if ($type == 1) {
$show_time = date("Y年m月d日", $create_time) . ' ' . date("H:i", $create_time);
} else if ($type == 2) {
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = date("Y年m月d日", $create_time) . ' 下午 ' . date("h:i", $create_time);
} else {
$show_time = date("Y年m月d日", $create_time) . ' 上午 ' . date("h:i", $create_time);
}
}
}
return $show_time;
}
/**
* 时间显示规格-仿微信聊天列表时间显示规则
* @param int $create_time 时间戳
* @param int $type 1--24小时制 2--12小时制
* @date 2022-08-09
*/
public function listTimeShow($create_time, $type = 1)
{
// 今天时间戳
$today = strtotime(date('Y-m-d'));
// 昨天时间戳
$yesterday = $today - 86400;
// 一周前的时间戳(含今天的时间)
$last_week_day = $today - 86400 * 6;
// 今年1月1日时间戳
$this_year = strtotime(date('Y') . '-01-01');
// 今天的时间
if ($create_time >= $today) {
if ($type == 1) {
$show_time = date("H:i", $create_time);
} else if ($type == 2) {
// 创建时间大于创建时间当天的中午12:00
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = '下午 ' . date("h:i", $create_time);
} else {
$show_time = '上午 ' . date("h:i", $create_time);
}
}
// 昨天的时间
} else if ($create_time >= $yesterday) {
if ($type == 1) {
$show_time = '昨天 ' . date("H:i", $create_time);
} else if ($type == 2) {
if ($create_time >= strtotime(date('Y-m-d', $create_time)) + 86400 / 2) {
$show_time = '昨天 ' . date("h:i", $create_time);
} else {
$show_time = '昨天 ' . date("h:i", $create_time);
}
}
// 上周的时间
} else if ($create_time >= $last_week_day) {
$show_time = '星期' . week_to_upper(date("w", $create_time));
// 今年的时间
} else if ($create_time >= $this_year) {
$show_time = date("m月d日", $create_time);
// 再之前的时间
} else {
$show_time = date("Y年m月d日", $create_time);
}
return $show_time;
}
/**
* 列表页 获取展示消息信息
* @param int $message_type 聊天类型 1--文字(有表情) 2--语音 3--图片 4--位置
* @param string $message_content 聊天内容
* @return void
*/
public function getShowMessageText($message_type, $message_content)
{
// 最后1条消息显示
switch ($message_type) {
// 文字
case 1:
$show_message_text = $message_content;
break;
// 语音
case 2:
$show_message_text = '[语音]';
break;
// 图片
case 3:
$show_message_text = '[图片]';
break;
// 位置
case 4:
$show_message_text = '[位置]' . $message_content;
break;
case 5:
$show_message_text = '[商品]' . $message_content;
break;
// 其他或没有数据
default:
$show_message_text = '';
break;
}
return $show_message_text;
}
}