HuiZhenShenQingService.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package thyyxxk.webserver.service.casefrontsheet;
  2. import com.alibaba.fastjson.JSON;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.stereotype.Service;
  5. import thyyxxk.webserver.config.exception.ExceptionEnum;
  6. import thyyxxk.webserver.dao.his.casefrontsheet.HuiZhenShenQingDao;
  7. import thyyxxk.webserver.entity.ResultVo;
  8. import thyyxxk.webserver.entity.casefrontsheet.YshHzRecord;
  9. import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
  10. import thyyxxk.webserver.service.PublicServer;
  11. import thyyxxk.webserver.utils.ListUtil;
  12. import thyyxxk.webserver.utils.ResultVoUtil;
  13. import thyyxxk.webserver.utils.StringUtil;
  14. import thyyxxk.webserver.utils.TokenUtil;
  15. import java.math.BigDecimal;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. * <p>
  20. * 描述: 会诊申请
  21. * </p>
  22. *
  23. * @author xc
  24. * @date 2021-05-07 11:01
  25. */
  26. @Service
  27. @Slf4j
  28. public class HuiZhenShenQingService {
  29. private final HuiZhenShenQingDao dao;
  30. private final PublicServer publicServer;
  31. public HuiZhenShenQingService(HuiZhenShenQingDao dao, PublicServer publicServer) {
  32. this.dao = dao;
  33. this.publicServer = publicServer;
  34. }
  35. /**
  36. * @return 返回会诊级别
  37. */
  38. public ResultVo<List<GetDropdownBox>> huiZhenLeiBie() {
  39. return ResultVoUtil.success(dao.getYshZdHzLevel());
  40. }
  41. /**
  42. * 远程搜索科室
  43. *
  44. * @param code 模糊查询
  45. * @return 返回科室
  46. */
  47. public ResultVo<List<GetDropdownBox>> queryDept(String code) {
  48. return ResultVoUtil.success(dao.getZdUnitCode(StringUtil.isContainChinese(code)));
  49. }
  50. /**
  51. * 会诊申请
  52. *
  53. * @param param 申请需要插入的数据
  54. * @return 返回状态
  55. */
  56. public ResultVo<String> submitHuiZhenShenQing(YshHzRecord param) {
  57. log.info("会诊申请====>申请人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONString(param));
  58. publicServer.huanZheJieSuan(param.getInpatientNo(), param.getAdmissTimes());
  59. /*
  60. * 获取一个新的医嘱号
  61. * 需要一套指令 先把表锁住 在查询出医嘱号 在加一更新加一就完事了
  62. */
  63. dao.lockTable();
  64. float actOrderNo = dao.getActOrderNo() + 1;
  65. dao.updateActOrderNo(actOrderNo);
  66. //下面是给申请次数 加一
  67. param.setReqTimes(dao.getMaxReqTimes(param.getInpatientNo(), param.getAdmissTimes()) + 1);
  68. param.setInputDate(new Date());
  69. param.setActOrderNo((int) actOrderNo);
  70. param.setInputId(TokenUtil.getTokenUserId());
  71. param.setReqDate(param.getInputDate());
  72. param.setOrderCode(getOrderCode("00" + param.getHzType()));
  73. param.setOrderName(String.format("请%s进行院内会诊", param.getReqDeptName()));
  74. //插入会诊申请
  75. dao.chaRuHuiZhenShenQing(param);
  76. //申请成功了就还需要插入一条医嘱
  77. dao.chaRuYiZhu(param);
  78. log.info("插入数据:{}", JSON.toJSONString(param));
  79. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "会诊申请成功,正在通知会诊医生。 <p>(〜^㉨^)〜</p>");
  80. }
  81. /**
  82. * 查询会诊的信息
  83. *
  84. * @param inpatientNo 住院号
  85. * @param admissTimes 住院次数
  86. * @return 返回
  87. */
  88. public ResultVo<List<YshHzRecord>> chaKanHuiZhenShenQing(String inpatientNo, int admissTimes) {
  89. return ResultVoUtil.success(dao.chaKanHuiZhenShenQing(inpatientNo, admissTimes, null));
  90. }
  91. /**
  92. * 删除会诊申请 要同时删除 会诊申请 和 一条医嘱
  93. *
  94. * @param inpatientNo 住院号
  95. * @param admissTimes 住院次数
  96. * @param actOrderNo 医嘱号
  97. * @param reqTimes 申请次数
  98. * @return 返回
  99. */
  100. public ResultVo<Boolean> shanChuHuiZhenShenQing(String inpatientNo, int admissTimes, BigDecimal actOrderNo, int reqTimes) {
  101. List<YshHzRecord> huiZhenXinXi = dao.chaKanHuiZhenShenQing(inpatientNo, admissTimes, actOrderNo);
  102. if (ListUtil.isBlank(huiZhenXinXi)) {
  103. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到对应信息可能已经被删除了。");
  104. }
  105. if (StringUtil.notBlank(huiZhenXinXi.get(0).getStatusFlag()) && huiZhenXinXi.get(0).getStatusFlag().trim().equals("2")) {
  106. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该会诊已经完成了无法删除。");
  107. }
  108. //会诊申请是根据 住院号,住院次数,申请次数 来获取到 一条
  109. dao.shanChuShenQing(inpatientNo, admissTimes, reqTimes);
  110. //医嘱 只要根据医嘱号来删除
  111. dao.shanChuYiZhu(actOrderNo);
  112. log.info("删除会诊申请==》操作人:{},住院号:{},住院次数:{},医嘱号:{},申请次数:{}", TokenUtil.getTokenUserId(), inpatientNo, admissTimes, actOrderNo, reqTimes);
  113. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "删除成功");
  114. }
  115. /**
  116. * 查询会诊的医生
  117. *
  118. * @param deptCode 科室的code
  119. * @param hzType 会诊的级别
  120. * @return 返回 医生的code 和 name
  121. */
  122. public ResultVo<List<GetDropdownBox>> huiZhenYiSheng(String deptCode, String hzType) {
  123. return ResultVoUtil.success(dao.huiZhenYiSheng(deptCode, "00" + hzType));
  124. }
  125. /**
  126. * 获取患者的主诊断
  127. *
  128. * @param patNo 住院号
  129. * @param times 住院次数
  130. * @param flag 1-本院诊断 2-医保诊断
  131. * @return 对应数据
  132. */
  133. public ResultVo<List<GetDropdownBox>> huoQuHuanZheZhuYaoZhenDuan(String patNo, Integer times, Integer flag) {
  134. return ResultVoUtil.success(dao.huoQuHuanZheZhuYaoZhenDuan(patNo, times, flag == 1 ? "ba_first_page1" : "zy_dis_diag_yb"));
  135. }
  136. /**
  137. * 用来获取 order_code 这个是写死的
  138. *
  139. * @param hzType 会诊的级别
  140. * @return 返回 order_code
  141. */
  142. public String getOrderCode(String hzType) {
  143. switch (hzType) {
  144. case "001":
  145. return "01425";
  146. case "002":
  147. return "01426";
  148. case "003":
  149. return "01427";
  150. default:
  151. return "500";
  152. }
  153. }
  154. }