package com.casic.missiles.service.business;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.casic.missiles.dto.BaseApprovalSubmitRequest;
import com.casic.missiles.dto.ReturnDTO;
import com.casic.missiles.dto.business.outsource.*;
import com.casic.missiles.dto.flowable.ApprovalDeleteRequest;
import com.casic.missiles.model.business.BusinessOutsourceProject;

import java.util.List;

/**
 * <p>
 * 分包项目表 服务类
 * </p>
 *
 * @author wangpeng
 * @since 2023-03-23
 */
public interface IBusinessOutsourceProjectService extends IService<BusinessOutsourceProject> {

    List<OutsourceProjectApprovalListResponse> projectApplyApprovalListPage(OutsourceProjectApprovalListRequest request, Page<OutsourceProjectApprovalListResponse> page) throws Exception;

    ReturnDTO<OutsourceProjectSaveResponse> saveProjectApply(BusinessOutsourceProject outsourceProject);

    ReturnDTO projectApplyDraftUpdate(BusinessOutsourceProject outsourceProject);

    ReturnDTO submitProjectApply(BaseApprovalSubmitRequest request);

    ReturnDTO projectApplyDelete(Long id);

    ReturnDTO<BusinessOutsourceProject> projectDetail(Long id) throws Exception;

    ReturnDTO<BusinessOutsourceProject> projectApplyDetail(OutsourceProjectDetailRequest request) throws Exception;

    ReturnDTO projectApplyApprovalDelete(ApprovalDeleteRequest request);

    ReturnDTO projectApplyFailUpdate(BusinessOutsourceProject outsourceProject);

    Page<BusinessOutsourceProject> projectApplyListPage(OutsourceProjectApplyListRequest request, Page<BusinessOutsourceProject> page);

    ReturnDTO<OutsourceProjectSaveResponse> saveOrUpdateProjectCheck(OutsourceProjectCheckSaveOrUpdateRequest request);

    ReturnDTO submitProjectCheck(BaseApprovalSubmitRequest request);

    ReturnDTO projectCheckDelete(Long id);

    ReturnDTO projectCheckApprovalDelete(ApprovalDeleteRequest request);

    ReturnDTO projectCheckFailUpdate(OutsourceProjectCheckSaveOrUpdateRequest request);

    Page<BusinessOutsourceProject> projectCheckListPage(OutsourceProjectCheckListRequest request, Page<BusinessOutsourceProject> page);
}
