Browse Source

add 增加his数据处理日志
fix 输注显示参数以临床数据为主

A17404李放 3 years ago
parent
commit
39026fb56e
18 changed files with 227 additions and 74 deletions
  1. 49 4
      coffee-admin/src/test/java/com/coffee/admin/BusPatientTest.java
  2. 9 0
      coffee-system/src/main/java/com/coffee/bus/controller/BusHospitalController.java
  3. 4 0
      coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalEntity.java
  4. 4 4
      coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyEnum.java
  5. 1 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManager.java
  6. 36 0
      coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManagerRegister.java
  7. 2 0
      coffee-system/src/main/java/com/coffee/bus/his/strategy/all/EqualsStrategyHandler.java
  8. 1 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/all/HisAllStrategyManager.java
  9. 5 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/all/LessToMoreHisStrategyHandler.java
  10. 6 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/all/MoreToLessHisStrategyHandler.java
  11. 5 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/DefaultHisNewStrategyHandler.java
  12. 3 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/HisNewStrategyManager.java
  13. 7 2
      coffee-system/src/main/java/com/coffee/bus/his/strategy/part/DefaultHisPartStrategyHandler.java
  14. 3 1
      coffee-system/src/main/java/com/coffee/bus/his/strategy/part/HisPartStrategyManager.java
  15. 38 6
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java
  16. 9 9
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java
  17. 33 30
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java
  18. 12 12
      coffee-system/src/main/resources/mapper/bus/BusPatientMapper.xml

+ 49 - 4
coffee-admin/src/test/java/com/coffee/admin/BusPatientTest.java

@@ -1,18 +1,23 @@
 package com.coffee.admin;
 
+import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.RandomUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.coffee.bus.controller.BusDeviceManualController;
 import com.coffee.bus.controller.vo.DeviceManualVo;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusDeviceManualEntity;
 import com.coffee.bus.entity.BusPatientEntity;
 import com.coffee.bus.enums.DeviceManualEnum;
+import com.coffee.bus.his.strategy.all.EqualsStrategyHandler;
+import com.coffee.bus.his.strategy.all.HisAllStrategyHandler;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.bus.service.dto.PatientDeviceRepeatResult;
 import com.coffee.common.enums.SexEnum;
+import org.hibernate.validator.constraints.Length;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,10 +26,8 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -42,6 +45,8 @@ public class BusPatientTest {
     @Autowired
     private LocalBusClinicService clinicService;
 
+    @Autowired
+    private EqualsStrategyHandler equalsStrategyHandler;
     @Autowired
     private BusDeviceManualController manualController;
     @Test
@@ -82,6 +87,45 @@ public class BusPatientTest {
         }
     }
 
+    @Test
+    public void fill(){
+        List<BusClinicEntity> clinicList = clinicService.list(new QueryWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getMonitorType, true));
+        Map<String, List<BusClinicEntity>> groupByHospital = clinicList.stream().collect(Collectors.groupingBy(BusClinicEntity::getTenantId));
+        groupByHospital.forEach((tenantId,list)->{
+            Map< String, List<BusClinicEntity>> groupByPatientCode = list.stream().collect(Collectors.groupingBy(BusClinicEntity::getPatientCode));
+            groupByPatientCode.forEach((k,targets)->{
+                List<BusClinicEntity> source = new ArrayList<>();
+                for (BusClinicEntity target : targets) {
+                    BusClinicEntity clinic = new BusClinicEntity();
+                    clinic.setStartTime(target.getStartTime()==null?
+                            RandomUtil.randomDate(DateUtil.beginOfMonth(new Date()), DateField.HOUR,-30,30):target.getStartTime());
+                    clinic.setName(clinicNames.get(RandomUtil.randomInt(clinicNames.size()-1)));
+                    clinic.setPatientName(getName());
+                    clinic.setPatientGender(EnumUtil.likeValueOf(SexEnum.class,RandomUtil.randomInt(1,2)));
+                    clinic.setBedNo(target.getBedNo());
+                    clinic.setWard(target.getWard());
+                    clinic.setWeight(String.valueOf(RandomUtil.randomInt(90,150)));
+                    clinic.setWeight(String.valueOf(RandomUtil.randomInt(150,200)));
+                    clinic.setAnaDoctor(getName());
+                    clinic.setAnaType(anaTypes.get(RandomUtil.randomInt(anaTypes.size()-1)));
+                    clinic.setAnalType(analTypes.get(RandomUtil.randomInt(analTypes.size()-1)));
+                    clinic.setSurgeryDoctor(getName());
+                    clinic.setConfigPerson(getName());
+                    clinic.setPatientCode(target.getPatientCode());
+                    clinic.setMonitorType(true);
+                    clinic.setTenantId("1");
+                    source.add(clinic);
+                }
+                equalsStrategyHandler.handle(source,targets);
+            });
+
+        });
+
+    }
+    public void fillPatientCode(){
+        List<BusPatientEntity> list = patientService.list();
+    }
+
     @Test
     public void manualSave(){
         for (int i = 0; i < 30; i++) {
@@ -89,6 +133,7 @@ public class BusPatientTest {
             BusClinicEntity clinic = new BusClinicEntity();
             clinic.setStartTime(new Date());
             clinic.setName(clinicNames.get(RandomUtil.randomInt(clinicNames.size()-1)));
+            clinic.setPatientAge(RandomUtil.randomInt(15,50));
             clinic.setPatientName(getName());
             clinic.setPatientGender(EnumUtil.likeValueOf(SexEnum.class,RandomUtil.randomInt(1,2)));
             clinic.setBedNo(String.valueOf(RandomUtil.randomInt(10,100)));

+ 9 - 0
coffee-system/src/main/java/com/coffee/bus/controller/BusHospitalController.java

@@ -1,6 +1,8 @@
 package com.coffee.bus.controller;
 
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaMode;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.coffee.bus.bean.Script;
 import com.coffee.bus.entity.BusHospitalEntity;
@@ -62,4 +64,11 @@ public class BusHospitalController extends BaseCrudController<BusHospitalEntity,
     public R debug(@PathVariable("id") String id,@RequestBody String param){
         return R.success( scriptManager.lookUpHospital(id).exec(param));
     }
+
+    @PostMapping("/validate")
+    @SaCheckPermission(mode = SaMode.OR,value = {"bus:hospital:edit","bus:hospital:add"})
+    @ApiOperation(value = "校验医院名称是否重复",notes = "权限【bus:hospital:edit 或 bus:hospital:edit】")
+    public R<Boolean> validate(@RequestBody String name){
+        return R.success(this.hospitalService.validateName(name));
+    }
 }

+ 4 - 0
coffee-system/src/main/java/com/coffee/bus/entity/BusHospitalEntity.java

@@ -3,6 +3,7 @@ package com.coffee.bus.entity;
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.coffee.bus.bean.Script;
+import com.coffee.bus.his.strategy.HisStrategyEnum;
 import com.coffee.common.entity.RecordCreationEntity;
 import com.coffee.common.entity.RecordModifierEntity;
 import io.swagger.annotations.ApiModel;
@@ -111,6 +112,9 @@ public class BusHospitalEntity implements RecordModifierEntity, RecordCreationEn
     @TableField(fill = FieldFill.INSERT)
     private String createBy;
 
+    @ApiModelProperty("接受his数据的策略, 1(默认)、获取病人全部信息 2、获取病人部分信息 3、获取病人最新信息")
+    private HisStrategyEnum strategy;
+
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private String updateBy;
 

+ 4 - 4
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyEnum.java

@@ -14,10 +14,10 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum  HisStrategyEnum  implements IEnum<Integer> {
-
-    NEW(1,"只拉取最新的病人数据"),
-    PART(2,"拉取部分病人数据"),
-    ALL(3,"拉取所有的病人数据,(例、最新三个月)"),;
+    ALL(1,"拉取所有的病人数据"),
+    PART(2,"拉取部分病人数据(例、最新三个月)"),
+    NEW(3,"只拉取最新的病人数据"),
+    ;
 
     private Integer value;
     private String text;

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManager.java

@@ -26,5 +26,5 @@ public interface HisStrategyManager<T extends HisStrategyHandler> {
      * @param
      * @return List<HisStrategyHandler>
      */
-    List<T> getStrategies();
+    List<T> getHandlers();
 }

+ 36 - 0
coffee-system/src/main/java/com/coffee/bus/his/strategy/HisStrategyManagerRegister.java

@@ -0,0 +1,36 @@
+package com.coffee.bus.his.strategy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HisStrategyManagerRegister.java
+ * @Description his策略管理注册器
+ * @createTime 2022年05月12日 16:30:00
+ */
+@Component
+public class HisStrategyManagerRegister {
+    private Map<HisStrategyEnum,HisStrategyManager<? extends HisStrategyHandler>> map=new HashMap<>();
+
+    @Autowired
+    public HisStrategyManagerRegister(List<HisStrategyManager<? extends HisStrategyHandler>> strategyManagers) {
+        strategyManagers.forEach(manager->{
+            map.merge(manager.getType(),manager,(o1,o2)->{
+                throw new RuntimeException(String.format("his数据处理策略管理器唯一,不可重复[%s]",o1.getType()));
+            });
+        });
+    }
+
+    public HisStrategyManager<? extends HisStrategyHandler> get(HisStrategyEnum strategyEnum){
+        if(strategyEnum==null){
+            //采用默认处理器
+            strategyEnum=HisStrategyEnum.ALL;
+        }
+        HisStrategyManager<? extends HisStrategyHandler> manager = map.get(strategyEnum);
+        return manager==null?map.get(HisStrategyEnum.ALL):manager;
+    }
+}

+ 2 - 0
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/EqualsStrategyHandler.java

@@ -1,6 +1,7 @@
 package com.coffee.bus.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.his.strategy.HisStrategyHandler;
@@ -44,6 +45,7 @@ public class EqualsStrategyHandler implements HisAllStrategyHandler {
         if(CollectionUtil.isEmpty(source)){
             return;
         }
+        log.info("拉取的his手术数量和数据库存储的手术数量相等,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
         source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         target.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         for (int i = 0; i < source.size(); i++) {

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/HisAllStrategyManager.java

@@ -30,7 +30,7 @@ public class HisAllStrategyManager  implements HisStrategyManager<HisAllStrategy
     }
 
     @Override
-    public List<HisAllStrategyHandler> getStrategies() {
+    public List<HisAllStrategyHandler> getHandlers() {
         return handlers;
     }
 }

+ 5 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/LessToMoreHisStrategyHandler.java

@@ -1,10 +1,12 @@
 package com.coffee.bus.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.his.strategy.HisStrategyHandler;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -22,6 +24,7 @@ import java.util.List;
  */
 @AllArgsConstructor
 @Component
+@Slf4j
 public class LessToMoreHisStrategyHandler implements HisAllStrategyHandler {
     private final LocalBusClinicService clinicService;
     @Override
@@ -31,7 +34,7 @@ public class LessToMoreHisStrategyHandler implements HisAllStrategyHandler {
 
     @Override
     public String getDescription() {
-        return "his拉取数据少于数据库数据";
+        return "拉取his数据少于数据库数据";
     }
 
     @Override
@@ -41,6 +44,7 @@ public class LessToMoreHisStrategyHandler implements HisAllStrategyHandler {
         if(CollectionUtil.isEmpty(source)){
             return;
         }
+        log.info("拉取his数据少于数据库数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
         source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         target.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         int subSize = target.size() - source.size();

+ 6 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/all/MoreToLessHisStrategyHandler.java

@@ -1,6 +1,7 @@
 package com.coffee.bus.his.strategy.all;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
 import com.coffee.bus.his.strategy.HisStrategyHandler;
@@ -33,12 +34,16 @@ public class MoreToLessHisStrategyHandler implements HisAllStrategyHandler {
 
     @Override
     public String getDescription() {
-        return "his拉取数据多于数据库数据";
+        return "拉取his数据多于数据库数据";
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void handle(List<BusClinicEntity> source, List<BusClinicEntity> target) {
+        if(CollectionUtil.isEmpty(source)){
+            return;
+        }
+        log.info("拉取his数据多于数据库数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
         //所有按照从小到大排序
         source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         List<BusClinicEntity> insert=new LinkedList<>();

+ 5 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/DefaultHisNewStrategyHandler.java

@@ -1,9 +1,11 @@
 package com.coffee.bus.his.strategy.onlynew;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.service.LocalBusClinicService;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
@@ -20,6 +22,7 @@ import java.util.List;
  */
 @Component
 @AllArgsConstructor
+@Slf4j
 public class DefaultHisNewStrategyHandler implements HisNewStrategyHandler {
     private final LocalBusClinicService clinicService;
     @Override
@@ -29,7 +32,7 @@ public class DefaultHisNewStrategyHandler implements HisNewStrategyHandler {
 
     @Override
     public String getDescription() {
-        return "his只提供最新的一跳病人数据,对其进行处理";
+        return "拉取his只获取最新的一跳病人数据,对其进行处理";
     }
 
     @Override
@@ -38,6 +41,7 @@ public class DefaultHisNewStrategyHandler implements HisNewStrategyHandler {
         if(CollectionUtil.isEmpty(source)){
             return;
         }
+        log.info("\"拉取his只获取最新的一跳病人数据,对其进行处理\",拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
         //是否插入新的数据
         boolean insert=true;
         //是否为设置为当前的临床数据

+ 3 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/onlynew/HisNewStrategyManager.java

@@ -3,6 +3,7 @@ package com.coffee.bus.his.strategy.onlynew;
 import com.coffee.bus.his.strategy.HisStrategyEnum;
 import com.coffee.bus.his.strategy.HisStrategyManager;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -16,6 +17,7 @@ import java.util.List;
  */
 @Component
 @AllArgsConstructor
+@Slf4j
 public class HisNewStrategyManager implements HisStrategyManager<HisNewStrategyHandler> {
     private final List<HisNewStrategyHandler> handlers;
     @Override
@@ -24,7 +26,7 @@ public class HisNewStrategyManager implements HisStrategyManager<HisNewStrategyH
     }
 
     @Override
-    public List<HisNewStrategyHandler> getStrategies() {
+    public List<HisNewStrategyHandler> getHandlers() {
         return handlers;
     }
 }

+ 7 - 2
coffee-system/src/main/java/com/coffee/bus/his/strategy/part/DefaultHisPartStrategyHandler.java

@@ -1,11 +1,13 @@
 package com.coffee.bus.his.strategy.part;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.his.strategy.all.HisAllStrategyHandler;
 import com.coffee.bus.his.strategy.onlynew.HisNewStrategyHandler;
 import com.coffee.bus.service.LocalBusClinicService;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -20,6 +22,7 @@ import java.util.List;
  * @createTime 2022年05月12日 15:01:00
  */
 @Component
+@Slf4j
 @AllArgsConstructor
 public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
     private final LocalBusClinicService clinicService;
@@ -31,7 +34,7 @@ public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
 
     @Override
     public String getDescription() {
-        return "his只提供一部分病人数据(如,最近3个月),对其进行处理";
+        return "拉取his只获取一部分病人数据(如,最近3个月),对其进行处理";
     }
 
     @Override
@@ -40,6 +43,7 @@ public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
         if(CollectionUtil.isEmpty(source)){
             return;
         }
+        log.info("拉取his只获取一部分病人数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
         source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
         if(CollectionUtil.isEmpty(target)){
             //只插入
@@ -74,10 +78,11 @@ public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
 
     }
 
-    public void insert(List<BusClinicEntity> source){
+    private void insert(List<BusClinicEntity> source){
         source.forEach(clinicService::insertFromHis);
         clinicService.setCurrentClinicByHis(source.get(source.size()-1));
     }
+
     @Override
     public boolean apply(List<BusClinicEntity> source, List<BusClinicEntity> target) {
         return CollectionUtil.isNotEmpty(source);

+ 3 - 1
coffee-system/src/main/java/com/coffee/bus/his/strategy/part/HisPartStrategyManager.java

@@ -3,6 +3,7 @@ package com.coffee.bus.his.strategy.part;
 import com.coffee.bus.his.strategy.HisStrategyEnum;
 import com.coffee.bus.his.strategy.HisStrategyManager;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -15,6 +16,7 @@ import java.util.List;
  * @createTime 2022年05月12日 14:50:00
  */
 @Component
+@Slf4j
 @AllArgsConstructor
 public class HisPartStrategyManager implements HisStrategyManager<HisPartStrategyHandler> {
     private final List<HisPartStrategyHandler> handlers;
@@ -24,7 +26,7 @@ public class HisPartStrategyManager implements HisStrategyManager<HisPartStrateg
     }
 
     @Override
-    public List<HisPartStrategyHandler> getStrategies() {
+    public List<HisPartStrategyHandler> getHandlers() {
         return handlers;
     }
 }

+ 38 - 6
coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java

@@ -1,18 +1,23 @@
 package com.coffee.bus.service;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.coffee.bus.entity.BusHospitalEntity;
+import com.coffee.bus.his.strategy.HisStrategyEnum;
 import com.coffee.bus.mapper.BusHospitalMapper;
 import com.coffee.common.config.mybatis.GetNameInterface;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.exception.CustomException;
+import org.hibernate.validator.constraints.Length;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -24,10 +29,16 @@ import java.util.stream.Collectors;
  */
 @Service
 public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String> {
-    private static Map<String,String> hospitalMap=new HashMap<>();
+    private static Map<String,BusHospitalEntity> hospitalMap=new HashMap<>();
     @Override
     public void validateBeforeSave(BusHospitalEntity entity) {
-
+         String name = entity.getName();
+         if(validateName(name)){
+             throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
+         }
+         if(entity.getStrategy()==null){
+             entity.setStrategy(HisStrategyEnum.ALL);
+         }
     }
 
     @Override
@@ -35,6 +46,15 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
         if("1".equals(entity.getId())){
             throw new CustomException("系统级医院,不可修改");
         }
+        BusHospitalEntity hospital = this.getById(entity.getName());
+        if(hospital==null){
+            return;
+        }
+        if (ObjectUtil.equal(entity.getName(), hospital.getName())) {
+            if(validateName(entity.getName())){
+                throw new CustomException(String.format("医院名称[%s]不可重复",entity.getName()));
+            }
+        }
     }
 
     @Override
@@ -46,12 +66,12 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
 
     @Override
     public void postSave(BusHospitalEntity entity) {
-        hospitalMap.put(entity.getId(),entity.getName());
+        hospitalMap.put(entity.getId(),entity);
     }
 
     @Override
     public void postUpdate(BusHospitalEntity entity) {
-        hospitalMap.put(entity.getId(),entity.getName());
+        hospitalMap.put(entity.getId(),entity);
     }
 
     @Override
@@ -65,7 +85,7 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
         List<BusHospitalEntity> hospitalList = this.list();
         if(CollectionUtil.isNotEmpty(hospitalList)){
             Map<String, List<BusHospitalEntity>> collect = hospitalList.stream().collect(Collectors.groupingBy(BusHospitalEntity::getId));
-            collect.forEach((k,v)->hospitalMap.put(k,v.get(0).getName()));
+            collect.forEach((k,v)->hospitalMap.put(k,v.get(0)));
         }
     }
 
@@ -75,9 +95,10 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
         if(StrUtil.isAllBlank(id)){
             return "";
         }
-        return hospitalMap.get(id);
+        return Optional.ofNullable(hospitalMap.get(id)).orElse(new BusHospitalEntity()).getName();
     }
 
+
     private void saveDefaultHospital(){
         BusHospitalEntity hospital = new BusHospitalEntity();
         hospital.setId("1");
@@ -93,4 +114,15 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
 
         }
     }
+
+    /**
+     * 描述: 医院名称是否有效
+     * @author lifang
+     * @date 2022/5/12 15:42
+     * @param name
+     * @return boolean
+     */
+    public boolean validateName(String name){
+        return this.getOne(new QueryWrapper<BusHospitalEntity>().lambda().eq(BusHospitalEntity::getName,name).last("limit 1"))==null;
+    }
 }

+ 9 - 9
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -49,7 +49,7 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class DeviceInfoListener {
 
-    private final LocalBusDeviceRunningService deviceUsingService;
+    private final LocalBusDeviceRunningService deviceRunningService;
 
     private final DeviceRegistry deviceRegistry;
 
@@ -132,9 +132,9 @@ public class DeviceInfoListener {
                         .set(BusClinicEntity::getBedNo,device.getBedNo())
                         .set(BusClinicEntity::getMonitorStartTime,device.getStartTime())
                 );
-                deviceUsingService.save(device);
+                deviceRunningService.save(device);
             }else {
-                deviceUsingService.updateById(device);
+                deviceRunningService.updateById(device);
             }
             //医院相关配置处理
             handleHospitalConfig(device,cacheOperation);
@@ -270,7 +270,7 @@ public class DeviceInfoListener {
                     .filter(bindDevice -> !deviceId.equals(bindDevice.getDeviceId()))
                     .collect(Collectors.toSet());
             if(CollectionUtil.isEmpty(remainPatientBindDevices)){
-                log.error("病号:【{}】临床发生无泵报警",patientCode);
+                log.warn("病号:【{}】临床发生无泵报警",patientCode);
                 patientService.update(new UpdateWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode,patientCode)
                                 .eq(BusPatientEntity::getTenantId,hospitalId)
 //                        .set(BusPatientEntity::getInfusionId,null)
@@ -291,8 +291,8 @@ public class DeviceInfoListener {
                 );
                 UpdateWrapper<BusPatientEntity> update = new UpdateWrapper<>();
                 if(master.isPresent()){
-                    log.error("病号:[{}],主泵变为[{}]",patientCode,master.get().getDeviceId());
-                    deviceUsingService
+                    log.warn("病号:[{}],主泵变为[{}]",patientCode,master.get().getDeviceId());
+                    deviceRunningService
                             .update(new UpdateWrapper<BusDeviceRunningEntity>().lambda()
                                     .eq(BusDeviceRunningEntity::getDeviceId,master.get().getDeviceId())
                                     .set(BusDeviceRunningEntity::getMaster,true));
@@ -344,14 +344,14 @@ public class DeviceInfoListener {
             DeviceOperator<DeviceCacheInfo> patientCurrentBindDevice = deviceRegistry.getOperator(bindDeviceId);
             Date startTime = patientCurrentBindDevice.getStartTime();
             if (startTime==null||startTime.before(device.getStartTime())) {
-                log.error("病号:[{}],之前主泵为:[{}],现在主泵为:[{}]",device.getPatientCode(),bindDeviceId,deviceId);
+                log.warn("病号:[{}],之前主泵为:[{}],现在主泵为:[{}]",device.getPatientCode(),bindDeviceId,deviceId);
                 //设置当前上传信息的泵为主泵,将旧泵设置为副泵,并更新病人绑定泵的消息 todo 更新缓存信息
                 device.setMaster(true);
-                deviceUsingService.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId,bindDeviceId).set(BusDeviceRunningEntity::getMaster,false));
+                deviceRunningService.update(new UpdateWrapper<BusDeviceRunningEntity>().lambda().eq(BusDeviceRunningEntity::getDeviceId,bindDeviceId).set(BusDeviceRunningEntity::getMaster,false));
             }else {
                 device.setMaster(false);
             }
-            log.error("病号:{}发生了泵重复",device.getPatientCode());
+            log.warn("病号:{}发生了泵重复",device.getPatientCode());
             patientService.update(new UpdateWrapper<BusPatientEntity>().lambda()
                     .eq(BusPatientEntity::getCode,device.getPatientCode())
                     .eq(BusPatientEntity::getTenantId,device.getTenantId())

+ 33 - 30
coffee-system/src/main/java/com/coffee/bus/websocket/listener/HisInfoListener.java

@@ -1,30 +1,22 @@
 package com.coffee.bus.websocket.listener;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.coffee.bus.entity.BusClinicEntity;
-import com.coffee.bus.entity.BusInfusionHistoryEntity;
-import com.coffee.bus.entity.BusPatientEntity;
+import com.coffee.bus.entity.BusHospitalEntity;
+import com.coffee.bus.his.strategy.HisStrategyHandler;
+import com.coffee.bus.his.strategy.HisStrategyManager;
+import com.coffee.bus.his.strategy.HisStrategyManagerRegister;
 import com.coffee.bus.listener.event.bean.HisEvent;
-import com.coffee.bus.registry.patient.PatientOperator;
-import com.coffee.bus.registry.patient.PatientRegistry;
-import com.coffee.bus.registry.patient.bean.DeviceTimeSmallInfo;
-import com.coffee.bus.registry.patient.bean.PatientCacheInfo;
 import com.coffee.bus.service.*;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
-import java.util.Date;
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -35,31 +27,42 @@ import java.util.stream.Collectors;
  */
 @Component
 @Slf4j
+@AllArgsConstructor
 public class HisInfoListener {
+    private final LocalBusPatientService patientService;
 
     private final LocalBusClinicService clinicService;
 
-    private final LocalBusInfusionHistoryService infusionHistoryService;
-
-    private final PatientRegistry patientRegistry;
-
-    private final LocalBusDeviceRunningService deviceRunningService;
-
-    private final LocalBusPatientService patientService;
-
-    public HisInfoListener(LocalBusClinicService clinicService, LocalBusInfusionHistoryService infusionHistoryService, PatientRegistry patientRegistry, LocalBusDeviceRunningService deviceRunningService, LocalBusPatientService patientService) {
-        this.clinicService = clinicService;
-        this.infusionHistoryService = infusionHistoryService;
-        this.patientRegistry = patientRegistry;
-        this.deviceRunningService = deviceRunningService;
-        this.patientService = patientService;
-    }
+    private final LocalBusHospitalService hospitalService;
 
+    private final HisStrategyManagerRegister managerRegister;
 
     @EventListener
     @Transactional(rollbackFor = Exception.class)
     public void historyInfoListener(HisEvent infoEvent){
-        List<BusClinicEntity> clinics = infoEvent.getClinics();
+        List<BusClinicEntity> sources = infoEvent.getClinics();
+        String hospitalId = infoEvent.getHospitalId();
+        String patientCode = infoEvent.getPatientCode();
+        log.info("接收到his发来的数据,{}", JSONUtil.toJsonStr(infoEvent));
+        if(CollectionUtil.isEmpty(sources)){
+            return;
+        }
+        BusHospitalEntity hospital = hospitalService.getById(hospitalId);
+        HisStrategyManager<? extends HisStrategyHandler> hisStrategyManager = managerRegister.get(hospital.getStrategy());
+
+        //todo 处理病人信息
+
+
 
+        List<BusClinicEntity> target = clinicService.list(new QueryWrapper<BusClinicEntity>().lambda()
+                .eq(BusClinicEntity::getPatientCode, patientCode).eq(BusClinicEntity::getTenantId, hospitalId)
+                .eq(BusClinicEntity::getMonitorType, true));
+        hisStrategyManager
+                .getHandlers()
+                .stream()
+                .filter(handler -> handler.apply(sources, target))
+                //找到第一个匹配的处理器进行处理
+                .findFirst()
+                .ifPresent(handler-> handler.handle(sources,target));
     }
 }

+ 12 - 12
coffee-system/src/main/resources/mapper/bus/BusPatientMapper.xml

@@ -93,9 +93,9 @@
     </resultMap>
     <select id="selectRepeatDevice" resultMap="repeatDeviceResult">
                  SELECT
-         p.name,
-         p.gender,
          p.code,
+         c.patient_gender  as gender,
+         c.`patient_name` as name,
          c.patient_age as age,
          c.ward,
          c.bed_no,
@@ -113,12 +113,12 @@
     </select>
     <select id="selectNoneDevice" resultMap="deviceNone">
         SELECT
-         p.name,
-         p.gender,
-         p.code,
+         p.code as code,
+         c.patient_gender as gender,
+         c.`patient_name` as name,
          c.patient_age as age,
-         c.ward,
-         c.bed_no,
+         c.ward as ward,
+         c.bed_no as bed_no,
          c.`name` as clinic_name,
          c.weight as weight,
          c.height as height,
@@ -136,9 +136,7 @@
 
     <select id="selectMonitor" resultMap="monitorResult" parameterType="com.coffee.bus.service.dto.PatientMonitorQuery">
         select
-        p.`name` as patient_name,
         p.`code` as patient_code,
-        p.gender as gender,
         p.alarm as patient_alarm,
         i.device_id as device_id,
         i.clinic_id as clinic_id,
@@ -177,6 +175,8 @@
         i.remark as remark,
         i.type as device_type,
         r.alias as device_alias,
+        c.patient_gender as patient_gender,
+        c.`patient_name` as patient_name,
         c.finished as finished,
         c.monitor_start_time as monitor_start_time,
         c.end_time as monitor_end_time,
@@ -299,10 +299,8 @@
 
     <select id="findByPatientCode" resultMap="monitorResult">
         select
-        p.`name` as patient_name,
-        p.`code` as patient_code,
-        p.gender as gender,
         p.alarm as patient_alarm,
+        p.`code` as patient_code,
         i.device_id as device_id,
         i.clinic_id as clinic_id,
         i.ward as ward,
@@ -341,6 +339,8 @@
         i.type as device_type,
         r.alias as device_alias,
         c.finished as finished,
+        c.`patient_name` as patient_name,
+        c.patient_gender as gender,
         c.monitor_start_time as monitor_start_time,
         c.end_time as monitor_end_time,
         c.ana_doctor as ana_doctor,