|
|
@@ -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();
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|