LocalBusClinicService.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package com.coffee.bus.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.coffee.bus.controller.vo.ClinicStatsVo;
  6. import com.coffee.bus.entity.BusClinicEntity;
  7. import com.coffee.bus.entity.BusInfusionHistoryEntity;
  8. import com.coffee.bus.entity.BusPatientEntity;
  9. import com.coffee.bus.mapper.BusClinicMapper;
  10. import com.coffee.bus.registry.patient.PatientOperator;
  11. import com.coffee.bus.registry.patient.PatientRegistry;
  12. import com.coffee.bus.service.dto.ClinicQuery;
  13. import com.coffee.bus.service.dto.ClinicResult;
  14. import com.coffee.bus.service.dto.ClinicStatsReturnResult;
  15. import com.coffee.bus.utils.WsPublishUtils;
  16. import com.coffee.common.crud.BaseService;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.context.annotation.Lazy;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.util.Assert;
  23. import java.util.*;
  24. /**
  25. * @author lifang
  26. * @version 1.0.0
  27. * @ClassName LocalBusHospitalService.java
  28. * @Description
  29. * @createTime 2022年03月19日 09:27:00
  30. */
  31. @Service
  32. @Slf4j
  33. public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClinicEntity,String> {
  34. @Autowired
  35. @Lazy
  36. private PatientRegistry patientRegistry;
  37. @Autowired
  38. @Lazy
  39. private LocalBusInfusionHistoryService infusionHistoryService;
  40. @Autowired
  41. @Lazy
  42. private LocalBusPatientService patientService;
  43. @Autowired
  44. @Lazy
  45. private WsPublishUtils wsPublishUtils;
  46. @Override
  47. public void validateBeforeSave(BusClinicEntity entity) {
  48. if(entity.getMonitorStartTime()==null){
  49. entity.setMonitorStartTime(new Date());
  50. }
  51. if(entity.getStartTime()==null){
  52. entity.setStartTime(entity.getMonitorStartTime());
  53. }
  54. }
  55. @Override
  56. public void validateBeforeUpdate(BusClinicEntity entity) {
  57. }
  58. @Override
  59. public void validateBeforeDelete(String id) {
  60. }
  61. /**
  62. * 结束当前医院病号的临床数据
  63. * @param clinicId 临床id
  64. */
  65. @Transactional(rollbackFor = Exception.class)
  66. public void finish(String clinicId, String tenantId) {
  67. this.finish(Collections.singletonList(clinicId),new Date(),tenantId);
  68. }
  69. /**
  70. * 结束当前医院病号的临床数据
  71. * @param clinicIds 临床id
  72. * @param finishTime 临床结束时间
  73. */
  74. @Transactional(rollbackFor = Exception.class)
  75. public void finish(List<String> clinicIds,Date finishTime, String tenantId) {
  76. this.update(new UpdateWrapper<BusClinicEntity>().lambda()
  77. .in(BusClinicEntity::getId,clinicIds)
  78. .set(BusClinicEntity::getFinished,true)
  79. .set(BusClinicEntity::getEndTime,finishTime));
  80. wsPublishUtils.publishMonitorTotalCount(tenantId);
  81. }
  82. /**
  83. * 找到该病号最近的一场手术
  84. * @param hospitalId
  85. * @param patientCode
  86. */
  87. public BusClinicEntity recentClinicByPatientCode(String hospitalId, String patientCode) {
  88. return this.baseMapper.recentClinic(hospitalId,patientCode);
  89. }
  90. /**
  91. * 描述: 对两场手术进行比较,判断名称、时间是否发生了变化
  92. * @author lifang
  93. * @date 2022/5/12 9:10
  94. * @param source his系统拉取的数据
  95. * @param target 数据库存储的数据
  96. * @return void
  97. */
  98. @Transactional(rollbackFor = Exception.class)
  99. public void compareFromHis(BusClinicEntity source,BusClinicEntity target){
  100. Assert.hasText(target.getId(),"LocalBusClinicService.compareFromHis方法调用时,target参数id不能为空");
  101. Assert.hasText(source.getPatientCode(),"LocalBusClinicService.compareFromHis方法调用时,source参数patientCode不能为空");
  102. Assert.notNull(source.getStartTime(),"LocalBusClinicService.compareFromHis方法调用时,source参数startTime不能为空");
  103. Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.compareFromHis方法调用时,source参数surgeName不能为空");
  104. source.setId(target.getId());
  105. source.setFinished(target.getFinished());
  106. this.updateById(source);
  107. //手术开始时间发生变化,重新计算输注数据
  108. if(source.getStartTime()!=null&&source.getStartTime()!=target.getStartTime()){
  109. infusionHistoryService.adjustInfusionByClinic(source.getId(),source.getPatientCode(),source.getTenantId(),source.getStartTime());
  110. }
  111. }
  112. /**
  113. * 描述: his拉取的新的手术信息,执行插入操作
  114. * @author lifang
  115. * @date 2022/5/12 10:27
  116. * @param source
  117. * @return void
  118. */
  119. @Transactional(rollbackFor = Exception.class)
  120. public void insertFromHis(BusClinicEntity source){
  121. Assert.hasText(source.getTenantId(),"LocalBusClinicService.insertFromHis方法调用时,source参数tenantId不能为空");
  122. Assert.hasText(source.getPatientCode(),"LocalBusClinicService.insertFromHis方法调用时,source参数patientCode不能为空");
  123. Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.insertFromHis方法调用时,source参数surgeName不能为空");
  124. this.save(source);
  125. infusionHistoryService.adjustInfusionByClinic(source.getId(),source.getPatientCode(),source.getTenantId(),source.getStartTime());
  126. }
  127. /**
  128. * 描述: 从his拉去的数据设置为当前临床信息
  129. * @author lifang
  130. * @date 2022/5/12 10:31
  131. * @param source
  132. * @return void
  133. */
  134. @Transactional(rollbackFor = Exception.class)
  135. public void setCurrentClinicByHis(BusClinicEntity source){
  136. Assert.hasText(source.getId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数id不能为空");
  137. Assert.hasText(source.getPatientCode(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数patientCode不能为空");
  138. Assert.hasText(source.getTenantId(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数tenantId不能为空");
  139. Assert.notNull(source.getStartTime(),"LocalBusClinicService.setCurrentClinic方法调用时,source参数startTime不能为空");
  140. //处理当前的输注信息
  141. infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda()
  142. .eq(BusInfusionHistoryEntity::getPatientCode,source.getPatientCode())
  143. .eq(BusInfusionHistoryEntity::getTenantId,source.getTenantId())
  144. .eq(BusInfusionHistoryEntity::getFinished,false)
  145. .set(BusInfusionHistoryEntity::getClinicId,source.getId()));
  146. //更新病人信息
  147. patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
  148. .eq(BusPatientEntity::getCode,source.getPatientCode())
  149. .eq(BusPatientEntity::getTenantId,source.getTenantId())
  150. .set(BusPatientEntity::getClinicId,source.getId()));
  151. //处理
  152. List<BusClinicEntity> clinics = this.list(new QueryWrapper<BusClinicEntity>().lambda()
  153. .eq(BusClinicEntity::getPatientCode, source.getPatientCode())
  154. .eq(BusClinicEntity::getTenantId, source.getTenantId())
  155. .eq(BusClinicEntity::getFinished, false)
  156. .ne(BusClinicEntity::getId, source.getId()));
  157. //将下一场手术的开始时间作为该场手术监控的结束时间
  158. clinics.sort(Comparator.comparing(BusClinicEntity::getStartTime));
  159. for (int i = 0; i < clinics.size(); i++) {
  160. BusClinicEntity clinic = clinics.get(i);
  161. clinic.setFinished(true);
  162. if(i==clinics.size()-1){
  163. if(clinic.getEndTime()==null){
  164. clinic.setEndTime(source.getEndTime());
  165. }
  166. continue;
  167. }
  168. if(clinic.getEndTime()==null){
  169. clinic.setEndTime(clinics.get(i+1).getStartTime());
  170. }
  171. }
  172. this.updateBatchById(clinics);
  173. PatientOperator operator = patientRegistry.getOperator(source.getTenantId(), source.getPatientCode());
  174. operator.setClinicId(source.getId());
  175. wsPublishUtils.publishPatientMonitor(source.getPatientCode(),source.getTenantId());
  176. }
  177. public ClinicStatsReturnResult stats(ClinicStatsVo statsVo) {
  178. return ClinicStatsReturnResult.of(this.baseMapper.stats(statsVo));
  179. }
  180. public IPage<ClinicResult> pageQuery(ClinicQuery query){
  181. return this.baseMapper.pageQuery(query.getPage(),query);
  182. }
  183. /**
  184. * 描述: 临床是否结束
  185. * @author lifang
  186. * @date 2022/5/30 16:25
  187. * @param clinicId
  188. * @return boolean
  189. */
  190. public boolean isFinished(String clinicId) {
  191. return Boolean.TRUE.equals(Optional.ofNullable(this.getById(clinicId)).orElse(new BusClinicEntity()).getFinished());
  192. }
  193. /**
  194. * 描述: 重新开启临床
  195. * @author lifang
  196. * @date 2022/5/30 16:27
  197. * @param clinicId
  198. * @return void
  199. */
  200. @Transactional(rollbackFor = Exception.class)
  201. public void resetClinic(String clinicId) {
  202. this.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId).set(BusClinicEntity::getFinished,false));
  203. }
  204. }