Ver Fonte

输注修改记录修改为NB格式内容

wangzl há 4 meses atrás
pai
commit
b670c9d8e3

+ 14 - 0
pump-admin/src/main/test/com/tuoren/web/Test1.java

@@ -1,9 +1,11 @@
 package com.tuoren.web;
 
+import com.alibaba.druid.support.json.JSONUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.tuoren.TuorenApplication;
 import com.tuoren.web.layer.controller.BusPatientController;
+import com.tuoren.web.layer.d0.BusReceiveRecordUpdateDTO;
 import com.tuoren.web.layer.d0.PumpRemoveRequestDTO;
 import com.tuoren.web.layer.d0.PumpVo;
 import com.tuoren.web.layer.entity.BusPatientEntity;
@@ -15,8 +17,10 @@ import com.tuoren.web.layer.service.IBusReceiveRecordUpdateService;
 import com.tuoren.web.layer.service.IBusWordService;
 import com.tuoren.web.layer.service.impl.BusPumpServiceImpl;
 import com.tuoren.web.layer.vo.PumpParam;
+import com.tuoren.web.layer.vo.ReceiveRecordUpdateQueryParam;
 import com.tuoren.web.layer.vo.WordParam;
 import lombok.extern.slf4j.Slf4j;
+import org.beetl.ext.simulate.JsonUtil;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
@@ -138,4 +142,14 @@ public class Test1 {
         System.out.println(busWordEntityIPage);
     }
 
+    @Test
+    public void test7() throws Exception{
+        ReceiveRecordUpdateQueryParam param = new ReceiveRecordUpdateQueryParam();
+        param.setHospitalCode("5490dd8896e54ecab824b006074361de");
+        param.setPumpCode("4313901832450290");
+        param.setPatientCode("7000000750045");
+        BusReceiveRecordUpdateDTO busReceiveRecordUpdateDTO = iBusReceiveRecordUpdateService.queryUpdateList(param);
+        System.out.println(busReceiveRecordUpdateDTO);
+    }
+
 }

+ 35 - 0
pump-web/src/main/java/com/tuoren/web/layer/d0/BusReceiveRecordUpdateDTO.java

@@ -0,0 +1,35 @@
+package com.tuoren.web.layer.d0;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author wangzl
+ * @description: TODO
+ * @date 2025/8/14 14:20
+ */
+
+@ApiModel("输注信息修改记录对比修改内容记录")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class BusReceiveRecordUpdateDTO {
+
+    @ApiModelProperty(value = "注液泵编码")
+    private String pumpCode;
+
+    @ApiModelProperty(value = "医院编码")
+    private String hospitalCode;
+
+    @ApiModelProperty(value = "住院号")
+    private String patientCode;
+
+    private List<ModificationComparisonMap> dataList;
+}

+ 33 - 0
pump-web/src/main/java/com/tuoren/web/layer/d0/ModificationComparison.java

@@ -0,0 +1,33 @@
+package com.tuoren.web.layer.d0;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author wangzl
+ * @description: TODO
+ * @date 2025/8/14 14:22
+ */
+
+@Data
+@ApiModel("修改记录对比结果")
+@Builder
+@AllArgsConstructor(staticName = "of")
+@NoArgsConstructor
+public class ModificationComparison {
+    @ApiModelProperty("参数名称")
+    private String fieldName;
+
+    @ApiModelProperty("旧值")
+    private String oldValue;
+
+    @ApiModelProperty("新值")
+    private String newValue;
+
+    @ApiModelProperty("1 大于,0等于 -1 小于")
+    private int result;
+}

+ 27 - 0
pump-web/src/main/java/com/tuoren/web/layer/d0/ModificationComparisonMap.java

@@ -0,0 +1,27 @@
+package com.tuoren.web.layer.d0;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author wangzl
+ * @description: TODO
+ * @date 2025/8/14 14:23
+ */
+@Data
+@Builder
+@ApiModel("修改记录比对结果集合")
+public class ModificationComparisonMap {
+
+    @ApiModelProperty(value = "参数修改时间")
+    private LocalDateTime modifyTime;
+
+    @ApiModelProperty("数据修改对比结果")
+    private List<ModificationComparison> comparisons;
+}

+ 2 - 1
pump-web/src/main/java/com/tuoren/web/layer/service/IBusReceiveRecordUpdateService.java

@@ -2,6 +2,7 @@ package com.tuoren.web.layer.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.tuoren.web.layer.d0.BusReceiveRecordUpdateDTO;
 import com.tuoren.web.layer.entity.BusPumpEntity;
 import com.tuoren.web.layer.entity.BusReceiveRecordUpdateEntity;
 import com.tuoren.web.layer.vo.ReceiveRecordUpdateQueryParam;
@@ -21,5 +22,5 @@ public interface IBusReceiveRecordUpdateService extends IService<BusReceiveRecor
     void comparePumpData(BusPumpEntity pumpEntity);
 
 
-    IPage<BusReceiveRecordUpdateEntity> queryUpdateList(Integer pageNo, Integer pageSize, ReceiveRecordUpdateQueryParam param);
+    BusReceiveRecordUpdateDTO queryUpdateList(ReceiveRecordUpdateQueryParam param);
 }

+ 30 - 10
pump-web/src/main/java/com/tuoren/web/layer/service/impl/BusReceiveRecordUpdateImpl.java

@@ -1,27 +1,29 @@
 package com.tuoren.web.layer.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tuoren.web.layer.d0.BusReceiveRecordUpdateDTO;
+import com.tuoren.web.layer.d0.ModificationComparison;
+import com.tuoren.web.layer.d0.ModificationComparisonMap;
 import com.tuoren.web.layer.entity.BusPumpEntity;
 import com.tuoren.web.layer.entity.BusReceiveRecordUpdateEntity;
 import com.tuoren.web.layer.mapper.BusReceiveRecordUpdateMapper;
 import com.tuoren.web.layer.service.IBusReceiveRecordUpdateService;
 import com.tuoren.web.layer.vo.ReceiveRecordUpdateQueryParam;
+import com.tuoren.web.utils.RecordUpdateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * @author wangzl
@@ -89,15 +91,33 @@ public class BusReceiveRecordUpdateImpl extends ServiceImpl<BusReceiveRecordUpda
     }
 
     @Override
-    public IPage<BusReceiveRecordUpdateEntity> queryUpdateList(Integer pageNo, Integer pageSize, ReceiveRecordUpdateQueryParam param) {
-        IPage<BusReceiveRecordUpdateEntity> iPage = new Page<>(pageNo, pageSize);
+    public BusReceiveRecordUpdateDTO queryUpdateList(ReceiveRecordUpdateQueryParam param) {
         List<BusReceiveRecordUpdateEntity> list = this.list(new LambdaQueryWrapper<BusReceiveRecordUpdateEntity>()
                 .eq(BusReceiveRecordUpdateEntity::getHospitalCode, param.getHospitalCode())
                 .eq(BusReceiveRecordUpdateEntity::getPatientCode, param.getPatientCode())
                 .eq(BusReceiveRecordUpdateEntity::getPumpCode, param.getPumpCode())
                 .orderByDesc(BusReceiveRecordUpdateEntity::getGmtModified));
-        iPage.setRecords(list);
-        return iPage;
+        if (CollectionUtil.isEmpty(list)) {
+            return null;
+        }
+        BusReceiveRecordUpdateEntity busReceiveRecordUpdateEntity = list.get(0);
+        List<ModificationComparisonMap> dataList = IntStream.range(0, list.size()).mapToObj(i -> {
+            List<ModificationComparison> comparisons = new ArrayList<>();
+            if (i == 0) {
+                comparisons.addAll(RecordUpdateUtil.buildInitialComparisons(list.get(i)));
+            } else {
+                comparisons.addAll(RecordUpdateUtil.buildComparisons(list.get(i - 1), list.get(i)));
+            }
+            return ModificationComparisonMap.builder().modifyTime(list.get(i).getGmtModified())
+                    .comparisons(comparisons)
+                    .build();
+        }).collect(Collectors.toList());
+        return BusReceiveRecordUpdateDTO.builder()
+                .pumpCode(busReceiveRecordUpdateEntity.getPumpCode())
+                .hospitalCode(busReceiveRecordUpdateEntity.getHospitalCode())
+                .patientCode(busReceiveRecordUpdateEntity.getPatientCode())
+                .dataList(dataList)
+                .build();
     }
 
 

+ 0 - 5
pump-web/src/main/java/com/tuoren/web/layer/vo/ReceiveRecordUpdateQueryParam.java

@@ -19,11 +19,6 @@ import java.io.Serializable;
 public class ReceiveRecordUpdateQueryParam implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "接口: null | 第几页")
-    private Integer pageNo = 1;
-    @ApiModelProperty(value = "接口: null | 条数")
-    private Integer pageSize = 10;
-
     @ApiModelProperty(value = "住院号")
     @NotBlank(message = "住院号不能为空")
     private String patientCode;

+ 113 - 0
pump-web/src/main/java/com/tuoren/web/utils/RecordUpdateUtil.java

@@ -0,0 +1,113 @@
+package com.tuoren.web.utils;
+
+import com.tuoren.web.layer.d0.ModificationComparison;
+import com.tuoren.web.layer.entity.BusReceiveRecordUpdateEntity;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author wangzl
+ * @description: TODO
+ * @date 2025/8/14 15:00
+ */
+public class RecordUpdateUtil {
+    //从第二个开始对比
+    public static List<ModificationComparison> buildComparisons(BusReceiveRecordUpdateEntity prevRecord, BusReceiveRecordUpdateEntity currentRecord) {
+        List<ModificationComparison> diffs = new ArrayList<>();
+        // 动态对比字段
+        addIfChanged(diffs, "总量", prevRecord.getTotalQuantity(), currentRecord.getTotalQuantity());
+        addIfChanged(diffs, "首次量", prevRecord.getFirstQuantity(), currentRecord.getFirstQuantity());
+        addIfChanged(diffs, "持续量", prevRecord.getContinueQuantity(), currentRecord.getContinueQuantity());
+        addIfChanged(diffs, "极限量", prevRecord.getMaxQuantity(), currentRecord.getMaxQuantity());
+        addIfChanged(diffs, "追加量", prevRecord.getSingleQuantity(), currentRecord.getSingleQuantity());
+
+        return diffs;
+    }
+
+    //首次对比
+    public static List<ModificationComparison> buildInitialComparisons(BusReceiveRecordUpdateEntity currentRecord) {
+        List<ModificationComparison> comparisons = new ArrayList<>();
+        comparisons.add(buildComparison("总量", null, currentRecord.getTotalQuantity()));
+        comparisons.add(buildComparison("首次量", null, currentRecord.getFirstQuantity()));
+        comparisons.add(buildComparison("持续量", null, currentRecord.getContinueQuantity()));
+        comparisons.add(buildComparison("极限量", null, currentRecord.getMaxQuantity()));
+        comparisons.add(buildComparison("追加量", null, currentRecord.getSingleQuantity()));
+
+        return comparisons;
+    }
+    private static void addIfChanged(
+            List<ModificationComparison> list,
+            String fieldName,
+            Object oldVal,
+            Object newVal
+    ) {
+        if (!isEqual(oldVal, newVal)) {
+            list.add(buildComparison(fieldName, oldVal, newVal));
+        } else {
+            // 值相等时也记录,但 result=0
+            list.add(buildComparison(fieldName, oldVal, newVal));
+        }
+    }
+
+    // 值等值判断
+    private static 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 static ModificationComparison buildComparison(String fieldName, Object oldVal, Object newVal) {
+        int comparisonResult = calculateComparisonResult(oldVal, newVal);
+        return ModificationComparison.builder()
+                .fieldName(fieldName)
+                .oldValue(formatValue(oldVal))
+                .newValue(formatValue(newVal))
+                .result(comparisonResult)
+                .build();
+    }
+    // 值格式化方法
+    private static String formatValue(Object value) {
+        if (value == null) return "0";
+        if (value instanceof BigDecimal) {
+            return ((BigDecimal) value).stripTrailingZeros().toPlainString();
+        }
+        return value.toString();
+    }
+    /***
+     * @description: 对比输入参数
+     * @author wangzl
+     * @date 2025/8/14
+     */
+    private static int calculateComparisonResult(Object oldVal, Object newVal) {
+        if (oldVal == null && newVal == null) return 0;
+        if (oldVal == null) return 1;  // 新增记录视为新值更大
+        if (newVal == null) return -1; // 删除记录视为旧值更大
+
+        // 处理 BigDecimal 类型
+        if (oldVal instanceof BigDecimal && newVal instanceof BigDecimal) {
+            return ((BigDecimal) newVal).compareTo((BigDecimal) oldVal);
+        }
+
+        // 处理数值类型(Integer/Long/Double等)
+        if (oldVal instanceof Number && newVal instanceof Number) {
+            double oldNum = ((Number) oldVal).doubleValue();
+            double newNum = ((Number) newVal).doubleValue();
+            return Double.compare(newNum, oldNum);
+        }
+
+        // 默认比较(按字符串或对象比较)
+        try {
+            Comparable oldComp = (Comparable) oldVal;
+            Comparable newComp = (Comparable) newVal;
+            return newComp.compareTo(oldComp);
+        } catch (ClassCastException e) {
+            // 无法比较时视为相等
+            return 0;
+        }
+    }
+}