package com.ruoyi.postCheck.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.postCheck.domain.PostCheckedProblem;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.postCheck.domain.homePage.DeptProblemRectificationView;
import com.ruoyi.postCheck.domain.homePage.PostCheckedProblemView;
import com.ruoyi.postCheck.domain.homePage.PostCheckedUnCheckedView;
import com.ruoyi.postCheck.domain.homePage.PostTotalView;
import com.ruoyi.postCheck.domain.problemStatistics.ProblemNumberBase;
import com.ruoyi.postCheck.domain.tools.ProblemCategory;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PutMapping;

/**
 * 岗检问题表Service接口
 *
 * @author csg
 * @date 2023-12-23
 */
public interface IPostCheckedProblemService extends IService<PostCheckedProblem> {
    /**
     * 查询岗检问题表
     *
     * @param id 岗检问题表主键
     * @return 岗检问题表
     */
    public PostCheckedProblem selectPostCheckedProblemById(Long id);

    /**
     * 查询岗检问题表列表
     *
     * @param postCheckedProblem 岗检问题表
     * @return 岗检问题表集合
     */
    public List<PostCheckedProblem> selectPostCheckedProblemList(PostCheckedProblem postCheckedProblem);

    /**
     * 新增岗检问题表
     *
     * @param postCheckedProblemList 岗检问题集合
     * @return 结果
     */
    public int insertPostCheckedProblem(List<PostCheckedProblem> postCheckedProblemList);

    /**
     * 修改岗检问题表
     *
     * @param postCheckedProblemList 岗检问题集合
     * @return 结果
     */
    public int updatePostCheckedProblem(List<PostCheckedProblem> postCheckedProblemList);

    /**
     * 批量删除岗检问题表
     *
     * @param ids 需要删除的岗检问题表主键集合
     * @return 结果
     */
    public int deletePostCheckedProblemByIds(Long[] ids);

    /**
     * 删除岗检问题表信息
     *
     * @param id 岗检问题表主键
     * @return 结果
     */
    public int deletePostCheckedProblemById(Long id);


    /**
     * 指定方案填写人：设置整改责任人
     *
     * @param ids                             多个主键英文逗号拼接
     * @param rectificationResponsibleUserId 整改责任人ID
     * @return
     */
    int setRectificationResponsibleUserId(String ids, Long rectificationResponsibleUserId);

    /**
     * 方案整改：整改实施人填写方案
     *
     * @param id                             问题主键ID
     * @param problemCause                   问题原因
     * @param isImmediatelyCorrected         是否立行立改(1-Yes；2-No；)
     * @param rectificationMeasure           整改措施/建议
     * @param rectificationResponsibleUserId 整改责任人ID
     * @param rectificationPeriod            整改期限
     * @return
     */
    int updateRectificationMeasure(Long id, String problemCause, Integer isImmediatelyCorrected, String rectificationMeasure, Long rectificationResponsibleUserId, Date rectificationPeriod);

    /**
     * 指定专业部门的审核人
     *
     * @param id                             问题主键ID
     * @param specialityDepartmentReviewerId 专业部门的审核人ID
     * @return
     */
    int setSpecialityDepartmentReviewerId(Long id, Long specialityDepartmentReviewerId);


    /**
     * 审核1：部门经理审核
     * @param id
     * @param status 10-部门审核通过；11-部门审核驳回；
     * @param reason 未通过理由
     * @return
     */
    int setDeptApproveTime(Long id, Integer status, String reason);


    /**
     * 审核2：专业部门审核人审核
     * @param id
     * @param status 20-专业部门人审核（非必填）通过；21-专业部门人审核驳回（非必填）；
     * @param reason 未通过理由
     * @return
     */
    int setSpecialityDepartmentReviewTime(Long id, Integer status, String reason);

    /**
     * 实施整改：上传实施照片
     *
     * @param id                          问题主键ID
     * @param isRectificationCompleted    整改情况-是否完成(1-Yes；2-No；)
     * @param rectificationCompletionTime 整改完成时间
     * @param rectificationCompletionImg  整改完成图片磁盘路径
     * @return
     */
    int updateRectificationCompletionImg(Long id, Integer isRectificationCompleted, Date rectificationCompletionTime, String rectificationCompletionImg);


    /**
     * 指定复查人
     *
     * @param id                         问题主键ID
     * @param reviewDepartmentReviewerId 复查人ID
     * @return
     */
    int setReviewDepartmentReviewerId(Long id, Long reviewDepartmentReviewerId);

    /**
     * 审核3：复查部门的审核人复查
     *
     * @param id 问题主键ID
     * @param status 30-复查部门人审核通过；31-复查部门人审核驳回
     * @param reviewConclusion 复查结论
     * @param reason 未通过理由
     */
    int setReviewDepartmentReviewerTime(Long id, Integer status, String reviewConclusion, String reason);


    PostTotalView totalView();

    PostCheckedProblemView checkedProblem();

    Integer userTotal();

    Map<Integer, BigDecimal> problemRectification();

    List<DeptProblemRectificationView>  deptProblemRectification();

    List<PostCheckedUnCheckedView> postChecked(Integer i);

    Integer getPostCountByDeptId(Long deptId);

    /**
     * 按问题属性分组统计问题类别
     * @return
     */
    List<ProblemCategory> problemCategoryByAttribute();
}
