LocalBusDeviceRunningService.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package com.coffee.bus.service;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  6. import com.coffee.bus.entity.BusPatientEntity;
  7. import com.coffee.bus.registry.device.DeviceOperator;
  8. import com.coffee.bus.registry.device.DeviceRegistry;
  9. import com.coffee.bus.registry.device.bean.DeviceCacheInfo;
  10. import com.coffee.bus.registry.patient.PatientOperator;
  11. import com.coffee.bus.registry.patient.PatientRegistry;
  12. import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
  13. import com.coffee.bus.service.dto.UndoDeviceConfig;
  14. import com.coffee.bus.service.dto.DeviceShiftConfig;
  15. import com.coffee.bus.service.dto.ManualUndoConfig;
  16. import com.coffee.bus.entity.BusClinicEntity;
  17. import com.coffee.bus.entity.BusDeviceRunningEntity;
  18. import com.coffee.bus.entity.BusInfusionHistoryEntity;
  19. import com.coffee.bus.mapper.BusDeviceRunningMapper;
  20. import com.coffee.bus.utils.WsPublishUtils;
  21. import com.coffee.common.crud.BaseService;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.context.annotation.Lazy;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.util.*;
  27. import java.util.stream.Collectors;
  28. /**
  29. * @author lifang
  30. * @version 1.0.0
  31. * @ClassName LocalBusHospitalService.java
  32. * @Description TODO
  33. * @createTime 2022年03月19日 09:27:00
  34. */
  35. @Service
  36. public class LocalBusDeviceRunningService extends BaseService<BusDeviceRunningMapper, BusDeviceRunningEntity,String> {
  37. @Autowired
  38. @Lazy
  39. private LocalBusInfusionHistoryService infusionHistoryService;
  40. @Autowired
  41. @Lazy
  42. private PatientRegistry patientRegistry;
  43. @Autowired
  44. @Lazy
  45. private LocalBusPatientService patientService;
  46. @Autowired
  47. @Lazy
  48. private LocalBusClinicService clinicService;
  49. @Autowired
  50. @Lazy
  51. private DeviceRegistry deviceRegistry;
  52. @Autowired
  53. @Lazy
  54. private WsPublishUtils wsPublishUtils;
  55. @Override
  56. public void validateBeforeSave(BusDeviceRunningEntity entity) {
  57. }
  58. @Override
  59. public void validateBeforeUpdate(BusDeviceRunningEntity entity) {
  60. }
  61. @Override
  62. public void validateBeforeDelete(String id) {
  63. }
  64. /**
  65. * 描述: 获取设备别名
  66. * @author lifang
  67. * @date 2022/5/16 17:32
  68. * @param deviceId
  69. * @return String
  70. */
  71. public String getAliasName(String deviceId){
  72. if(StrUtil.isBlank(deviceId)){
  73. return null;
  74. }
  75. return deviceRegistry.getOperator(deviceId).getAlias();
  76. }
  77. /**
  78. * 批量撤泵
  79. * @param undoConfigs 批量撤泵配置
  80. * @param finishClinic 撤泵后是否结束相关临床
  81. */
  82. @Transactional(rollbackFor = Exception.class)
  83. public void batchUndo(List<ManualUndoConfig> undoConfigs,boolean finishClinic){
  84. undoConfigs.forEach(undoConfig -> this.undo(undoConfig,false));
  85. //批量结束临床
  86. if(finishClinic){
  87. Map<String, List<ManualUndoConfig>> configsMap = undoConfigs.stream().collect(Collectors.groupingBy(ManualUndoConfig::getTenantId));
  88. configsMap.forEach((k,v)-> {
  89. clinicService.finish(v.stream().map(ManualUndoConfig::getClinicId).collect(Collectors.toList()),v.get(0).getUndo().getUndoTime() ,k);
  90. });
  91. }
  92. }
  93. /**
  94. * 结束病患监控操作
  95. * @param manualUndoConfig
  96. * @param finishClinic 撤泵后是否结束相关临床
  97. */
  98. @Transactional(rollbackFor = Exception.class)
  99. public void undo(ManualUndoConfig manualUndoConfig,boolean finishClinic) {
  100. List<String> deviceIds = manualUndoConfig.getDeviceIds();
  101. if(CollectionUtil.isNotEmpty(deviceIds)){
  102. /****************将撤泵记录存入到泵的使用历史记录中***************/
  103. List<BusDeviceRunningEntity> devices = this.list(new QueryWrapper<BusDeviceRunningEntity>().lambda().in(BusDeviceRunningEntity::getDeviceId,deviceIds));
  104. if(CollectionUtil.isEmpty(devices)){
  105. return;
  106. }
  107. //对所有运行中的泵进行撤泵操作
  108. this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().in(BusDeviceRunningEntity::getDeviceId,deviceIds).set(BusDeviceRunningEntity::getIsUndo,true));
  109. //无泵监护,不需要监护输注数据
  110. if(Boolean.TRUE.equals(manualUndoConfig.getMonitorType())){
  111. //输注结束,更新撤泵信息
  112. Set<String> infusionIds = devices.stream().map(BusDeviceRunningEntity::getInfusionId).collect(Collectors.toSet());
  113. UndoDeviceConfig undo = manualUndoConfig.getUndo();
  114. infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda()
  115. .in(BusInfusionHistoryEntity::getId,infusionIds)
  116. .set(BusInfusionHistoryEntity::getIsUndo,true)
  117. .set(BusInfusionHistoryEntity::getUndoBy,undo.getUndoBy())
  118. .set(BusInfusionHistoryEntity::getUndoTime,undo.getUndoTime())
  119. .set(BusInfusionHistoryEntity::getDestroyer,undo.getDestroyer())
  120. .set(BusInfusionHistoryEntity::getWitnesses,undo.getWitnesses()));
  121. //将缓存设置为已撤泵状态
  122. deviceIds.stream().map(deviceRegistry::getOperator)
  123. .forEach(operator->operator.setUndo(true));
  124. }
  125. }
  126. //结束临床
  127. if(finishClinic){
  128. clinicService.finish(manualUndoConfig.getClinicId(),manualUndoConfig.getTenantId());
  129. }
  130. }
  131. /**
  132. * 切换主泵
  133. * @param shiftConfig 切换配置
  134. */
  135. @Transactional(rollbackFor = Exception.class)
  136. public void shift(DeviceShiftConfig shiftConfig) {
  137. PatientOperator<PatientCacheInfo> patientOperator = patientRegistry.getOperator(shiftConfig.getTenantId(), shiftConfig.getPatientCode());
  138. String bindDeviceId = patientOperator.getBindDeviceId();
  139. List<String> replicaDeviceIds = shiftConfig.getReplicaDeviceIds();
  140. String masterDeviceId = shiftConfig.getMasterDeviceId();
  141. if (masterDeviceId.equals(bindDeviceId)) {
  142. //主泵未发生切换
  143. return;
  144. }
  145. //切换副泵
  146. this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda()
  147. .in(BusDeviceRunningEntity::getDeviceId,replicaDeviceIds).set(BusDeviceRunningEntity::getMaster,false));
  148. //切换主泵
  149. this.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda()
  150. .eq(BusDeviceRunningEntity::getDeviceId,masterDeviceId).set(BusDeviceRunningEntity::getMaster,true));
  151. DeviceOperator<DeviceCacheInfo> masterOperator = deviceRegistry.getOperator(masterDeviceId);
  152. String currentInfusionId = masterOperator.getInfusionId();
  153. //病患绑定主泵信息
  154. patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
  155. .eq(BusPatientEntity::getCode,shiftConfig.getPatientCode())
  156. .eq(BusPatientEntity::getTenantId,shiftConfig.getTenantId())
  157. .set(BusPatientEntity::getInfusionId,currentInfusionId));
  158. //刷新缓存信息
  159. replicaDeviceIds.stream().map(deviceRegistry::getOperator).forEach(deviceOperator->{
  160. deviceOperator.setMaster(false);
  161. //切换后也标注为暂时撤泵,即后续该泵发来的数据不再做主副泵切换的判断
  162. deviceOperator.setUndo(true);
  163. });
  164. masterOperator.setMaster(true);
  165. patientOperator.setBindDeviceId(shiftConfig.getMasterDeviceId());
  166. }
  167. }