Sfoglia il codice sorgente

update:数据修改记录(平板技改)

zhouzeyu 7 mesi fa
parent
commit
584927b7ec

+ 11 - 107
nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/result/EditRecordModifyResult.java

@@ -13,6 +13,7 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author zzy
@@ -25,7 +26,7 @@ import java.util.Date;
 public class EditRecordModifyResult {
 
     @ApiModelProperty(value = "住院号")
-    private String patientId;
+    private String patientCode;
 
     @ApiModelProperty(value = "病人名称")
     private String patientName;
@@ -34,113 +35,16 @@ public class EditRecordModifyResult {
     private String ward;
 
     @ApiModelProperty(value = "床号")
-    private String BedNo;
+    private String bedNo;
 
-    @ApiModelProperty(value = "参数修改时间")
-    private Date modifyTime;
+    private List<ModificationComparisonMap> dataList;
 
-    @ApiModelProperty(value = "泵类型",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @TableField(updateStrategy = FieldStrategy.NEVER)
-    private DeviceTypeEnum type;
-
-    @ApiModelProperty(value = "总量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @Max(value = 999,message = "总量最大值不得超过999")
-    @Min(value = 0,message ="总量最小值不得超过0" )
-    private Integer totalDose;
-
-    @ApiModelProperty(value = "公共参数-首次量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @Max(value = 50,message = "首次量最大值不得超过50")
-    @Min(value = 0,message ="首次量最小值不得超过0" )
-    private Integer firstDose;
-
-
-    @ApiModelProperty(value = "公共参数-剩余量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private BigDecimal remainDose;
-
-    @ApiModelProperty(value = "公共参数-已输入量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private BigDecimal inputDose;
-
-    @ApiModelProperty(value = "公共参数-追加量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "10",message = "PCA追加量最大值不得超过10")
-    @DecimalMin(value = "0",message ="PCA追加量最小值不得超过0" )
-    private BigDecimal appendDose;
-
-    @ApiModelProperty(value = "公共参数-追加锁时",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "99",message = "PCA追加量最大值不得超过99")
-    @DecimalMin(value = "1",message ="PCA追加量最小值不得超过0" )
-    private BigDecimal appendLockTime;
-
-    @ApiModelProperty(value = "公共参数-极限量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "90",message = "PCA追加量最大值不得超过90")
-    @DecimalMin(value = "0",message ="PCA追加量最小值不得超过0" )
-    private BigDecimal maxDose;
-
-    @ApiModelProperty(value = "公共参数-自控锁时",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private BigDecimal selfControlLockTime;
-
-//    @ApiModelProperty(value = "公共参数-自控次数",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-//    private Integer selfControlCount;
-
-    @ApiModelProperty(value = "公共参数-pca有效次数",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private Integer pcaValidCount;
-
-    @ApiModelProperty(value = "公共参数-pca无效次数",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private Integer pcaInvalidCount;
-
-    @ApiModelProperty(value = "公共参数-pca总按次数",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private Integer pcaTotalCount;
-
-    @ApiModelProperty(value = "持续泵参数-持续量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "50",message = "持续给液量最大值不得超过50")
-    @DecimalMin(value = "0",message ="持续给液量最小值不得超过0" )
-    private BigDecimal continueDose;
-
-    @ApiModelProperty(value = "脉冲泵参数-脉冲量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @Max(value = 20,message = "脉冲量最大值不得超过20")
-    @Min(value = 0,message ="脉冲量最小值不得超过0" )
-    private Integer pulseDose;
-
-    @ApiModelProperty(value = "脉冲泵参数-脉冲锁时",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @Max(value = 90,message = "脉冲锁时最大值不得超过90")
-    @Min(value = 30,message ="脉冲锁时最小值不得超过30" )
-    private Integer pulseLockTime;
-
-    @ApiModelProperty(value = "脉冲泵参数-脉冲首次锁时",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @Max(value = 60,message = "脉冲首次锁时最大值不得超过60")
-    @Min(value = 0,message ="脉冲首次锁时最小值不得超过0" )
-    private Integer pulseFirstLockTime;
-
-    @ApiModelProperty(value = "智能泵参数-加档周期",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "10",message = "加档周期最大值不得超过10")
-    @DecimalMin(value = "0.5",message ="加档周期最小值不得超过0.5" )
-    private BigDecimal flowUpCycle;
-
-    @ApiModelProperty(value = "智能泵参数-减档周期",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "10",message = "减档周期最大值不得超过10")
-    @DecimalMin(value = "0.5",message ="减档周期最小值不得超过0.5" )
-    private BigDecimal flowDownCycle;
-
-    @ApiModelProperty(value = "智能泵参数-计次",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "10",message = "PCA追加量最大值不得超过10")
-    @DecimalMin(value = "1",message ="PCA追加量最小值不得超过1" )
-    private BigDecimal flowCount;
-
-    @ApiModelProperty(value = "智能泵参数-上限",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "50",message = "智能泵上限值最大值不得超过90")
-    @DecimalMin(value = "1",message ="智能泵上限值最小值不得超过0" )
-    private BigDecimal flowUpLimit;
-
-    @ApiModelProperty(value = "智能泵参数-下限",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "50",message = "智能泵下限值最大值不得超过50")
-    @DecimalMin(value = "0.1",message ="智能泵下限值最小值不得超过0.1" )
-    private BigDecimal flowDownLimit;
-
-    @ApiModelProperty(value = "智能泵参数-自调比例",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    @DecimalMax(value = "95",message = "自调比例不得超过95")
-    @DecimalMin(value = "0",message ="自调比例最小值不得超过0" )
-    private BigDecimal flowAdjustRate;
-
-    @ApiModelProperty(value = "公共参数-电量",accessMode = ApiModelProperty.AccessMode.READ_ONLY)
-    private Integer electricQuantity;
+    @Data
+    public static class ModificationComparisonMap{
+        @ApiModelProperty(value = "参数修改时间")
+        private Date modifyTime;
 
+        @ApiModelProperty("数据修改对比结果")
+        private List<ModificationComparison> comparisons;
+    }
 }

+ 38 - 0
nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/result/ModificationComparison.java

@@ -0,0 +1,38 @@
+package com.nb.app.doctor.api.feign.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @Author zzy
+ * @Data 2025/5/20
+ * @Version 1.0
+ * @Description XXX
+ */
+@Data
+@ApiModel("修改记录对比结果")
+@Builder
+@AllArgsConstructor(staticName = "of")
+@NoArgsConstructor
+public class ModificationComparison {
+    @ApiModelProperty("参数名称")
+    private String fieldName;
+
+    @ApiModelProperty("旧值")
+    private String oldValue;
+
+    @ApiModelProperty("新值")
+    private String newValue;
+
+    @ApiModelProperty("修改时间")
+    private Date modifyTime;
+
+    @ApiModelProperty("1 大于,0等于 -1 小于")
+    private int result;
+}

+ 106 - 40
nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/PatientClientService.java

@@ -1,19 +1,23 @@
 package com.nb.app.doctor.service;
 
 import com.nb.app.doctor.api.feign.result.EditRecordModifyResult;
+import com.nb.app.doctor.api.feign.result.ModificationComparison;
 import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
 import com.nb.web.api.feign.IPatientClient;
 import com.nb.web.service.bus.entity.BusInfusionModifyEntity;
 import com.nb.web.service.bus.service.LocalBusInfusionHistoryService;
 import com.nb.web.service.bus.service.LocalBusInfusionModifyService;
-import com.nb.web.service.bus.service.dto.DeviceHistoryQuery;
 import com.nb.web.service.bus.service.dto.EditModifyQuery;
-import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author zzy
@@ -36,44 +40,106 @@ public class PatientClientService {
         if (query.getClinicId() == null) {
             throw new RuntimeException("临床id不能为空");
         }
-        //通过临床id查询
+        //通过临床id查询到病人的信息
         BusClinicEntity busClinicEntity = iPatientClient.selectClinicId(query.getClinicId());
-        EditRecordModifyResult editRecordModifyResult = new EditRecordModifyResult();
-        editRecordModifyResult.setPatientId(busClinicEntity.getPatientId());
-        editRecordModifyResult.setPatientName(busClinicEntity.getPatientName());
-        editRecordModifyResult.setWard(busClinicEntity.getWard());
-        editRecordModifyResult.setBedNo(busClinicEntity.getBedNo());
-
-        BusInfusionHistoryEntity busInfusionHistoryEntity = infusionHistoryService.selectInfusionId(query.getClinicId());
-        String infusionId = busInfusionHistoryEntity.getId();
-        //通过id查询输注记录
-        BusInfusionModifyEntity busInfusionModify = infusionModifyService.selectInfusionId(infusionId);
-        editRecordModifyResult.setModifyTime(busInfusionModify.getModifyTime());
-        editRecordModifyResult.setType(busInfusionModify.getType());
-        editRecordModifyResult.setTotalDose(busInfusionModify.getTotalDose());
-        editRecordModifyResult.setFirstDose(busInfusionModify.getFirstDose());
-        editRecordModifyResult.setRemainDose(busInfusionModify.getRemainDose());
-        editRecordModifyResult.setInputDose(busInfusionModify.getInputDose());
-        editRecordModifyResult.setAppendDose(busInfusionModify.getAppendDose());
-        editRecordModifyResult.setAppendLockTime(busInfusionModify.getAppendLockTime());
-        editRecordModifyResult.setMaxDose(busInfusionModify.getMaxDose());
-        editRecordModifyResult.setSelfControlLockTime(busInfusionModify.getSelfControlLockTime());
-        editRecordModifyResult.setPcaValidCount(busInfusionModify.getPcaValidCount());
-        editRecordModifyResult.setPcaInvalidCount(busInfusionModify.getPcaInvalidCount());
-        editRecordModifyResult.setPcaTotalCount(busInfusionModify.getPcaTotalCount());
-        editRecordModifyResult.setContinueDose(busInfusionModify.getContinueDose());
-        editRecordModifyResult.setPulseDose(busInfusionModify.getPulseDose());
-        editRecordModifyResult.setPulseLockTime(busInfusionModify.getPulseLockTime());
-        editRecordModifyResult.setPulseFirstLockTime(busInfusionModify.getPulseFirstLockTime());
-        editRecordModifyResult.setFlowUpCycle(busInfusionModify.getFlowUpCycle());
-        editRecordModifyResult.setFlowDownCycle(busInfusionModify.getFlowDownCycle());
-        editRecordModifyResult.setFlowCount(busInfusionModify.getFlowCount());
-        editRecordModifyResult.setFlowUpLimit(busInfusionModify.getFlowUpLimit());
-        editRecordModifyResult.setFlowDownLimit(busInfusionModify.getFlowDownLimit());
-        editRecordModifyResult.setFlowAdjustRate(busInfusionModify.getFlowAdjustRate());
-        editRecordModifyResult.setElectricQuantity(busInfusionModify.getElectricQuantity());
-
-
-        return editRecordModifyResult;
+        EditRecordModifyResult result = new EditRecordModifyResult();
+        result.setPatientCode(busClinicEntity.getPatientCode());
+        result.setPatientName(busClinicEntity.getPatientName());
+        result.setWard(busClinicEntity.getWard());
+        result.setBedNo(busClinicEntity.getBedNo());
+
+        //通过临床id查询出来输注id,但是输注id可能是多个
+        List<BusInfusionHistoryEntity> busInfusionHistoryEntity = infusionHistoryService.selectInfusionIdList(query.getClinicId());
+        //合并所有输注id对应的参数修改记录
+        List<BusInfusionModifyEntity> allModifyRecords = busInfusionHistoryEntity
+                .stream()
+                .filter(busInfusionHistory -> busInfusionHistory.getId() != null)
+                .flatMap(busInfusionHistory -> infusionModifyService.selectInfusionIdList(busInfusionHistory.getId()).stream())
+                .sorted(Comparator.comparing(BusInfusionModifyEntity::getModifyTime))
+                .collect(Collectors.toList());
+
+        List<EditRecordModifyResult.ModificationComparisonMap> timeline = new ArrayList<>();
+        BusInfusionModifyEntity prevRecord = null;
+
+        for (BusInfusionModifyEntity currentRecord : allModifyRecords){
+            EditRecordModifyResult.ModificationComparisonMap timeNode = new EditRecordModifyResult.ModificationComparisonMap();
+            timeNode.setModifyTime(currentRecord.getModifyTime());
+            if (prevRecord == null){
+                timeNode.setComparisons(buildInitialComparisons(currentRecord));
+            }else {
+                timeNode.setComparisons(buildComparisons(prevRecord, currentRecord));
+            }
+            timeline.add(timeNode);
+            prevRecord = currentRecord;
+        }
+        result.setDataList(timeline);
+        return result;
+
+        }
+
+        //首次对比
+    private List<ModificationComparison> buildComparisons(BusInfusionModifyEntity prevRecord, BusInfusionModifyEntity currentRecord) {
+         List<ModificationComparison> diffs = new ArrayList<>();
+
+        // 动态对比字段
+        addIfChanged(diffs, "总量", prevRecord.getTotalDose(), currentRecord.getTotalDose());
+        addIfChanged(diffs, "首次量", prevRecord.getFirstDose(), currentRecord.getFirstDose());
+        addIfChanged(diffs, "持续量", prevRecord.getContinueDose(), currentRecord.getContinueDose());
+        addIfChanged(diffs, "极限量", prevRecord.getMaxDose(), currentRecord.getMaxDose());
+        addIfChanged(diffs, "追加量", prevRecord.getAppendDose(), currentRecord.getAppendDose());
+
+        return diffs;
+    }
+
+    private List<ModificationComparison> buildInitialComparisons(BusInfusionModifyEntity currentRecord) {
+        List<ModificationComparison> comparisons = new ArrayList<>();
+
+        comparisons.add(buildComparison("总量", null, currentRecord.getTotalDose()));
+        comparisons.add(buildComparison("首次量", null, currentRecord.getFirstDose()));
+        comparisons.add(buildComparison("持续量", null, currentRecord.getContinueDose()));
+        comparisons.add(buildComparison("极限量", null, currentRecord.getMaxDose()));
+        comparisons.add(buildComparison("追加量", null, currentRecord.getAppendDose()));
+
+        return comparisons;
     }
+
+    private ModificationComparison buildComparison(String fieldName, Object oldVal, Object newVal) {
+        return ModificationComparison.builder()
+                .fieldName(fieldName)
+                .oldValue(formatValue(oldVal))
+                .newValue(formatValue(newVal))
+                .build();
+    }
+    // 辅助方法:添加变化项
+    private void addIfChanged(
+            List<ModificationComparison> list,
+            String fieldName,
+            Object oldVal,
+            Object newVal
+    ) {
+        if (!isEqual(oldVal, newVal)) {
+            list.add(buildComparison(fieldName, oldVal, newVal));
+        }
+    }
+    // 值等值判断
+    private boolean isEqual(Object a, Object b) {
+        if (a == null && b == null) return true;
+        if (a == null || b == null) return false;
+
+        if (a instanceof BigDecimal && b instanceof BigDecimal) {
+            return ((BigDecimal)a).compareTo((BigDecimal)b) == 0;
+        }
+        return a.equals(b);
+    }
+    // 值格式化方法
+    private String formatValue(Object value) {
+        if (value == null) return "0";
+        if (value instanceof BigDecimal) {
+            return ((BigDecimal) value).stripTrailingZeros().toPlainString();
+        }
+        return value.toString();
+
+
+    }
+
 }

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

@@ -401,10 +401,9 @@ public class LocalBusInfusionHistoryService extends BaseService<BusInfusionHisto
         updateBatchById(infusions);
     }
 
+    public List<BusInfusionHistoryEntity> selectInfusionIdList(String clinicId) {
 
-    public BusInfusionHistoryEntity selectInfusionId(String clinicId) {
-
-        BusInfusionHistoryEntity infusionHistoryEntity = this.getOne(new QueryWrapper<BusInfusionHistoryEntity>()
+        List<BusInfusionHistoryEntity> infusionHistoryEntity = this.list(new QueryWrapper<BusInfusionHistoryEntity>()
                 .lambda().eq(BusInfusionHistoryEntity::getClinicId,clinicId));
         return infusionHistoryEntity;
     }

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

@@ -7,6 +7,8 @@ import com.nb.web.service.bus.mapper.BusInfusionModifyMapper;
 import com.nb.common.crud.BaseService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author 龙三郎
  * @version 1.0.0
@@ -35,9 +37,9 @@ public class LocalBusInfusionModifyService extends BaseService<BusInfusionModify
         return this.baseMapper.recentModify(clinicId,tenantId);
     }
 
-    public BusInfusionModifyEntity selectInfusionId(String infusionId) {
+    public List<BusInfusionModifyEntity> selectInfusionIdList(String infusionId) {
 
-        BusInfusionModifyEntity infusionModify = this.getOne(new QueryWrapper<BusInfusionModifyEntity>()
+        List<BusInfusionModifyEntity> infusionModify = this.list(new QueryWrapper<BusInfusionModifyEntity>()
                 .lambda().eq(BusInfusionModifyEntity::getInfusionId,infusionId));
 
         return infusionModify;