$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; } }