聊天列表
来源:互联网 发布:中国乳业数据 编辑:程序博客网 时间:2024/04/28 20:08
//聊天记录列表 function chat_list() {// $user_id = $_POST['send_man']; //聊天记录 $chat_log = M('chat_log'); //请求传入的参数(当前用户) $id = $chat_log->create(); $user_id = $id['send_man']; //用户信息 $user_info = M('user_info'); //取出当前用户的联系人及与每个联系人的最后聊天时间 $sqlString = "select contact, max(time) as max_time from " . "((select content,send_man as contact,time from lswoa_chat_log where receive_man=$user_id and (group_chat is null or group_chat='')) " . "UNION " . "(select content,receive_man as contact,time from lswoa_chat_log where send_man=$user_id and (group_chat is null or group_chat=''))) as chat_contact " . "GROUP BY contact " . "ORDER BY max_time DESC"; $chat_list = $chat_log->query($sqlString); $chat_staff = M('chat_group_staff'); $chatmap['staff'] = $user_id; $chatmap['status'] = 1; //取出用户所在群组ID $res_chat_staff = $chat_staff->where($chatmap)->field("chat_group_id")->select(); //群聊 if ($res_chat_staff) { foreach ($res_chat_staff as $chatk => $chatv) { $group_id[] = $chatv['chat_group_id']; } //用户所在群ID $group_id_str = implode(',', $group_id); //群聊天记录 $logres = "select *,max(time) as max_time from lswoa_chat_log where group_chat in(" . $group_id_str . ") GROUP BY group_chat order by max_time desc"; $lres = M()->query($logres); foreach ($lres as $lok => $lov) { $mapsta['chat_group_id'] = $lov['group_chat']; $chat_li['cy'] = $chat_staff->where($mapsta)->field('staff')->select(); $group_name = M('chat_group')->where('id=' . $lov['group_chat'])->find(); $chat_li['group_chat'] = $lov['group_chat']; //群名称 $chat_li['group_name'] = $group_name['name']; //群好友id $mapstaff['id'] = $lov['send_man']; //群聊天内容 $chat_li['content'] = $lov['content']; //查找该联系人(好友)信息 $user = $user_info->where($mapstaff)->find(); //取出姓名 $chat_li['name'] = $user['name']; //最后聊天时间 $chat_li['max_time'] = $lov['max_time']; //是否群聊 $chat_li['is_group'] = '1'; //头像 $chat_li['head_protrait'] = 'http://' . $_SERVER['HTTP_HOST'] . __ROOT__ . $user['head_protrait']; //未读消息条数 $not_read_count = "select COUNT(*) as nr_count from lswoa_chat_log WHERE lswoa_chat_log.group_chat = " . $lov['group_chat'] . " and lswoa_chat_log.send_man != $user_id and lswoa_chat_log.id not in (select lswoa_chat_log_read.chat_log_id from lswoa_chat_log_read WHERE receive_man = " . $user_id . ")"; $not_read_count_res = M()->query($not_read_count); $chat_li['not_read_count'] = $not_read_count_res[0]['nr_count']; $list['list']['chat'][] = $chat_li; } } //私聊 if ($chat_list) { //取出该条聊天记录对应的聊天内容和用户信息 foreach ($chat_list as $key => $value) { //联系人(好友) $contact = $value['contact']; //最后聊天时间 $max_time = $value['max_time']; //聊天记录的查找条件 $map_chat_log["send_man"] = $contact; $map_chat_log["receive_man"] = $user_id; $map_chat_log["time"] = $max_time; //用户信息的查找条件 $map_user_info["id"] = $contact; //查找该条聊天信息 $chat_info = $chat_log->where($map_chat_log)->find(); if (!$chat_info) { //置换聊天记录的查找条件中的发送与接受方 $map_chat_log["receive_man"] = $contact; $map_chat_log["send_man"] = $user_id; //查找该条聊天信息 $chat_info = $chat_log->where($map_chat_log)->find(); } //取出其聊天内容 $chat_list[$key]['content'] = $chat_info['content']; //查找该联系人(好友)信息 $user = $user_info->where($map_user_info)->find(); //取出姓名 $chat_list[$key]['name'] = $user['name']; //最后聊天时间 $chat_list[$key]['max_time'] = $max_time; //是否群聊 $chat_list[$key]['is_group'] = '0'; //头像 $chat_list[$key]['head_protrait'] = 'http://' . $_SERVER['HTTP_HOST'] . __ROOT__ . $user['head_protrait']; //未读消息条数 $not_read_count = "select COUNT(*) as nr_count from lswoa_chat_log WHERE (lswoa_chat_log.send_man = " . $contact . " and lswoa_chat_log.receive_man = " . $user_id . ") and (lswoa_chat_log.group_chat is null or lswoa_chat_log.group_chat='') and lswoa_chat_log.id not in (select lswoa_chat_log_read.chat_log_id from lswoa_chat_log_read WHERE receive_man = " . $user_id . ")"; $not_read_count_res = M()->query($not_read_count); $chat_list[$key]['not_read_count'] = $not_read_count_res[0]['nr_count']; } foreach ($chat_list as $k => $v) { //在聊天列表中按照max_time进行倒序排序 $size = count($list['list']['chat']); for ($i=0; $i<=$size; $i++) { if ($list['list']['chat'][$i]['max_time'] < $v['max_time']) { array_splice($list['list']['chat'], $i, 0, array($v)); break; } } } $code = array('code' => 1, 'message' => '请求成功'); $this->ajaxReturn(array_merge($code, $list)); } else { $code = array('code' => 2, 'message' => '请求失败'); $this->ajaxReturn($code); } } //聊天记录详情 function chat_content() { $group_chat = $_POST['group_chat']; $send_man = $_POST['send_man']; $receive_man = $_POST['contact']; if (!empty($group_chat)) { //群组 $chat_log = M('chat_log');// $map['send_man'] = $send_man; $map['group_chat'] = $group_chat; $res = $chat_log->where($map)->order('time')->select(); $group_staff = M('chat_group_staff'); $comap['lswoa_chat_group_staff.chat_group_id'] = $group_chat; $comap['lswoa_chat_group_staff.status'] = 1; $head = $group_staff->where($comap)->join('LEFT JOIN lswoa_user_info ON lswoa_user_info.id=lswoa_chat_group_staff.staff')->field('lswoa_user_info.id,lswoa_user_info.name,lswoa_user_info.head_protrait')->select(); if ($res) { //读出的信息如果没有写入已读数据表则写入 $sql_insert = "insert into lswoa_chat_log_read(chat_log_id,receive_man,read_time) select id,'".$send_man."' as receive_man,now() from lswoa_chat_log where group_chat=$group_chat and id not in (select chat_log_id from lswoa_chat_log_read)"; $Model = new \Think\Model(); $Model->execute($sql_insert); foreach ($head as $k => $v) { $v['head_protrait'] = 'http://' . $_SERVER['HTTP_HOST'] . __ROOT__ . $v['head_protrait']; $list['list']['man'][] = $v; } foreach ($res as $ke => $ve) { $list['list']['chat_content'][] = $ve; } $code = array('code' => 1, 'message' => '请求成功'); $this->ajaxReturn(array_merge($code, $list)); } else { $code = array('code' => 2, 'message' => '请求失败'); $this->ajaxReturn($code); } } else { //私聊 $sql = "select id,content,send_man,receive_man,time from lswoa_chat_log where (send_man=$send_man and receive_man=$receive_man) or (send_man=$receive_man and receive_man=$send_man) ORDER BY time"; $res = M()->query($sql); $user_info = M('user_info'); $condition['id'] = $receive_man; $head = $user_info->where($condition)->field('id,name,head_protrait')->select(); //读出的信息如果没有写入已读数据表则写入 $sql_insert = "insert into lswoa_chat_log_read(chat_log_id,receive_man,read_time) select id,receive_man,now() from lswoa_chat_log where receive_man=$send_man and send_man=$receive_man and id not in (select chat_log_id from lswoa_chat_log_read)"; $Model = new \Think\Model(); $Model->execute($sql_insert); if ($res) { foreach ($head as $key => $val) { $val['head_protrait'] = 'http://' . $_SERVER['HTTP_HOST'] . __ROOT__ . $val['head_protrait']; $list['list']['man'][] = $val; } foreach ($res as $k => $v) { $list['list']['chat_content'][] = $v; } $code = array('code' => 1, 'message' => '请求成功'); $this->ajaxReturn(array_merge($code, $list)); } else { $code = array('code' => 2, 'message' => '请求失败'); $this->ajaxReturn($code); } } }
0 0
- 聊天列表
- QListWidget制作聊天列表
- Android 实现聊天列表
- xmpp-iOS-获取好友列表、聊天信息列表、聊天
- QQ聊天列表粘性控件
- 聊天界面返回到聊天列表如何设计
- smack 多人聊天获取聊天室列表
- 仿QQ聊天列表界面demo
- 环信聊天列表不刷新数据
- Android学QQ聊天列表展示ListView
- 仿微信聊天列表之RecyclerView多布局
- 安卓聊天列表滑动显示错位
- 融云切换账号聊天列表问题
- AngularJs实现聊天列表实时刷新
- Android聊天列表Demo(QQ,微信,等通讯工具的聊天列表)
- 云信聊天界面返回键总返回到聊天列表
- Qt学习——聊天的QQ列表QToolBox类
- Qt学习——聊天的QQ列表QToolBox类 .
- Java中的final关键字浅析
- 在sublime text 中设置浏览器浏览
- 未能加载文件或程序集xxx或它的某一个依赖项 试图加载格式不正确的程序
- 关于SAP月末生产订单不能关闭的相关问题
- python学习笔记之各种函数各种库
- 聊天列表
- 初始化实际过程
- 图像处理中的数学原理详解18——内积与外积
- vim 常用快捷键
- 用C语言单链表实现的一个DotA2英雄管理系统(其实我一直羞于承认这算一个系统。。)
- Context参数解释
- 电子工程师的出路在哪里?
- 【Android实测】CountDownTimer类的使用
- eclipse在ubuntu下工具栏美化