Commit f0aa9ffb authored by 李博今's avatar 李博今

分离客户与客服。

客户可以不登录与客服交流
新生成的用户与客服直接交流显示为游客(BUG)
parent d5fcafe8
...@@ -89,6 +89,10 @@ public class ImWebsocketServer { ...@@ -89,6 +89,10 @@ public class ImWebsocketServer {
@Override @Override
protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> objs) throws Exception { protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> objs) throws Exception {
ByteBuf buf = ((BinaryWebSocketFrame) frame).content(); ByteBuf buf = ((BinaryWebSocketFrame) frame).content();
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
System.out.println(new String(bytes) + "=====================decode========================");
buf.resetReaderIndex();
objs.add(buf); objs.add(buf);
buf.retain(); buf.retain();
} }
...@@ -105,6 +109,10 @@ public class ImWebsocketServer { ...@@ -105,6 +109,10 @@ public class ImWebsocketServer {
result = wrappedBuffer(((MessageLite.Builder) msg).build().toByteArray()); result = wrappedBuffer(((MessageLite.Builder) msg).build().toByteArray());
} }
// 然后下面再转成websocket二进制流,因为客户端不能直接解析protobuf编码生成的 // 然后下面再转成websocket二进制流,因为客户端不能直接解析protobuf编码生成的
byte[] bytes = new byte[result.readableBytes()];
result.readBytes(bytes);
System.out.println(new String(bytes) + "=====================encode========================");
result.resetReaderIndex();
WebSocketFrame frame = new BinaryWebSocketFrame(result); WebSocketFrame frame = new BinaryWebSocketFrame(result);
out.add(frame); out.add(frame);
} }
......
...@@ -103,6 +103,41 @@ public class ImController extends BaseController{ ...@@ -103,6 +103,41 @@ public class ImController extends BaseController{
return "redirect:login.jsp"; return "redirect:login.jsp";
} }
/**
* 用户假装登录
*/
@RequestMapping("/fakeLogin")
public String fakeLogin(@RequestParam Map<String, Object> params,HttpServletRequest request){
//生成新用户
UserAccountEntity newUserAccount = new UserAccountEntity();
String data = UUID.randomUUID().toString().replaceAll("-","");
newUserAccount.setAccount(data);
newUserAccount.setPassword(data);
UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setDeptid(2L);
userInfoEntity.setName(data);
newUserAccount.setUserInfo(userInfoEntity);
newUserAccount.setIsdel(0);
userAccountServiceImpl.save(newUserAccount);
//将信息放入params
params.put("account",data);
params.put("password",data);
//根据新用户登录
Query query = new Query(params);
UserAccountEntity userAccount = userAccountServiceImpl.validateUser(query);
if(userAccount!=null){
setLoginUser(userAccount);
String template = check(request);
if(template.equals(Constants.ViewTemplateConfig.mobiletemplate)){
return "layimmobile";
}
return "layim";
}
return "redirect:login.jsp";
}
/** /**
* 取得所有聊天用户 * 取得所有聊天用户
...@@ -142,7 +177,17 @@ public class ImController extends BaseController{ ...@@ -142,7 +177,17 @@ public class ImController extends BaseController{
map.put("mine", my); map.put("mine", my);
// map.put("group",groups); // map.put("group",groups);
//获取用户分组 及用户 //获取用户分组 及用户
List<ImFriendUserData> friends = userDepartmentServiceImpl.queryGroupAndUser(); List<ImFriendUserData> friends = new ArrayList<>();
//管理员列表即为与其有过聊天记录的用户
if(user.getDeptid() == 1){
friends = userDepartmentServiceImpl.adminsQueryGroupAndUser(user.getUid());
}else{
Long l = (Long) request.getAttribute("serviceId");
if(l == null){
l = 0L;
}
friends = userDepartmentServiceImpl.usersQueryGroupAndUser(l);
}
map.put("friend",friends); map.put("friend",friends);
us.setData(map); us.setData(map);
return JSONArray.toJSON(us); return JSONArray.toJSON(us);
......
...@@ -3,7 +3,9 @@ import java.util.List; ...@@ -3,7 +3,9 @@ import java.util.List;
import com.qiqiim.webserver.base.dao.BaseDao; import com.qiqiim.webserver.base.dao.BaseDao;
import com.qiqiim.webserver.user.model.ImFriendUserData; import com.qiqiim.webserver.user.model.ImFriendUserData;
import com.qiqiim.webserver.user.model.ImFriendUserInfoData;
import com.qiqiim.webserver.user.model.UserDepartmentEntity; import com.qiqiim.webserver.user.model.UserDepartmentEntity;
import org.apache.ibatis.annotations.Param;
/** /**
* 部门 * 部门
...@@ -15,4 +17,10 @@ import com.qiqiim.webserver.user.model.UserDepartmentEntity; ...@@ -15,4 +17,10 @@ import com.qiqiim.webserver.user.model.UserDepartmentEntity;
public interface UserDepartmentDao extends BaseDao<UserDepartmentEntity> { public interface UserDepartmentDao extends BaseDao<UserDepartmentEntity> {
public List<ImFriendUserData> queryGroupAndUser(); public List<ImFriendUserData> queryGroupAndUser();
public List<ImFriendUserData> usersQueryGroupAndUser();
public List<ImFriendUserData> adminsQueryGroupAndUser();
public List<ImFriendUserInfoData> adminsGetHistoryUser(@Param("id") long id, @Param("userId") long userId);
} }
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
<collection property="list" column="id" select="queryFriendUser"></collection> <collection property="list" column="id" select="queryFriendUser"></collection>
</resultMap> </resultMap>
<resultMap type="com.qiqiim.webserver.user.model.ImFriendUserData" id="userFriendMapWithoutCollection" >
<result property="id" column="id"/>
<result property="groupname" column="groupname"/>
</resultMap>
<sql id="Base_Column_List" > <sql id="Base_Column_List" >
id , id ,
name , name ,
...@@ -49,6 +54,19 @@ ...@@ -49,6 +54,19 @@
select id,name as groupname from user_department select id,name as groupname from user_department
</select> </select>
<select id="usersQueryGroupAndUser" resultMap="userFriendMap">
select id,name as groupname from user_department where user_department.id = 1
</select>
<select id="adminsQueryGroupAndUser" resultMap="userFriendMapWithoutCollection">
select id,name as groupname from user_department where id != 1
</select>
<select id="adminsGetHistoryUser" resultType="com.qiqiim.webserver.user.model.ImFriendUserInfoData">
select DISTINCT uid as id ,name as username , signature as sign , profilephoto as avatar from user_info
left join user_message um on um.senduser = user_info.uid or um.receiveuser = user_info.uid
where deptid = #{id} and (senduser = #{userId} or receiveuser =#{userId})
</select>
<select id="queryList" resultType="com.qiqiim.webserver.user.model.UserDepartmentEntity"> <select id="queryList" resultType="com.qiqiim.webserver.user.model.UserDepartmentEntity">
select <include refid="Base_Column_List" /> from user_department select <include refid="Base_Column_List" /> from user_department
......
...@@ -21,6 +21,12 @@ public interface UserDepartmentService { ...@@ -21,6 +21,12 @@ public interface UserDepartmentService {
List<ImFriendUserData> queryGroupAndUser(); List<ImFriendUserData> queryGroupAndUser();
//用户看到的客服列表
List<ImFriendUserData> usersQueryGroupAndUser(long userId);
//客服看到的用户列表
List<ImFriendUserData> adminsQueryGroupAndUser(long userId);
int queryTotal(Map<String, Object> map); int queryTotal(Map<String, Object> map);
void save(UserDepartmentEntity userDepartment); void save(UserDepartmentEntity userDepartment);
......
package com.qiqiim.webserver.user.service.impl; package com.qiqiim.webserver.user.service.impl;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -75,4 +76,52 @@ public class UserDepartmentServiceImpl implements UserDepartmentService { ...@@ -75,4 +76,52 @@ public class UserDepartmentServiceImpl implements UserDepartmentService {
return friendgroup; return friendgroup;
} }
@Override
public List<ImFriendUserData> usersQueryGroupAndUser(long userId) {
List<ImFriendUserData> friendgroup = userDepartmentDao.usersQueryGroupAndUser();
for(ImFriendUserData fg:friendgroup){
if(userId == 0){
List<ImFriendUserInfoData> friends = fg.getList();
if(friends!=null&&friends.size()>0){
for(ImFriendUserInfoData fr:friends){
boolean exist = sessionManager.exist(fr.getId().toString());
if(exist)
fr.setStatus("online");
}
}
}else{
List<ImFriendUserInfoData> removeList = new ArrayList<>();
for(ImFriendUserInfoData imFriendUserInfoData : fg.getList()){
if(!imFriendUserInfoData.getId().equals(userId)){
removeList.add(imFriendUserInfoData);
}else{
boolean exist = sessionManager.exist(imFriendUserInfoData.getId().toString());
if(exist)
imFriendUserInfoData.setStatus("online");
}
}
fg.getList().removeAll(removeList);
}
}
return friendgroup;
}
@Override
public List<ImFriendUserData> adminsQueryGroupAndUser(long userId) {
List<ImFriendUserData> friendgroup = userDepartmentDao.adminsQueryGroupAndUser();
for(ImFriendUserData fg:friendgroup){
List<ImFriendUserInfoData> friends = userDepartmentDao.adminsGetHistoryUser(fg.getId(), userId);
fg.setList(friends);
if(friends!=null&&friends.size()>0){
for(ImFriendUserInfoData fr:friends){
boolean exist = sessionManager.exist(fr.getId().toString());
if(exist)
fr.setStatus("online");
}
}
}
return friendgroup;
}
} }
...@@ -34,6 +34,13 @@ ...@@ -34,6 +34,13 @@
<legend>LAYIM</legend> <legend>LAYIM</legend>
<div> <div>
<a class="layui-btn layui-btn-primary" href="login.jsp" target="_blank"><i class="layui-icon">&#xe613;</i>登录去聊天</a> <a class="layui-btn layui-btn-primary" href="login.jsp" target="_blank"><i class="layui-icon">&#xe613;</i>登录去聊天</a>
<form class="layui-form loginform" action="fakeLogin" method="post">
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" lay-filter="login">咨询客服<tton>
</div>
</div>
</form>
<div class="layui-text" style="margin: 0; color: #FF5722;"> <div class="layui-text" style="margin: 0; color: #FF5722;">
结合了LayIm,实现了PC端及手机端访问 结合了LayIm,实现了PC端及手机端访问
<p> 单聊,群聊,文件上传显示,聊天记录查询,上下线提醒 <p> 单聊,群聊,文件上传显示,聊天记录查询,上下线提醒
......
This diff is collapsed.
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
</div> </div>
</div> </div>
</form> </form>
</div> </div>
</fieldset> </fieldset>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment