18339543638 3 年之前
父節點
當前提交
cfb6d53477

+ 30 - 4
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusInfusionHistoryController.java

@@ -3,9 +3,13 @@ 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;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.nb.web.api.entity.BusDeviceHistoryEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
+import com.nb.web.service.bus.service.LocalBusDeviceHistoryService;
 import com.nb.web.service.bus.service.LocalBusInfusionHistoryService;
 import com.nb.web.service.bus.service.dto.CombineQuery;
 import com.nb.web.service.bus.service.dto.CombineResult;
@@ -16,13 +20,14 @@ import com.nb.core.result.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+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;
 
 /**
  * @author lifang
@@ -37,6 +42,7 @@ import java.util.List;
 @Api(tags = "输注历史管理",description = "输注历史管理,查询操作权限【bus:infusion:query】")
 public class BusInfusionHistoryController implements BaseQueryController<BusInfusionHistoryEntity, String> {
     private final LocalBusInfusionHistoryService infusionHistoryService;
+    private final LocalBusDeviceHistoryService deviceHistoryService;
 
 
     @Override
@@ -63,6 +69,26 @@ public class BusInfusionHistoryController implements BaseQueryController<BusInfu
         return R.success(infusionHistoryService.queryPage(query,query.getPage()));
     }
 
+    @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 = deviceHistoryService.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 String getPermissionPrefix() {