| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package com.nb.bus.controller;
- import cn.dev33.satoken.annotation.SaCheckPermission;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.StrUtil;
- 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.common.util.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.Date;
- import java.util.EnumMap;
- import java.util.List;
- import java.util.Map;
- /**
- * @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(value = "统计",notes = "权限 【stats:analgesia:*】 模糊匹配")
- 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())&&CollectionUtil.isEmpty(query.getClinicStartTimeRange())){
- throw new CustomException("开始时间不能为空");
- }
- if(CollectionUtil.isNotEmpty(query.getStartTimeRange())&&CollectionUtil.isNotEmpty(query.getClinicStartTimeRange())){
- throw new CustomException("开始时间参数有误");
- }
- if(CollectionUtil.size(query.getStartTimeRange())!=2&&CollectionUtil.size(query.getClinicStartTimeRange())!=2){
- throw new CustomException("查询开始时间时,需设置【最小开始时间】-【最大开始时间的】时间范围");
- }
- StatsAnalyseEnum analyseEnum = StatsAnalyseEnum.of(type);
- if(analyseEnum==null){
- throw new CustomException("分析类型不能为空");
- }
- CommonStats commonStats=statsMap.get(analyseEnum);
- List<Date> startTimRange=CollectionUtil.isEmpty(query.getStartTimeRange())?query.getClinicStartTimeRange():query.getStartTimeRange();
- List queryResult = commonStats.queryResult(query);
- //提示分析时,根据所选设备类型 进行分析判定
- StatsAnalyseResult result = new StatsAnalyseResult();
- ThreadUtil.set(query.getDeviceType());
- result.setPie(commonStats.handlePie(queryResult));
- result.setLine(commonStats.handleLine(queryResult, query.getTimeUnit(),startTimRange.get(0),startTimRange.get(1)));
- result.setTable( commonStats.handleTable(queryResult,query.getTimeUnit(),startTimRange.get(0),startTimRange.get(1)));
- ThreadUtil.remove();
- return R.success(result);
- }
- }
|