BusStatsAnalyseController.java 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.nb.bus.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.hutool.core.collection.CollectionUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import cn.hutool.json.JSONUtil;
  6. import com.nb.bus.enums.StatsAnalyseEnum;
  7. import com.nb.bus.service.dto.CombineQuery;
  8. import com.nb.bus.stats.CommonStats;
  9. import com.nb.bus.stats.entity.StatsAnalyseResult;
  10. import com.nb.bus.utils.ThreadUtil;
  11. import com.nb.common.exception.CustomException;
  12. import com.nb.common.exception.TenantException;
  13. import com.nb.common.result.R;
  14. import io.swagger.annotations.Api;
  15. import io.swagger.annotations.ApiOperation;
  16. import io.swagger.annotations.ApiParam;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.validation.annotation.Validated;
  19. import org.springframework.web.bind.annotation.*;
  20. import java.util.EnumMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.concurrent.CompletableFuture;
  24. /**
  25. * @author lifang
  26. * @version 1.0.0
  27. * @ClassName BusAnalyseController.java
  28. * @Description TODO
  29. * @createTime 2022年04月08日 10:24:00
  30. */
  31. @RestController
  32. @RequestMapping("/stats/analgesia")
  33. @Slf4j
  34. @Api(tags = "镇痛分析",description = "统一权限前缀(stats:analyse),例如新增stats:analyse:add")
  35. public class BusStatsAnalyseController {
  36. private final Map<StatsAnalyseEnum,CommonStats> statsMap=new EnumMap<>(StatsAnalyseEnum.class);
  37. public BusStatsAnalyseController(List<CommonStats> statsList) {
  38. if(CollectionUtil.isNotEmpty(statsList)){
  39. for (CommonStats commonStats : statsList) {
  40. statsMap.merge(commonStats.getId(),commonStats,(t1,t2)->{
  41. throw new RuntimeException(String.format("统计类型【%s】服务类重复",t1.getId()));
  42. });
  43. }
  44. }
  45. }
  46. @PostMapping("/{type}")
  47. @SaCheckPermission("stats:analgesia:query")
  48. @ApiOperation("统计")
  49. 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){
  50. if (StrUtil.isBlank(tenantId)) {
  51. throw new TenantException();
  52. }
  53. if(CollectionUtil.isEmpty(query.getStartTimeRange())){
  54. throw new CustomException("开始时间不能为空");
  55. }
  56. if(CollectionUtil.size(query.getStartTimeRange())!=2){
  57. throw new CustomException("查询开始时间时,需设置【最小开始时间】-【最大开始时间的】时间范围");
  58. }
  59. StatsAnalyseEnum analyseEnum = StatsAnalyseEnum.of(type);
  60. if(analyseEnum==null){
  61. throw new CustomException("分析类型不能为空");
  62. }
  63. CommonStats commonStats=statsMap.get(analyseEnum);
  64. long t0 = System.currentTimeMillis();
  65. List queryResult = commonStats.queryResult(query);
  66. //提示分析时,根据所选设备类型 进行分析判定
  67. long startTime = System.currentTimeMillis();
  68. System.out.println("查询 = " + (startTime - t0));
  69. StatsAnalyseResult result = new StatsAnalyseResult();
  70. ThreadUtil.set(query.getDeviceType());
  71. result.setPie(commonStats.handlePie(queryResult));
  72. long t1 = System.currentTimeMillis();
  73. System.out.println("饼图耗时 = " + (t1 - startTime));
  74. result.setLine(commonStats.handleLine(queryResult, query.getTimeUnit(),query.getStartTimeRange().get(0),query.getStartTimeRange().get(1)));
  75. long t2 = System.currentTimeMillis();
  76. System.out.println("线段图耗时 = " + (t2 - t1));
  77. result.setTable( commonStats.handleTable(queryResult,query.getTimeUnit(),query.getStartTimeRange().get(0),query.getStartTimeRange().get(1)));
  78. long t3 = System.currentTimeMillis();
  79. System.out.println("图表耗时 = " + (t3- t2));
  80. ThreadUtil.remove();
  81. return R.success(result);
  82. }
  83. }