package com.diagbot.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.diagbot.annotation.SysLogger;
import com.diagbot.dto.BasDeptInfoDTO;
import com.diagbot.dto.BehInfoForH5DTO;
import com.diagbot.dto.DeptNumDTO;
import com.diagbot.dto.EntryNumDTO;
import com.diagbot.dto.LevelPercentDTO;
import com.diagbot.dto.RespDTO;
import com.diagbot.facade.StatisticsForH5Facade;
import com.diagbot.vo.BehInfoForH5VO;
import com.diagbot.vo.FilterVO;
import com.diagbot.vo.HospitalIdVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * @Description:
 * @Author:zhaops
 * @time: 2022/5/6 15:24
 */
@RequestMapping("/h5/statistics")
@RestController
@Api(value = "H5数据统计相关API", tags = { "H5数据统计相关API" })
@SuppressWarnings("unchecked")
public class StatisticsForH5Controller {
    @Autowired
    StatisticsForH5Facade statisticsForH5Facade;

    @ApiOperation(value = "单项否决占比[by:zhaops]",
            notes = "startDate： 统计时间（起始时间）<br>" +
                    "endDate： 统计时间（截止时间）<br>" +
                    "hospitalId： 医院id<br>" +
                    "deptName： 科室名称<br>" +
                    "deptId： 科室id<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryRejectDistribution")
    @SysLogger("entryRejectDistribution")
    public RespDTO<List<EntryNumDTO>> entryRejectDistribution(@RequestBody @Valid FilterVO filterVO) {
        List<EntryNumDTO> data = statisticsForH5Facade.entryRejectDistribution(filterVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "病历等级占比[by:zhaops]",
            notes = "startDate： 统计时间（起始时间）<br>" +
                    "endDate： 统计时间（截止时间）<br>" +
                    "hospitalId： 医院id<br>" +
                    "deptName： 科室名称<br>" +
                    "deptId： 科室id<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/levelDistribution")
    @SysLogger("levelDistribution")
    public RespDTO<List<LevelPercentDTO>> levelDistribution(@RequestBody @Valid FilterVO filterVO) {
        List<LevelPercentDTO> data = statisticsForH5Facade.levelDistribution(filterVO);
        return RespDTO.onSuc(data);
    }


    @ApiOperation(value = "病历扣分大于等于5占比[by:zhaops]",
            notes = "startDate： 统计时间（起始时间）<br>" +
                    "endDate： 统计时间（截止时间）<br>" +
                    "hospitalId： 医院id<br>" +
                    "deptName： 科室名称<br>" +
                    "deptId： 科室id<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/deductGT5Distribution")
    @SysLogger("deductGT5Distribution")
    public RespDTO<List<DeptNumDTO>> deductGT5Distribution(@RequestBody @Valid FilterVO filterVO) {
        List<DeptNumDTO> data = statisticsForH5Facade.deductGT5Distribution(filterVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "病历详情[by:zhaops]",
            notes = "startDate： 统计时间（起始时间）<br>" +
                    "endDate： 统计时间（截止时间）<br>" +
                    "hospitalId： 医院id<br>" +
                    "deptName： 科室名称<br>" +
                    "deptId： 科室id<br>" +
                    "level： 评分等级<br>" +
                    "isReject： 单项否决标志<br>" +
                    "caseEntryId： 条目id<br>" +
                    "deductScore： 扣分值（5）<br>" +
                    "orders：排序<br>" +
                    "orders.asc：排序方式（true-正序，false-反序）<br>" +
                    "orders.column：排序列名 例：1、leaveHospitalDate；2、指定顺序排序 field( level, '甲','乙','丙')<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getBehInfoPage")
    @SysLogger("getBehInfoPage")
    public RespDTO<IPage<BehInfoForH5DTO>> getBehInfoPage(@RequestBody @Valid BehInfoForH5VO behInfoForH5VO) {
        IPage<BehInfoForH5DTO> data = statisticsForH5Facade.getBehInfoPage(behInfoForH5VO);
        return RespDTO.onSuc(data);
    }


    @ApiOperation(value = "获取病历质控一览下医院科室下拉列表信息[by:zhaops]",
            notes = "hospitalId: 医院id")
    @PostMapping("/getDeptList")
    @SysLogger("getDeptList")
    public RespDTO<List<BasDeptInfoDTO>> getDeptList(@RequestBody HospitalIdVO hospitalIdVO) {
        return RespDTO.onSuc(statisticsForH5Facade.listForUser(hospitalIdVO));
    }
}
