Prechádzať zdrojové kódy

新增 兼容lora数据 ,lora数据迁移

18339543638 2 rokov pred
rodič
commit
f7fd9e9fa7

+ 1 - 1
nb-admin/src/main/resources/application.yml

@@ -59,7 +59,7 @@ sa-token:
 logging:
   level:
     springfox: error
-    com.nb: info
+    com.nb: error
   config: classpath:logback-spring.xml
   file:
     path: ./logs

+ 432 - 0
nb-admin/src/test/java/com/nb/admin/converter/LoraDataConverterTest.java

@@ -0,0 +1,432 @@
+package com.nb.admin.converter;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.*;
+import com.nb.admin.AdminApplication;
+import com.nb.core.utils.ThreadUtil;
+import com.nb.mq.entity.PcAnalgesicScoreEntity;
+import com.nb.mq.entity.PcPatientEntity;
+import com.nb.mq.entity.PcPumpEntity;
+import com.nb.mq.listener.RabbitMqListener;
+import com.nb.oss.strategy.FileUtil;
+import com.nb.web.api.feign.IDeviceClient;
+import lombok.Data;
+import org.junit.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.runner.RunWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.python.antlr.ast.Str;
+import org.springframework.beans.factory.annotation.Autowired;
+import  org.springframework.amqp.core.Message;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : LoraDataConverterTest
+ * @Description : lora数据转换对接
+ * @Author : LF
+ * @Date: 2023年03月09日
+ */
+//@ExtendWith(MockitoExtension.class)
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = AdminApplication.class)
+public class LoraDataConverterTest {
+    @Autowired
+    private RabbitMqListener rabbitMqListener;
+    @Autowired
+    private IDeviceClient deviceClient;
+
+    private String receiveRecord="C:\\Users\\JR\\Desktop\\lora数据对接\\ReceiveRecord.json";
+
+    private String patientInfoRecord="C:\\Users\\JR\\Desktop\\lora数据对接\\PatientInfo.json";
+
+    private String evalRecord="C:\\Users\\JR\\Desktop\\lora数据对接\\AnalgesicScore.json";
+    @Test
+    public void insertDeviceData(){
+        String read = IoUtil.read(FileUtil.getReader(cn.hutool.core.io.FileUtil.file(receiveRecord), Charset.defaultCharset()));
+        JSONObject parse = JSONUtil.parseObj(read,true);
+        System.out.println("======================文件读取结束,开始解析======================");
+        JSONArray arrays = parse.getJSONArray("RECORDS");
+        AtomicInteger count=new AtomicInteger(0);
+        Map<String, List<ReceiveRecord>> recordMaps = arrays.parallelStream().map(json -> {
+            return JSONUtil.toBean(json.toString(), ReceiveRecord.class);
+        }).filter(record-> StrUtil.isNotEmpty(record.getPumpCode()))
+                .collect(Collectors.groupingBy(ReceiveRecord::getPumpCode));
+        recordMaps.values()
+                .forEach(records->{
+
+                    System.out.println("======================开始处理设备号 " + CollectionUtil.getLast(records).getPumpCode() + "的数据,共"+records.size()+"条");
+                    boolean newInfusion=false;
+                    for (int i = 0; i < records.size(); i++) {
+                        if(i!=records.size()-1){
+                            ReceiveRecord nextRecord = records.get(i + 1);
+                            ReceiveRecord currentRecord = records.get(i);
+                            if(!ObjectUtil.equals(nextRecord.getStartTime(),currentRecord.getStartTime())||
+                                    StrUtil.equals(currentRecord.getViewState(),"关机")||
+                                    StrUtil.equals(nextRecord.getViewState(),"开机")){
+                                currentRecord.setRemove(false);
+                                newInfusion=StrUtil.equals(nextRecord.getViewState(),"开机");
+                            }
+                        }
+                    }
+                    List<PcPumpEntity> pumpRecords = records.stream().map(ReceiveRecord::toPcPump).sorted(Comparator.comparing(PcPumpEntity::getLastUploadTime)).collect(Collectors.toList());
+                    for (PcPumpEntity pumpRecord : pumpRecords) {
+                        String json = JSONUtil.toJsonPrettyStr(pumpRecord);
+                        Message message = new Message(json.getBytes());
+                        if(pumpRecord.getPatientCode().equals("1111234")){
+                            System.out.println(json);
+                        }
+                        try {
+                            rabbitMqListener.pumpQueue(message,null);
+                            if(newInfusion){
+                                deviceClient.refreshClassification(pumpRecord.getPumpCode());
+                            }
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                        count.incrementAndGet();
+                        System.out.println("=====================已处理" + count.get() + "条数据");
+                    }
+                    System.out.println("======================处理完毕设备号 " + arrays.size() + "的数据,共"+records.size()+"条");
+                });
+        insertPatient();
+        insertEval();
+    }
+
+    @Test
+    public void insertPatient(){
+        String read = IoUtil.read(FileUtil.getReader(cn.hutool.core.io.FileUtil.file(patientInfoRecord), Charset.defaultCharset()));
+        JSONObject parse = JSONUtil.parseObj(read,true);
+        System.out.println("======================文件读取结束,开始解析======================");
+        JSONArray arrays = parse.getJSONArray("RECORDS");
+        AtomicInteger count=new AtomicInteger(0);
+        Map<String, List<PatientInfo>> recordMaps = arrays.parallelStream().map(json -> {
+            return JSONUtil.toBean(json.toString(), PatientInfo.class);
+        }).filter(record-> StrUtil.isNotEmpty(record.getPumpCode()))
+                .collect(Collectors.groupingBy(PatientInfo::getPumpCode));
+        recordMaps.values()
+                .forEach(records->{
+                    System.out.println("======================开始处理住院号 " + CollectionUtil.getLast(records).getPumpCode() + "的数据,共"+records.size()+"条");
+                    List<PcPatientEntity> pumpRecords = records.stream().map(PatientInfo::toPatient).collect(Collectors.toList());
+                    for (PcPatientEntity patient : pumpRecords) {
+                        String json = JSONUtil.toJsonPrettyStr(patient);
+                        Message message = new Message(json.getBytes());
+                        try {
+                            rabbitMqListener.patientQueue(message,null);
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                        count.incrementAndGet();
+                        System.out.println("=====================已处理" + count.get() + "条数据");
+                    }
+                    System.out.println("======================处理完毕住院号 " + arrays.size() + "的数据,共"+records.size()+"条");
+                });
+    }
+
+    @Test
+    public void insertEval(){
+        String read = IoUtil.read(FileUtil.getReader(cn.hutool.core.io.FileUtil.file(evalRecord), Charset.defaultCharset()));
+        JSONObject parse = JSONUtil.parseObj(read,true);
+        System.out.println("======================文件读取结束,开始解析======================");
+        JSONArray arrays = parse.getJSONArray("RECORDS");
+        Map<String, List<EvalInfo>> recordMaps = arrays.parallelStream().map(json -> {
+            return JSONUtil.toBean(json.toString(), EvalInfo.class);
+        }).filter(record-> StrUtil.isNotEmpty(record.getPumpCode()))
+                .collect(Collectors.groupingBy(EvalInfo::getPumpCode));
+        recordMaps.values()
+                .forEach(records->{
+                    System.out.println("======================开始处理住院号 " + CollectionUtil.getLast(records).getPumpCode() + "的数据,共"+records.size()+"条");
+                    List<PcAnalgesicScoreEntity> evalRecords = records.stream().map(EvalInfo::toEval).collect(Collectors.toList());
+                    for (PcAnalgesicScoreEntity evalRecord : evalRecords) {
+                        String json = JSONUtil.toJsonPrettyStr(evalRecord);
+                        Message message = new Message(json.getBytes());
+                        try {
+                            rabbitMqListener.analgesicScoreQueue(message,null);
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                    System.out.println("======================处理完毕住院号 " + arrays.size() + "的数据,共"+records.size()+"条");
+                });
+    }
+
+    @Data
+    public static class EvalInfo{
+        private String Patient_ID;
+        private String USER_2;
+        private Integer RightArm;
+        private String USER_1;
+        private String PatientCode;
+        private String SysProduct_ID;
+        private Integer Satisfaction;
+        private Integer Activity;
+        private Integer BreathDepression;
+        private Integer Vertigo;
+        private Integer Itch;
+        private String Iden_1;
+        private String Iden_2;
+        private Integer Uroschesis;
+        private String FollowUp;
+        private Integer Nausea_Vomit;
+        private Integer Calm;
+        private Integer LeftLeg;
+        private String SysHospital_ID;
+        private String BillDate;
+        private Integer Hoarseness;
+        private Integer SoreThroat;
+        private Integer Cognition_Obstacle;
+        private String AnalgesicScore_ID;
+        private Integer LeftArm;
+        private Integer RightLeg;
+        private String PumpCode;
+        private String Number_2;
+        private String IsDelete;
+        private Integer Static;
+        private String ROWID;
+        private String Other;
+        private BigDecimal SBP;
+        private BigDecimal  DBP;
+        private BigDecimal HR;
+        private BigDecimal RR;
+        private BigDecimal SpO2;
+        public PcAnalgesicScoreEntity toEval(){
+            PcAnalgesicScoreEntity eval = new PcAnalgesicScoreEntity();
+            eval.setPatientId(getPatient_ID());
+            eval.setPumpCode(getPumpCode());
+            eval.setHospitalCode(getSysHospital_ID());
+            eval.setPatientCode(getPatientCode());
+            eval.setStatics(getStatic());
+            eval.setActivity(getActivity());
+            eval.setCalm(getCalm());
+            eval.setLeftArm(getLeftArm());
+            eval.setLeftLeg(getLeftLeg());
+            eval.setRightArm(getRightArm());
+            eval.setRightLeg(getRightLeg());
+            eval.setNauseaVomit(getNausea_Vomit());
+            eval.setItch(getItch());
+            eval.setVertigo(getVertigo());
+            eval.setSoreThroat(getSoreThroat());
+            eval.setUroschesis(getUroschesis());
+            eval.setBreathDepression(getBreathDepression());
+            eval.setHoarseness(getHoarseness());
+            eval.setCognitionObstacle(getCognition_Obstacle());
+            eval.setOther(getOther());
+            eval.setSatisfaction(getSatisfaction());
+            if (StrUtil.isNotEmpty(getBillDate())) {
+                DateTime dateTime = DateUtil.parse(getBillDate(),"dd/MM/yyyy HH:mm:ss");
+                eval.setFollowDate(dateTime);
+            }
+            eval.setCreator(getFollowUp());
+            eval.setProductCode(getSysProduct_ID());
+            eval.setAnalgesicScoreId(getAnalgesicScore_ID());
+            eval.setSBP(getSBP());
+            eval.setDBP(getDBP());
+            eval.setHR(getHR());
+            eval.setRR(getRR());
+            eval.setSpO2(getSpO2());
+            return eval;
+        }
+    }
+
+    @Data
+    public static class PatientInfo{
+        private String Patient_ID;
+        private String USER_2;
+        private String USER_1;
+        private String PatientCode;
+        private String SysProduct_ID;
+        private String Sex;
+        private String Operation;
+        private String Name;
+        private String ASA;
+        private String EaseMode;
+        private String Remark;
+        private String DoctorTwo;
+        private String Formula;
+        private String Salt;
+        private String DestroyPerson;
+        private String BedNo;
+        private String Iden_1;
+        private String Iden_2;
+        private String AnesthesiaMode;
+        private String ConfigPerson;
+        private Integer Age;
+        private String WitnessPerson;
+        private String UndoPerson;
+        private String CreateTime;
+        private String UndoTime;
+        private String SysHospital_ID;
+        private String Doctor;
+        private String Weight;
+        private String Surgeon;
+        private String PumpCode;
+        private String Ward;
+        private String Number_2;
+        private String IsDelete;
+        private String ROWID;
+        private String Balance;
+
+        public PcPatientEntity toPatient(){
+            PcPatientEntity result = new PcPatientEntity();
+            result.setPatientId(getPatient_ID());
+            result.setHospitalCode("43332553109747f3857e1e434e1e2ef3");
+//            result.setHospitalCode(getSysHospital_ID());
+            result.setProductCode(getSysProduct_ID());
+            result.setPatientCode(getPatientCode());
+            result.setPumpCode(getPumpCode());
+            result.setName(getName());
+            result.setSex(getSex());
+            result.setWeight(getWeight());
+            result.setAge(getAge());
+            result.setWardCode(getWard());
+            result.setBedCode(getBedNo());
+            result.setOperationName(getOperation());
+            result.setOperationDoctor(getSurgeon());
+            result.setAsa(getASA());
+            result.setEasyMode(getEaseMode());
+            result.setAnesthesiaDoctor1(getDoctor());
+            result.setAnesthesiaDoctor2(getDoctorTwo());
+            result.setAnesthesiaMode(getAnesthesiaMode());
+            result.setConfigPerson(getConfigPerson());
+//            result.setFormula(getFormula());
+            result.setUndoPerson(getUndoPerson());
+            result.setDestoryPerson(getDestroyPerson());
+            result.setWitnessPerson(getWitnessPerson());
+            if(StrUtil.isNotEmpty(getUndoTime())){
+                DateTime dateTime = DateUtil.parse(getUndoTime(),"dd/MM/yyyy HH:mm:ss");
+                result.setUndoTime(new Date(dateTime.getTime()));
+            }
+            result.setSalt(getSalt());
+            return result;
+        }
+    }
+
+    @Data
+    public static class ReceiveRecord{
+        private String ROWID;
+        private String ReceiveRecord_ID;
+        private String PumpCode;
+        private String PatientCode;
+        private String LastUploadTime;
+        private String Ward;
+        private String BedNo;
+        private BigDecimal BalanceQuantity;
+        private BigDecimal ContinueQuantity;
+        private BigDecimal SelfQuantity;
+        private BigDecimal LockTime;
+        private BigDecimal InputQuantity;
+        private Integer TrueNum;
+        private Integer FalseNum;
+        private BigDecimal MaxQuantity;
+        private Integer FirstQuantity;
+        private BigDecimal SingleQuantity;
+        private Integer AllQuantity;
+        private Integer AllCount;
+        private BigDecimal PulseQuantity;
+        private Integer PulseLockTime;
+        private Integer FirstLockTime;
+        private BigDecimal UpperLimit;
+        private BigDecimal LowerLimit;
+        private Integer CustomScate;
+        private Integer AddTrueFrequency;
+        private BigDecimal FilingCycle;
+        private BigDecimal ReductionPeriod;
+        private Integer RunState;
+        private Integer BUFState1;
+        private Integer BUFState2;
+        private Integer BUFState3;
+        private Integer BUFState4;
+        private Integer BUFState5;
+        private Integer BUFState6;
+        private Integer BUFState7;
+        private Integer BUFState8;
+        private Integer BUFState9;
+        private Integer Score;
+        private String StartTime;
+        private String ViewState;
+        private String StateFlag;
+        private Integer CallFlag;
+        private String NoSignal;
+        private String Remark;
+        private String IsDelete;
+        private String Number_2;
+        private String Iden_1;
+        private String Iden_2;
+        private String USER_1;
+        private String USER_2;
+        private String SysHospital_ID;
+        private String SysProduct_ID;
+
+        private boolean remove=true;
+        public PcPumpEntity toPcPump(){
+            PcPumpEntity result = new PcPumpEntity();
+            result.setPumpCode(getPumpCode());
+            result.setProductCode(getSysProduct_ID());
+            result.setHospitalCode("43332553109747f3857e1e434e1e2ef3");
+//            result.setHospitalCode(getSysHospital_ID());
+            result.setPatientCode(getPatientCode());
+            result.setRemainQuantity(getBalanceQuantity());
+            result.setContinueQuantity(getContinueQuantity());
+            result.setSelfControlQuantity(getSelfQuantity());
+            result.setLockTime(getLockTime());
+            result.setInputQuantity(getInputQuantity());
+            result.setValidTime(getTrueNum());
+            result.setInvalidTime(getFalseNum());
+            result.setMaxQuantity(getMaxQuantity());
+            result.setFirstQuantity(getFirstQuantity());
+            result.setSingleQuantity(getSingleQuantity());
+            result.setTotalQuantity(getAllQuantity());
+            result.setTotalCount(getAllCount());
+            result.setPulseQuantity(getPulseQuantity());
+            result.setPulseLockTime(getPulseLockTime());
+            result.setFirsLockTime(getFirstLockTime());
+            result.setUpperLimit(getUpperLimit());
+            result.setLowerLimit(getLowerLimit());
+            result.setCustomScate(getCustomScate());
+            result.setAddValidTime(getAddTrueFrequency());
+            result.setRunState(getRunState());
+            result.setBufState1(getBUFState1());
+            result.setBufState2(getBUFState2());
+            result.setBufState3(getBUFState3());
+            result.setBufState4(getBUFState4());
+            result.setBufState5(getBUFState5());
+            result.setBufState6(getBUFState6());
+            result.setBufState7(getBUFState7());
+            result.setBufState8(getBUFState8());
+            result.setBufState9(getBUFState9());
+            result.setScore(getScore());
+            result.setAddCycle(getFilingCycle());
+            result.setReduceCycle(getReductionPeriod());
+
+            result.setCallFlag(getCallFlag());
+
+            result.setViewState(getViewState());
+
+
+            //todo
+            result.setRemove(isRemove());
+            DateTime dateTime = DateUtil.parse(getLastUploadTime(),"dd/MM/yyyy HH:mm:ss");
+
+            result.setLastUploadTime(dateTime.getTime()/1000);
+            return result;
+        }
+    }
+
+}

+ 14 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IDeviceClient.java

@@ -1,6 +1,9 @@
 package com.nb.web.api.feign;
 
 import com.nb.web.api.entity.BusDeviceEntity;
+import com.nb.web.api.entity.BusInfusionHistoryEntity;
+
+import java.util.Date;
 
 /**
  * @author lifang
@@ -63,4 +66,15 @@ public interface IDeviceClient {
      * @return boolean
      */
     void setExistDevice(String deviceId);
+
+    void updateInfusionById(BusInfusionHistoryEntity infusion);
+
+    /**
+     * lora数据对接时,获取撤泵时的输注信息
+     * @param patientId
+     * @param pumpCode
+     * @param hospitalCode
+     * @return
+     */
+    BusInfusionHistoryEntity getLastInfusionIdByUndoAndPatientId(String patientId, String pumpCode, String hospitalCode, Date undoTIme);
 }

+ 8 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java

@@ -7,6 +7,7 @@ import com.nb.web.api.feign.query.PatientMonitorQuery;
 import com.nb.web.api.feign.result.*;
 import org.springframework.web.context.request.async.DeferredResult;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -37,6 +38,13 @@ public interface IPatientClient {
      */
     PatientMonitorDetailResult lookPatientDetail(String patientId);
 
+    /**
+     * 根据评价时间查询病人详情
+     * @param patientId
+     * @param evalTime
+     * @return
+     */
+    PatientMonitorDetailResult lookPatientDetailByEvalTime(String patientId, Date evalTime);
 
     /**
      * 描述: 获取所给病人当前的临床id

+ 30 - 8
nb-service/iot-service/src/main/java/com/nb/mq/listener/RabbitMqListener.java

@@ -10,6 +10,7 @@ import com.nb.core.utils.ExceptionUtil;
 import com.nb.mq.entity.PcAnalgesicScoreEntity;
 import com.nb.mq.entity.PcPatientEntity;
 import com.nb.mq.entity.PcPumpEntity;
+import com.nb.web.api.bean.UndoDeviceConfig;
 import com.nb.web.api.entity.*;
 import com.nb.web.api.entity.common.BusDeviceRunningEntity;
 import com.nb.web.api.enums.DeviceRegisterEnum;
@@ -60,7 +61,7 @@ public class RabbitMqListener {
      * @param
      * @return void
      */
-    @RabbitListener(queuesToDeclare = @Queue("cloud.patient"))
+//    @RabbitListener(queuesToDeclare = @Queue("cloud.patient"))
     @Transactional (rollbackFor = Exception.class)
     public void patientQueue(Message message, Channel channel) throws IOException {
         String body = StrUtil.str(message.getBody(), Charset.defaultCharset());
@@ -103,6 +104,26 @@ public class RabbitMqListener {
                 clinic.setStartTime(existClinic.getStartTime());
                 clinicClient.update(existClinic.getId(),clinic);
             }
+            if(source.getUndoTime()!=null){
+                //撤泵,查看撤泵的时间对应的输注是否为当前输注
+                BusInfusionHistoryEntity infusion=deviceClient.getLastInfusionIdByUndoAndPatientId(patientId,source.getPumpCode(),source.getHospitalCode(),source.getUndoTime());
+                //仅保存撤泵信息
+                infusion.setUndoBy(source.getUndoPerson());
+                infusion.setIsUndo(true);
+                infusion.setWitnesses(source.getWitnessPerson());
+                infusion.setDestroyer(source.getDestoryPerson());
+                infusion.setUndoTime(source.getUndoTime());
+                deviceClient.updateInfusionById(infusion);
+                if(StrUtil.equals(infusion.getId(),patientDetail.getInfusion().getId())){
+                    //结束管理
+                    UndoDeviceConfig undoConfig = new UndoDeviceConfig();
+                    undoConfig.setWitnesses(source.getWitnessPerson());
+                    undoConfig.setUndoTime(source.getUndoTime());
+                    undoConfig.setUndoBy(source.getUndoPerson());
+                    undoConfig.setDestroyer(source.getDestoryPerson());
+                    clinicClient.finish(clinic.getId(),source.getHospitalCode(), undoConfig);
+                }
+            }
             hospitalLog.setResult(JSONUtil.toJsonStr(clinic));
             hospitalLog.setSuccess(true);
         }catch (Exception e){
@@ -115,7 +136,7 @@ public class RabbitMqListener {
         hospitalLog.setUseTime(entTime-startTime);
         hospitalLogService.save(hospitalLog);
         log.info("消息队列【cloud.patient】处理消息{}完成",body);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
+//        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
     }
 
     /**
@@ -125,7 +146,7 @@ public class RabbitMqListener {
      * @param
      * @return void
      */
-    @RabbitListener(queuesToDeclare = @Queue("cloud.pump"))
+//    @RabbitListener(queuesToDeclare = @Queue("cloud.pump"))
     @Transactional (rollbackFor = Exception.class)
     public void pumpQueue(Message message, Channel channel) throws IOException {
         String body = StrUtil.str(message.getBody(), Charset.defaultCharset());
@@ -155,6 +176,8 @@ public class RabbitMqListener {
             if(!source.isRemove()){
                 clinicClient.finish(sync.getClinicId(),sync.getTenantId(),null);
                 deviceClient.refreshClassification(sync.getDeviceId());
+            }else {
+                clinicClient.resetClinic(sync.getClinicId());
             }
 
             hospitalLog.setResult(JSONUtil.toJsonStr(sync));
@@ -170,7 +193,7 @@ public class RabbitMqListener {
         hospitalLog.setUseTime(entTime-startTime);
         hospitalLogService.save(hospitalLog);
         log.info("消息队列【cloud.pump】处理消息{}完成",body);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
+//        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
     }
 
     private BusDeviceEntity createDevice(BusDeviceRunningEntity source ){
@@ -188,7 +211,7 @@ public class RabbitMqListener {
      * @param
      * @return void
      */
-    @RabbitListener(queuesToDeclare = @Queue("cloud.analgesicScore"))
+//    @RabbitListener(queuesToDeclare = @Queue("cloud.analgesicScore"))
     @Transactional (rollbackFor = Exception.class)
     public void analgesicScoreQueue(Message message,Channel channel) throws IOException {
         String body = StrUtil.str(message.getBody(), Charset.defaultCharset());
@@ -209,9 +232,8 @@ public class RabbitMqListener {
             }
             hospitalLog.setIdentityCode(source.getPumpCode());
             hospitalLog.setTenantId(hospitalResult.getId());
-
             String patientId = patientClient.lookPatientId(source.getHospitalCode(), source.getPatientCode());
-            PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetail(patientId);
+            PatientMonitorDetailResult patientDetail = patientClient.lookPatientDetailByEvalTime(patientId,source.getFollowDate());
             BusInfusionHistoryEntity infusion = Optional.ofNullable(patientDetail.getInfusion()).orElse(new BusInfusionHistoryEntity());
             BusEvaluationEntity eval = source.toEval(patientId,
                     infusion.getDeviceId(),
@@ -230,7 +252,7 @@ public class RabbitMqListener {
         hospitalLog.setUseTime(entTime-startTime);
         hospitalLogService.save(hospitalLog);
         log.info("消息队列【cloud.analgesicScore】处理消息{}完成",body);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
+//        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
     }
 
 }

+ 1 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/registry/device/ClusterDeviceOperator.java

@@ -307,6 +307,7 @@ public class ClusterDeviceOperator implements DeviceOperator {
 
     @Override
     public void setUploadTime(Date uploadTime) {
+        System.out.println("最后上传时间为=============" + uploadTime);
         put(DeviceKeyConstant.UPLOAD,wrapperValue(uploadTime) );
     }
 

+ 21 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusDeviceService.java

@@ -5,12 +5,14 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nb.aliyun.api.service.AliyunIotSdk;
+import com.nb.web.api.entity.BusInfusionHistoryEntity;
 import com.nb.web.api.feign.IDeviceClient;
 import com.nb.web.api.utils.Constants;
 import com.nb.web.api.bean.AliIotConfig;
@@ -53,6 +55,9 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
     @Autowired
     private AliyunIotSdk aliyunIotSdk;
 
+    @Autowired
+    @Lazy
+    private LocalBusInfusionHistoryService infusionHistoryService;
 
     @Override
     public void validateBeforeSave(BusDeviceEntity entity) {
@@ -228,6 +233,7 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
     public String refreshClassification(String deviceId) {
         String classification = IdWorker.getIdStr();
         deviceRegistry.getOperator(deviceId).setClassification(null);
+        deviceRegistry.getOperator(deviceId).setDataNum(0);
         return classification;
     }
 
@@ -249,6 +255,21 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
          deviceRegistry.getOperator(deviceId).setExist(true);
     }
 
+    @Override
+    public void updateInfusionById(BusInfusionHistoryEntity infusion) {
+        infusionHistoryService.updateById(infusion);
+    }
+
+    @Override
+    public BusInfusionHistoryEntity getLastInfusionIdByUndoAndPatientId(String patientId, String pumpCode, String hospitalCode,Date undoTime) {
+        return infusionHistoryService.getOne(new QueryWrapper<BusInfusionHistoryEntity>().lambda().eq(BusInfusionHistoryEntity::getPatientId, patientId)
+                .eq(BusInfusionHistoryEntity::getDeviceId, pumpCode)
+                .eq(BusInfusionHistoryEntity::getTenantId, hospitalCode)
+                .le(BusInfusionHistoryEntity::getStartTime, undoTime)
+                .orderByDesc(BusInfusionHistoryEntity::getStartTime)
+                .last("limit 1"));
+    }
+
     /**
      * @author 龙三郎
      * 该方法用于从阿里云同步设备,系统暂时不允许创建非阿里云物联网平台设备。意思是系统中的设备必须存在于阿里云物联网平台。

+ 29 - 6
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -5,11 +5,13 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.entity.BusDeviceEntity;
@@ -93,10 +95,6 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
     @Lazy
     private LocalBusHospitalService hospitalService;
 
-    @Autowired
-    @Lazy
-    private LocalBusInfusionHistoryService infusionService;
-
     @Autowired
     @Lazy
     private LocalBusDeviceService deviceService;
@@ -254,7 +252,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         patient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda()
                 .eq(BusPatientEntity::getTenantId, tenantId)
                 .eq(BusPatientEntity::getCode, patientCode));
-        BusInfusionHistoryEntity recentInfusion = infusionService.lastInfusionByPatientCode(tenantId, patientCode);
+        BusInfusionHistoryEntity recentInfusion = infusionHistoryService.lastInfusionByPatientCode(tenantId, patientCode);
         // 如果患者不存在则新增一个患者
         if (Objects.isNull(patient)) {
             patient = new BusPatientEntity();
@@ -516,7 +514,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         String infusionId=patient.getInfusionId();
         BusInfusionHistoryEntity infusion=null;
         if(StrUtil.isNotEmpty(infusionId)){
-            infusion =infusionService.getById(infusionId);
+            infusion =infusionHistoryService.getById(infusionId);
             if(ObjectUtil.isNotNull(infusion)&&StrUtil.isNotEmpty(infusion.getId())){
                 BusDeviceEntity device = deviceService.getByDeviceId(infusion.getDeviceId());
                 if(ObjectUtil.isNotNull(device)){
@@ -532,6 +530,31 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         return result;
     }
 
+    @Override
+    public PatientMonitorDetailResult lookPatientDetailByEvalTime(String patientId, Date evalTime) {
+        PatientMonitorDetailResult result = new PatientMonitorDetailResult();
+        BusPatientEntity patient = patientService.getById(patientId);
+        if(patient==null){
+            throw new CustomException("该住院号信息不存在,请刷新后重试");
+        }
+        BusInfusionHistoryEntity infusion = infusionHistoryService.getOne(new LambdaQueryWrapper<BusInfusionHistoryEntity>().eq(BusInfusionHistoryEntity::getPatientId, patientId)
+                .le(BusInfusionHistoryEntity::getLastUploadTime, evalTime)
+                .last("limit 1"));
+        BusClinicEntity clinic = clinicService.getById(infusion.getClinicId());
+        if(ObjectUtil.isNotNull(infusion)&&StrUtil.isNotEmpty(infusion.getId())){
+            BusDeviceEntity device = deviceService.getByDeviceId(infusion.getDeviceId());
+            if(ObjectUtil.isNotNull(device)){
+                infusion.setAlias(device.getAlias());
+            }
+        }
+        if(clinic!=null){
+            clinic.setPatientCode(patient.getCode());
+        }
+        result.setInfusion(infusion);
+        result.setClinic(clinic);
+        return result;
+    }
+
     @Override
     public String getClinicId(String patientId) {
         BusPatientEntity patient = this.getById(patientId);