OrderQuashService.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package thyyxxk.webserver.service.zhuyuanyisheng;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import thyyxxk.webserver.config.exception.ExceptionEnum;
  8. import thyyxxk.webserver.dao.his.zhuyuanyisheng.OrderQuashDao;
  9. import thyyxxk.webserver.entity.ResultVo;
  10. import thyyxxk.webserver.entity.login.UserInfo;
  11. import thyyxxk.webserver.entity.zhuyuanyisheng.orderquash.ReqOrderQuash;
  12. import thyyxxk.webserver.entity.zhuyuanyisheng.orderquash.ReturnReqOrderQuash;
  13. import thyyxxk.webserver.service.PublicServer;
  14. import thyyxxk.webserver.utils.DateUtil;
  15. import thyyxxk.webserver.utils.ListUtil;
  16. import thyyxxk.webserver.utils.ResultVoUtil;
  17. import thyyxxk.webserver.utils.TokenUtil;
  18. import java.math.BigDecimal;
  19. import java.util.Date;
  20. import java.util.List;
  21. @Service
  22. @Slf4j
  23. public class OrderQuashService {
  24. private final OrderQuashDao dao;
  25. private final PublicServer publicServer;
  26. public OrderQuashService(OrderQuashDao dao, PublicServer publicServer) {
  27. this.dao = dao;
  28. this.publicServer = publicServer;
  29. }
  30. public ResultVo<Integer> applicationForRevocation(ReqOrderQuash param) {
  31. Date orderDate = dao.selectOrderStartTime(param.getActOrderNo());
  32. if (orderDate == null) {
  33. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "原医嘱已不存在。");
  34. }
  35. // 申请作废先一步要停止医嘱
  36. dao.stopOrder(param.getActOrderNo());
  37. Date now = new Date();
  38. param.setReqId(TokenUtil.getTokenUserId())
  39. .setReqDatetime(now);
  40. long subtract = DateUtil.theDifferenceIsHours(now, orderDate);
  41. // 超过 24 小时 要申请
  42. if (subtract > 24) {
  43. return insertTheRequest(param);
  44. }
  45. // 有费用要申请
  46. if (dao.selectzyDetailCharge(param.getActOrderNo(), param.getPatNo(), param.getTimes()) > 0) {
  47. return insertTheRequest(param);
  48. }
  49. // 有药单申请
  50. if (dao.selectYpOrder(param.getActOrderNo()) > 0) {
  51. return insertTheRequest(param);
  52. }
  53. // 有费用中间表申请
  54. if (dao.selectZyPatientFee(param.getActOrderNo()) > 0) {
  55. return insertTheRequest(param);
  56. }
  57. param.setState(2).setApproverRemark("系统自动审核。");
  58. // 删除原来的数据
  59. dao.deleteById(param.getActOrderNo());
  60. // 插入申请表数据
  61. dao.insert(param);
  62. // 没有产生费用也没有超过 24 小时可以直接撤销
  63. dao.eraseOrder(param.getActOrderNo());
  64. dao.delYzOrder(param.getActOrderNo());
  65. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, 1);
  66. }
  67. private ResultVo<Integer> insertTheRequest(ReqOrderQuash param) {
  68. ReqOrderQuash quash = dao.selectById(param.getActOrderNo());
  69. if (quash == null) {
  70. dao.insert(param);
  71. } else if (quash.getState() == 2) {
  72. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "医嘱已经通过审核了。");
  73. } else if (quash.getState() == 3 || quash.getState() == 1) {
  74. dao.deleteById(param.getActOrderNo());
  75. dao.insert(param);
  76. }
  77. log.info("日志:{}", JSON.toJSONString(param));
  78. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "申请成功等待医务部审核通过。", 0);
  79. }
  80. public ResultVo<List<ReturnReqOrderQuash>> getReqOrderQuash(String startTime, String endTime, int state, Boolean myReq) {
  81. QueryWrapper<ReturnReqOrderQuash> qw = new QueryWrapper<>();
  82. qw.ge("req_datetime", startTime)
  83. .le("req_datetime", endTime);
  84. qw.eq("state", state);
  85. if (myReq) {
  86. qw.eq("req_id", TokenUtil.getTokenUserId());
  87. }
  88. return ResultVoUtil.success(dao.selectReqListGroupBy(qw));
  89. }
  90. public ResultVo<List<ReturnReqOrderQuash>> selectReqListByPat(String patNo, String times, int state) {
  91. return ResultVoUtil.success(dao.selectReqListByPat(patNo, times, state));
  92. }
  93. @Transactional(rollbackFor = Exception.class)
  94. public ResultVo<String> saveData(List<ReqOrderQuash> list) {
  95. if (ListUtil.isBlank(list)) {
  96. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请先选择数据。");
  97. }
  98. if (publicServer.needRule(38)) {
  99. String code = TokenUtil.getTokenUserId();
  100. Date now = new Date();
  101. for (ReqOrderQuash item : list) {
  102. item.setApproverId(code);
  103. item.setApproverDatatime(now);
  104. revocationOfMedicalOrders(item);
  105. }
  106. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
  107. }
  108. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您没有审核权限。");
  109. }
  110. /**
  111. * 撤销医嘱
  112. *
  113. * @param item 数据
  114. */
  115. public void revocationOfMedicalOrders(ReqOrderQuash item) {
  116. BigDecimal order = item.getActOrderNo();
  117. dao.updateReqOrderQuash(item);
  118. // 删除费用中间表
  119. dao.delPatientFee(order);
  120. // 删除药品表
  121. dao.delYpZyOrder(order);
  122. dao.eraseOrder(order);
  123. dao.upErase(order);
  124. dao.delYzOrder(order);
  125. }
  126. }