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

import java.util.*;

import com.alibaba.fastjson.JSONObject;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.framework.common.pojo.PageParam;

/**
 * 子样业务 Service 接口
 *
 * @author 后台管理
 */
public interface BusinessSubSampleService {

    void updateBatch(List<BusinessSubSampleDO> businessSubSampleDOList);

    List<BusinessSubSampleDO> listByIdList(List<Long> idList);
    /**
     * 创建子样业务
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BusinessSubSampleRespVO createBusinessSubSample(@Valid BusinessSubSampleSaveReqVO createReqVO);

    /**
     * 更新子样业务
     *
     * @param updateReqVO 更新信息
     */
    void updateBusinessSubSample(@Valid BusinessSubSampleSaveReqVO updateReqVO);

    /**
     * 删除子样业务
     *
     * @param id 编号
     */
    void deleteBusinessSubSample(Long id);

    /**
    * 批量删除子样业务
    *
    * @param ids 编号
    */
    void deleteBusinessSubSampleListByIds(List<Long> ids);

    /**
     * 获得子样业务
     *
     * @param id 编号
     * @return 子样业务
     */
    BusinessSubSampleExtendRespVO getBusinessSubSample(Long id);

    /**
     * 获取打印子样业务数据
     * @param id
     * @return
     */
	BusinessSubSampleExtendRespVO getPrintSubSample(Long id);

    BusinessSubSampleDO getBySampleCode(String sampleCode);
    BusinessSubSampleDO getBySampleReturnCode(String sampleReturnCode);

    /**
     * 获得子样业务分页
     *
     * @param pageReqVO 分页查询
     * @return 子样业务分页
     */
    PageResult<BusinessSubSampleExtendRespVO> getBusinessSubSamplePage(BusinessSubSamplePageReqVO pageReqVO);

    PageResult<BusinessSubSampleExtendRespVO> selectPageForDispatch(BusinessSubSamplePageReqVO pageReqVO);

	/**
	 * 获取子样分析班组分页
	 * @param pageReqVO
	 * @return
	 */
	PageResult<BusinessSubSampleExtendRespVO> getAnalysisGroupPage(BusinessSubSamplePageReqVO pageReqVO);

    /**
     * 获得子样业务列表
     * @param reqVO 查询
     * @return 子样业务列表
     */
	List<BusinessSubSampleExtendRespVO> getBusinessSubSampleList(BusinessSubSampleReqVO reqVO);

	/**
	 * 根据样品编号及样品流程节点获取样品信息
	 * @param reqVO
	 * @return
	 */
	List<BusinessSubSampleExtendRespVO> getBySampleCodeAndFlowKey(@Valid BusinessSubSampleReqVO reqVO);

    //样品归库
    BusinessSubSampleRespVO execReturnToStock(@Valid BusinessSubSampleSaveReqVO reqVo);

    //样品下架
    Integer execTakeOff(JSONObject reqVo);

    //库位变更
    Integer execChangeLocation(JSONObject reqVo);
}