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

分离客户与客服。

客户可以不登录与客服交流
新生成的用户与客服直接交流显示为游客(BUG)
parent d5fcafe8
......@@ -89,6 +89,10 @@ public class ImWebsocketServer {
@Override
protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> objs) throws Exception {
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);
buf.retain();
}
......@@ -105,6 +109,10 @@ public class ImWebsocketServer {
result = wrappedBuffer(((MessageLite.Builder) msg).build().toByteArray());
}
// 然后下面再转成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);
out.add(frame);
}
......
......@@ -102,6 +102,41 @@ public class ImController extends BaseController{
}
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{
map.put("mine", my);
// 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);
us.setData(map);
return JSONArray.toJSON(us);
......
......@@ -3,7 +3,9 @@ import java.util.List;
import com.qiqiim.webserver.base.dao.BaseDao;
import com.qiqiim.webserver.user.model.ImFriendUserData;
import com.qiqiim.webserver.user.model.ImFriendUserInfoData;
import com.qiqiim.webserver.user.model.UserDepartmentEntity;
import org.apache.ibatis.annotations.Param;
/**
* 部门
......@@ -14,5 +16,11 @@ import com.qiqiim.webserver.user.model.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);
}
......@@ -23,6 +23,11 @@
<!-- 一对多查询 -->
<collection property="list" column="id" select="queryFriendUser"></collection>
</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" >
id ,
......@@ -48,7 +53,20 @@
<select id="queryGroupAndUser" resultMap="userFriendMap">
select id,name as groupname from user_department
</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 <include refid="Base_Column_List" /> from user_department
......
......@@ -19,8 +19,14 @@ public interface UserDepartmentService {
List<UserDepartmentEntity> queryList(Map<String, Object> map);
List<ImFriendUserData> queryGroupAndUser();
List<ImFriendUserData> queryGroupAndUser();
//用户看到的客服列表
List<ImFriendUserData> usersQueryGroupAndUser(long userId);
//客服看到的用户列表
List<ImFriendUserData> adminsQueryGroupAndUser(long userId);
int queryTotal(Map<String, Object> map);
void save(UserDepartmentEntity userDepartment);
......
package com.qiqiim.webserver.user.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -21,7 +22,7 @@ public class UserDepartmentServiceImpl implements UserDepartmentService {
private UserDepartmentDao userDepartmentDao;
@Autowired
private SessionManagerImpl sessionManager;
@Override
public UserDepartmentEntity queryObject(Long id){
......@@ -74,5 +75,53 @@ public class UserDepartmentServiceImpl implements UserDepartmentService {
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 @@
<legend>LAYIM</legend>
<div>
<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;">
结合了LayIm,实现了PC端及手机端访问
<p> 单聊,群聊,文件上传显示,聊天记录查询,上下线提醒
......
This diff is collapsed.
......@@ -35,6 +35,7 @@
</div>
</div>
</form>
</div>
</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