package com.ruoyi.postCheck.controller;

import com.ruoyi.common.annotation.Anonymous;
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 io.swagger.annotations.ApiParam;
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.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * 岗检问题表Controller
 *
 * @author csg
 * @date 2023-12-23
 */
@Api(tags = "5.1.2-统计查询-问题统计-生产运行部门")
@RestController
@RequestMapping("/postCheck/productionProblemStatistics")
public class PostCheckedProductionProblemStatisticsController 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 = 2;
        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 = 2;
        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 = 2;
        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 = 2;
        return success(postCheckedProblemService.problemLevelView(type, year, deptId));
    }


    @ApiOperation("5-岗检问题属性及类别占比")
    @GetMapping("/problemAttributeCategoryView/{year}/{deptId}")
    @Anonymous
    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: 职责权限问题（问题类型中文名称）
            problemTotal: 该问题类型的数量总和
            problemComplete: 完整性数量（对该问题类型的拆分1）
            problemSuitable: 适宜性数量（对该问题类型的拆分2）
            problemEffective: 有效性数量（对该问题类型的拆分3）
        },
        {
            problemCategoryType: 2
            problemCategoryType: 工作内容问题
            problemTotal: 6
            problemComplete: 1
            problemSuitable: 2
            problemEffective: 3
        },
        {
            problemCategoryType: 3
            problemCategoryType: 工作标准问题
            problemComplete: 完整性数量
            problemSuitable: 适宜性数量
            problemEffective: 有效性数量
        }
        ……
        ……
        ……
    ]
         */



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


    @ApiOperation("6-历年岗检问题数量")
    @GetMapping("/historyProblemNumberView/{year}/{deptId}")
    public AjaxResult historyProblemNumberView(
            @ApiParam(name = "year", value = "年份", required = true)
            @PathVariable("year") String year,

            @ApiParam(name = "deptId", value = "部门ID", required = true)
            @PathVariable("deptId") String deptId){ //notParam不是参数-是返回信息-方便接口联调
//         查询问题表
//        select * from "public"."post_checked_problem";
//        GROUP BY problem_attribute -- 问题属性（1-完整问题；2-有效性问题；3-适宜性问题；）
//        GROUP BY problem_category -- 问题类别（职责权限问题、工作内容问题、工作标准问题、考核奖励问题、任职资格问题、其他）


        List<HistoryProblemNumberView> list = new ArrayList<>();
        HistoryProblemNumberView data = new HistoryProblemNumberView();
        data.setCheckYear(new Date());
//        data.set问题总数
//        data.set完成性
//        data.set适宜性
//        data.set有效性
//        data.set职责权限
//        data.set工作内容
//        data.set工作标准
//        data.set考核奖励
//        data.set任职资格
//        data.set其他

        Integer type = 2;
        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(2);
        return success(postCheckedProblemService.deptDetaailView(model));
    }
}
