TriageService.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package thyyxxk.webserver.service.triage;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.transaction.annotation.Transactional;
  8. import org.springframework.web.client.RestTemplate;
  9. import thyyxxk.webserver.config.exception.ExceptionEnum;
  10. import thyyxxk.webserver.constants.Capacity;
  11. import thyyxxk.webserver.dao.his.triage.TriageDao;
  12. import thyyxxk.webserver.entity.ResultVo;
  13. import thyyxxk.webserver.entity.dictionary.CodeName;
  14. import thyyxxk.webserver.entity.triage.*;
  15. import thyyxxk.webserver.utils.ResultVoUtil;
  16. import thyyxxk.webserver.utils.StringUtil;
  17. import thyyxxk.webserver.utils.TokenUtil;
  18. import java.util.*;
  19. /**
  20. * @author dj
  21. */
  22. @Slf4j
  23. @Service
  24. public class TriageService {
  25. private final TriageDao dao;
  26. @Value("${triage-notify-url}")
  27. private String triageNotifyUrl;
  28. public TriageService(TriageDao dao) {
  29. this.dao = dao;
  30. }
  31. public ResultVo<Map<String, Object>> getUnTriagedPatients(Integer currentPage, Integer pageSize) {
  32. String[] depts = StringUtil.triageDeptString2Array(dao.selectChosenDepts(TokenUtil.getTokenUserId()));
  33. Map<String, Object> map = new HashMap<>(Capacity.TWO);
  34. if (depts.length == 0) {
  35. map.put("totalSize", 0);
  36. map.put("list", new ArrayList<>());
  37. return ResultVoUtil.success(map);
  38. }
  39. IPage<MzfzPatientOrder> iPage = new Page<>(currentPage, pageSize);
  40. iPage = dao.getUnTriagedPatients(iPage, depts);
  41. map.put("totalSize", iPage.getTotal());
  42. map.put("list", iPage.getRecords());
  43. return ResultVoUtil.success(map);
  44. }
  45. public ResultVo<List<MzfzPatientOrder>> getTriagedPatients() {
  46. String[] depts = StringUtil.triageDeptString2Array(dao.selectChosenDepts(TokenUtil.getTokenUserId()));
  47. return ResultVoUtil.success(dao.getTriagedPatients(depts));
  48. }
  49. public ResultVo<List<FloorScreen>> getBigScreenData(Boolean fullName) {
  50. String[] depts = StringUtil.triageDeptString2Array(dao.selectChosenDepts(TokenUtil.getTokenUserId()));
  51. List<MzfzPatientOrder> list = dao.getBigScreenData(depts);
  52. Map<String, FloorScreen> map = new HashMap<>(Capacity.DEFAULT);
  53. for (MzfzPatientOrder item : list) {
  54. if (!fullName) {
  55. String name = item.getName();
  56. if (name.length() == 2) {
  57. name = name.charAt(0) + "*";
  58. } else {
  59. name = name.charAt(0) + "*" + name.substring(2);
  60. }
  61. item.setName(name);
  62. }
  63. if (!map.containsKey(item.getRoomCode())) {
  64. FloorScreen fl = new FloorScreen();
  65. fl.setDeptName(item.getDeptName());
  66. fl.setDoctorTitle(item.getDoctorTitle());
  67. fl.setDoctorName(item.getDoctorName());
  68. fl.setRoomNo(item.getRoomNo());
  69. List<MzfzPatientOrder> temp = new ArrayList<>();
  70. temp.add(item);
  71. fl.setPatients(temp);
  72. map.put(item.getRoomCode(), fl);
  73. } else {
  74. map.get(item.getRoomCode()).getPatients().add(item);
  75. }
  76. }
  77. List<FloorScreen> ret = new ArrayList<>();
  78. for (Map.Entry<String, FloorScreen> entry : map.entrySet()) {
  79. ret.add(entry.getValue());
  80. }
  81. for (FloorScreen item : ret) {
  82. int size = item.getPatients().size();
  83. if (size % 4 == 0) {
  84. item.setPageNum(size / 4);
  85. } else {
  86. item.setPageNum(size / 4 + 1);
  87. }
  88. }
  89. return ResultVoUtil.success(ret);
  90. }
  91. public ResultVo<List<CodeName>> getChosenDept() {
  92. String[] depts = StringUtil.triageDeptString2Array(dao.selectChosenDepts(TokenUtil.getTokenUserId()));
  93. return ResultVoUtil.success(dao.getDept(depts));
  94. }
  95. public ResultVo<List<MzfzZdDeptRoom>> getRooms(String deptCode) {
  96. return ResultVoUtil.success(dao.getRooms(deptCode));
  97. }
  98. public ResultVo<String> hasDoneCovidAssessment(String patientId) {
  99. final String socialNo = dao.getSocialNo(patientId);
  100. final Integer has = dao.getCovidAssessment(socialNo);
  101. if (null == has) {
  102. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "此患者近期未做流调。");
  103. }
  104. return ResultVoUtil.success();
  105. }
  106. @Transactional(rollbackFor = Exception.class)
  107. public ResultVo<String> fenZhen(MzfzZdDeptRoom room) {
  108. int patientNum = dao.getPatientNum(room.getDeptCode(), room.getRoomCode());
  109. if (patientNum >= 0) {
  110. room.setPatientNum(patientNum);
  111. }
  112. dao.updatePatientNum(room.getDeptCode(), room.getRoomCode(), patientNum);
  113. dao.fenZhen(room);
  114. log.info("分诊:update mzfz_patient_order set status_flag=1, slow_flag=0, " +
  115. "dept_code={}, room_code={}, doctor_code={}, fz_no={} where serial_no={}",
  116. room.getDeptCode(), room.getRoomCode(), room.getDoctorCode(),
  117. room.getPatientNum(), room.getSerialNo());
  118. PatientSidContainer.getInstance().put(room.getSerialNo(), TokenUtil.getTokenUserId());
  119. return ResultVoUtil.success("分诊成功。");
  120. }
  121. public ResultVo<Boolean> notifyComplete(Integer serialNo) {
  122. log.info("通知完毕>>> {}", serialNo);
  123. return ResultVoUtil.success(PatientSidContainer.getInstance().delete(serialNo));
  124. }
  125. public ResultVo<Integer> fuZhen(Integer serialNo) {
  126. return ResultVoUtil.success(dao.fuZhen(serialNo));
  127. }
  128. public ResultVo<Integer> cancelTriage(Integer serialNo) {
  129. Integer ret = dao.cancelTriage(serialNo);
  130. PatientSidContainer.getInstance().delete(serialNo);
  131. return ResultVoUtil.success(ret);
  132. }
  133. public ResultVo<Map<String, Object>> getAllPatients(String searchContent, Integer currentPage, Integer pageSize) {
  134. String[] depts = StringUtil.triageDeptString2Array(dao.selectChosenDepts(TokenUtil.getTokenUserId()));
  135. Map<String, Object> map = new HashMap<>(Capacity.TWO);
  136. searchContent = StringUtil.isBlank(searchContent) ? "%%" : searchContent + "%";
  137. IPage<MzfzPatientOrder> iPage = new Page<>(currentPage, pageSize);
  138. iPage = dao.getAllPatients(iPage, depts, searchContent);
  139. map.put("totalSize", iPage.getTotal());
  140. map.put("list", iPage.getRecords());
  141. return ResultVoUtil.success(map);
  142. }
  143. public ResultVo<MzYshTzxx> getMzVitalSigns(String patientId) {
  144. log.info("获取生命体征:{}", patientId);
  145. MzYshTzxx vitalSigns = dao.getMzVitalSigns(patientId);
  146. if (null == vitalSigns) {
  147. vitalSigns = new MzYshTzxx();
  148. }
  149. vitalSigns.setPatientId(patientId);
  150. vitalSigns.setVisitDate(new Date());
  151. return ResultVoUtil.success(vitalSigns);
  152. }
  153. public ResultVo<String> saveMzVitalSigns(MzYshTzxx param) {
  154. log.info("保存生命体征:{}", param);
  155. if (null == dao.getMzVitalSigns(param.getPatientId())) {
  156. dao.insertMzVitalSigns(param);
  157. } else {
  158. dao.updateMzVitalSigns(param);
  159. }
  160. return ResultVoUtil.success("保存成功");
  161. }
  162. public ResultVo<String> notifyMessage(MessageForPush param) {
  163. MessageForPush prm = dao.selectMessageForPush(param.getSerialNo());
  164. if (null == prm) {
  165. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有找到此患者的分诊信息!");
  166. }
  167. prm.setAction(param.getAction());
  168. dao.updateStatus(param.getSerialNo());
  169. log.info("消息推送>>> {}", prm);
  170. RestTemplate template = new RestTemplate();
  171. String result = template.postForObject(triageNotifyUrl, prm, String.class);
  172. return ResultVoUtil.success(result);
  173. }
  174. }