Explorar o código

优化检查的危急值

lighter hai 1 ano
pai
achega
557a5448be

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>12.0.0</version>
+    <version>12.0.2</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
     <properties>

+ 7 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/CriticalValuesController.java

@@ -3,6 +3,7 @@ package thyyxxk.webserver.controller.zhuyuanyizheng;
 import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.config.auth.PassToken;
 import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.criticalValue.request.CriticalValueFromTest;
 import thyyxxk.webserver.service.zhuyuanyisheng.PatientCriticalValuesService;
 
 @RestController
@@ -22,4 +23,10 @@ public class CriticalValuesController {
         return service.acceptCriticalValues(message);
     }
 
+    @PassToken
+    @PostMapping("/criticalValueAssembly")
+    public ResultVo<String> criticalValueAssembly(@RequestBody CriticalValueFromTest request) {
+        return service.checkTheCriticalValue(request);
+    }
+
 }

+ 10 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/PatientCriticalValuesDao.java

@@ -3,6 +3,7 @@ package thyyxxk.webserver.dao.his.zhuyuanyisheng;
 import org.apache.ibatis.annotations.*;
 import thyyxxk.webserver.entity.criticalValue.CriticalValue;
 import thyyxxk.webserver.entity.criticalValue.SimpleEmployee;
+import thyyxxk.webserver.entity.dictionary.CodeName;
 
 import java.util.List;
 import java.util.Map;
@@ -39,4 +40,13 @@ public interface PatientCriticalValuesDao {
 
     @Update("update t_critical_message set state='BEEN_SENT',send_time=getdate() where id=#{id}")
     void updateSentState(int id);
+
+    @Select("select code,name from zd_unit_code where code=" +
+            "(select isnull(ward,admiss_ward) from zy_actpatient where inpatient_no=#{patNo})")
+    CodeName selectTargetDept(String patNo);
+
+    @Select("select code,name from zd_unit_code where code=" +
+            "(select visit_dept_code from mz_visit_table " +
+            "where patient_id=#{patNo} and times=#{times})")
+    CodeName selectTargetDept2(String patNo, int times);
 }

+ 19 - 0
src/main/java/thyyxxk/webserver/entity/criticalValue/request/CriticalValueFromTest.java

@@ -0,0 +1,19 @@
+package thyyxxk.webserver.entity.criticalValue.request;
+
+import lombok.Data;
+
+@Data
+public class CriticalValueFromTest {
+    private String patNo;
+    private Integer times;
+    private String message;
+    private Integer flag;
+    private String patientName;
+    private String patientAge;
+    private String patientSex;
+    private String bednum;
+    private String sentByDepartment;
+    private String roomcood;
+    private String commitman;
+    private String reqName;
+}

+ 56 - 7
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/PatientCriticalValuesService.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -11,6 +12,8 @@ import thyyxxk.webserver.entity.criticalValue.CriticalValue;
 import thyyxxk.webserver.entity.criticalValue.InspectionType;
 import thyyxxk.webserver.entity.criticalValue.PatientType;
 import thyyxxk.webserver.entity.criticalValue.SimpleEmployee;
+import thyyxxk.webserver.entity.criticalValue.request.CriticalValueFromTest;
+import thyyxxk.webserver.entity.dictionary.CodeName;
 import thyyxxk.webserver.entity.socketmessage.SendUserList;
 import thyyxxk.webserver.service.externalhttp.WebSocketService;
 import thyyxxk.webserver.service.outpatient.wxapi.SendWxInfoService;
@@ -19,9 +22,7 @@ import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.SocketMsg;
 import thyyxxk.webserver.utils.StringUtil;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -52,7 +53,11 @@ public class PatientCriticalValuesService {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有住院号或门诊号。");
         }
         dao.insertCriticalValue(criticalValue);
+        sendMessageToDoctors(criticalValue);
+        return ResultVoUtil.success();
+    }
 
+    private void sendMessageToDoctors(CriticalValue criticalValue) {
         List<SimpleEmployee> employeeList = getTargetEmployees(criticalValue);
         List<String> codeList = new ArrayList<>();
         StringBuilder codeRsBuilder = new StringBuilder();
@@ -61,7 +66,6 @@ public class PatientCriticalValuesService {
             codeRsBuilder.append("|").append(employee.getCodeRs());
         }
         String touser = codeRsBuilder.substring(1);
-
         String wxMessage = criticalValue.getContent() +
                 "<a href=\"https://emr.hnthyy.cn/hospitalAppsApi/criticalValue/updateState?id=" +
                 criticalValue.getId() + "\">点击更新危急值状态</a>";
@@ -69,13 +73,11 @@ public class PatientCriticalValuesService {
         if (sendWxRes == 0) {
             dao.updateSentState(criticalValue.getId());
         }
-
         JSONObject socketMessage = new JSONObject();
         socketMessage.put("message", criticalValue.getContent());
         socketMessage.put("id", criticalValue.getId());
         String msg = SocketMsg.socketVo(Message.critical_value, socketMessage);
         socketService.sendUserListMessage(new SendUserList(codeList, msg));
-        return ResultVoUtil.success();
     }
 
     private CriticalValue makeEntityFromMessage(String message) {
@@ -130,7 +132,6 @@ public class PatientCriticalValuesService {
             List<SimpleEmployee> tempList = dao.selectEmployeesByDept(ward);
             employeeList.addAll(tempList);
         }
-
         List<String> tempCodeList = new ArrayList<>();
         if (StringUtil.notBlank(referPhysician)) {
             tempCodeList.add(referPhysician);
@@ -147,4 +148,52 @@ public class PatientCriticalValuesService {
         employeeList = employeeList.stream().distinct().collect(Collectors.toList());
         return employeeList;
     }
+
+    public CodeName getTargetDept(String patNo, int times, PatientType patientType) {
+        if (patientType == PatientType.INPATIENT) {
+            return dao.selectTargetDept(patNo);
+        }
+        return dao.selectTargetDept2(patNo, times);
+    }
+
+    public ResultVo<String> checkTheCriticalValue(CriticalValueFromTest value) {
+        if (null == value.getFlag()) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR,
+                    "flag 门诊住院标志不存在 1=住院 2=门诊");
+        }
+        PatientType patientType = value.getFlag() == 1 ?
+                PatientType.INPATIENT : PatientType.OUTPATIENT;
+        CodeName targetDept = getTargetDept(value.getPatNo(), value.getTimes(), patientType);
+        if (null == targetDept) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有患者的就诊信息");
+        }
+
+        String label = patientType == PatientType.INPATIENT ? "住院号" : "门诊号";
+        if (StringUtil.isBlank(value.getBednum())) {
+            value.setBednum("无");
+        }
+        String message = StrUtil.format("在【{}】就诊患者 【{}:{},姓名:{},性别:{},年龄:{},床号:{}】的【{}】检查结果出现危急值情况--【{}】。报告者:{},来自:【{}】。",
+                targetDept.getName(), label, value.getPatNo(), value.getPatientName(),
+                value.getPatientSex(), value.getPatientAge(), value.getBednum(),
+                value.getReqName(), value.getMessage(), value.getCommitman(),
+                value.getRoomcood());
+
+        String msgId = UUID.randomUUID().toString().replaceAll("-", "");
+
+        CriticalValue criticalValue = new CriticalValue.Builder()
+                .patNo(value.getPatNo()).msgId(msgId)
+                .msgType("dept_critical_msg")
+                .sourceCode(value.getSentByDepartment())
+                .sourceName(value.getRoomcood())
+                .targetDeptCode(targetDept.getCode())
+                .targetDeptName(targetDept.getName())
+                .content(message).createTime(new Date())
+                .inspectionType(InspectionType.TEST)
+                .patientType(patientType).build();
+
+        dao.insertCriticalValue(criticalValue);
+        sendMessageToDoctors(criticalValue);
+        return ResultVoUtil.success();
+    }
+
 }