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

+ 27 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusDeviceHistoryController.java

@@ -2,7 +2,9 @@ package com.nb.web.service.bus.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaMode;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.nb.web.api.entity.BusDeviceAlarmEntity;
@@ -23,7 +25,10 @@ import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
+import java.util.Comparator;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * @author lifang
@@ -76,6 +81,28 @@ public class BusDeviceHistoryController extends BaseCrudController<BusDeviceHist
         return R.success(deviceAlarmService.selectUseDetail(query));
     }
 
+
+    @PostMapping("/loss/rate/{infusionId}")
+    @SaCheckPermission({"bus:infusion:query","bus:device:use"})
+    @ApiOperation(value = "输注丢包率计算(此查询中包括了所属的临床信息)",notes = "权限【bus:infusion:query】")
+    public R<BigDecimal> lossRate(@PathVariable("infusionId")String infusionId){
+        List<BusDeviceHistoryEntity> histories = historyService.list(new QueryWrapper<BusDeviceHistoryEntity>()
+                .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(result.get());
+    }
+
     @Override
     public BaseService<? extends Mapper<BusDeviceHistoryEntity>, BusDeviceHistoryEntity, String> getService() {
         return historyService;