lyhzzz 2 years ago
parent
commit
6e31be8c48

+ 2 - 1
src/main/java/com/fdkankan/tk/mapper/IRoomDanmakuMapper.java

@@ -23,6 +23,7 @@ public interface IRoomDanmakuMapper extends BaseMapper<RoomDanmaku> {
 
     List<DataCount> getDataCountTop5(@Param("roomIds")List<String> roomIds);
 
-    Page<UserMsgVo> pageList( Page<Object> page, @Param("roomIds") List<String>  roomId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+    Page<UserMsgVo> pageList( Page<Object> page, @Param("userName") String userName,@Param("roomTitle") String roomTitle,
+                              @Param("startTime") String startTime, @Param("endTime") String endTime);
 
 }

+ 7 - 51
src/main/java/com/fdkankan/tk/service/DataCountService.java

@@ -1,5 +1,6 @@
 package com.fdkankan.tk.service;
 import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.tk.common.PageInfo;
 import com.fdkankan.tk.common.util.JwtUtil;
@@ -261,70 +262,25 @@ public class DataCountService {
     }
 
     public Page<UserMsgVo> roomMsgList(String token ,String roomTitle, String startTime, String endTime, Integer pageNum, Integer pageSize) {
-        List<Room> roomList = roomService.getRoomByToken(token);
-        List<String> roomIdsDb = roomList.stream().map(Room::getRoomId).collect(Collectors.toList());
-        List<String> roomIds = roomIdsDb;
-
-        if(StringUtils.isNotBlank(roomTitle)){
-            List<Room> roomListLike = roomService.getLikeTitle(roomTitle);
-            if(roomList.size() >0){
-                List<String> roomIds2 = roomListLike.stream().map(Room::getRoomId).collect(Collectors.toList());
-                roomIds = roomIdsDb.stream().filter(roomIds2::contains).collect(Collectors.toList());
-            }
-        }
-        if(roomIds.isEmpty()){
-            return  new Page<>(pageNum,pageSize);
-        }
-
+        String userName = JwtUtil.getUserName(token);
         startTime = Dateutils.formatStartTime(startTime);
         endTime = Dateutils.formatEndTime(endTime);
 
-        Page<UserMsgVo> page = roomDanmakuService.pageList(new Page<>(pageNum,pageSize) ,roomIds,startTime,endTime);
-        Set<String> roomIdsVo = page.getRecords().stream().map(UserMsgVo::getRoomId).collect(Collectors.toSet());
-        HashMap<String, Room> roomHashMap = roomService.getByIds(roomIdsVo);
+        Page<UserMsgVo> page = roomDanmakuService.pageList(new Page<>(pageNum,pageSize) ,userName,roomTitle,startTime,endTime);
 
-        HashMap<String,List<RoomVisitLog>> roomVisitLogsMap = new HashMap<>();
         HashMap<String,List<RoomDanmaku>> danmakusMap = new HashMap<>();
 
         for (UserMsgVo record : page.getRecords()) {
-            List<RoomVisitLog> roomVisitLogs  = roomVisitLogsMap.get(record.getRoomId());
-            if(roomVisitLogs == null){
-                roomVisitLogs = roomVisitLogService.getByRoomId(record.getRoomId());
-                roomVisitLogsMap.put(record.getRoomId(),roomVisitLogs);
-            }
-            Long time = 0L;
-            Date firstOutTime = null;
-            Date endOutTime = null;
-            for (RoomVisitLog roomVisitLog : roomVisitLogs) {
-                Room room = roomHashMap.get(roomVisitLog.getRoomId());
-                if(room == null){
-                    continue;
-                }
-                Date outRoomTime = roomVisitLog.getOutRoomTime() == null ? room.getUseEndTime() : roomVisitLog.getOutRoomTime();
-                if(outRoomTime == null || roomVisitLog.getInRoomTime() == null){
-                    continue;
-                }
-                if(firstOutTime == null){
-                    firstOutTime = roomVisitLog.getInRoomTime();
-                }else {
-                    firstOutTime = firstOutTime.getTime() <= roomVisitLog.getInRoomTime().getTime() ? firstOutTime : roomVisitLog.getInRoomTime();
-                }
-                if(endOutTime == null){
-                    endOutTime = outRoomTime;
-                }else {
-                    endOutTime = endOutTime.getTime() >= outRoomTime.getTime() ? endOutTime : outRoomTime;
-                }
-                time += (outRoomTime.getTime() - roomVisitLog.getInRoomTime().getTime());
-            }
             List<RoomDanmaku> danmakus  = danmakusMap.get(record.getRoomId()+record.getWxUserId());
             if(danmakus == null){
                 danmakus = roomDanmakuService.getByRoomId(record.getRoomId(),record.getWxUserId());
                 danmakusMap.put(record.getRoomId()+record.getWxUserId(),danmakus);
             }
             List<String> collect = danmakus.stream().map(RoomDanmaku::getText).collect(Collectors.toList());
-            record.setOnlineTime(time/1000/60);
-            record.setFirstInRoomTime(firstOutTime);
-            record.setLastOutRoomTime(endOutTime);
+            if(record.getFirstInRoomTime() != null && record.getLastOutRoomTime()!=null){
+                Long time = DateUtil.between(record.getFirstInRoomTime(),record.getLastOutRoomTime(),DateUnit.MINUTE);
+                record.setOnlineTime(time);
+            }
             record.setTextCount(Long.valueOf(danmakus.size()));
             record.setTexts(collect);
         }

+ 1 - 1
src/main/java/com/fdkankan/tk/service/IRoomDanmakuService.java

@@ -22,7 +22,7 @@ public interface IRoomDanmakuService extends IService<RoomDanmaku> {
 
     List<DataCount> getDataCountTop5(List<String> roomIds);
 
-    Page<UserMsgVo> pageList(Page<Object> page, List<String> roomIds, String startTime, String endTime);
+    Page<UserMsgVo> pageList(Page<Object> page,String userName,String roomTitle, String startTime, String endTime);
 
     List<RoomDanmaku> getByRoomId(String roomId,String wxUserId);
 }

+ 2 - 2
src/main/java/com/fdkankan/tk/service/impl/RoomDanmakuServiceImpl.java

@@ -72,8 +72,8 @@ public class RoomDanmakuServiceImpl extends ServiceImpl<IRoomDanmakuMapper, Room
     }
 
     @Override
-    public Page<UserMsgVo> pageList(Page<Object> page, List<String> roomIds, String startTime, String endTime) {
-        return this.getBaseMapper().pageList(page,roomIds,startTime,endTime);
+    public Page<UserMsgVo> pageList(Page<Object> page, String userName,String roomTitle,String startTime, String endTime) {
+        return this.getBaseMapper().pageList(page,userName,roomTitle,startTime,endTime);
     }
 
     @Override

+ 12 - 7
src/main/resources/mapper/tk/RoomDanmakuMapper.xml

@@ -15,19 +15,24 @@
 
     </select>
     <select id="pageList" resultType="com.fdkankan.tk.response.UserMsgVo">
-        select rd.room_id,rd.user_id as wxUserId,rd.nick_name ,r.room_title,wx.phone_number  from t_room_danmaku rd
+        select rd.room_id,rd.user_id as wxUserId,rd.nick_name ,r.room_title,wx.phone_number,
+        ( SELECT min(in_room_time) FROM t_room_visit_log WHERE room_id = rd.room_id and visit_user_id = rd.user_id) as firstInRoomTime,
+        ( SELECT max(out_room_time) FROM t_room_visit_log WHERE room_id = rd.room_id and visit_user_id = rd.user_id) as lastOutRoomTime
+
+        from t_room_danmaku rd
         LEFT JOIN t_room r  on rd.room_id = r.room_id
         LEFT JOIN t_wx_user wx  on rd.user_id = wx.wx_user_id
         where rd.tb_status = 0
-        <if test="roomIds != null and roomIds.size >0">
-            and  rd.room_id in
-            <foreach item="roomId" collection="roomIds" open="(" separator="," close=")">
-                #{roomId}
-            </foreach>
-        </if>
         <if test="startTime != null and endTime !=null ">
             and  rd.write_time between #{startTime} and #{endTime}
         </if>
+        <if test="roomTitle != null and roomTitle !='' ">
+            and  r.room_title like concat ('%', #{roomTitle} ,'%')
+        </if>
+        <if test="userName != null and userName !='' ">
+            and   r.room_user_name = #{userName}
+        </if>
         group by rd.room_id,rd.user_id,rd.nick_name,r.room_title,wx.phone_number
+        ORDER BY out_room_time desc
     </select>
 </mapper>