package com.zt.plat.module.qms.business.reportdoc.service;

import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayReportDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustRegistrationDO;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentTypeDO;
import com.zt.plat.module.system.mq.iwork.IWorkBizCallbackMessage;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 检测报告业务 Service 接口
 *
 * @author 后台管理
 */
public interface ReportDocumentMainService {

    //添加数据到报告-按样品
    CommonResult<String> execAddDataBySample(ReportDocumentMainSaveReqVO reqVO);

    //添加数据到报告-按委托
    CommonResult<String> execAddDataByEntrust(ReportDocumentMainSaveReqVO reqVO);

    //添加数据到报告-按表表数据
    CommonResult<String> execAddByBusinessAssayReportData(List<BusinessAssayReportDataDO> assayReportDataList, Long id, List<BusinessSampleEntrustRegistrationDO> entrustList);

    //移除数据
    CommonResult<String> execRemoveData(ReportDocumentMainSaveReqVO reqVO);

    void updateCommonField(ReportDocumentMainDO reportDocumentMainDO, ReportDocumentTypeDO typeDO);

    //保存报告
    void doSave(@Valid ReportDocumentMainSaveReqVO updateReqVO);

    /**
     * 创建检测报告业务
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    ReportDocumentMainRespVO createReportDocumentMain(@Valid ReportDocumentMainSaveReqVO createReqVO);

    /**
     * 更新检测报告业务
     *
     * @param updateReqVO 更新信息
     */
    void updateReportDocumentMain(@Valid ReportDocumentMainSaveReqVO updateReqVO);


    /**
     * 删除检测报告业务
     *
     * @param id 编号
     */
    void deleteReportDocumentMain(Long id);

    /**
     * 批量删除检测报告业务
     *
     * @param ids 编号
     */
    void deleteReportDocumentMainListByIds(List<Long> ids);

    /**
     * 获得检测报告业务
     *
     * @param id 编号
     * @return 检测报告业务
     */
    ReportDocumentMainDO getReportDocumentMain(Long id);

    ReportDocumentMainDO getByCode(String code);

    /**
     * 获得检测报告业务分页
     *
     * @param pageReqVO 分页查询
     * @return 检测报告业务分页
     */
    PageResult<ReportDocumentMainRespVO> getReportDocumentMainPage(ReportDocumentMainPageReqVO pageReqVO);

    //发起流程
    CommonResult<ReportDocumentMainRespVO> createProcessInstance(ReportDocumentMainSaveReqVO entity);


    void testAsyncTask(Long id);

    CommonResult<String> execCallBackByIwork(IWorkBizCallbackMessage message);
}