|
@@ -57,46 +57,28 @@ public class CloseReqHandler extends AbstractCmdHandler
|
|
|
ImSessionContext imSessionContext = (ImSessionContext)channelContext.getAttribute();
|
|
|
Client client = imSessionContext.getClient();
|
|
|
if( null != client){
|
|
|
- User user = client.getUser();
|
|
|
- if( null != user ){
|
|
|
- String visitType = user.getVisitType();
|
|
|
- String[] userIdArray = {user.getId()};
|
|
|
- if( VisitTypeEnum.SERVICEACCOUNT.getKey().equals(visitType) ){
|
|
|
- //移除客服容器中的 客服
|
|
|
- String serviceAccountContainerKey
|
|
|
- = user.getExtras().getString("companyId") + ImConst.SEPARATOR
|
|
|
- + user.getExtras().getString("departmentId") + ImConst.SEPARATOR
|
|
|
- + VisitTypeEnum.SERVICEACCOUNT.getKey() ;
|
|
|
- jedisTemplate.hashDel(serviceAccountContainerKey,userIdArray);
|
|
|
- //判断 客服是否具有查看当前部门下 全部客服通话的权限 如果有移除
|
|
|
- if( Boolean.valueOf(user.getExtras().getString("hasViewAllServiceAccount")) ){
|
|
|
- String adminContainerKey = user.getExtras().getString("companyId")
|
|
|
- + ImConst.SEPARATOR + user.getExtras().getString("departmentId")
|
|
|
- + ImConst.SEPARATOR + ImConst.ADMIN ;
|
|
|
- jedisTemplate.listRemove(adminContainerKey,0,user.getId());
|
|
|
- }
|
|
|
- List<ChatGroup> chatGroups = ChatGroup.dao.find(this.createSelectGroupSql(user));
|
|
|
- if( CollectionUtils.isNotEmpty(chatGroups) ){
|
|
|
- for (ChatGroup chatGroup : chatGroups) {
|
|
|
- //客服是否是离线状态 1: 是 0: 否
|
|
|
- chatGroup.set("service_account_type", ServiceAccountOfflineTypeEnum.OFF_LINE.getKey()).update();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if( VisitTypeEnum.VISITOR.getKey().equals(visitType) ){
|
|
|
- //修改 sw_visitor_department_middle 表中的 online状态; '用户状态 1:已下线 0:在线'
|
|
|
- VisitorDepartmentMiddle.dao.findById(user.getId()).set("online",1).update();
|
|
|
- }
|
|
|
- jedisTemplate.hashDel(CURRENT_SYSTEM_ALL_USER_ID,userIdArray);
|
|
|
- }
|
|
|
+ disposeUserData(client.getUser());
|
|
|
}
|
|
|
ImAio.remove(channelContext, "收到关闭请求");
|
|
|
}else{
|
|
|
String userId = closeReqBody.getUserid();
|
|
|
- User user = ImAio.getUser(userId);
|
|
|
- //访问类型 (SERVICEACCOUNT 客服 / CUSTOMER 客户 / VISITOR 游客)
|
|
|
+ disposeUserData(ImAio.getUser(userId));
|
|
|
+ ImAio.remove(userId, "收到关闭请求!");
|
|
|
+ }
|
|
|
+ return ImKit.ConvertRespPacket(new RespBody(Command.COMMAND_CLOSE_REQ, ImStatus.C10021), channelContext);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理用户离线后的数据操作
|
|
|
+ * @param user
|
|
|
+ * @return {@link }
|
|
|
+ * @author Darren
|
|
|
+ * @date 2020/2/16 10:52
|
|
|
+ */
|
|
|
+ private void disposeUserData(User user){
|
|
|
+ if( null != user ){
|
|
|
String visitType = user.getVisitType();
|
|
|
- String[] userIdArray = {userId};
|
|
|
+ String[] userIdArray = {user.getId()};
|
|
|
if( VisitTypeEnum.SERVICEACCOUNT.getKey().equals(visitType) ){
|
|
|
//移除客服容器中的 客服
|
|
|
String serviceAccountContainerKey
|
|
@@ -104,12 +86,12 @@ public class CloseReqHandler extends AbstractCmdHandler
|
|
|
+ user.getExtras().getString("departmentId") + ImConst.SEPARATOR
|
|
|
+ VisitTypeEnum.SERVICEACCOUNT.getKey() ;
|
|
|
jedisTemplate.hashDel(serviceAccountContainerKey,userIdArray);
|
|
|
- //判断 客服是否具有查看当前部门下 全部客服通话的权限
|
|
|
+ //判断 客服是否具有查看当前部门下 全部客服通话的权限 如果有移除
|
|
|
if( Boolean.valueOf(user.getExtras().getString("hasViewAllServiceAccount")) ){
|
|
|
String adminContainerKey = user.getExtras().getString("companyId")
|
|
|
+ ImConst.SEPARATOR + user.getExtras().getString("departmentId")
|
|
|
+ ImConst.SEPARATOR + ImConst.ADMIN ;
|
|
|
- jedisTemplate.listRemove(adminContainerKey,0,userId);
|
|
|
+ jedisTemplate.listRemove(adminContainerKey,0,user.getId());
|
|
|
}
|
|
|
List<ChatGroup> chatGroups = ChatGroup.dao.find(this.createSelectGroupSql(user));
|
|
|
if( CollectionUtils.isNotEmpty(chatGroups) ){
|
|
@@ -124,9 +106,7 @@ public class CloseReqHandler extends AbstractCmdHandler
|
|
|
VisitorDepartmentMiddle.dao.findById(user.getId()).set("online",1).update();
|
|
|
}
|
|
|
jedisTemplate.hashDel(CURRENT_SYSTEM_ALL_USER_ID,userIdArray);
|
|
|
- ImAio.remove(userId, "收到关闭请求!");
|
|
|
}
|
|
|
- return ImKit.ConvertRespPacket(new RespBody(Command.COMMAND_CLOSE_REQ, ImStatus.C10021), channelContext);
|
|
|
}
|
|
|
|
|
|
private String createSelectGroupSql(User user){
|