package com.zt.plat.module.qms.resource.record.service.recordapply;

import com.alibaba.fastjson.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.api.task.dto.QmsBpmDTO;
import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyPageReqVO;
import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyRespVO;
import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplySaveReqVO;
import com.zt.plat.module.qms.resource.record.dal.dataobject.recordapply.RecordApplyDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 文件记录通用申请 Service 接口
 *
 * @author 后台管理
 */
public interface RecordApplyService {

    /**
     * 创建文件记录通用申请
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    RecordApplyRespVO createRecordApply(@Valid RecordApplySaveReqVO createReqVO);

    /**
     * 更新文件记录通用申请
     *
     * @param updateReqVO 更新信息
     */
    RecordApplyRespVO updateRecordApply(@Valid RecordApplySaveReqVO updateReqVO);

    /**
     * 删除文件记录通用申请
     *
     * @param id 编号
     */
    void deleteRecordApply(Long id);

    /**
    * 批量删除文件记录通用申请
    *
    * @param ids 编号
    */
    void deleteRecordApplyListByIds(List<Long> ids);

    /**
     * 获得文件记录通用申请
     *
     * @param id 编号
     * @return 文件记录通用申请
     */
    RecordApplyDO getRecordApply(Long id);

    /**
     * 获得文件记录通用申请分页
     *
     * @param pageReqVO 分页查询
     * @return 文件记录通用申请分页
     */
    PageResult<RecordApplyDO> getRecordApplyPage(RecordApplyPageReqVO pageReqVO);

    /**
     * 创建临时数据
     *
     * @param createReqVO 创建信息
     * @return 申请信息
     */
    CommonResult<RecordApplyRespVO> createApplyData(@Valid RecordApplySaveReqVO createReqVO);

    /**
     * 提交申请-发起流程
     *
     * @param param 参数
     * @return 申请信息
     */
    CommonResult<RecordApplyRespVO> submitRecordApply(@Valid RecordApplySaveReqVO param);

    /**
     * 流程回调
     *
     * @param reqDTO 回调数据
     * @return 结果
     */
    CommonResult<JSONObject> callback(QmsBpmDTO reqDTO);

}