package com.ruoyi.postCheck.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.SysDeptEnum;
import com.ruoyi.postCheck.domain.problemStatistics.*;
import com.ruoyi.postCheck.model.DeptDetaailViewModel;
import com.ruoyi.postCheck.service.IPostCheckedProblemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

/**
 * 岗检问题表Controller
 *
 * @author csg
 * @date 2023-12-23
 */
@Api(tags = "5.1.1-统计查询-问题统计-职能管理部门")
@RestController
@RequestMapping("/postCheck/functionProblemStatistics")
public class PostCheckedFunctionProblemStatisticsController extends BaseController {
    @Autowired
    private IPostCheckedProblemService postCheckedProblemService;


    @ApiOperation("1-职能部各部门问题数量对比")
    @GetMapping("/functionDeptProblemContrast/{year}")
//    @ApiImplicitParam(name = "notParam", value = "V2方便接口联调-这是返回信息", dataType = "FunctionDeptProblemContrastView", dataTypeClass = FunctionDeptProblemContrastView.class)
    public AjaxResult functionDeptProblemContrast(@PathVariable("year") String year) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        GROUP BY problem_attribute -- 问题属性（1-完整问题；2-有效性问题；3-适宜性问题；）
//        GROUP BY problem_category -- 问题类别（职责权限问题、工作内容问题、工作标准问题、考核奖励问题、任职资格问题、其他）
        List<FunctionDeptProblemContrastView> list = new ArrayList<>();

        Integer type = 1;
        List<Map<String, Object>> deptIdListByType = postCheckedProblemService.getDeptIdListByType(type);
        if (deptIdListByType != null && deptIdListByType.size() > 0) {
            for (Map<String, Object> map : deptIdListByType) {
                FunctionDeptProblemContrastView data = new FunctionDeptProblemContrastView();
                data.setDeptId(Long.parseLong(map.get("deptId").toString()));
                data.setDeptName(String.valueOf(map.get("deptName")));
                postCheckedProblemService.functionDeptProblemContrast(data, year);
                list.add(data);
            }
            {
                FunctionDeptProblemContrastView data = new FunctionDeptProblemContrastView();
                data.setDeptId(0L);
                data.setDeptName("全部");
                Integer i = list.stream().map(FunctionDeptProblemContrastView::getProblemTotal).reduce(Integer::sum).get();
                data.setProblemTotal(i);
                list.add(0,data);
            }
        }

        return success(list);
    }


    @ApiOperation("2-岗检覆盖率")
    @GetMapping("/coverageRateView/{year}/{selType}")
    public AjaxResult coverageRateView(@PathVariable("year") String year,@PathVariable("selType") String selType) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        status = 40    状态：1-待指定整改人（问题录入完成时）；2-待填写方案（部门管理员指定整改人后）；3-方案填写完成；10-部门审核通过；11-部门审核驳回；20-专业部门人审核（非必填）通过；21-专业部门人审核驳回（非必填）；30-整改人待上传实施（整改人上传实施图片）；31-上传实施照片完成；40-复查部门人审核通过；41-复查部门人审核驳回
//        is_rectification_completed = 1 整改情况-是否完成(1-Yes；2-No；)


        Integer type = 1;
        return success(postCheckedProblemService.coverageRateView(type,year,selType));
    }

    @ApiOperation("3-岗检问题职责类别占比")
    @GetMapping("/dutyTypeProblemStatisticsView/{year}/{deptId}")
    public AjaxResult dutyTypeProblemStatisticsView(@PathVariable("year") String year,@PathVariable("deptId") String deptId) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        group by duty_type 职责类别：1-业务职责；2-党建及党风廉政；3-安全环保职责；4-合规保密职；


        Integer type = 1;
        return success(postCheckedProblemService.dutyTypeProblemStatisticsView(type,year,deptId));
    }

    @ApiOperation("4-岗检问题级别占比")
    @GetMapping("/problemLevelView/{year}/{deptId}")
    public AjaxResult problemLevelView(@PathVariable("year") String year,@PathVariable("deptId") String deptId) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        group by problem_level   问题等级（一般、重要）

        Integer type = 1;
        return success(postCheckedProblemService.problemLevelView(type, year, deptId));
    }


    @ApiOperation("5-岗检问题属性及类别占比")
    @GetMapping("/problemAttributeCategoryView/{year}/{deptId}")
    public AjaxResult problemAttributeCategoryView(@PathVariable("year") String year,@PathVariable("deptId") Long deptId) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        GROUP BY problem_attribute -- 问题属性（1-完整问题；2-有效性问题；3-适宜性问题；）
//        GROUP BY problem_category -- 问题类别（职责权限问题、工作内容问题、工作标准问题、考核奖励问题、任职资格问题、其他）


        List<ProblemAttributeCategoryView> list = new ArrayList<>();
        /*
        [
        {
            problemCategoryType: 1
            problemCategoryType: 职责权限问题
            problemComplete: 完整性数量
            problemSuitable: 适宜性数量
            problemEffective: 有效性数量
        },
        {
            problemCategoryType: 2
            problemCategoryType: 工作内容问题
            problemComplete: 完整性数量
            problemSuitable: 适宜性数量
            problemEffective: 有效性数量
        },
        {
            problemCategoryType: 3
            problemCategoryType: 工作标准问题
            problemComplete: 完整性数量
            problemSuitable: 适宜性数量
            problemEffective: 有效性数量
        }
        ……
        ……
        ……
    ]
         */
        ProblemAttributeCategoryView data1 = new ProblemAttributeCategoryView();
        data1.setProblemCategoryType(1);
        data1.setProblemCategoryTypeView("职责权限问题");
        data1.setProblemComplete(1);// 完整性数量
        data1.setProblemSuitable(2);// 适宜性数量
        data1.setProblemEffective(3);// 有效性数量
        list.add(data1);

        ProblemAttributeCategoryView data2 = new ProblemAttributeCategoryView();
        data2.setProblemCategoryType(2);
        data2.setProblemCategoryTypeView("工作内容问题");
        data2.setProblemComplete(2);// 完整性数量
        data2.setProblemSuitable(2);// 适宜性数量
        data2.setProblemEffective(3);// 有效性数量
        list.add(data2);

        ProblemAttributeCategoryView data3 = new ProblemAttributeCategoryView();
        data3.setProblemCategoryType(3);
        data3.setProblemCategoryTypeView("工作标准问题");
        data3.setProblemComplete(3);// 完整性数量
        data3.setProblemSuitable(2);// 适宜性数量
        data3.setProblemEffective(3);// 有效性数量
        list.add(data3);

        ProblemAttributeCategoryView data4 = new ProblemAttributeCategoryView();
        data4.setProblemCategoryType(4);
        data4.setProblemCategoryTypeView("考核奖励问题");
        data4.setProblemComplete(4);// 完整性数量
        data4.setProblemSuitable(2);// 适宜性数量
        data4.setProblemEffective(3);// 有效性数量
        list.add(data4);

        ProblemAttributeCategoryView data5 = new ProblemAttributeCategoryView();
        data5.setProblemCategoryType(5);
        data5.setProblemCategoryTypeView("任职资格问题");
        data5.setProblemComplete(5);// 完整性数量
        data5.setProblemSuitable(2);// 适宜性数量
        data5.setProblemEffective(3);// 有效性数量
        list.add(data5);

        ProblemAttributeCategoryView data6 = new ProblemAttributeCategoryView();
        data6.setProblemCategoryType(6);
        data6.setProblemCategoryTypeView("其他");
        data6.setProblemComplete(6);// 完整性数量
        data6.setProblemSuitable(2);// 适宜性数量
        data6.setProblemEffective(3);// 有效性数量
        list.add(data6);
//=======================以上是模拟数据供参考=================

        //1 职能部门 2 生产部门 3 其他
        Integer type = SysDeptEnum.TYPE_ZN.getValue();
        return success(postCheckedProblemService.problemAttributeCategoryView(type, year, deptId));
    }


    @ApiOperation("6-历年岗检问题数量")
    @GetMapping("/historyProblemNumberView/{year}/{deptId}")
    public AjaxResult historyProblemNumberView(@PathVariable("year") String year,@PathVariable("deptId") String deptId){ //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        GROUP BY problem_attribute -- 问题属性（1-完整问题；2-有效性问题；3-适宜性问题；）
//        GROUP BY problem_category -- 问题类别（职责权限问题、工作内容问题、工作标准问题、考核奖励问题、任职资格问题、其他）


        Integer type = 1;
        return success(postCheckedProblemService.historyProblemNumberView(type, year, deptId));
    }

    @ApiOperation("7-部门详情")
    @GetMapping("/deptDetaailView")
    public AjaxResult deptDetaailView(DeptDetaailViewModel model) { //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        group by duty_type 职责类别：1-业务职责；2-党建及党风廉政；3-安全环保职责；4-合规保密职；
//        GROUP BY problem_attribute -- 问题属性（1-完整问题；2-有效性问题；3-适宜性问题；）
        //TODO 第一步：得到各个部门ID、部门名称、问题总数量、重要问题数量、一般问题数量、统计时间
        //TODO 第二步：得到4个职责类别的问题数量及整改完成数量(1-业务职责；2-党建及党风廉政；3-安全环保职责；4-合规保密职；)
        //TODO 第三步：设置部门的整改率：遍历职责类别计算整改率

        model.setType(1);
        return success(postCheckedProblemService.deptDetaailView(model));
    }
}
