MedicalTechnologyIsPaidService.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package thyyxxk.webserver.service.jiekou;
  2. import lombok.Data;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.apache.ibatis.session.ExecutorType;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import thyyxxk.webserver.config.exception.BizException;
  10. import thyyxxk.webserver.config.exception.ExceptionEnum;
  11. import thyyxxk.webserver.dao.his.jiekou.DuiWaiJieKouDao;
  12. import thyyxxk.webserver.entity.ResultVo;
  13. import thyyxxk.webserver.entity.datamodify.MzChargeDetail;
  14. import thyyxxk.webserver.entity.login.UserInfo;
  15. import thyyxxk.webserver.entity.zhuyuanyisheng.jianyanjiancha.YshYjReq;
  16. import thyyxxk.webserver.service.hospitalizationCosts.HospitalizationCostsService;
  17. import thyyxxk.webserver.service.redislike.RedisLikeService;
  18. import thyyxxk.webserver.utils.ListUtil;
  19. import thyyxxk.webserver.utils.ResultVoUtil;
  20. import thyyxxk.webserver.utils.StringUtil;
  21. import java.math.BigDecimal;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * <p>
  26. * 描述: 对外医技确费接口
  27. * </p>
  28. *
  29. * @author xc
  30. * @date 2021-07-13 08:08
  31. */
  32. @Slf4j
  33. @Service
  34. public class MedicalTechnologyIsPaidService {
  35. private final DuiWaiJieKouDao dao;
  36. private final RedisLikeService redisLikeService;
  37. private final HospitalizationCostsService hospitalizationCostsService;
  38. public MedicalTechnologyIsPaidService(DuiWaiJieKouDao dao, RedisLikeService redisLikeService, HospitalizationCostsService hospitalizationCostsService) {
  39. this.dao = dao;
  40. this.redisLikeService = redisLikeService;
  41. this.hospitalizationCostsService = hospitalizationCostsService;
  42. }
  43. @Data
  44. public static class ConfirmList {
  45. private List<String> reqNoAndPatNoList;
  46. private String confirmId;
  47. private Boolean changePrint;
  48. }
  49. @Data
  50. public static class Param {
  51. Param(String reqStr) {
  52. String[] temp = reqStr.split("_");
  53. reqNo = Integer.parseInt(temp[0]);
  54. patNo = temp[1];
  55. times = Integer.parseInt(temp[2]);
  56. orderNo = new BigDecimal(temp[3]);
  57. }
  58. private Integer reqNo;
  59. private String patNo;
  60. private Integer times;
  61. private BigDecimal orderNo;
  62. }
  63. @Transactional(rollbackFor = Exception.class)
  64. public ResultVo<String> mzProject(Integer reqNo, String confirmId, String type) {
  65. MzChargeDetail mz = dao.getFeeInfoByReqNo(reqNo);
  66. if (mz == null) {
  67. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "未查询到原申请。");
  68. }
  69. UserInfo userInfo = redisLikeService.getUserInfoByCode(confirmId);
  70. if (userInfo == null) {
  71. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "未查询到确认人数据");
  72. }
  73. // 1 确认 3 取消
  74. Date date = new Date();
  75. int yjReq = dao.confirmOutpatientYjReq(type, confirmId, userInfo.getDeptCode(), date, reqNo);
  76. if (yjReq == 0) {
  77. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员。");
  78. }
  79. int feeCount = dao.confirmOutPatientFee(type, confirmId, userInfo.getDeptCode(), date, reqNo, mz);
  80. if (feeCount == 0) {
  81. throw new BizException(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员");
  82. }
  83. return ResultVoUtil.success(ExceptionEnum.SUCCESS);
  84. }
  85. public ResultVo<String> zyProject(Integer reqNo, String confirmId) {
  86. YshYjReq yshYjReq = dao.selectedYshJyReqOne(reqNo);
  87. if (yshYjReq == null) {
  88. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到申请单");
  89. }
  90. if (StringUtil.notBlank(yshYjReq.getConfirmFlag())) {
  91. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请勿重复确认");
  92. }
  93. if (dao.whetherToGenerateAConfirmationFee(yshYjReq.getActOrderNo()) == 0) {
  94. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "护士未执行");
  95. }
  96. Date date = new Date();
  97. UserInfo userInfo = redisLikeService.getUserInfoByCode(confirmId);
  98. if (userInfo == null) {
  99. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "未查询到确认人数据");
  100. }
  101. // 1 确认 2 取消
  102. int flag = 1;
  103. int yshFlag = dao.updateYshYjReqFlag(confirmId, reqNo, date, userInfo.getDeptCode(), flag);
  104. if (yshFlag == 0) {
  105. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员");
  106. }
  107. int feeCount = dao.confirmTheIntermediateTable(confirmId,
  108. yshYjReq.getActOrderNo(),
  109. date,
  110. userInfo.getDeptCode(),
  111. yshYjReq.getInpatientNo(),
  112. yshYjReq.getAdmissTimes(), flag);
  113. if (feeCount == 0) {
  114. throw new BizException(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员");
  115. }
  116. return ResultVoUtil.success(ExceptionEnum.SUCCESS);
  117. }
  118. public ResultVo<String> zyProjectCancel(Integer reqNo, String confirmId) {
  119. UserInfo userInfo = redisLikeService.getUserInfoByCode(confirmId);
  120. if (userInfo == null) {
  121. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "未查询到确认人数据");
  122. }
  123. YshYjReq yshYjReq = dao.selectedYshJyReqOne(reqNo);
  124. if (yshYjReq == null) {
  125. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到申请单");
  126. }
  127. // 1 确认 2 取消
  128. int flag = 1;
  129. Date date = new Date();
  130. int yshFlag = dao.updateYshYjReqFlag(confirmId, reqNo, date, userInfo.getDeptCode(), flag);
  131. if (yshFlag == 0) {
  132. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员");
  133. }
  134. int feeCount = dao.confirmTheIntermediateTable(confirmId,
  135. yshYjReq.getActOrderNo(),
  136. date,
  137. userInfo.getDeptCode(),
  138. yshYjReq.getInpatientNo(),
  139. yshYjReq.getAdmissTimes(), flag);
  140. if (feeCount == 0) {
  141. throw new BizException(ExceptionEnum.INVALID_PARAM, "更新失败请联系管理员");
  142. }
  143. hospitalizationCostsService.refundsByPatientOrder(yshYjReq.getInpatientNo(), yshYjReq.getAdmissTimes(), yshYjReq.getActOrderNo());
  144. return ResultVoUtil.success("操作成功。");
  145. }
  146. /**
  147. * 批量更新数据
  148. * reqNo_inpatient_no_admiss_times_act_order_no
  149. *
  150. * @param reqNoList 申请号 和 patNo , times 加 医嘱号 联合 ,下滑线连接起来
  151. * @param confirmId 确认人的 id
  152. * @return 返回提示
  153. */
  154. public ResultVo<String> medConfirmList(List<String> reqNoList, String confirmId) {
  155. UserInfo userInfo = redisLikeService.getUserInfoByCode(confirmId);
  156. if (userInfo == null) {
  157. return ResultVoUtil.fail(ExceptionEnum.INVALID_PARAM, "未查询到确认人数据");
  158. }
  159. // 1 确认 2 取消
  160. int flag = 1;
  161. Date now = new Date();
  162. ListUtil.batchList(reqNoList, DuiWaiJieKouDao.class, (mapper, item) -> {
  163. // 解析出来的信息
  164. Param p = new Param(item);
  165. mapper.updateYshYjReqFlag(confirmId, p.getReqNo(), now, userInfo.getDeptCode(), flag);
  166. mapper.confirmTheIntermediateTable(confirmId, p.getOrderNo(), now, userInfo.getDeptCode(), p.getPatNo(), p.getTimes(), flag);
  167. });
  168. return ResultVoUtil.success("确认成功。");
  169. }
  170. }