| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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<StatsAnalyseEnum,CommonStats> statsMap=new EnumMap<>(StatsAnalyseEnum.class);
- public BusStatsAnalyseController(List<CommonStats> 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);
- }
- }
|