package com.nb.bus.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.nb.bus.enums.StatsAnalyseEnum; import com.nb.bus.service.dto.CombineQuery; import com.nb.bus.stats.CommonStats; import com.nb.bus.stats.entity.StatsAnalyseResult; import com.nb.bus.utils.ThreadUtil; import com.nb.common.exception.CustomException; import com.nb.common.exception.TenantException; import com.nb.common.result.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; /** * @author lifang * @version 1.0.0 * @ClassName BusAnalyseController.java * @Description TODO * @createTime 2022年04月08日 10:24:00 */ @RestController @RequestMapping("/stats/analgesia") @Slf4j @Api(tags = "镇痛分析",description = "统一权限前缀(stats:analyse),例如新增stats:analyse:add") public class BusStatsAnalyseController { private final Map statsMap=new EnumMap<>(StatsAnalyseEnum.class); public BusStatsAnalyseController(List statsList) { if(CollectionUtil.isNotEmpty(statsList)){ for (CommonStats commonStats : statsList) { statsMap.merge(commonStats.getId(),commonStats,(t1,t2)->{ throw new RuntimeException(String.format("统计类型【%s】服务类重复",t1.getId())); }); } } } @PostMapping("/{type}") @SaCheckPermission("stats:analgesia:query") @ApiOperation("统计") public R stats(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId,@PathVariable("type")@ApiParam("统计类型 1、PCA镇痛分析 2、提示分析 3、评价分析 4、自控分析 5、输注量分析") Integer type, @RequestBody @Validated CombineQuery query){ if (StrUtil.isBlank(tenantId)) { throw new TenantException(); } if(CollectionUtil.isEmpty(query.getStartTimeRange())){ throw new CustomException("开始时间不能为空"); } if(CollectionUtil.size(query.getStartTimeRange())!=2){ throw new CustomException("查询开始时间时,需设置【最小开始时间】-【最大开始时间的】时间范围"); } StatsAnalyseEnum analyseEnum = StatsAnalyseEnum.of(type); if(analyseEnum==null){ throw new CustomException("分析类型不能为空"); } CommonStats commonStats=statsMap.get(analyseEnum); long t0 = System.currentTimeMillis(); List queryResult = commonStats.queryResult(query); //提示分析时,根据所选设备类型 进行分析判定 long startTime = System.currentTimeMillis(); System.out.println("查询 = " + (startTime - t0)); StatsAnalyseResult result = new StatsAnalyseResult(); ThreadUtil.set(query.getDeviceType()); result.setPie(commonStats.handlePie(queryResult)); long t1 = System.currentTimeMillis(); System.out.println("饼图耗时 = " + (t1 - startTime)); result.setLine(commonStats.handleLine(queryResult, query.getTimeUnit(),query.getStartTimeRange().get(0),query.getStartTimeRange().get(1))); long t2 = System.currentTimeMillis(); System.out.println("线段图耗时 = " + (t2 - t1)); result.setTable( commonStats.handleTable(queryResult,query.getTimeUnit(),query.getStartTimeRange().get(0),query.getStartTimeRange().get(1))); long t3 = System.currentTimeMillis(); System.out.println("图表耗时 = " + (t3- t2)); ThreadUtil.remove(); return R.success(result); } }