package digital.laboratory.platform.imr.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.imr.dto.DepositDTO;
import digital.laboratory.platform.imr.dto.IconDTO;
import digital.laboratory.platform.imr.dto.InRepositoryDTO;
import digital.laboratory.platform.imr.entity.SampleInboundRecord;
import digital.laboratory.platform.imr.entity.SampleStorage;
import digital.laboratory.platform.imr.vo.InboundRecordVO;
import digital.laboratory.platform.imr.vo.OutSampleVO;
import digital.laboratory.platform.imr.vo.RepositorySampleVO;

import java.util.List;
import java.util.Map;

/**
 *
 * 自定义入库业务层
 */
public interface SamplePutInStorageService {

    /**
     * 第二种录入仓库
     * 样本为基本单位
     * @param sampleNos
     * @param dlpUser
     * @return
     */
    List<OutSampleVO> sampleEntryRepository(List<String> sampleNos, DLPUser dlpUser);

    /**
     * 扫描样本编号获取数据
     * @param sampleNo
     * @return
     */
    List<OutSampleVO> getSampleListByNo(String sampleNo);


    /**
     * 第三种样本入库(手动填入入库质量/体积;计量单位)
     * @param sample
     * @param dlpUser
     * @return
     */
    List<OutSampleVO> sampleInRepository(List<InRepositoryDTO> sample, DLPUser dlpUser);


    /**
     * 检材/样本存放
     * @param dto
     * @return
     */
    List<OutSampleVO> sampleDepositRepository(DepositDTO dto);

    /**
     * 销毁预警查询接口
     * @param page
     * @param orderByDesc
     * @return
     */
    IPage<RepositorySampleVO> getDestructionVO(Page<SampleStorage> page, QueryWrapper<SampleStorage> orderByDesc);

    /**
     * 查询单个已录入详情接口
     * @param id
     * @return
     */
    RepositorySampleVO getSampleDetailed(String id);

    IPage<RepositorySampleVO> getSampleVOList(Page<SampleStorage> page, QueryWrapper<SampleStorage> orderByDesc);

    IPage<InboundRecordVO> inboundRecord(Page<SampleInboundRecord> page, QueryWrapper<SampleInboundRecord> createTime);


    //流转模块角标总和
    IconDTO getTransferIconCount(String id);

    void updateSampleQuality(String sampleId, double sampleQuality);

    /**
     * 临时处理样本入库
     * @param vos
     * @param user
     */
    void temporaryProcessSampleIn(List<OutSampleVO> vos, DLPUser user);

    /**
     * 一个检材入库时的可选检材列表
     */
    Map<String, List<OutSampleVO>> choseSampleList(String keyWords);

}
