BusStatsAnalyseController.java 3.9 KB

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