18339543638 пре 3 година
родитељ
комит
51eaa7666b

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

@@ -17,4 +17,31 @@ public interface IDeviceClient {
     void removeByDeviceId(String id);
 
     BusDeviceEntity getByDeviceId(String id);
+
+    /**
+     * 描述: 获取设备当前的分包标识,主要用于PC端,与PC端兼容
+     * @author lifang
+     * @date 2022/9/9 13:57
+     * @param deviceId
+     * @return String
+     */
+    String getClassification(String deviceId);
+
+    /**
+     * 描述: 刷新设备分包标识,主要用于PC端,与PC端兼容
+     * @author lifang
+     * @date 2022/9/9 13:57
+     * @param deviceId
+     * @return String 新的分类标识
+     */
+    String refreshClassification(String deviceId);
+
+    /**
+     * 描述: 设备下一个数据编号,主要用于PC端,与PC端兼容
+      * @author lifang
+     * @date 2022/9/9 13:58
+     * @param deviceId
+     * @return Integer
+     */
+    Integer nextDataNumber(String deviceId);
 }

+ 186 - 2
nb-service/iot-service/src/main/java/com/nb/mq/entity/PcPumpEntity.java

@@ -6,7 +6,10 @@ import java.io.Serializable;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonSetter;
 import com.nb.web.api.entity.common.BusDeviceRunningEntity;
+import com.nb.web.api.enums.DeviceAlarmEnum;
+import com.nb.web.api.enums.DeviceStatusEnum;
 import com.nb.web.api.enums.DeviceTypeEnum;
+import com.nb.web.api.enums.FlowStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -183,7 +186,6 @@ public class PcPumpEntity implements Serializable {
         result.setDataNumber(1);
 
         result.setPatientCode(this.getPatientCode());
-//        result.setWard(this.getW);
         result.setTenantId(this.getSysHospital_ID());
         result.setTotalDose(this.getAllQuantity());
         result.setInputDose(this.getInputQuantity());
@@ -191,7 +193,6 @@ public class PcPumpEntity implements Serializable {
         result.setFirstDose(this.getFirstQuantity());
         result.setMaxDose(this.getMaxQuantity());
         result.setAppendDose(this.getSingleQuantity());
-        result.setElectricQuantity(this.getBUFState6());
         result.setSelfControlLockTime(this.getLockTime());
         result.setContinueDose(this.getContinueQuantity());
         result.setType(deviceType);
@@ -199,6 +200,18 @@ public class PcPumpEntity implements Serializable {
         result.setPcaInvalidCount(this.getFalseNum());
         result.setPcaValidCount(this.getTrueNum());
         result.setPcaTotalCount(this.getAllCount());
+
+
+        parseRunState(result,this.getRunState());
+        parseBufSate1(result,this.getBUFState1());
+        parseBufSate2(result,this.getBUFState2());
+        parseBufSate3(result,this.getBUFState3());
+        //镇痛效果由平台自行判断 bufstate4
+        parseBufSate5(result,this.getBUFState5());
+        parseBufSate6(result,this.getBUFState6());
+        //电机失控取消 bufstate7
+        parseBufSate8(result,this.getBUFState8());
+        parseBufSate9(result,this.getBUFState9());
         //        result.setRunState();
 //        result.setAlarm();
         return result;
@@ -206,4 +219,175 @@ public class PcPumpEntity implements Serializable {
     }
 
 
+    /**
+     * 描述: 解析运行状态
+     * @author lifang
+     * @date 2022/9/9 11:26
+     * @param
+     * @return void
+     */
+    private void parseRunState(BusDeviceRunningEntity source,Integer runState){
+        switch (runState){
+            case 0:
+                source.setRunState(DeviceStatusEnum.Shutdown);
+                return;
+            case 1:
+                source.setRunState(DeviceStatusEnum.StartUp);
+                return;
+            case 2:
+                source.setRunState(DeviceStatusEnum.Running);
+                return;
+            case 3:
+                source.setRunState(DeviceStatusEnum.Pause);
+                return;
+            case 4:
+                source.setRunState(DeviceStatusEnum.Waiting);
+                return;
+            default:
+                source.setRunState(DeviceStatusEnum.Running);
+        }
+    }
+
+
+    /**
+     * 描述: 解析药盒报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate1(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setAlarm(DeviceAlarmEnum.Bubble);
+                return;
+            case 2:
+                source.setAlarm(DeviceAlarmEnum.Jam);
+                return;
+            case 3:
+                source.setAlarm(DeviceAlarmEnum.NotBox);
+                return;
+            default:
+                return;
+        }
+    }
+
+    /**
+     * 描述: 解析输入总量报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate2(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setAlarm(DeviceAlarmEnum.InfusionMax);
+                return;
+            default:
+                return;
+        }
+    }
+
+
+    /**
+     * 描述: 输液报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate3(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setAlarm(DeviceAlarmEnum.Limit);
+                return;
+            case 2:
+                source.setWarnWillFinished(true);
+                return;
+            case 3:
+                source.setAlarm(DeviceAlarmEnum.Finished);
+                return;
+            default:
+                return;
+        }
+    }
+
+    /**
+     * 描述: 电量报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate5(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setAlarm(DeviceAlarmEnum.LowBattery);
+                return;
+            case 2:
+                source.setWarnLowBattery(true);
+                return;
+            default:
+                return;
+        }
+    }
+
+    /**
+     * 描述: 电量
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate6(BusDeviceRunningEntity source,Integer state){
+        source.setElectricQuantity(state);
+    }
+
+    /**
+     * 描述: 机器报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate8(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setAlarm(DeviceAlarmEnum.Machine);
+                return;
+            default:
+                return;
+        }
+    }
+
+
+    /**
+     * 描述: 智能泵报警
+     * @author lifang
+     * @date 2022/9/9 11:29
+     * @param state
+     * @return DeviceStatusEnum
+     */
+    private void parseBufSate9(BusDeviceRunningEntity source,Integer state){
+        switch (state){
+            case 1:
+                source.setWarnFlow(FlowStatusEnum.Limited);
+                return;
+            case 2:
+                source.setWarnFlow(FlowStatusEnum.MaxFlow);
+                return;
+            case 3:
+                source.setWarnFlow(FlowStatusEnum.Up);
+                return;
+            case 4:
+                source.setWarnFlow(FlowStatusEnum.Down);
+                return;
+            case 5:
+                source.setWarnFlow(FlowStatusEnum.Limited);
+                return;
+            default:
+                return;
+        }
+    }
 }

+ 11 - 1
nb-service/iot-service/src/main/java/com/nb/mq/listener/RabbitMqListener.java

@@ -7,6 +7,7 @@ import com.nb.mq.entity.PcPumpEntity;
 import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.entity.BusEvaluationEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
+import com.nb.web.api.entity.common.BusDeviceRunningEntity;
 import com.nb.web.api.feign.*;
 import com.nb.web.api.feign.result.PatientMonitorDetailResult;
 import lombok.AllArgsConstructor;
@@ -33,6 +34,8 @@ public class RabbitMqListener {
     private final IPatientClient patientClient;
     private final IClinicEvalClient clinicEvalClient;
     private final IClinicClient clinicClient;
+    private final IDeviceClient deviceClient;
+    private final IIotMsgHandler iotMsgHandler;
     /**
      * 描述: 监听病人队列
      * @author lifang
@@ -52,6 +55,10 @@ public class RabbitMqListener {
         if(Boolean.TRUE.equals(clinic.getFinished())){
             //进行撤泵处理
             clinicClient.finish(existClinic.getId(),existClinic.getTenantId());
+            if (patientDetail.getInfusion()!=null) {
+                //刷新分包标识
+                deviceClient.refreshClassification(patientDetail.getInfusion().getDeviceId());
+            }
             return;
         }
         //当上一个临床状态为已结束时,生成新的临床信息
@@ -74,7 +81,10 @@ public class RabbitMqListener {
     public void pumpQueue(@Payload String body) {
         log.info("消息队列中,网络泵队列{cloud.pump},接受消息:{}",body);
         PcPumpEntity source = JSONUtil.toBean(body, PcPumpEntity.class);
-
+        BusDeviceRunningEntity device = source.toDevice();
+        device.setClassification(deviceClient.getClassification(device.getDeviceId()));
+        device.setDataNumber(deviceClient.nextDataNumber(device.getDeviceId()));
+        iotMsgHandler.async(device,device.getDeviceId());
     }
 
     /**

+ 2 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/registry/constant/DeviceKeyConstant.java

@@ -21,6 +21,8 @@ public class DeviceKeyConstant {
 
     public static final String CLASSIFY="classification";
 
+    public static final String DATA_NUM="data_num";
+
     public static final String INFUSION_ID="infusion_id";
 
     public static final String INFUSION_PARAM="infusion_param";

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

@@ -223,6 +223,26 @@ public class ClusterDeviceOperator implements DeviceOperator {
         return value.asString();
     }
 
+    @Override
+    public Integer getDataNum() {
+        Value value = getValue(DeviceKeyConstant.DATA_NUM);
+        if(value==null){
+            BusInfusionHistoryEntity lastInfusion = getLastInfusion();
+            if(lastInfusion==null){
+                value=Value.simple(null);
+            }else {
+                value=Value.simple(lastInfusion.getDataNumber());
+            }
+            setDataNum(lastInfusion==null?0:lastInfusion.getDataNumber());
+        }
+        return value.asInt();
+    }
+
+    @Override
+    public void setDataNum(Integer dataNum) {
+        put(DeviceKeyConstant.DATA_NUM,wrapperValue(dataNum));
+    }
+
 
     @Override
     public BigDecimal getContinueDose() {

+ 13 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/registry/device/DeviceOperator.java

@@ -138,6 +138,19 @@ public interface DeviceOperator extends Operator {
     String getClassification();
 
 
+    /**
+     * 获取当前设备数据编码,与PC端兼容使用
+     *
+     * @return
+     */
+    Integer getDataNum();
+
+    /**
+     * 设置当前设备数据编码,与PC端兼容使用
+     * @return
+     */
+    void setDataNum(Integer dataNum);
+
     /**
      * 获取设备上传流速
      * @return

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

@@ -8,6 +8,7 @@ import com.aliyuncs.iot.model.v20180120.QueryDeviceResponse;
 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.feign.IDeviceClient;
@@ -208,6 +209,33 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
         return device;
     }
 
+    @Override
+    public String getClassification(String deviceId) {
+        DeviceOperator operator = deviceRegistry.getOperator(deviceId);
+        String classification = operator.getClassification();
+        if(StrUtil.isNullOrUndefined(classification)){
+            classification = IdWorker.getIdStr();
+            operator.setClassification(classification);
+            return classification;
+        }
+        return classification;
+    }
+
+    @Override
+    public String refreshClassification(String deviceId) {
+        String classification = IdWorker.getIdStr();
+        deviceRegistry.getOperator(deviceId).setClassification(classification);
+        return classification;
+    }
+
+    @Override
+    public Integer nextDataNumber(String deviceId) {
+        DeviceOperator operator = deviceRegistry.getOperator(deviceId);
+        Integer dataNum =Optional.ofNullable( operator.getDataNum()).orElse(0)+1;
+        operator.setDataNum(dataNum);
+        return dataNum;
+    }
+
     /**
      * @author 龙三郎
      * 该方法用于从阿里云同步设备,系统暂时不允许创建非阿里云物联网平台设备。意思是系统中的设备必须存在于阿里云物联网平台。