package com.hzs.system.sys.service;

import com.hzs.common.domain.system.sys.ext.SysApprovalBusinessExt;
import com.hzs.system.base.dto.ApprovalPushInfoDTO;
import com.hzs.system.sys.dto.ApprovalSubmitDTO;
import com.hzs.system.sys.dto.LoginUser;
import com.hzs.system.sys.param.ApprovalCustomParam;

import java.util.List;

/**
 * 审批业务处理
 */
public interface IApprovalService {

    /**
     * 提交审批
     *
     * @param param        审批提交数据
     * @param loginUser    登录用户
     * @param obj          特殊业务实体（当不需要正常业务回调处理时，可以进行特殊业务处理）
     * @param pushInfoList 批量推送消息列表
     * @return
     */
    String submit(ApprovalSubmitDTO param, LoginUser loginUser, Object obj, List<ApprovalPushInfoDTO> pushInfoList);

    /**
     * 批量提交审批
     *
     * @param paramList 审批提交数据
     * @param loginUser 登录用户
     * @return
     */
    String submitBatch(List<ApprovalSubmitDTO> paramList, LoginUser loginUser);

    /**
     * 审批
     *
     * @param approvalBusinessExt 审批信息
     * @param approveOperation    审批操作（1=通过，2=驳回） -- EApproveOperation
     * @param remark              审批备注
     * @param loginUser           登录用户
     * @return
     */
    String approval(SysApprovalBusinessExt approvalBusinessExt, Integer approveOperation, String remark, LoginUser loginUser);

    /**
     * 提交自定义签呈
     *
     * @param param     签呈入参
     * @param userId    当前用户
     * @param pkCountry 所属国家
     * @return
     */
    String submitCustom(ApprovalCustomParam param, Long userId, Integer pkCountry);

    /**
     * 暂时自定义签呈
     *
     * @param param     签呈入参
     * @param userId    当前用户
     * @param pkCountry 所属国家
     * @return
     */
    String stagingCustom(ApprovalCustomParam param, Long userId, Integer pkCountry);

}
