Sfoglia il codice sorgente

优化获取聊天室的接口,将循环调用数据库的接口进行优化

liu 2 mesi fa
parent
commit
df5b203927

+ 1 - 0
src/main/java/com/sqx/modules/gameChat/dao/ChatContentTcwmDao.java

@@ -43,4 +43,5 @@ public interface ChatContentTcwmDao extends BaseMapper<ChatContentTcwm> {
 
     int updateShopAllUnreadCount(Long userId, Long riderUserId, Long shopId);
 
+    List<ChatContentTcwm> selectUnreadCountList(@Param("ordersIds") List<Long> ordersIds, @Param("userType") Integer userType);
 }

+ 2 - 0
src/main/java/com/sqx/modules/gameChat/entity/ChatContentTcwm.java

@@ -104,5 +104,7 @@ public class ChatContentTcwm {
     @TableField(exist = false)
     private Long indentId;
 
+    @TableField(exist = false)
+    private Integer count;
 
 }

+ 47 - 8
src/main/java/com/sqx/modules/gameChat/service/impl/ChatContentTcwmServiceImpl.java

@@ -12,6 +12,11 @@ import com.sqx.modules.gameChat.service.ChatContentTcwmService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 
 @Service
 public class ChatContentTcwmServiceImpl extends ServiceImpl<ChatContentTcwmDao, ChatContentTcwm> implements ChatContentTcwmService {
@@ -39,20 +44,54 @@ public class ChatContentTcwmServiceImpl extends ServiceImpl<ChatContentTcwmDao,
     public Result selectOrdersChatPage(Integer page, Integer limit, Long userId, Long riderId, Long shopId) {
         Page<ChatContentTcwm> pages = new Page(page, limit);
         IPage<ChatContentTcwm> chatContentTcwmIPage = chatContentTcwmDao.selectOrdersChatPage(pages, userId, riderId, shopId);
-        for(int i = 0;i<chatContentTcwmIPage.getRecords().size();i++){
-            if(userId!=null){
-                int userUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 1);
-                chatContentTcwmIPage.getRecords().get(i).setUserUnread(userUnread);
+        List<Long> orderList = chatContentTcwmIPage.getRecords().stream().map(ChatContentTcwm::getOrdersId).collect(Collectors.toList());
+        if (orderList.size()>0) {
+            // 2. 批量查询各类用户的未读数(3次数据库查询替代原来的3N次)
+            Map<Long, Integer> userUnreadMap = new HashMap<>();
+            Map<Long, Integer> riderUnreadMap = new HashMap<>();
+            Map<Long, Integer> shopUnreadMap = new HashMap<>();
+
+            if (userId != null) {
+                List<ChatContentTcwm> userUnreadList = chatContentTcwmDao.selectUnreadCountList(orderList,1);
+                userUnreadMap=userUnreadList.stream().collect(Collectors.toMap(
+                    ChatContentTcwm::getOrdersId,
+                        ChatContentTcwm::getCount
+                ));
             }
             if(riderId!=null){
-                int riderUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 2);
-                chatContentTcwmIPage.getRecords().get(i).setRiderUnread(riderUnread);
+                List<ChatContentTcwm> riderUnreadList = chatContentTcwmDao.selectUnreadCountList(orderList,2);
+                riderUnreadMap=riderUnreadList.stream().collect(Collectors.toMap(
+                        ChatContentTcwm::getOrdersId,
+                        ChatContentTcwm::getCount
+                ));
             }
             if(shopId!=null){
-                int shopUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 3);
-                chatContentTcwmIPage.getRecords().get(i).setShopUnread(shopUnread);
+                List<ChatContentTcwm> shopUnreadList = chatContentTcwmDao.selectUnreadCountList(orderList,3);
+                shopUnreadMap=shopUnreadList.stream().collect(Collectors.toMap(
+                        ChatContentTcwm::getOrdersId,
+                        ChatContentTcwm::getCount
+                ));
+            }
+            for(int i = 0;i<chatContentTcwmIPage.getRecords().size();i++){
+                if(userId!=null){
+//                    int userUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 1);
+//                    chatContentTcwmIPage.getRecords().get(i).setUserUnread(userUnread);
+                    chatContentTcwmIPage.getRecords().get(i).setUserUnread(userUnreadMap.get(chatContentTcwmIPage.getRecords().get(i).getOrdersId()));
+                }
+                if(riderId!=null){
+//                    int riderUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 2);
+//                    chatContentTcwmIPage.getRecords().get(i).setRiderUnread(riderUnread);
+                    chatContentTcwmIPage.getRecords().get(i).setUserUnread(riderUnreadMap.get(chatContentTcwmIPage.getRecords().get(i).getOrdersId()));
+                }
+                if(shopId!=null){
+//                    int shopUnread = chatContentTcwmDao.selectUnreadCount(chatContentTcwmIPage.getRecords().get(i).getOrdersId(), 3);
+//                    chatContentTcwmIPage.getRecords().get(i).setShopUnread(shopUnread);
+                    chatContentTcwmIPage.getRecords().get(i).setUserUnread(shopUnreadMap.get(chatContentTcwmIPage.getRecords().get(i).getOrdersId()));
+                }
             }
+
         }
+
         PageUtils pageUtils = new PageUtils(chatContentTcwmIPage);
         return Result.success().put("data", pageUtils);
     }

+ 18 - 1
src/main/resources/mapper/chat/ChatContentTcwmMapper.xml

@@ -142,7 +142,24 @@
             and orders_id in (select order_id from tb_indent where shop_id = #{shopId}) and shop_status = 0
         </if>
     </select>
-
+    <select id="selectUnreadCountList" resultType="com.sqx.modules.gameChat.entity.ChatContentTcwm">
+        select orders_id as ordersId, count(*) as count
+        from chat_content_tcwm
+        where orders_id in
+        <foreach collection="ordersIds" item="orderId" open="(" separator="," close=")">
+            #{orderId}
+        </foreach>
+        <if test="userType==1">
+            and user_status = 0
+        </if>
+        <if test="userType==2">
+            and rider_status = 0
+        </if>
+        <if test="userType==3">
+            and shop_status = 0
+        </if>
+        group by orders_id
+    </select>
 
 
     <update id="updateShopAllUnreadCount">