package com.ruoyi.postCheck.service.impl;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.ruoyi.common.constant.PostCheckedProblemEnum;
import com.ruoyi.common.constant.PostPlanEnum;
import com.ruoyi.common.constant.PostProgrammeEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.postCheck.mapper.PostProgrammeMapper;
import com.ruoyi.postCheck.domain.PostProgramme;
import com.ruoyi.postCheck.service.IPostProgrammeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

/**
 * 岗检方案Service业务层处理
 *
 * @author csg
 * @date 2023-12-19
 */
@Service
public class PostProgrammeServiceImpl extends ServiceImpl<PostProgrammeMapper, PostProgramme> implements IPostProgrammeService {

    @Autowired
    private PostProgrammeMapper postProgrammeMapper;

    /**
     * 查询岗检方案
     *
     * @param id 岗检方案主键
     * @return 岗检方案
     */
    @Override
    public PostProgramme selectPostProgrammeById(Long id) {
        return postProgrammeMapper.selectPostProgrammeById(id);
    }

    /**
     * 查询岗检方案列表
     *
     * @param postProgramme 岗检方案
     * @return 岗检方案
     */
    @Override
    public List<PostProgramme> selectPostProgrammeList(PostProgramme postProgramme) {
        return postProgrammeMapper.selectPostProgrammeList(postProgramme);
    }

    /**
     * 新增岗检方案
     *
     * @param postProgramme 岗检方案
     * @return 结果
     */
    @Override
    public int insertPostProgramme(PostProgramme postProgramme) {
        //TODO 自增主键修改为-MyBatis-Plus雪花算法(截取5位解决VUE精度丢失BUG)-系统登录日志
        if (postProgramme.getId() == null)
            postProgramme.setId(Long.parseLong(IdWorker.getIdStr().substring(4)));
        postProgramme.setCreateDefault();

        postProgramme.setSubmitDate(new Date());//提交日期
        postProgramme.setStatus(PostProgrammeEnum.STATUS_WAIT.getValue());//状态：1-待审核；2-审核中；3-通过；4-驳回；
        postProgramme.setStatusHr(PostProgrammeEnum.STATUS_HR_WAIT.getValue());//状态：1-人力资源审批-状态：1-待审核；3-通过；4-驳回；
        return postProgrammeMapper.insertPostProgramme(postProgramme);
    }

    /**
     * 修改岗检方案
     *
     * @param postProgramme 岗检方案
     * @return 结果
     */
    @Override
    public int updatePostProgramme(PostProgramme postProgramme) {
        postProgramme.setUpdateDefault();
        return postProgrammeMapper.updatePostProgramme(postProgramme);
    }

    /**
     * 批量删除岗检方案
     *
     * @param ids 需要删除的岗检方案主键
     * @return 结果
     */
    @Override
    public int deletePostProgrammeByIds(Long[] ids) {
        return postProgrammeMapper.deletePostProgrammeByIds(ids);
    }

    /**
     * 删除岗检方案信息
     *
     * @param id 岗检方案主键
     * @return 结果
     */
    @Override
    public int deletePostProgrammeById(Long id) {
        return postProgrammeMapper.deletePostProgrammeById(id);
    }

    /**
     * 审核1：岗检方案审核-HR
     *
     * @param id       主键ID
     * @param statusHr 1-人力资源审批-状态：1-待审核；3-通过；4-驳回；
     * @param reasonHr 1-人力资源审批-未通过理由
     * @return
     */
    @Override
    public int approveHr(Long id, Integer statusHr, String reasonHr) {

        if (id == null || statusHr == null) {
            return 0;
        }
        //状态错误
        if (statusHr != PostProgrammeEnum.STATUS_HR_PASS.getValue() && statusHr != PostProgrammeEnum.STATUS_HR_BACK.getValue()) {
            return 0;
        }

        //未写理由
        if (statusHr == PostProgrammeEnum.STATUS_HR_BACK.getValue() && StringUtils.isBlank(reasonHr)) {
            return 0;
        }

        PostProgramme data = new PostProgramme();

        data.setId(id);
        data.setStatusHr(statusHr);
        data.setReasonHr(reasonHr);
        data.setDateHr(DateUtils.getNowDate());
        data.setStatusHrUserId(SecurityUtils.getUserId());
        if (statusHr == PostPlanEnum.STATUS_HR_PASS.getValue()) {
            data.setStatus(PostProgrammeEnum.STATUS_ING.getValue());//审核中
            data.setStep(PostProgrammeEnum.STEP_HR.getValue());
        } else {
            data.setStatus(PostPlanEnum.STATUS_BACK.getValue());//驳回
        }
        return postProgrammeMapper.updatePostProgramme(data);
    }

    /**
     * 审核2：岗检方案审核-Icfa
     *
     * @param id       主键ID
     * @param statusIcfa 2-内控法务部审批-状态：1-待审核；3-通过；4-驳回；
     * @param reasonIcfa 2-内控法务部审批-未通过理由
     * @return
     */
    @Override
    public int approveIcfa(Long id, Integer statusIcfa, String reasonIcfa) {

        if (id == null || statusIcfa == null) {
            return 0;
        }
        //状态错误
        if (statusIcfa != PostProgrammeEnum.STATUS_ICFA_PASS.getValue() && statusIcfa != PostProgrammeEnum.STATUS_ICFA_BACK.getValue()) {
            return 0;
        }
        //未写理由
        if (statusIcfa == PostProgrammeEnum.STATUS_ICFA_BACK.getValue() && StringUtils.isBlank(reasonIcfa)) {
            return 0;
        }

        PostProgramme data = new PostProgramme();

        data.setId(id);
        data.setStatusIcfa(statusIcfa);
        data.setReasonIcfa(reasonIcfa);
        data.setStatus(statusIcfa);//最终审核结果
        if (statusIcfa == PostProgrammeEnum.STATUS_ICFA_PASS.getValue()) {
            data.setStep(PostProgrammeEnum.STEP_ICFA.getValue());
        }
        data.setStatusIcfaUserId(SecurityUtils.getUserId());
        data.setDateIcfa(DateUtils.getNowDate());
        return postProgrammeMapper.updatePostProgramme(data);


    }
}
