Jelajahi Sumber

update 更新saToken版本
update 清除冗余tokenValue信息

18339543638 3 tahun lalu
induk
melakukan
7daff453aa

+ 19 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/bean/UndoDeviceConfig.java

@@ -3,10 +3,12 @@ package com.nb.web.api.bean;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * @author lifang
@@ -33,4 +35,21 @@ public class UndoDeviceConfig implements Serializable {
     @ApiModelProperty("见证人")
     @NotNull(message = "见证人不能为空")
     private String witnesses;
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        UndoDeviceConfig that = (UndoDeviceConfig) o;
+        return Objects.equals(getUndoBy(), that.getUndoBy()) &&
+                Objects.equals(getUndoTime(), that.getUndoTime()) &&
+                Objects.equals(getDestroyer(), that.getDestroyer()) &&
+                Objects.equals(getWitnesses(), that.getWitnesses());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getUndoBy(), getUndoTime(), getDestroyer(), getWitnesses());
+    }
 }

+ 2 - 1
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IClinicClient.java

@@ -1,5 +1,6 @@
 package com.nb.web.api.feign;
 
+import com.nb.web.api.bean.UndoDeviceConfig;
 import com.nb.web.api.entity.BusClinicEntity;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -26,7 +27,7 @@ public interface IClinicClient {
      * @param tenantId
      * @return void
      */
-    void finish(String clinicId, String tenantId) ;
+    void finish(String clinicId, String tenantId, UndoDeviceConfig undoConfig) ;
 
     /**
      * 描述: 新增临床信息

+ 5 - 3
nb-service/iot-service/src/main/java/com/nb/mq/entity/PcPatientEntity.java

@@ -3,6 +3,8 @@ package com.nb.mq.entity;
 import java.io.Serializable;
 import java.util.Date;
 
+import cn.hutool.core.util.EnumUtil;
+import com.nb.core.enums.SexEnum;
 import com.nb.web.api.bean.UndoDeviceConfig;
 import com.nb.web.api.entity.BusClinicEntity;
 import io.swagger.annotations.ApiModelProperty;
@@ -109,16 +111,16 @@ public class PcPatientEntity implements Serializable {
         result.setPatientId(patientId);
         result.setAsa(this.getAsa());
         result.setPatientName(this.getName());
-        //todo
-//        result.setPatientGender(this.getSex());
+        result.setPatientGender(EnumUtil.likeValueOf(SexEnum.class,this.getSex()));
         result.setPatientAge(this.getAge());
         result.setWard(this.getWardCode());
         result.setBedNo(this.getBedCode());
         result.setWeight(this.getWeight());
         result.setHeight(this.getHeight());
+        result.setAnalType(this.getEasyMode());
         result.setAnaDoctor(this.getAnesthesiaDoctor1());
         result.setAnaType(this.getAnesthesiaMode());
-        result.setSurgeryDoctor(this.getAnesthesiaDoctor2());
+        result.setSurgeryDoctor(this.getOperationDoctor());
         result.setConfigPerson(this.getConfigPerson());
         //配方 todo
         if(this.getUndoTime()!=null){

+ 35 - 27
nb-service/iot-service/src/main/java/com/nb/mq/listener/RabbitMqListener.java

@@ -1,6 +1,7 @@
 package com.nb.mq.listener;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -24,6 +25,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.messaging.handler.annotation.Payload;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.Date;
 import java.util.Optional;
@@ -54,7 +56,6 @@ public class RabbitMqListener {
      * @return void
      */
     @RabbitListener(queuesToDeclare = @Queue("cloud.patient"))
-    @Transactional(rollbackFor = Exception.class)
     public void patientQueue(@Payload String body) {
         log.info("消息队列中,病人队列{cloud.patient},接受消息:{}",body);
         BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
@@ -70,39 +71,45 @@ public class RabbitMqListener {
             PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
             BusClinicEntity existClinic = patientDetail.getClinic();
             if(Boolean.TRUE.equals(clinic.getFinished())){
-                //进行撤泵处理
-                clinicClient.finish(existClinic.getId(),existClinic.getTenantId());
-                if (patientDetail.getInfusion()!=null) {
-                    //刷新分包标识
-                    deviceClient.refreshClassification(patientDetail.getInfusion().getDeviceId());
+                if(ObjectUtil.isNull(existClinic)||
+                        ObjectUtil.isNull(existClinic.getUndoConfig())||
+                        ObjectUtil.notEqual(clinic.getUndoConfig(),
+                                existClinic.getUndoConfig())){
+                    //避免重复撤泵,进行撤泵处理
+                    clinicClient.finish(existClinic.getId(),existClinic.getTenantId(),clinic.getUndoConfig());
+                    if (patientDetail.getInfusion()!=null) {
+                        //刷新分包标识
+                        deviceClient.refreshClassification(patientDetail.getInfusion().getDeviceId());
+                    }
+                }else {
+                    clinic.setFinished(null);
+                    clinicClient.update(existClinic.getId(),clinic);
                 }
-                return;
-            }
-            //当上一个临床状态为已结束时,对比临床信息是否发生改变,生成新的临床信息
-            boolean sameClinic=false;
-            if(StrUtil.isNotEmpty(existClinic.getId())){
-                sameClinic=(clinic.getSurgeryName()+
-                        Optional.ofNullable(clinic.getWard()).orElse("")+
-                        Optional.ofNullable(clinic.getBedNo()).orElse("")).equals(
-                        existClinic.getSurgeryName()+
-                                Optional.ofNullable(existClinic.getWard()).orElse("")+
-                                Optional.ofNullable(existClinic.getBedNo()).orElse(""));
-            }
-            if(!sameClinic){
-                //为了避免网络延迟,开始时间往前推1个小时
-                clinic.setStartTime(DateUtil.offsetHour(new Date(),0));
-
-                clinic=clinicClient.insertFromHis(clinic);
-                clinicClient.setCurrentClinicByHis(clinic,Boolean.TRUE.equals(existClinic.getFinished()));
             }else {
-                clinic.setStartTime(existClinic.getStartTime());
-                clinicClient.update(existClinic.getId(),clinic);
+                //当上一个临床状态为已结束时,对比临床信息是否发生改变,生成新的临床信息
+                boolean sameClinic=false;
+                if(StrUtil.isNotEmpty(existClinic.getId())){
+                    sameClinic=(clinic.getSurgeryName()).equals(
+                            existClinic.getSurgeryName());
+                }
+                if(!sameClinic){
+                    //为了避免网络延迟,开始时间往前推1个小时
+                    clinic.setStartTime(DateUtil.offsetHour(new Date(),0));
+
+                    clinic=clinicClient.insertFromHis(clinic);
+                    clinicClient.setCurrentClinicByHis(clinic,Boolean.TRUE.equals(existClinic.getFinished()));
+                }else {
+                    clinic.setStartTime(existClinic.getStartTime());
+                    clinicClient.update(existClinic.getId(),clinic);
+                }
             }
             hospitalLog.setResult(JSONUtil.toJsonStr(clinic));
+            hospitalLog.setSuccess(true);
         }catch (Exception e){
             log.info("消息队列【cloud.patient】处理消息{}失败,",body,e);
             hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
             hospitalLog.setSuccess(false);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
         long entTime = System.currentTimeMillis();
         hospitalLog.setUseTime(entTime-startTime);
@@ -117,7 +124,6 @@ public class RabbitMqListener {
      * @return void
      */
     @RabbitListener(queuesToDeclare = @Queue("cloud.pump"))
-    @Transactional(rollbackFor = Exception.class)
     public void pumpQueue(@Payload String body) {
         BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
         hospitalLog.setMsgId(IdWorker.getIdStr());
@@ -143,6 +149,7 @@ public class RabbitMqListener {
             log.info("消息队列【cloud.pump】处理消息{}失败,",body,e);
             hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
             hospitalLog.setSuccess(false);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
         long entTime = System.currentTimeMillis();
         hospitalLog.setUseTime(entTime-startTime);
@@ -191,6 +198,7 @@ public class RabbitMqListener {
             log.info("消息队列【cloud.analgesicScore】处理消息{}失败,",body,e);
             hospitalLog.setMessage(ExceptionUtil.getExceptionMsg(e));
             hospitalLog.setSuccess(false);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
         long entTime = System.currentTimeMillis();
         hospitalLog.setUseTime(entTime-startTime);

+ 55 - 53
nb-service/web-service/src/main/java/com/nb/web/service/bus/registry/patient/ClusterPatientRegistry.java

@@ -48,67 +48,69 @@ public class ClusterPatientRegistry implements PatientRegistry {
             return null;
         }
         ClusterPatientOperator patientOperator = new ClusterPatientOperator(patientCode,hospitalId);
-        //设备上传病号
-        if(!patientOperator.getExist()){
-            //将新数据存入数据库
-            BusPatientEntity patient = null;
-            patient = patientService.getOne(new QueryWrapper<BusPatientEntity>()
-                    .lambda().eq(BusPatientEntity::getCode, patientCode)
-                    .eq(BusPatientEntity::getTenantId, hospitalId));
-            boolean insert=false;
-            BusClinicEntity clinic=new BusClinicEntity();
-            if(patient==null){
-                patient=new BusPatientEntity();
-                patient.setOriginCode(patientCode);
-                patient.setCode(patientCode);
-                patient.setTenantId(hospitalId);
-                patient.setId(IdWorker.getIdStr());
+        synchronized (hospitalId+patientCode){
+            //设备上传病号
+            if(!patientOperator.getExist()){
+                //将新数据存入数据库
+                BusPatientEntity patient = null;
+                patient = patientService.getOne(new QueryWrapper<BusPatientEntity>()
+                        .lambda().eq(BusPatientEntity::getCode, patientCode)
+                        .eq(BusPatientEntity::getTenantId, hospitalId));
+                boolean insert=false;
+                BusClinicEntity clinic=new BusClinicEntity();
+                if(patient==null){
+                    patient=new BusPatientEntity();
+                    patient.setOriginCode(patientCode);
+                    patient.setCode(patientCode);
+                    patient.setTenantId(hospitalId);
+                    patient.setId(IdWorker.getIdStr());
 
-                clinic.setPatientId(patient.getId());
-                clinic.setId(IdWorker.getIdStr());
-                clinic.setPatientCode(patientCode);
-                clinic.setTenantId(hospitalId);
-                clinic.setMonitorType(true);
-                clinic.setMonitorStartTime(Value.simple(params.get("startTime")).asDate());
-                //当用户不存在时,创建用户,并给与用户一个空的临床信息
-                insert=true;
+                    clinic.setPatientId(patient.getId());
+                    clinic.setId(IdWorker.getIdStr());
+                    clinic.setPatientCode(patientCode);
+                    clinic.setTenantId(hospitalId);
+                    clinic.setMonitorType(true);
+                    clinic.setMonitorStartTime(Value.simple(params.get("startTime")).asDate());
+                    //当用户不存在时,创建用户,并给与用户一个空的临床信息
+                    insert=true;
 
-            }else {
-                clinic = clinicService.getById(patient.getClinicId());
-            }
+                }else {
+                    clinic = clinicService.getById(patient.getClinicId());
+                }
 
-            //填充临床信息
-            patient.setClinicId(clinic.getId());
+                //填充临床信息
+                patient.setClinicId(clinic.getId());
 
-            patientOperator.setClinicId(clinic.getId());
-            if(insert){
-                try {
-                    log.info("医院[{}]新增住院号号数据[{}]",hospitalId,patientCode);
-                    clinicService.save(clinic);
-                    patient.setClinicId(clinic.getId());
-                    patientService.save(patient);
-                }catch (DuplicateKeyException e){
-                    log.warn("住院号号重复插入,医院id:[{}],病号:[{}]",hospitalId,patientCode);
-                }
-            }else {
-                //填充输注信息
-                BusInfusionHistoryEntity recentInfusion = infusionService.lastInfusionByPatientCode(hospitalId, patientCode);
-                if(recentInfusion!=null){
-                    patient.setInfusionId(recentInfusion.getId());
-                    clinic.setMonitorStartTime(recentInfusion.getStartTime());
-                    //监护已结束
-                    if(Boolean.TRUE.equals(recentInfusion.getIsUndo())){
-                        clinic.setEndTime(recentInfusion.getUndoTime());
-                        clinic.setFinished(true);
+                patientOperator.setClinicId(clinic.getId());
+                if(insert){
+                    try {
+                        log.info("医院[{}]新增住院号号数据[{}]",hospitalId,patientCode);
+                        clinicService.save(clinic);
+                        patient.setClinicId(clinic.getId());
+                        patientService.save(patient);
+                    }catch (DuplicateKeyException e){
+                        log.warn("住院号号重复插入,医院id:[{}],病号:[{}]",hospitalId,patientCode);
+                    }
+                }else {
+                    //填充输注信息
+                    BusInfusionHistoryEntity recentInfusion = infusionService.lastInfusionByPatientCode(hospitalId, patientCode);
+                    if(recentInfusion!=null){
+                        patient.setInfusionId(recentInfusion.getId());
+                        clinic.setMonitorStartTime(recentInfusion.getStartTime());
+                        //监护已结束
+                        if(Boolean.TRUE.equals(recentInfusion.getIsUndo())){
+                            clinic.setEndTime(recentInfusion.getUndoTime());
+                            clinic.setFinished(true);
+                        }
+                        patientOperator.setBindDeviceId(recentInfusion.getDeviceId());
                     }
-                    patientOperator.setBindDeviceId(recentInfusion.getDeviceId());
+                    clinicService.updateById(clinic);
                 }
-                clinicService.updateById(clinic);
+                patientOperator.setPatientId(patient.getId());
+                patientOperator.setExist(true);
             }
-            patientOperator.setPatientId(patient.getId());
-            patientOperator.setExist(true);
+            return patientOperator;
         }
-        return patientOperator;
     }
 
 

+ 6 - 3
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusClinicService.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.nb.web.api.bean.UndoDeviceConfig;
 import com.nb.web.api.enums.ClinicManageEnum;
 import com.nb.web.api.event.ClinicFinishedEvent;
 import com.nb.web.api.event.ClinicRestartEvent;
@@ -113,8 +114,8 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void finish(String clinicId, String tenantId) {
-        this.finish(Collections.singletonList(clinicId),new Date(),tenantId);
+    public void finish(String clinicId, String tenantId,UndoDeviceConfig undoConfig) {
+        this.finish(Collections.singletonList(clinicId),new Date(),tenantId,undoConfig);
     }
 
     /**
@@ -123,11 +124,12 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
      * @param  finishTime 临床结束时间
      */
     @Transactional(rollbackFor = Exception.class)
-    public void finish(List<String> clinicIds,Date finishTime, String tenantId) {
+    public void finish(List<String> clinicIds, Date finishTime, String tenantId, UndoDeviceConfig undoConfig) {
         log.info("结束临床{}管理", JSONUtil.toJsonStr(clinicIds));
         this.update(new UpdateWrapper<BusClinicEntity>().lambda()
                 .in(BusClinicEntity::getId,clinicIds)
                 .set(BusClinicEntity::getFinished,true)
+                .set(BusClinicEntity::getUndoConfig,undoConfig,"typeHandler = com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler")
                 .set(BusClinicEntity::getEndTime,finishTime));
         List<BusClinicEntity> clinics = this.listByIds(clinicIds);
         clinics.parallelStream()
@@ -259,6 +261,7 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
     public void update(String id, BusClinicEntity clinic) {
         clinic.setId(id);
         this.updateById(clinic);
+        wsPublishUtils.publishPatientMonitor(clinic.getPatientId(),clinic.getTenantId());
     }
 
     public ClinicStatsReturnResult stats(ClinicStatsVo statsVo) {

+ 2 - 2
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusInfusionHistoryService.java

@@ -163,7 +163,7 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
             //批量结束临床
             Map<String, List<ManualUndoConfig>> configsMap = undoConfigs.stream().collect(Collectors.groupingBy(ManualUndoConfig::getTenantId));
             configsMap.forEach((tenantId,undoConfig)-> {
-                clinicService.finish(undoConfig.stream().map(ManualUndoConfig::getClinicId).collect(Collectors.toList()),undoConfig.get(0).getUndo().getUndoTime() ,tenantId);
+                clinicService.finish(undoConfig.stream().map(ManualUndoConfig::getClinicId).collect(Collectors.toList()),undoConfig.get(0).getUndo().getUndoTime() ,tenantId,undoConfig.get(0).getUndo());
             });
         }
     }
@@ -237,7 +237,7 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
                     .lambda()
                     .eq(BusPatientEntity::getId,patient.getId())
                     .set(BusPatientEntity::getAlarm,PatientAlarmEnum.NONE));
-            clinicService.finish(manualUndoConfig.getClinicId(),manualUndoConfig.getTenantId());
+            clinicService.finish(manualUndoConfig.getClinicId(),manualUndoConfig.getTenantId(),undo);
         }
     }
 

+ 27 - 25
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -237,32 +237,34 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      */
     @Transactional(rollbackFor = Exception.class)
     public BusPatientEntity getOneByHospitalAndPatientCode(String tenantId, String patientCode) {
-        BusPatientEntity patient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda()
-                .eq(BusPatientEntity::getTenantId, tenantId)
-                .eq(BusPatientEntity::getCode, patientCode));
-        // 如果患者不存在则新增一个患者
-        if (Objects.isNull(patient)) {
-            patient = new BusPatientEntity();
-            patient.setTenantId(tenantId);
-            patient.setCode(patientCode);
-            patient.setOriginCode(patientCode);
-            patient.setId(IdWorker.getIdStr());
-
-            BusClinicEntity clinic=new BusClinicEntity();
-            clinic.setPatientId(patient.getId());
-            clinic.setId(IdWorker.getIdStr());
-            clinic.setPatientCode(patientCode);
-            clinic.setPatientId(patient.getId());
-            clinic.setTenantId(tenantId);
-            clinic.setMonitorType(true);
-            clinic.setMonitorStartTime(new Date());
-
-            patient.setClinicId(clinic.getId());
-
-            this.save(patient);
-            clinicService.save(clinic);
+        synchronized (tenantId+patientCode){
+            BusPatientEntity patient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda()
+                    .eq(BusPatientEntity::getTenantId, tenantId)
+                    .eq(BusPatientEntity::getCode, patientCode));
+            // 如果患者不存在则新增一个患者
+            if (Objects.isNull(patient)) {
+                patient = new BusPatientEntity();
+                patient.setTenantId(tenantId);
+                patient.setCode(patientCode);
+                patient.setOriginCode(patientCode);
+                patient.setId(IdWorker.getIdStr());
+
+                BusClinicEntity clinic=new BusClinicEntity();
+                clinic.setPatientId(patient.getId());
+                clinic.setId(IdWorker.getIdStr());
+                clinic.setPatientCode(patientCode);
+                clinic.setPatientId(patient.getId());
+                clinic.setTenantId(tenantId);
+                clinic.setMonitorType(true);
+                clinic.setMonitorStartTime(new Date());
+
+                patient.setClinicId(clinic.getId());
+
+                this.save(patient);
+                clinicService.save(clinic);
+            }
+            return patient;
         }
-        return patient;
     }
 
     /**