package cn.sh.stc.sict.theme.hphy.controller.web;

import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.theme.hphy.model.HphyDoctorDataStatistics;
import cn.sh.stc.sict.theme.hphy.service.HphyDoctorDataStatisticsService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;


/**
 * 高血压-医生画像-统计信息
 *
 * @author F_xh。
 * @date 2020-09-29 15:05:29
 */
@RestController
@RequestMapping("/hphydoctordatastatistics")
@AllArgsConstructor
@Slf4j
@Api(tags = "[D]高血压-医生画像-统计信息")
public class HphyDoctorDataStatisticsController {

    private HphyDoctorDataStatisticsService hphyDoctorDataStatisticsService;

    /**
     * 1. 医生接诊疾病图谱
     * 2. 医生评价梯度值
     * 3. 医患精准匹配的权重值
     * 4. 疾病分类：
     * 4.1 医生评价雷达图
     * 4.2 患者病历聚类展示
     * 4.3 接诊患者年龄分布
     * 4.4 接诊患者性别分布
     * 4.5 接诊患者地域分布
     * 4.6 接诊患者的学历分布
     * 4.7 接诊患者的职业分布
     * 4.8 接诊患者的婚姻分布
     * 4.9 单次接诊费用分布
     * 4.10 复诊患者占比分布
     * 4.11 患者住院天数分布
     * 4.12 患者满意度
     * 4.13 开具药品分布
     * 4.14 开具检查项目分布
     * 4.15 开具检验项目分布
     * 4.16 接诊患者检查结果分布
     * 4.17 接诊患者监测指标分布
     * 4.17.1 血压监测指标
     * 4.17.2 血糖监测指标
     * 4.17.3 血清低密度脂蛋白胆固醇监测指标
     * 4.17.4 血清甘油三酯监测指标
     * 4.17.5 血清高密度脂蛋白胆固醇监测指标
     * 4.17.6 血清总胆固醇监测指标
     * 4.17.7 β2微球蛋白监测指标
     * 4.17.8 肌酐监测指标
     * 4.17.9 血清尿酸监测指标
     */

    @ApiOperation("获取医生接诊疾病分类 list")
    @GetMapping("/disease/list")
    public R<List<HphyDoctorDataStatistics>> getDiseaseList(@RequestParam("doctorId") Long doctorId) {
        LambdaQueryWrapper<HphyDoctorDataStatistics> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(HphyDoctorDataStatistics::getDiseaseId, HphyDoctorDataStatistics::getDiseaseName)
                .eq(HphyDoctorDataStatistics::getDoctorId, doctorId)
                .groupBy(HphyDoctorDataStatistics::getDiseaseId);

        List<HphyDoctorDataStatistics> list = hphyDoctorDataStatisticsService.list(wrapper);

        return new R<>(list);
    }

    @ApiOperation("获取医生画像详细数据")
    @GetMapping("/detail")
    public R getDoctorStatistics(@RequestParam("doctorId") Long doctorId,
                                 @RequestParam("diseaseId") Long diseaseId) {
        /* map<groupType, map<typeCode, list<key, value>>> */
        Map<String, Map<String, List<HphyDoctorDataStatistics>>> tree = hphyDoctorDataStatisticsService.treeBydoctorId(doctorId, diseaseId);

        return new R(tree);
    }

}
