package com.ruoyi.cs.service.impl;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.cs.domain.CsApprovalRecord;
import com.ruoyi.cs.mapper.CsApprovalRecordMapper;
import com.ruoyi.cs.service.ICsApprovalRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 审核记录Service业务层处理
 *
 * @author cc
 * @date 2024-04-30
 */
@Service
public class CsApprovalRecordServiceImpl implements ICsApprovalRecordService
{
    @Autowired
    private CsApprovalRecordMapper csApprovalRecordMapper;

    /**
     * 查询审核记录
     *
     * @param approvalRecordId 审核记录主键
     * @return 审核记录
     */
    @Override
    public CsApprovalRecord selectCsApprovalRecordByApprovalRecordId(String approvalRecordId)
    {
        return csApprovalRecordMapper.selectCsApprovalRecordByApprovalRecordId(approvalRecordId);
    }

    /**
     * 查询审核记录列表
     *
     * @param csApprovalRecord 审核记录
     * @return 审核记录
     */
    @Override
    public List<CsApprovalRecord> selectCsApprovalRecordList(CsApprovalRecord csApprovalRecord)
    {
        return csApprovalRecordMapper.selectCsApprovalRecordList(csApprovalRecord);
    }

    /**
     * 新增审核记录
     *
     * @param csApprovalRecord 审核记录
     * @return 结果
     */
    @Override
    public int insertCsApprovalRecord(CsApprovalRecord csApprovalRecord)
    {
        return csApprovalRecordMapper.insertCsApprovalRecord(csApprovalRecord);
    }

    /**
     * 修改审核记录
     *
     * @param csApprovalRecord 审核记录
     * @return 结果
     */
    @Override
    public int updateCsApprovalRecord(CsApprovalRecord csApprovalRecord)
    {
        return csApprovalRecordMapper.updateCsApprovalRecord(csApprovalRecord);
    }

    /**
     * 批量删除审核记录
     *
     * @param approvalRecordIds 需要删除的审核记录主键
     * @return 结果
     */
    @Override
    public int deleteCsApprovalRecordByApprovalRecordIds(String[] approvalRecordIds)
    {
        return csApprovalRecordMapper.deleteCsApprovalRecordByApprovalRecordIds(approvalRecordIds);
    }

    /**
     * 删除审核记录信息
     *
     * @param approvalRecordId 审核记录主键
     * @return 结果
     */
    @Override
    public int deleteCsApprovalRecordByApprovalRecordId(String approvalRecordId)
    {
        return csApprovalRecordMapper.deleteCsApprovalRecordByApprovalRecordId(approvalRecordId);
    }

    /**
     * 覆盖删除 申请单的审核记录
     * @param formId 资源/工单 ID
     * @param formType 申请单类型(0-资源, 1-工单)
     * @return
     */
    @Override
    public int deleteCoverApprovalRecordByApplyIdType(String formId, String formType) {
        return csApprovalRecordMapper.deleteCoverApprovalRecordByApplyIdType(formId, formType);
    }
    /**
     * 查询审核记录（根据审批流程ID）
     *
     * @param approvalInfoId 审批流程ID
     * @return 审核记录
     */
    @Override
    public CsApprovalRecord selectCsApprovalRecordByApprovalInfoId(String approvalInfoId) {
        return csApprovalRecordMapper.selectCsApprovalRecordByApprovalInfoId(approvalInfoId);
    }

    /**
     * 删除审核记录信息（根据审批流程ID）
     *
     * @param approvalInfoId 审批流程ID
     * @return 结果
     */
    @Override
    public int deleteCsApprovalRecordByApprovalInfoId(String approvalInfoId) {
        return csApprovalRecordMapper.deleteCsApprovalRecordByApprovalInfoId(approvalInfoId);
    }

    @Override
    public int deleteCsApprovalRecordByFormId(String formId) {
        return csApprovalRecordMapper.deleteCsApprovalRecordByFormId(formId);
    }

    /**
     * 修改审核记录-审批意见
     * @param recordId  审核记录id
     * @param newOpinions 新审批意见
     * @return
     */
    @Override
    public int editRecordApproverOpinions(String recordId, String newOpinions) {
        CsApprovalRecord csApprovalRecord = csApprovalRecordMapper.selectCsApprovalRecordByApprovalRecordId(recordId);
        Long userId = SecurityUtils.getUserId();
        if(!userId.equals(csApprovalRecord.getApproverUserId())){
            throw new ServiceException("没有编辑权限");
        }
        csApprovalRecord.setApproverOpinions(newOpinions);
        return csApprovalRecordMapper.updateCsApprovalRecord(csApprovalRecord);
    }

    /**
     * 查询最后一条审核记录（根据资源/工单 ID）
     *
     * @param formId 资源/工单 ID
     * @return 审核记录
     */
    @Override
    public CsApprovalRecord selectEndCsApprovalRecordByFormId(String formId) {
        return csApprovalRecordMapper.selectEndCsApprovalRecordByFormId(formId);
    }
}
