Browse Source

消息模块。

lighter 3 years ago
parent
commit
bcd09bb88d

+ 10 - 0
src/main/java/thyyxxk/webserver/controller/settings/Notification.java

@@ -2,11 +2,14 @@ package thyyxxk.webserver.controller.settings;
 
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import thyyxxk.webserver.dao.his.settings.SettingsDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.settings.notification.SendMessageParam;
 import thyyxxk.webserver.utils.ResultVoUtil;
+import thyyxxk.webserver.utils.SnowFlakeId;
 import thyyxxk.webserver.utils.TokenUtil;
 import thyyxxk.webserver.websocket.WebSocketServer;
 
@@ -14,6 +17,12 @@ import thyyxxk.webserver.websocket.WebSocketServer;
 @RestController
 @RequestMapping("/notification")
 public class Notification {
+    private final SettingsDao dao;
+
+    @Autowired
+    public Notification(SettingsDao dao) {
+        this.dao = dao;
+    }
 
     @GetMapping("/getOnlineCount")
     public ResultVo<Integer> getOnlineCount() {
@@ -22,6 +31,7 @@ public class Notification {
 
     @PostMapping("/sendMessageToAll")
     public ResultVo<String> sendMessage(@RequestBody @Validated SendMessageParam param) {
+        dao.insertNewMessage(SnowFlakeId.instance().nextId(), param.getMessage());
         JSONObject obj = new JSONObject();
         obj.put("name", "systemNotification");
         obj.put("message", param.getMessage());

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

@@ -5,10 +5,10 @@ import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.socketmessage.MessageIndex;
 import thyyxxk.webserver.entity.socketmessage.SocketMessage;
+import thyyxxk.webserver.entity.socketmessage.SystemMessage;
 import thyyxxk.webserver.service.socketmessage.SocketMessageService;
 
 import java.util.List;
-import java.util.Map;
 
 @RestController
 @RequestMapping("/socketMessage")
@@ -20,9 +20,14 @@ public class SocketMessageController {
         this.service = service;
     }
 
-    @PostMapping("/onPageRefresh")
-    public ResultVo<Map<String, Object>> onPageRefresh(@RequestBody List<Integer> excludes) {
-        return service.onPageRefresh(excludes);
+    @GetMapping("/selectSystemMessages")
+    public ResultVo<List<SystemMessage>> selectSystemMessages(@RequestParam("date") String date) {
+        return service.selectSystemMessages(date);
+    }
+
+    @GetMapping("/fetchUnreadCount")
+    public ResultVo<Integer> fetchUnreadCount() {
+        return service.fetchUnreadCount();
     }
 
     @GetMapping("/fetchAllSenders")

+ 6 - 0
src/main/java/thyyxxk/webserver/dao/his/settings/SettingsDao.java

@@ -8,6 +8,8 @@ import thyyxxk.webserver.entity.settings.deptphones.DeptPhones;
 import thyyxxk.webserver.entity.settings.permissions.MenuItem;
 import thyyxxk.webserver.entity.settings.permissions.Role;
 import thyyxxk.webserver.entity.settings.users.WorkIntegrationPlatformAdvice;
+import thyyxxk.webserver.entity.socketmessage.SocketMessage;
+import thyyxxk.webserver.entity.socketmessage.SystemMessage;
 
 import java.util.List;
 
@@ -147,4 +149,8 @@ public interface SettingsDao {
             "</foreach>" +
             "</script>")
     void insertRoleVueMenus(@Param("id") Integer id, @Param("menus") List<Integer> menus);
+
+    @Insert("insert into t_socket_message (id, level, sender, title, content) " +
+            "values (#{id}, 1, '00000', '系统通知', #{content} )")
+    void insertNewMessage(@Param("id") String id, @Param("content") String content);
 }

+ 18 - 2
src/main/java/thyyxxk/webserver/dao/his/socketmessage/SocketMessageDao.java

@@ -6,18 +6,33 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 import thyyxxk.webserver.entity.socketmessage.MessageIndex;
 import thyyxxk.webserver.entity.socketmessage.SocketMessage;
+import thyyxxk.webserver.entity.socketmessage.SystemMessage;
 
 import java.util.List;
 
 @Mapper
 public interface SocketMessageDao {
 
+    @Select("select top 1 convert(varchar(10), send_datetime, 21) from " +
+            "t_socket_message where sender='00000' order by send_datetime desc")
+    String selectLatestDate();
+
+    @Select("select top 1 convert(varchar(10), send_datetime, 21) from t_socket_message where sender='00000' " +
+            "and send_datetime<#{date} order by send_datetime desc")
+    String selectLastDate(@Param("date") String date);
+
+    @Select("select id,type,sender,title,content,send_datetime as simpledate from " +
+            "t_socket_message where sender='00000' and datediff(day, send_datetime, #{date})=0")
+    List<SystemMessage> selectMessagesByDate(@Param("date") String date);
+
+
+
     @Select("<script>" +
             "select * from t_socket_message with(nolock) where level=1 and sender='00000' and " +
             "datediff(day, send_datetime, getdate())=0 and id not in " +
             "<foreach collection='excludes' item='itm' separator=',' open='(' close=')'>#{itm}</foreach> " +
             "</script>")
-    List<SocketMessage> selectImportantSystemMessages(@Param("excludes") List<Integer> excludes);
+    List<SocketMessage> selectImportantSystemMessages(@Param("excludes") List<String> excludes);
 
     @Select("select count(1) from t_socket_message_consumer with(nolock) where receiver=#{receiver} and status=0")
     int selectUnreadCount(@Param("receiver") String receiver);
@@ -33,7 +48,8 @@ public interface SocketMessageDao {
     @Select("select * from t_socket_message where sender='00000'")
     List<SocketMessage> selectAllSystemMessages();
 
-    @Select("select * from t_socket_message where id in (select msg_id from t_socket_message_consumer t " +
+    @Select("select *, status=(select status from t_socket_message_consumer t where t.msg_id=a.id and t.receiver=#{receiver}) " +
+            "from t_socket_message a where id in (select msg_id from t_socket_message_consumer t " +
             "where t.sender=#{sender} and t.receiver=#{receiver})")
     List<SocketMessage> selectNeededMessages(@Param("sender") String sender, @Param("receiver") String receiver);
 

+ 40 - 0
src/main/java/thyyxxk/webserver/entity/socketmessage/SystemMessage.java

@@ -0,0 +1,40 @@
+package thyyxxk.webserver.entity.socketmessage;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class SystemMessage {
+    /**
+     * 雪花算法 主键
+     */
+    private String id;
+
+    /**
+     * 通知类型:info,success,warning,error
+     */
+    private String type;
+
+    /**
+     * 发送人
+     */
+    private String sender;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date simpledate;
+
+}

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

@@ -3,20 +3,18 @@ package thyyxxk.webserver.service.socketmessage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.dao.his.socketmessage.SocketMessageDao;
 import thyyxxk.webserver.entity.ResultVo;
-import thyyxxk.webserver.entity.dictionary.PureCodeName;
 import thyyxxk.webserver.entity.socketmessage.MessageIndex;
 import thyyxxk.webserver.entity.socketmessage.SocketMessage;
+import thyyxxk.webserver.entity.socketmessage.SystemMessage;
 import thyyxxk.webserver.service.redislike.RedisLikeService;
-import thyyxxk.webserver.utils.FilterUtil;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.TokenUtil;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 @Service
 @Slf4j
@@ -30,16 +28,17 @@ public class SocketMessageService {
         this.redis = redis;
     }
 
-    public ResultVo<Map<String, Object>> onPageRefresh(List<Integer> excludes) {
-        if (excludes.isEmpty()) {
-            excludes.add(0);
+    public ResultVo<List<SystemMessage>> selectSystemMessages(String date) {
+        date = date.equals("latest") ? dao.selectLatestDate() : dao.selectLastDate(date);
+        List<SystemMessage> list = dao.selectMessagesByDate(date);
+        if (null == list || list.isEmpty()) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "已经到顶了,无法找到更多的内容。");
         }
-        List<SocketMessage> systemMessages = dao.selectImportantSystemMessages(excludes);
-        int unreadCount = dao.selectUnreadCount(TokenUtil.getTokenUserId());
-        Map<String, Object> map = new HashMap<>();
-        map.put("systemMessage", systemMessages);
-        map.put("unreadCount", unreadCount);
-        return ResultVoUtil.success(map);
+        return ResultVoUtil.success(list);
+    }
+
+    public ResultVo<Integer> fetchUnreadCount() {
+        return ResultVoUtil.success(dao.selectUnreadCount(TokenUtil.getTokenUserId()));
     }
 
     public ResultVo<List<MessageIndex>> fetchAllSenders() {
@@ -62,7 +61,8 @@ public class SocketMessageService {
             return ResultVoUtil.success(dao.selectAllSystemMessages());
         }
         String receiver = TokenUtil.getTokenUserId();
+        List<SocketMessage> list = dao.selectNeededMessages(sender, receiver);
         dao.updateReadStatus(sender, receiver);
-        return ResultVoUtil.success(dao.selectNeededMessages(sender, receiver));
+        return ResultVoUtil.success(list);
     }
 }