Browse Source

优化编码组长审核不通过的消息机制

lighter 5 tháng trước cách đây
mục cha
commit
83407717d6

+ 14 - 4
src/main/java/thyyxxk/webserver/dao/his/inpatient/casefrontsheet/QualityVerificationDao.java

@@ -1,14 +1,12 @@
 package thyyxxk.webserver.dao.his.inpatient.casefrontsheet;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.*;
 import org.mapstruct.Mapper;
 import thyyxxk.webserver.entity.casefrontsheet.pojo.FrontsheetQualityVerification;
 import thyyxxk.webserver.entity.casefrontsheet.pojo.GroupLeaderVerification;
 import thyyxxk.webserver.entity.dictionary.CodeName;
+import thyyxxk.webserver.entity.socketmessage.SocketMessage;
 
 import java.util.List;
 
@@ -50,6 +48,18 @@ public interface QualityVerificationDao extends BaseMapper<FrontsheetQualityVeri
             "#{auditState},#{auditRemark},#{majorError})")
     void insertLeaderAudit(GroupLeaderVerification request);
 
+    @Insert("insert into t_socket_message (id,level,sender,title,content,pat_id) " +
+            "values (#{id},0,#{sender},#{title},#{content},#{patId} )")
+    void insertNewMessage(SocketMessage socketMessage);
+
+    @Insert({"<script>" +
+            "insert into t_socket_message_consumer (msg_id,sender,receiver) values " +
+            "<foreach collection='list' item='item' separator=','>" +
+            " (#{item.msgId}, #{item.sender}, #{item.receiver})" +
+            "</foreach>" +
+            "</script>"})
+    void insertMessageConsumer(List<SocketMessage> list);
+
     @Select("select a.*,rtrim(b.name) as patName, " +
             "stateName=case when a.audit_state='APPROVED' then N'通过' else N'不通过' end " +
             "from t_frontsheet_groupleader_verification a,a_patient_mi b " +

+ 33 - 8
src/main/java/thyyxxk/webserver/service/inpatient/casefrontsheet/FrontsheetAuditService.java

@@ -20,6 +20,7 @@ import thyyxxk.webserver.entity.casefrontsheet.state.State;
 import thyyxxk.webserver.entity.dictionary.CodeName;
 import thyyxxk.webserver.entity.socketmessage.ApiMessageBody;
 import thyyxxk.webserver.entity.socketmessage.SendUserList;
+import thyyxxk.webserver.entity.socketmessage.SocketMessage;
 import thyyxxk.webserver.service.externalhttp.WebSocketService;
 import thyyxxk.webserver.service.outpatient.wxapi.SendWxInfoService;
 import thyyxxk.webserver.service.redislike.RedisLikeService;
@@ -28,10 +29,8 @@ import thyyxxk.webserver.utils.SnowFlakeId;
 import thyyxxk.webserver.utils.StringUtil;
 import thyyxxk.webserver.utils.TokenUtil;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @Service
@@ -237,21 +236,47 @@ public class FrontsheetAuditService {
         }
         dao.insertLeaderAudit(request);
         if (request.getAuditState() == AuditState.REJECTED) {
+            String patId = request.getPatNo() + "-" + request.getTimes();
+            String message = "患者 " + request.getPatName() + "(" + patId + ")编码组长审核未通过。";
+
+            SocketMessage socketMessage = new SocketMessage();
+            socketMessage.setId(SnowFlakeId.instance().nextId());
+            socketMessage.setLevel(0);
+            socketMessage.setSender(auditCode);
+            socketMessage.setTitle("编码组长审核不通过");
+            socketMessage.setContent(message);
+            socketMessage.setPatId(patId);
+            dao.insertNewMessage(socketMessage);
+
             JSONObject messageWrapper = new JSONObject();
             messageWrapper.put("name", "systemNotification");
             JSONObject messageBody = new JSONObject();
             messageBody.put("title", "提示");
-            String c = "患者 " + request.getPatName() + "(" + request.getPatNo() +
-                    "-" + request.getTimes() + ")";
-            messageBody.put("message", c + "编码组长审核未通过。");
+            messageBody.put("message", message);
             messageWrapper.put("message", messageBody);
             ApiMessageBody body = new ApiMessageBody();
             body.setMessageContent(messageWrapper.toJSONString());
             String[] coder = request.getCoderCode().split(",");
-            for (String userCode : coder) {
+
+            List<SocketMessage> socketMessageList = new ArrayList<>();
+            for (int i = 0; i < coder.length; i++) {
+                String userCode = coder[i];
+                SocketMessage consumerMessage = new SocketMessage();
+                consumerMessage.setMsgId(socketMessage.getId());
+                consumerMessage.setSender(auditCode);
+                consumerMessage.setReceiver(userCode);
+                socketMessageList.add(consumerMessage);
                 body.setUserCode(userCode);
                 socketService.sendMessageByUserCode(body);
+                if (i != coder.length - 1) {
+                    try {
+                        TimeUnit.SECONDS.sleep(1);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
             }
+            dao.insertMessageConsumer(socketMessageList);
         }
         return request.getId();
     }