A17404李放 3 лет назад
Родитель
Сommit
ff873a7ce6

+ 2 - 1
coffee-common/src/main/java/com/coffee/common/cache/value/SimpleValue.java

@@ -113,7 +113,8 @@ public class SimpleValue implements Value {
                 String strVal = String.valueOf(source);
                 T[] enumConstants = targetClass.getEnumConstants();
                 for (T enumConstant : enumConstants) {
-                    if (( (Enum)enumConstant).ordinal()==Integer.valueOf(String.valueOf(source))) {
+                    if (String.valueOf(source).equals(( (Enum)enumConstant).ordinal())
+                    ||String.valueOf(source).equals(( (Enum)enumConstant).name())) {
                         return enumConstant;
                     }
                 }

+ 17 - 1
coffee-framework/src/main/java/com/coffee/framework/config/WebAppMvcConfig.java

@@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.StringSerializer;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.context.annotation.Configuration;
@@ -55,7 +56,22 @@ public class WebAppMvcConfig implements WebMvcConfigurer {
 
         SimpleModule booleanSimpleModule = new SimpleModule();
         booleanSimpleModule.addSerializer(Boolean.class, new BooleanToIntegerSerializer());
-        booleanSimpleModule.addSerializer(Boolean.TYPE, new BooleanToIntegerSerializer());
+        booleanSimpleModule.addDeserializer(Boolean.class, new StdScalarDeserializer<Boolean>(Object.class) {
+            @Override
+            public Boolean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+                String text = p.getText();
+                if (StrUtil.isBlank(text)) {
+                    return null;
+                }
+                String lowerCase = text.toLowerCase();
+                if("true".equals(lowerCase)||"1".equals(lowerCase)){
+                    return Boolean.TRUE;
+                }else if("false".equals(lowerCase)||"0".equals(lowerCase)){
+                    return Boolean.FALSE;
+                }
+                return null;
+            }
+        });
 
         SimpleModule stringModule = new SimpleModule();
         stringModule.addSerializer(String.class,new StringSerializer());

+ 0 - 10
coffee-system/src/main/java/com/coffee/bus/controller/BusPatientController.java

@@ -254,16 +254,6 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     }
 
 
-//    @PostMapping("/edit")
-//    @SaCheckPermission("device:patient:edit")
-//    @ApiOperation(value = "编辑病人当前手术信息",notes = "编辑病人信息及病人当前手术信息,权限标识为【device:patient:edit】")
-//    public R edit(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId,@RequestBody@Validated(GenericEntity.Update.class) BusClinicEntity clinic){
-//        clinic.setTenantId(tenantId);
-//        patientService.manualEdit(clinic);
-//        return R.success(true);
-//    }
-
-
     @GetMapping("/monitor/{monitorType}/{clinicId}")
     @SaCheckPermission("device:patient:query")
     @ApiOperation(value = "查看病人当前监控详情",notes = "查看病人当前监控详情,权限标识为【device:patient:query】")

+ 4 - 1
coffee-system/src/main/java/com/coffee/bus/entity/BusInfusionHistoryEntity.java

@@ -137,10 +137,13 @@ public class BusInfusionHistoryEntity extends CommonDeviceParam<String,String> {
         entity.setAlarm(running.getAlarm());
 
         //若当前临床信息不存在,则将时间戳置为 3000/01/01 01:01:01
-        entity.setClinicStartTime(new Date(32503654861000L));
+        entity.setClinicStartTime(defautClinicStartTime());
         return entity;
     }
 
+    public static Date defautClinicStartTime(){
+        return new Date(32503654861L);
+    }
     /**
      * @author 龙三郎
      * 根据阿里云传回数据的items,设置输注的属性

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java

@@ -261,7 +261,7 @@ public class HisScriptSession {
             hisResponse.setSuccess(true);
             hisResponse.setTimestamp(new Date());
             hisResponse.setPatientCode(request.getPatientCode());
-            for (int i = 0; i < 5; i++) {
+            for (int i = 0; i < 6; i++) {
                 clinicEntity.setId(null);
                 clinicEntity.setMonitorType(true);
                 clinicEntity.setPatientCode(request.getPatientCode());
@@ -294,7 +294,7 @@ public class HisScriptSession {
                 clinicEntity.setFormula(formulaDrugDomain);
                 BusClinicEntity c = new BusClinicEntity();
                 BeanUtil.copyProperties(clinicEntity,c);
-                c.setStartTime(RandomUtil.randomDate(new Date(), DateField.HOUR_OF_DAY,-30,10));
+                c.setStartTime(RandomUtil.randomDate(new Date(), DateField.HOUR_OF_DAY,-100,0));
                 clinic.add(c);
             }
             hisResponse.setContext(JSONUtil.toJsonStr(clinic));

+ 9 - 8
coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/EqualsStrategyHandler.java

@@ -4,6 +4,7 @@ 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.service.LocalBusInfusionHistoryService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -27,6 +28,7 @@ import java.util.List;
 @AllArgsConstructor
 public class EqualsStrategyHandler implements HisAllStrategyHandler {
     private final LocalBusClinicService clinicService;
+    private final LocalBusInfusionHistoryService infusionHistoryService;
     @Override
     public String getId() {
         return "equal";
@@ -44,16 +46,15 @@ public class EqualsStrategyHandler implements HisAllStrategyHandler {
         if(CollectionUtil.isEmpty(source)){
             return;
         }
+        BusClinicEntity clinicEntity = source.get(0);
         log.info("拉取的his手术数量和数据库存储的手术数量相等,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
-        source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
-        target.sort(Comparator.comparing(BusClinicEntity::getStartTime));
+        //从大到小排序
+        source.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
+        target.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
+        if(timeRefresh(source, target)){
+            infusionHistoryService.resetClinicStartTime(clinicEntity.getTenantId(),clinicEntity.getPatientCode());
+        }
         for (int i = 0; i < source.size(); i++) {
-            BusClinicEntity targetClinic= source.get(i);
-            if(i<source.size()-1){
-                targetClinic.setFinished(true);
-            }else {
-                targetClinic.setFinished(false);
-            }
             clinicService.compareFromHis(source.get(i),target.get(i));
         }
     }

+ 22 - 1
coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/HisAllStrategyHandler.java

@@ -1,7 +1,9 @@
 package com.coffee.bus.hospital.his.strategy.all;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
-
+import java.util.*;
 /**
  * @author lifang
  * @version 1.0.0
@@ -10,4 +12,23 @@ import com.coffee.bus.hospital.his.strategy.HisStrategyHandler;
  * @createTime 2022年05月12日 14:55:00
  */
 public interface HisAllStrategyHandler extends HisStrategyHandler {
+    /**
+     * 描述: 判断所给数组中是否出现了开始时间不相等的情况
+     * @author lifang
+     * @date 2022/5/22 15:25
+     * @param source
+     * @param target
+     * @return boolean
+     */
+    default boolean timeRefresh(List<BusClinicEntity> source,List<BusClinicEntity> target){
+        if(CollectionUtil.size(source)!=CollectionUtil.size(target)){
+            return true;
+        }
+        for (int i = 0; i < source.size(); i++) {
+            if (!source.get(i).getStartTime().equals(target.get(i).getStartTime())) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/LessToMoreHisStrategyHandler.java

@@ -46,9 +46,9 @@ public class LessToMoreHisStrategyHandler implements HisAllStrategyHandler {
         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();
-        for (int i = 0; i < source.size(); i++) {
-            clinicService.compareFromHis(source.get(i),target.get(subSize+i));
+        int totalSize = source.size();
+        for (; totalSize >0; totalSize--) {
+            clinicService.compareFromHis(source.get(totalSize-1),target.get(totalSize-1));
         }
     }
 

+ 27 - 10
coffee-system/src/main/java/com/coffee/bus/hospital/his/strategy/all/MoreToLessHisStrategyHandler.java

@@ -4,6 +4,7 @@ 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.service.LocalBusInfusionHistoryService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -26,6 +27,7 @@ import java.util.*;
 @AllArgsConstructor
 public class MoreToLessHisStrategyHandler implements HisAllStrategyHandler {
     private final LocalBusClinicService clinicService;
+    private final LocalBusInfusionHistoryService infusionHistoryService;
     @Override
     public String getId() {
         return "more-to-less";
@@ -43,26 +45,41 @@ public class MoreToLessHisStrategyHandler implements HisAllStrategyHandler {
             return;
         }
         log.info("拉取his数据多于数据库数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
-        //所有按照从小到大排序
-        source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
+        //按照开始时间大到小排序
+        source.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
         List<BusClinicEntity> insert=new LinkedList<>();
+        int subSize = CollectionUtil.size(source) - CollectionUtil.size(target);
         if (CollectionUtil.isEmpty(target)) {
             //所有的source都为新增
             insert.addAll(source);
         }else {
-            target.sort(Comparator.comparing(BusClinicEntity::getStartTime));
+            target.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
+            List<BusClinicEntity> compareSub = source.subList(subSize,CollectionUtil.size(source));
+            if(timeRefresh(compareSub,target)){
+                infusionHistoryService.resetClinicStartTime(CollectionUtil.getFirst(compareSub.iterator()).getTenantId(),CollectionUtil.getFirst(compareSub.iterator()).getPatientCode());
+            }
             //对比修改临床信息
             int start=0;
-            for (; start < target.size(); start++) {
-                clinicService.compareFromHis(source.get(start),target.get(start));
+            for (; start < compareSub.size(); start++) {
+                BusClinicEntity targetClinic = target.get(start);
+                targetClinic.setFinished(true);
+                clinicService.compareFromHis(compareSub.get(start),targetClinic);
             }
-            insert.addAll(source.subList(start,source.size()));
-        }
-        //按照开始时间从大到小排序
-        CollectionUtil.reverse(insert);
+            insert.addAll(source.subList(0,subSize));}
         //新增临床信息
+        for (int i = 0; i < insert.size(); i++) {
+            if(i!=0){
+                insert.get(i).setFinished(true);
+            }else {
+                insert.get(i).setFinished(false);
+            }
+            insert.get(i).setMonitorType(true);
+        }
         insert.forEach(clinicService::insertFromHis);
-        clinicService.setCurrentClinicByHis(insert.get(0));
+        clinicService.setCurrentClinicByHis( CollectionUtil.getFirst(insert.iterator()));
+        System.out.println(1 / 0);
+
+
     }
 
     @Override

+ 7 - 5
coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java

@@ -54,6 +54,12 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
     private WsPublishUtils wsPublishUtils;
     @Override
     public void validateBeforeSave(BusClinicEntity entity) {
+        if(entity.getMonitorStartTime()==null){
+            entity.setMonitorStartTime(new Date());
+        }
+        if(entity.getStartTime()==null){
+            entity.setStartTime(entity.getMonitorStartTime());
+        }
 
     }
 
@@ -124,6 +130,7 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
         Assert.notNull(source.getStartTime(),"LocalBusClinicService.compareFromHis方法调用时,source参数startTime不能为空");
         Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.compareFromHis方法调用时,source参数surgeName不能为空");
         source.setId(target.getId());
+        source.setFinished(target.getFinished());
         this.updateById(source);
         //手术开始时间发生变化,重新计算输注数据
         if(source.getStartTime()!=null&&source.getStartTime()!=target.getStartTime()){
@@ -145,11 +152,6 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
         Assert.hasText(source.getTenantId(),"LocalBusClinicService.insertFromHis方法调用时,source参数tenantId不能为空");
         Assert.hasText(source.getPatientCode(),"LocalBusClinicService.insertFromHis方法调用时,source参数patientCode不能为空");
         Assert.hasText(source.getSurgeryName(),"LocalBusClinicService.insertFromHis方法调用时,source参数surgeName不能为空");
-        this.update(new UpdateWrapper<BusClinicEntity>()
-                .lambda()
-                .eq(BusClinicEntity::getPatientCode,source.getPatientCode()).eq(BusClinicEntity::getTenantId,source.getTenantId())
-                .eq(BusClinicEntity::getMonitorType,true)
-                .set(BusClinicEntity::getFinished,true));
         this.save(source);
         infusionHistoryService.adjustInfusionByClinic(source.getId(),source.getPatientCode(),source.getTenantId(),source.getStartTime());
     }

+ 13 - 2
coffee-system/src/main/java/com/coffee/bus/service/LocalBusInfusionHistoryService.java

@@ -138,6 +138,13 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
                         .eq(BusInfusionHistoryEntity::getTenantId,hospitalId).eq(BusInfusionHistoryEntity::getPatientCode,patientCode).last("limit 1"));
     }
 
+
+    @Transactional(rollbackFor = Exception.class)
+    public void resetClinicStartTime(String tenantId,String patientCode){
+        this.update(new UpdateWrapper<BusInfusionHistoryEntity>().lambda().eq(BusInfusionHistoryEntity::getTenantId,tenantId)
+                .eq(BusInfusionHistoryEntity::getPatientCode,patientCode)
+                .set(BusInfusionHistoryEntity::getClinicStartTime,BusInfusionHistoryEntity.defautClinicStartTime()));
+    }
     /**
      * 描述: 通过临床手术的开始时间调整输注信息所绑定的手术信息
      * @author lifang
@@ -159,8 +166,8 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
                 .lambda()
                 .eq(BusInfusionHistoryEntity::getTenantId, tenantId)
                 .eq(BusInfusionHistoryEntity::getPatientCode, patientCode)
-                .lt(BusInfusionHistoryEntity::getStartTime, startTime)
-                .gt(BusInfusionHistoryEntity::getClinicStartTime, startTime));
+                .gt(BusInfusionHistoryEntity::getStartTime, startTime)
+                .lt(BusInfusionHistoryEntity::getClinicStartTime, startTime));
         if(CollectionUtil.isNotEmpty(infusionHistories)){
             infusionHistories.sort(Comparator.comparing(BusInfusionHistoryEntity::getStartTime));
             infusionHistories.forEach(infusion-> {
@@ -168,8 +175,12 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
                         infusion.setClinicStartTime(startTime);
                     }
             );
+            this.updateBatchById(infusionHistories);
             clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId)
                     .set(BusClinicEntity::getMonitorStartTime,infusionHistories.get(0).getStartTime()));
+        }else {
+            clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId)
+                    .set(BusClinicEntity::getMonitorStartTime,startTime));
         }
 
     }

+ 3 - 0
coffee-system/src/main/java/com/coffee/bus/service/dto/ClinicAnalInfusionRecord.java

@@ -29,6 +29,9 @@ public class ClinicAnalInfusionRecord extends DeviceProperties<String,String> {
     @ApiModelProperty("是否打印")
     private boolean print;
 
+    @ApiModelProperty(value = "该次输注是否已结束")
+    private Boolean finished;
+
     @ApiModelProperty(value = "当前输注记录数据最后上传时间",readOnly = true,hidden = true)
     private Date lastUploadTime;
 

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

@@ -409,14 +409,14 @@ public class DeviceInfoListener {
         String signHex = busInfusionModify.signParam(sign);
         String infusionParam = deviceOperator.getInfusionParam();
 
-        Boolean clinicFinished = patientOperator.getFinished();
+        BusClinicEntity clinic = clinicService.getById(device.getClinicId());
         //输注参数已发生变化
         if(ObjectUtil.notEqual(signHex,infusionParam)){
             infusionModifyService.save(busInfusionModify);
             device.setInfusionModifyId(busInfusionModify.getId());
             device.setModifyTime(busInfusionModify.getUpdateTime());
             //参数发生变化后,进行判断
-            if(Boolean.TRUE.equals(clinicFinished)&&device.isNewInfusion()){
+            if(clinic!=null&&Boolean.TRUE.equals(clinic.getFinished())&&device.isNewInfusion()){
                 //若临床已结束,则只有新的输注能够进行泵冲突处理
                 handlePatient(device,cacheOperation);
                 clinicService
@@ -428,7 +428,7 @@ public class DeviceInfoListener {
                     wsPublishUtils.publishMonitorTotalCount(device.getTenantId());
                     return null;
                 });
-            } else if(!Boolean.TRUE.equals(clinicFinished)){
+            } else if(clinic!=null&&!Boolean.TRUE.equals(clinic.getFinished())){
                 handlePatient(device,cacheOperation);
             }
             cacheOperation.add(()->{

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

@@ -48,7 +48,7 @@ public class HisInfoListener {
         if(CollectionUtil.isEmpty(sources)){
             return;
         }
-        try {
+//        try {
             BusHospitalEntity hospital = hospitalService.getById(hospitalId);
             HisStrategyManager<? extends HisStrategyHandler> hisStrategyManager = managerRegister.get(hospital.getStrategy());
 
@@ -65,10 +65,10 @@ public class HisInfoListener {
                     //找到第一个匹配的处理器进行处理
                     .findFirst()
                     .ifPresent(handler-> handler.handle(sources,target));
-        } catch (Exception e){
-            log.error("解析his数据时出错,解析后数据:{},错误原因,{}",JSONUtil.toJsonStr(infoEvent),e.getLocalizedMessage());
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-        }
+//        } catch (Exception e){
+//            log.error("解析his数据时出错,解析后数据:{},错误原因,{}",JSONUtil.toJsonStr(infoEvent),e.getLocalizedMessage());
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//        }
 
     }
 }