udream-cxs 4 лет назад
Родитель
Сommit
9d17bbcc15

+ 28 - 12
lift-ud-service/src/main/java/cn/com/ty/lift/ud/chat/mapper/ChatSessionMapper.xml

@@ -247,12 +247,12 @@
   
   <select id="findDBListByUserId" parameterType="java.lang.String" resultType="cn.com.ty.lift.ud.chat.mapper.entity.ChatSessionEntity" >
       select
-          usr.`name` AS userName,
-          usr.avatar_url AS avatarUrl,
-          sessio.*,
-          '' caseType,
-          '' acceptStatus,
-          '' expression
+              usr.`name` AS userName,
+              usr.avatar_url AS avatarUrl,
+              sessio.*,
+              '' caseType,
+              '' acceptStatus,
+              '' expression
       from chat_session sessio
       left join user_info usr on usr.user_id = sessio.user_id
       where sessio.sessionid in (select sessionid from chat_session where user_id =   #{userId,javaType=java.lang.String})
@@ -260,18 +260,34 @@
       and sessio.statuz = 1 and sessio.data_table = 3
       union
       select
-          usr.`name` AS userName,
-          usr.avatar_url AS avatarUrl,
-          sessio.*,
-          cas.data_table caseType,
-          cas.accept_status acceptStatus,
-          cas.expression expression
+              usr.`name` AS userName,
+              usr.avatar_url AS avatarUrl,
+              sessio.*,
+              cas.data_table caseType,
+              cas.accept_status acceptStatus,
+              cas.expression expression
       from chat_session sessio
       left join lift_case cas on cas.session_id = sessio.sessionid
       left join user_info usr on usr.user_id = sessio.user_id
       where sessio.sessionid in (select sessionid from chat_session where user_id =   #{userId,javaType=java.lang.String})
       and sessio.user_id !=   #{userId,javaType=java.lang.String}
       and sessio.statuz = 1 and sessio.data_table != 3
+      and cas.accept_status = 1
+      union
+      select
+              '' AS userName,
+              '' AS avatarUrl,
+              sessio.*,
+              cas.data_table caseType,
+              cas.accept_status acceptStatus,
+              cas.expression expression
+      from chat_session sessio
+      left join lift_case cas on cas.session_id = sessio.sessionid
+      left join user_info usr on usr.user_id = sessio.user_id
+      where sessio.user_id =   #{userId,javaType=java.lang.String}
+      and sessio.data_table != 3
+      and sessio.statuz = 1
+      and cas.accept_status != 1
   </select>
 
 

+ 1 - 1
lift-ud-service/src/main/java/cn/com/ty/lift/ud/chat/service/impl/LiftCaseServiceImpl.java

@@ -478,7 +478,7 @@ public class LiftCaseServiceImpl extends ServiceImpl<LiftCaseMapper, LiftCaseEnt
         sessionMapper.insertSelective(record);
 
         // 在redis中创建房间
-        RoomInfo roomInfo2 = redis.get(record.getSessionid(), RoomInfo.class);
+        RoomInfo roomInfo2 = redis.get("ROOM:"+record.getSessionid(), RoomInfo.class);
         UserInfo expert = new UserInfo();
         expert.setUserId(caseEntity.getChargerId().toString());
         roomInfo2.getUserLIst().add(expert);

+ 8 - 5
lift-ud-service/src/main/java/cn/com/ty/lift/ud/neety/process/ChatProcessor.java

@@ -2,6 +2,8 @@ package cn.com.ty.lift.ud.neety.process;
 
 import java.util.*;
 
+import cn.com.ty.lift.ud.neety.task.RoomInfo;
+import cn.com.ty.lift.ud.neety.task.UserInfo;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
@@ -64,11 +66,12 @@ public class ChatProcessor extends WebSoketSupport implements ProcessorInterface
             //发给自己
             sendMessage(client, request);
         }else{
-            List userLIst = redis.get("ROOM:"+sessionId, List.class);
-            for (int i = 0; i < userLIst.size(); i++) {
-                Map<String, String> user = (Map) userLIst.get(i);
-                String toUserId = user.get("userId");
-                Channel channel = userChannel.get(toUserId);
+            RoomInfo roomInfo = redis.get("ROOM:" + sessionId, RoomInfo.class);
+            for (int i = 0; roomInfo.getUserLIst() != null
+                    && !roomInfo.getUserLIst().isEmpty()
+                    &&i < roomInfo.getUserLIst().size(); i++) {
+                UserInfo userInfo = roomInfo.getUserLIst().get(i);
+                Channel channel = userChannel.get(userInfo.getUserId());
 
                 if(null != channel){
                     sendMessage(channel, request);

+ 31 - 11
lift-ud-service/src/main/java/cn/com/ty/lift/ud/neety/process/InitRoomProcessor.java

@@ -9,6 +9,8 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import cn.com.ty.lift.ud.neety.protocol.ChatMsgDTO;
+import cn.com.ty.lift.ud.neety.task.RoomInfo;
+import cn.com.ty.lift.ud.neety.task.UserInfo;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
@@ -37,9 +39,13 @@ public class InitRoomProcessor extends WebSoketSupport implements ProcessorInter
     @Override
     public void process(Channel client, IMMessage request) {
         String currentUserId = client.attr(USERID).get();
+        String currentUserHead = client.attr(HEAD_PIC).get();
+        String currentUserName = client.attr(USERNAME).get();
 
         String SESSION_ID = request.getSessionid();
         String USER_ID = request.getUserId();
+        /*
+        在出诊问诊,附近的人做业务操作的时候,会再redis中生成房间
         //如果聊天室不存在,就生成聊天室,并把当前用户放入到聊天室中
         boolean roomExists = redis.exists("ROOM:" + SESSION_ID);
         if(!roomExists){
@@ -48,20 +54,34 @@ public class InitRoomProcessor extends WebSoketSupport implements ProcessorInter
             newUser.put("userId", USER_ID);
             list1.add(newUser);
             redis.setValue("ROOM:" + SESSION_ID, list1);
-        }
+        }*/
         //如果聊天室存在,并且当前用户没有在聊天室中,把用户添加到聊天室中
-        List list = redis.get("ROOM:" + SESSION_ID, List.class);
-        List<String> list1 = new ArrayList<>();
-        for (int i = 0; list != null && i < list.size(); i++) {
-            Map ob = (Map) list.get(i);
-            String userId = ob.get("userId").toString();
+        boolean exists = redis.exists("ROOM:" + SESSION_ID);
+        if (!exists){
+            IMMessage im = new IMMessage();
+            im.setCmd(IMP.CHAT.getName());
+            im.setMsg("房间不存在");
+            sendMessage(client, im);
+            logout(client);
+        }
+        RoomInfo roomInfo = redis.get("ROOM:" + SESSION_ID, RoomInfo.class);
+
+        //list1 防止用户重复添加到房间
+        Set<String> list1 = new HashSet<>();
+        for (int i = 0; roomInfo.getUserLIst() != null
+                && !roomInfo.getUserLIst().isEmpty()
+                && i < roomInfo.getUserLIst().size(); i++) {
+            String userId = roomInfo.getUserLIst().get(i).getUserId();
             list1.add(userId);
         }
-        if (!list1.contains(USER_ID)) {
-            Map newUser = new HashMap();
-            newUser.put("userId", USER_ID);
-            list.add(newUser);
-            redis.setValue("ROOM:" + SESSION_ID, list);
+
+        if (!list1.contains(currentUserId)) {
+            UserInfo userInfo = new UserInfo();
+            userInfo.setUserId(currentUserId);
+            userInfo.setUserName(currentUserName);
+            userInfo.setAvatarUrl(currentUserHead);
+            roomInfo.getUserLIst().add(userInfo);
+            redis.setValue("ROOM:" + SESSION_ID, roomInfo);
         }
 
 

+ 1 - 1
lift-ud-service/src/main/java/cn/com/ty/lift/ud/neety/server/handler/WebSocketHandler.java

@@ -192,7 +192,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<Object> {
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
 //        super.exceptionCaught(ctx, cause);
-        log.info("客户端异常");
+        log.info("客户端异常---->"+cause.getMessage());
         cause.printStackTrace();
 //        process.logout(ctx.channel());
     }