QueryNotifiedPatients.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package thyyxxk.webserver.scheduled;
  2. import com.alibaba.fastjson.JSON;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.scheduling.annotation.Scheduled;
  7. import org.springframework.stereotype.Component;
  8. import thyyxxk.webserver.dao.his.triage.TriageDao;
  9. import thyyxxk.webserver.entity.dictionary.PureCodeName;
  10. import thyyxxk.webserver.entity.triage.MessageForPush;
  11. import thyyxxk.webserver.entity.triage.MzfzPatientOrder;
  12. import thyyxxk.webserver.service.triage.PatientSidContainer;
  13. import thyyxxk.webserver.utils.VoiceUtil;
  14. import thyyxxk.webserver.websocket.WebSocketServer;
  15. import java.util.List;
  16. import java.util.concurrent.ConcurrentMap;
  17. @Slf4j
  18. @Component
  19. public class QueryNotifiedPatients {
  20. private final TriageDao dao;
  21. @Value("${execute-scheduled}")
  22. private Boolean executeScheduled;
  23. @Autowired
  24. public QueryNotifiedPatients(TriageDao dao) {
  25. this.dao = dao;
  26. }
  27. @Scheduled(fixedRate = 6000)
  28. public void query() {
  29. if (executeScheduled) {
  30. ConcurrentMap<Integer, String> map = PatientSidContainer.getInstance().getSidPatientsMap();
  31. if (map.isEmpty()) return;
  32. List<PureCodeName> list = dao.getNotifiedSerialNos(map);
  33. if (list == null || list.isEmpty()) return;
  34. for (PureCodeName item : list) {
  35. MzfzPatientOrder patient = dao.getPatientTriageInfo(Integer.parseInt(item.getCode()));
  36. MessageForPush param = new MessageForPush();
  37. param.setAction(1);
  38. param.setSerialNo(patient.getSerialNo());
  39. param.setFzNo(patient.getFzNo());
  40. param.setName(patient.getName());
  41. param.setDeptName(patient.getDeptName());
  42. param.setRoomNo(patient.getRoomNo());
  43. param.setRoomCode(patient.getRoomCode());
  44. final String msg = JSON.toJSONString(param);
  45. String text = String.format("请%s号%s,到%s%s号诊室就诊。", param.getFzNo(), param.getName(),
  46. param.getDeptName(), param.getRoomNo());
  47. VoiceUtil.textToSpeech(text, String.valueOf(param.getSerialNo()));
  48. String userCode = map.get(Integer.parseInt(item.getCode()));
  49. int code1 = WebSocketServer.sendFloorTriageMessage(userCode, msg);
  50. int code2 = WebSocketServer.sendRoomTriageMessage(item.getName(), msg);
  51. if (code1 != 200 || code2 != 200) {
  52. PatientSidContainer.getInstance().delete(param.getSerialNo());
  53. }
  54. }
  55. }
  56. }
  57. }