YzActOrderModifyVerifyService.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package thyyxxk.webserver.service.datamodify;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import thyyxxk.webserver.config.exception.ExceptionEnum;
  9. import thyyxxk.webserver.constants.GetDateFormat;
  10. import thyyxxk.webserver.dao.his.datamodify.YzActOrderModifyVerifyDao;
  11. import thyyxxk.webserver.entity.ResultVo;
  12. import thyyxxk.webserver.entity.datamodify.TYzActOrderModify;
  13. import thyyxxk.webserver.utils.ResultVoUtil;
  14. import thyyxxk.webserver.utils.StringUtil;
  15. import thyyxxk.webserver.utils.TokenUtil;
  16. import thyyxxk.webserver.websocket.WebSocketServer;
  17. import java.math.BigDecimal;
  18. import java.util.List;
  19. /**
  20. * <p>
  21. * 描述 医嘱修改审核
  22. * </p>
  23. *
  24. * @author xc
  25. * @date 2021-04-09 08:40
  26. */
  27. @Service
  28. @Slf4j
  29. public class YzActOrderModifyVerifyService {
  30. private final YzActOrderModifyVerifyDao dao;
  31. private static final int YZ_APPROVED = 2;
  32. private static final int YZ_REJECT = 3;
  33. private static final int YZ_WITHDRAW = 4;
  34. @Autowired
  35. public YzActOrderModifyVerifyService(YzActOrderModifyVerifyDao dao) {
  36. this.dao = dao;
  37. }
  38. /**
  39. * 根据医嘱号或者住院号 还有审核的状态来获取 需要审核的信息
  40. *
  41. * @param param 查询的条件
  42. * @return 返回审核的信息
  43. */
  44. public ResultVo<List<TYzActOrderModify>> chaKanZhuangTai(TYzActOrderModify param) {
  45. log.info("查询医嘱审核状态==》操作员:{},医嘱号:{},住院号:{},状态值:{}",
  46. TokenUtil.getTokenUserId(), param.getActOrderNo(), param.getInpatientNo(), param.getAuditFlag());
  47. QueryWrapper<TYzActOrderModify> qw = new QueryWrapper<>();
  48. qw.select("inpatient_no,act_order_no,order_name,audit_flag");
  49. if (param.getActOrderNo() != null) {
  50. qw.eq("act_order_no", param.getActOrderNo());
  51. }
  52. if (StringUtil.notBlank(param.getInpatientNo())) {
  53. qw.eq("inpatient_no", param.getInpatientNo());
  54. }
  55. if (param.getAuditFlag() == 0) {
  56. qw.in("audit_flag", 1, 2, 3, 4);
  57. } else {
  58. qw.eq("audit_flag", param.getAuditFlag());
  59. }
  60. List<TYzActOrderModify> list = dao.selectList(qw);
  61. if (list.size() > 0) {
  62. return ResultVoUtil.success(list);
  63. }
  64. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有找到对应的申请记录 ╮(﹀_﹀”)╭");
  65. }
  66. /**
  67. * 根据医嘱号来获取一些详细的信息 这个是在是在医嘱申请表中查询的数据
  68. *
  69. * @param actOrderNo 医嘱号
  70. * @return 返回指定的
  71. */
  72. public ResultVo<TYzActOrderModify> shenHeXinXi(BigDecimal actOrderNo) {
  73. return ResultVoUtil.success(yzActOrderQuery(actOrderNo));
  74. }
  75. /**
  76. * 把通过医嘱号查询的封装起来 别的地方还要用
  77. *
  78. * @param actOrderNo 医嘱号
  79. * @return 返回对应的数据
  80. */
  81. public TYzActOrderModify yzActOrderQuery(BigDecimal actOrderNo) {
  82. QueryWrapper<TYzActOrderModify> qw = new QueryWrapper<>();
  83. qw.select("act_order_no,inpatient_no,start_time,end_time,new_start_time," +
  84. "new_end_time,audit_flag,proposer,proposer_name=(select name from a_employee_mi where code=proposer),propose_time," +
  85. "audit_staff,audit_time,audit_remark,propose_remark," +
  86. "patient_name,frequ_code,ward_code,order_name");
  87. qw.eq("act_order_no", actOrderNo);
  88. return dao.selectOne(qw);
  89. }
  90. /**
  91. * 审核判断要执行哪些动作
  92. *
  93. * @param auditFlag 1-未审核 2-通过 3-不通过 4-数据回撤到最近一次的修改
  94. * @param actOrderNo 医嘱号,任任何操作都是根据医嘱号来的
  95. * @param auditRemark 一些审核的备注信息
  96. * @return 返回
  97. */
  98. public ResultVo<Boolean> shenHePanDuan(Integer auditFlag, BigDecimal actOrderNo, String auditRemark) {
  99. //根据医嘱号 在申请表中 获取数据
  100. TYzActOrderModify pojo = yzActOrderQuery(actOrderNo);
  101. JSONObject obj = new JSONObject();
  102. obj.put("name", "systemNotification");
  103. if (auditFlag == YZ_APPROVED) {
  104. if (judgeTheTime(pojo)) {
  105. dao.shenHeZhuangTaiGaiBian(3, TokenUtil.getTokenUserId(), actOrderNo, "结束时间不能大于开始时间。");
  106. obj.put("type", "error");
  107. obj.put("message", String.format("用户【%s】,医嘱号为【%s】已驳回,驳回原因:%s", pojo.getProposerName(), actOrderNo, "结束时间不能大于开始时间。"));
  108. log.info("医嘱修改审核,操作:{驳回},操作员:{},驳回医嘱号:{}", TokenUtil.getTokenUserId(), pojo.getActOrderNo());
  109. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "结束时间不能大于开始时间,已自动驳回。");
  110. } else {
  111. dao.yzActOrderModify(pojo.getNewStartTime(), pojo.getNewEndTime(), pojo.getActOrderNo());
  112. dao.shenHeZhuangTaiGaiBian(auditFlag, TokenUtil.getTokenUserId(), actOrderNo, auditRemark);
  113. obj.put("type", "success");
  114. obj.put("message", String.format("用户【%s】,医嘱号为【%s】已通过审核。", pojo.getProposerName(), actOrderNo));
  115. log.info("医嘱修改成功===>审核人:{},数据:{}",
  116. TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(pojo, GetDateFormat.DATE_TIME));
  117. }
  118. } else if (auditFlag == YZ_REJECT) {
  119. dao.shenHeZhuangTaiGaiBian(auditFlag, TokenUtil.getTokenUserId(), actOrderNo, auditRemark);
  120. obj.put("message", String.format("用户【%s】,医嘱号为【%s】已驳回,驳回原因:%s。", pojo.getProposerName(), actOrderNo, auditRemark));
  121. obj.put("type", "error");
  122. log.info("医嘱修改审核,操作:{驳回},操作员:{},驳回医嘱号:{}", TokenUtil.getTokenUserId(), pojo.getActOrderNo());
  123. } else if (auditFlag == YZ_WITHDRAW) {
  124. //数据回撤
  125. dao.shuJuHuiChe(pojo.getStartTime(), pojo.getEndTime(), pojo.getActOrderNo());
  126. dao.shenHeZhuangTaiGaiBian(auditFlag, TokenUtil.getTokenUserId(), actOrderNo, auditRemark);
  127. obj.put("message", String.format("用户【%s】,医嘱号为【%s】数据撤回,撤回原因:%s。", pojo.getProposerName(), actOrderNo, auditRemark));
  128. obj.put("type", "error");
  129. log.info("医嘱修改审核,操作:{数据撤回成功},操作人员:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(pojo, GetDateFormat.DATE_TIME));
  130. }
  131. String message = obj.toJSONString();
  132. WebSocketServer.sendMessageByUserCode(pojo.getProposer(), message);
  133. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "操作成功,已通知申请人员。");
  134. }
  135. public Boolean judgeTheTime(TYzActOrderModify pojo) {
  136. if (pojo.getNewEndTime() != null) {
  137. if (pojo.getNewStartTime() != null) {
  138. return pojo.getNewEndTime().getTime() < pojo.getNewStartTime().getTime();
  139. } else {
  140. return pojo.getNewEndTime().getTime() < pojo.getStartTime().getTime();
  141. }
  142. }
  143. return false;
  144. }
  145. }