|
|
@@ -1,10 +1,9 @@
|
|
|
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.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.mapper.Mapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.nb.web.api.entity.BusDeviceHistoryEntity;
|
|
|
@@ -17,17 +16,19 @@ 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 com.nb.web.service.bus.utils.WsPublishUtils;
|
|
|
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
|
|
|
@@ -43,6 +44,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|
|
public class BusInfusionHistoryController implements BaseQueryController<BusInfusionHistoryEntity, String> {
|
|
|
private final LocalBusInfusionHistoryService infusionHistoryService;
|
|
|
private final LocalBusDeviceHistoryService deviceHistoryService;
|
|
|
+ private final WsPublishUtils wsPublishUtils;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@@ -77,17 +79,60 @@ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping("/test/finished")
|
|
|
+ @SaCheckPermission("bus:infusion:finish")
|
|
|
+ @ApiOperation(value = "结束输注",notes = "权限:【bus:infusion:finish】",authorizations = {@Authorization("bus:infusion:finish")})
|
|
|
+ public R<Boolean> finish(@RequestBody List<String> ids){
|
|
|
+ List<BusInfusionHistoryEntity> infusions = infusionHistoryService.listByIds(ids);
|
|
|
+ if(CollectionUtil.isEmpty(infusions)){
|
|
|
+ return R.success(true);
|
|
|
+ }
|
|
|
+ infusionHistoryService.update(new UpdateWrapper<BusInfusionHistoryEntity>()
|
|
|
+ .lambda()
|
|
|
+ .in(BusInfusionHistoryEntity::getId, ids)
|
|
|
+ .set(BusInfusionHistoryEntity::getFinished, true));
|
|
|
+ infusions
|
|
|
+ .forEach(infusion-> wsPublishUtils.asyncPublishPatientMonitor(infusion.getPatientId(),infusion.getTenantId()));
|
|
|
+ return R.success(true);
|
|
|
}
|
|
|
|
|
|
@Override
|