Browse Source

add 丢包率列表

18339543638 3 years ago
parent
commit
546503a097

+ 2 - 12
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusDeviceHistoryController.java

@@ -21,6 +21,7 @@ import com.nb.core.result.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.Authorization;
 import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -90,18 +91,7 @@ public class BusDeviceHistoryController extends BaseCrudController<BusDeviceHist
                 .lambda()
                 .select(BusDeviceHistoryEntity::getDataNumber)
                 .eq(BusDeviceHistoryEntity::getInfusionId, infusionId));
-        long count = histories.stream().map(BusDeviceHistoryEntity::getDataNumber).distinct().count();
-        AtomicReference<BigDecimal> result=new AtomicReference<>(BigDecimal.ZERO);
-        if(CollectionUtil.isNotEmpty(histories)){
-            histories.stream().map(BusDeviceHistoryEntity::getDataNumber)
-                    .max(Comparator.comparing(Integer::valueOf))
-                    .map(max->{
-                        BigDecimal proportionRate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(max), 2, BigDecimal.ROUND_HALF_UP);
-                        result.set(BigDecimal.ONE.subtract(proportionRate).multiply(BigDecimal.valueOf(100)));
-                        return max;
-                    });
-        }
-        return R.success(result.get());
+        return R.success(historyService.computeLossRate(histories));
     }
 
     @Override

+ 39 - 15
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusInfusionHistoryController.java

@@ -1,8 +1,6 @@
 package com.nb.web.service.bus.controller;
 
-import cn.dev33.satoken.SaManager;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.dev33.satoken.stp.StpLogic;
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
@@ -17,17 +15,18 @@ import com.nb.common.crud.BaseService;
 import com.nb.common.crud.controller.BaseQueryController;
 import com.nb.core.exception.CustomException;
 import com.nb.core.result.R;
+import com.nb.web.service.bus.service.dto.TestBusInfusionHistory;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.Authorization;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -77,17 +76,42 @@ public class BusInfusionHistoryController implements BaseQueryController<BusInfu
                 .lambda()
                 .select(BusDeviceHistoryEntity::getDataNumber)
                 .eq(BusDeviceHistoryEntity::getInfusionId, infusionId));
-        AtomicReference<BigDecimal> result=new AtomicReference<>(BigDecimal.ZERO);
-        if(CollectionUtil.isNotEmpty(histories)){
-            histories.stream().map(BusDeviceHistoryEntity::getDataNumber)
-                    .max(Comparator.comparing(Integer::byteValue))
-                    .map(max->{
-                        BigDecimal proportionRate = BigDecimal.valueOf(max).divide(BigDecimal.valueOf(CollectionUtil.size(histories)), 2, BigDecimal.ROUND_HALF_UP);
-                        result.set(BigDecimal.ONE.subtract(proportionRate).multiply(BigDecimal.valueOf(100)));
-                        return max;
-                    });
+        return R.success(deviceHistoryService.computeLossRate(histories));
+    }
+
+
+    @PostMapping("/test/query/page")
+    @SaCheckPermission("bus:infusion:test")
+    @ApiOperation(value = "输注丢包率列表",notes = "权限:【bus:infusion:test】",authorizations = {@Authorization("bus:infusion:test")})
+    public R<List<TestBusInfusionHistory>> testPage(){
+        List<BusInfusionHistoryEntity> infusions = infusionHistoryService.list(new QueryWrapper<BusInfusionHistoryEntity>()
+                .lambda()
+                .select(BusInfusionHistoryEntity::getId,
+                        BusInfusionHistoryEntity::getDeviceId,
+                        BusInfusionHistoryEntity::getClassification,
+                        BusInfusionHistoryEntity::getDataNumber,
+                        BusInfusionHistoryEntity::getType,
+                        BusInfusionHistoryEntity::getPatientCode,
+                        BusInfusionHistoryEntity::getPatientId)
+                .eq(BusInfusionHistoryEntity::getFinished, false));
+        List<TestBusInfusionHistory> result = infusions
+                .stream()
+                .map(TestBusInfusionHistory::valueOf)
+                .collect(Collectors.toList());
+        if(CollectionUtil.isNotEmpty(result)){
+            List<String> ids = result.stream().map(TestBusInfusionHistory::getId).collect(Collectors.toList());
+            List<BusDeviceHistoryEntity> histories = deviceHistoryService.list(new QueryWrapper<BusDeviceHistoryEntity>()
+                    .lambda()
+                    .select(BusDeviceHistoryEntity::getId,BusDeviceHistoryEntity::getInfusionId,BusDeviceHistoryEntity::getDataNumber)
+                    .in(BusDeviceHistoryEntity::getInfusionId, ids));
+            Map<String, List<BusDeviceHistoryEntity>> historiesMap = histories.stream()
+                    .collect(Collectors.groupingBy(BusDeviceHistoryEntity::getInfusionId));
+            result.parallelStream()
+                    .forEach(infusion->
+                            infusion.setLossRate(deviceHistoryService.computeLossRate(historiesMap.get(infusion.getId())))
+                    );
         }
-        return R.success(result.get());
+        return R.success(result);
     }
 
     @Override

+ 25 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusDeviceHistoryService.java

@@ -1,5 +1,6 @@
 package com.nb.web.service.bus.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.nb.web.api.entity.BusDeviceHistoryEntity;
 import com.nb.web.service.bus.mapper.BusDeviceHistoryMapper;
@@ -7,6 +8,11 @@ import com.nb.web.service.bus.service.dto.DeviceHistoryQuery;
 import com.nb.common.crud.BaseService;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Comparator;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -35,4 +41,23 @@ public class LocalBusDeviceHistoryService extends BaseService<BusDeviceHistoryMa
     public IPage<BusDeviceHistoryEntity> pageQuery(DeviceHistoryQuery query){
         return this.baseMapper.pageQuery(query.getPage(),query);
     }
+
+
+    public BigDecimal computeLossRate(List<BusDeviceHistoryEntity> sources) {
+        if(CollectionUtil.isEmpty(sources)){
+            return BigDecimal.ZERO;
+        }
+        long count = sources.stream().map(BusDeviceHistoryEntity::getDataNumber).distinct().count();
+        AtomicReference<BigDecimal> result = new AtomicReference<>(BigDecimal.ZERO);
+        if (CollectionUtil.isNotEmpty(sources)) {
+            sources.stream().map(BusDeviceHistoryEntity::getDataNumber)
+                    .max(Comparator.comparing(Integer::valueOf))
+                    .map(max -> {
+                        BigDecimal proportionRate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(max), 2, BigDecimal.ROUND_HALF_UP);
+                        result.set(BigDecimal.ONE.subtract(proportionRate).multiply(BigDecimal.valueOf(100)));
+                        return max;
+                    });
+        }
+        return result.get();
+    }
 }

+ 52 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/dto/TestBusInfusionHistory.java

@@ -0,0 +1,52 @@
+package com.nb.web.service.bus.service.dto;
+
+import com.nb.web.api.entity.BusInfusionHistoryEntity;
+import com.nb.web.api.enums.DeviceTypeEnum;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName TestBusInfusionHistory.java
+ * @Description 输注测试列表
+ * @createTime 2022年10月20日 14:40:00
+ */
+@Data
+public class TestBusInfusionHistory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String deviceId;
+
+    private String classification;
+
+    private Integer dataNumber;
+
+    private DeviceTypeEnum type;
+
+    private String patientId;
+
+    private String patientCode;
+
+    private String clinicId;
+
+    private BigDecimal lossRate;
+
+    public static TestBusInfusionHistory valueOf(BusInfusionHistoryEntity source){
+        TestBusInfusionHistory result = new TestBusInfusionHistory();
+        result.setId(source.getId());
+        result.setDeviceId(source.getDeviceId());
+        result.setClassification(source.getClassification());
+        result.setDataNumber(source.getDataNumber());
+        result.setType(source.getType());
+        result.setPatientCode(source.getPatientCode());
+        result.setLossRate(BigDecimal.ZERO);
+        result.setPatientId(source.getPatientId());
+        result.setClinicId(source.getClinicId());
+        return result;
+    }
+}