Bladeren bron

优化用户打开和查看消息

xiaochan 8 maanden geleden
bovenliggende
commit
2698fc9b7d

+ 2 - 2
src/main/java/thyyxxk/webserver/controller/socketmessage/SocketMessageController.java

@@ -45,8 +45,8 @@ public class SocketMessageController {
         return service.fetchAllSenders();
     }
 
-    @GetMapping("/fetchAllMessages")
-    public ResultVo<List<SocketMessage>> fetchAllMessages(@RequestParam("sender") String sender) {
+    @PostMapping("/fetchAllMessages")
+    public ResultVo<List<SocketMessage>> fetchAllMessages(@RequestBody SocketMessageService.FetchMessage sender) {
         return service.fetchAllMessages(sender);
     }
 

+ 33 - 4
src/main/java/thyyxxk/webserver/dao/his/socketmessage/SocketMessageDao.java

@@ -39,9 +39,19 @@ public interface SocketMessageDao {
     @Select("select count(1) from t_socket_message where sender='00000'")
     int selectSystemMessageCount();
 
-    @Select("select a.sender,unreadCount=(select count(1) from t_socket_message_consumer t where " +
-            "t.receiver=#{receiver} and t.sender=a.sender and t.status=0) " +
-            "from t_socket_message_consumer a where a.receiver=#{receiver} group by a.sender")
+    @Select("select a.sender,\n" +
+            "       unreadCount=(select count(1)\n" +
+            "                    from t_socket_message_consumer t\n" +
+            "                    where t.receiver = #{receiver}\n" +
+            "                      and t.sender = a.sender\n" +
+            "                      and t.status = 0),\n" +
+            "       sender_name = (select\n" +
+            "                          (select rtrim(name) from zd_unit_code where dept_code = zd_unit_code.code) + '-' + rtrim(name)\n" +
+            "                      from a_employee_mi\n" +
+            "                      where code = a.sender)\n" +
+            "from t_socket_message_consumer a\n" +
+            "where a.receiver = #{receiver}\n" +
+            "group by a.sender")
     List<MessageIndex> selectMessageIndex(@Param("receiver") String receiver);
 
     @Select("select * from t_socket_message where sender='00000'")
@@ -55,6 +65,25 @@ public interface SocketMessageDao {
             "order by a.id desc;")
     List<SocketMessage> selectNeededMessages(@Param("sender") String sender, @Param("receiver") String receiver);
 
+    @Select("select count(1) " +
+            "from t_socket_message_consumer t " +
+            "         left join t_socket_message a on (a.id = t.msg_id) " +
+            "where t.sender = #{sender} " +
+            "  and t.receiver = #{receiver};")
+    int selectNeededMessagesTotal(@Param("sender") String sender, @Param("receiver") String receiver);
+
+    @Select("select top ${pageSize} *\n" +
+            "from (select row_number() over (order by id,send_datetime desc ) row_index, a.*, t.status\n" +
+            "      from t_socket_message_consumer t\n" +
+            "               left join t_socket_message a on (a.id = t.msg_id)\n" +
+            "      where t.sender = #{sender}\n" +
+            "        and t.receiver = #{receiver}) as table1\n" +
+            "where row_index > ${pageSize} * (#{currentPage} - 1)")
+    List<SocketMessage> selectNeededMessagesPage(@Param("sender") String sender,
+                                                 @Param("receiver") String receiver,
+                                                 @Param("currentPage") long currentPage,
+                                                 @Param("pageSize") long pageSize);
+
     @Update("update t_socket_message_consumer set status=1 where sender=#{sender} and receiver=#{receiver}")
-    Integer updateReadStatus(@Param("sender") String sender, @Param("receiver") String receiver);
+    void updateReadStatus(@Param("sender") String sender, @Param("receiver") String receiver);
 }

+ 16 - 7
src/main/java/thyyxxk/webserver/service/socketmessage/SocketMessageService.java

@@ -1,6 +1,7 @@
 package thyyxxk.webserver.service.socketmessage;
 
 import cn.hutool.extra.spring.SpringUtil;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -66,20 +67,28 @@ public class SocketMessageService {
             systm.setUnreadCount(0);
             resultList.add(systm);
         }
-        List<MessageIndex> temp = dao.selectMessageIndex(TokenUtil.getInstance().getTokenUserId());
-        temp.forEach(itm -> itm.setSenderName(redis.getDeptAndEmployeeName(itm.getSender())));
+        String code = TokenUtil.getInstance().getTokenUserId();
+        List<MessageIndex> temp = dao.selectMessageIndex(code);
         resultList.addAll(temp);
         return ResultVoUtil.success(resultList);
     }
 
-    public ResultVo<List<SocketMessage>> fetchAllMessages(String sender) {
-        if (sender.equals("00000")) {
+    @Data
+    public static class FetchMessage {
+        private String sender;
+        private Long currentPage;
+        private Boolean updateReadStatus = true;
+    }
+
+    public ResultVo<List<SocketMessage>> fetchAllMessages(FetchMessage data) {
+        if (data.getSender().equals("00000")) {
             return ResultVoUtil.success(dao.selectAllSystemMessages());
         }
         String receiver = TokenUtil.getInstance().getTokenUserId();
-        List<SocketMessage> list = dao.selectNeededMessages(sender, receiver);
-        getThis().updateReadStatus(sender, receiver);
-        return ResultVoUtil.success(list);
+        if (data.getUpdateReadStatus()) {
+            getThis().updateReadStatus(data.getSender(), receiver);
+        }
+        return ResultVoUtil.success(dao.selectNeededMessagesPage(data.getSender(), receiver, data.getCurrentPage(), 30));
     }
 
     @Async