package com.xisc.pm.app.service;

import java.util.List;

import com.xisc.pm.app.service.autoboard.dto.PmAutoBoardExecResult;
import com.xisc.pm.app.service.autoboard.dto.PmAutoBoardPolicyGroupDTO;
import com.xisc.pm.app.service.autoboard.dto.PmAutoPdLog;
import com.xisc.pm.app.service.autoboard.dto.PmAutoPdPublishedDTO;
import com.xisc.pm.app.service.autoboard.dto.PmAutoPdPublishedRequestDTO;
import com.xisc.pm.app.service.autoboard.dto.PmAutoPdResultRequestDTO;
import com.xisc.pm.app.service.autoboard.dto.PmAutoPdVersionDTO;
import com.xisc.pm.domain.entity.PmAutoPdContract;
import com.xisc.pm.domain.entity.PmAutoPdPosition;
import com.xisc.pm.domain.entity.PmAutoPdResult;
import com.xisc.pm.domain.entity.PmRequestInfo;

import io.choerodon.core.domain.Page;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
/**
 * 自动组板结果信息表应用服务
 *
 * @author jun.zeng 2024-11-21 11:05:36
 */
public interface PmAutoPdResultService {

    /**
    * 自动组板结果信息表查询参数
    *
    * @param tenantId 租户ID
    * @param pmAutoPdResult 自动组板结果信息表
    * @param pageRequest 分页
    * @return 自动组板结果信息表列表
    */
    Page<PmAutoPdResult> list(Long tenantId, PmAutoPdResult pmAutoPdResult, PageRequest pageRequest);

    /**
     * 自动组板结果信息表详情
     *
     * @param tenantId 租户ID
     * @param resultId 主键
     * @return 自动组板结果信息表列表
     */
    PmAutoPdResult detail(Long tenantId, Long resultId);

    /**
     * 创建自动组板结果信息表
     *
     * @param tenantId 租户ID
     * @param pmAutoPdResult 自动组板结果信息表
     * @return 自动组板结果信息表
     */
    PmAutoPdResult create(Long tenantId, PmAutoPdResult pmAutoPdResult);

    /**
     * 更新自动组板结果信息表
     *
     * @param tenantId 租户ID
     * @param pmAutoPdResult 自动组板结果信息表
     * @return 自动组板结果信息表
     */
    PmAutoPdResult update(Long tenantId, PmAutoPdResult pmAutoPdResult);

    /**
     * 删除自动组板结果信息表
     *
     * @param pmAutoPdResult 自动组板结果信息表
     */
    void remove(PmAutoPdResult pmAutoPdResult);
    
    /**
     * 计算结果保存
     * @param pmRequestInfo
     * @param results
     * @param policyGroup
     * @param tenantId
     */
    void saveCalcResult(PmRequestInfo pmRequestInfo , List<PmAutoBoardExecResult> results, PmAutoBoardPolicyGroupDTO policyGroup, Long tenantId);

    /**
     * 
     * @param autoPdVersion
     * @param organizationId
     * @return
     */
    List<PmAutoPdVersionDTO> selectExecVersion(PmAutoPdVersionDTO autoPdVersion, Long organizationId);

    /**
     * 组板查询接口
     * @param pageRequest
     * @param pmAutoPdResultRequestDTO
     * @param organizationId
     * @return
     */
    Page<PmAutoPdResult> selectList(PageRequest pageRequest, PmAutoPdResultRequestDTO pmAutoPdResultRequestDTO,
            Long organizationId);
    
    /**
     * 组板明细查询接口
     * @param virtualSlabNo
     * @param organizationId
     * @return
     */
    List<List<PmAutoPdPosition>> slabDetail(String virtualSlabNo, Long organizationId);

    /**
     * 查询合同信息
     * @param pageRequest 
     * @param pmAutoPdResultRequest
     * @param organizationId
     * @return
     */
    Page<PmAutoPdContract> orderList(PageRequest pageRequest, PmAutoPdResultRequestDTO pmAutoPdResultRequest, Long organizationId);

    Page<PmAutoPdLog> autoPdLogList(PmAutoPdResultRequestDTO pmAutoPdResultRequest, Long organizationId, PageRequest pageRequest);

    /**
     * 版本发布
     * @param publishedRequestList
     * @param organizationId
     * @return
     */
    Boolean published(List<PmAutoPdPublishedRequestDTO> publishedRequestList, Long organizationId);
    
    Boolean execPublishedSplit(PmAutoPdPublishedRequestDTO pmAutoPdPublishedRequestDTO, List<PmAutoPdResult> results,
            Long organizationId ,String mscLineNo);

    /**
     * 版本待发布
     * @param pmAutoPdResultRequest
     * @param organizationId
     * @return
     */
    PmAutoPdPublishedDTO publishList(PmAutoPdResultRequestDTO pmAutoPdResultRequest, Long organizationId);

    /**
     * 版本暂存
     * @param publishedRequestList
     * @param organizationId
     * @return
     */
    Boolean waitingPublished(PmAutoPdPublishedRequestDTO publishedRequest, Long organizationId);
    
    Boolean removeWaitingPublished(PmAutoPdPublishedRequestDTO publishedRequest, Long organizationId);
    
    /**
     * 删除请求信息
     * @param infos
     * @param organizationId
     * @return
     */
    Boolean deleteRequestInfo(List<PmRequestInfo> infos, Long organizationId);
    
}
