package digital.laboratory.platform.imr.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.imr.dto.DrugMaterialInfoDTO;
import digital.laboratory.platform.imr.dto.InRepositoryDTO;
import digital.laboratory.platform.imr.entity.DrugCaseInfo;
import digital.laboratory.platform.imr.entity.DrugMaterialInfo;
import digital.laboratory.platform.imr.entity.SampleStorage;
import digital.laboratory.platform.imr.query.DrugDepotsQuery;
import digital.laboratory.platform.imr.vo.DrugMaterialInfoVO;
import digital.laboratory.platform.imr.vo.OutSampleVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* @author ChenJiangBao
* @description 针对表【b_drug_material_info(毒品库中的毒品检材信息)】的数据库操作Service
* @createDate 2024-11-07 12:04:42
*/
public interface DrugMaterialInfoService extends IService<DrugMaterialInfo> {

    /**
     * 批量生成毒品检材编号
     * JC5201010020240001
     * JC 标识是检材 520100 地市行政编码 00 预留给派出所 2024 年份 0001 流水号
     * @param drugCaseInfo 案件信息
     * @param number
     * @return
     */
    List<String> batchBuildDrugMaterialNO(DrugCaseInfo drugCaseInfo, Integer number);

    /**
     * 批量保存毒品检材信息
     *
     * @param drugMaterialInfos
     * @param drugCaseInfo
     * @return
     */
    boolean saveDrugMaterialBatch(List<DrugMaterialInfo> drugMaterialInfos, DrugCaseInfo drugCaseInfo);

    /**
     * 分页查询毒品库中的毒品检材信息VO列表
     * @param query
     * @return
     */
    IPage<DrugMaterialInfoVO> page(DrugDepotsQuery query);

    /**
     * 打印标签
     * @param id
     * @return
     */
    String buildDrugLabelHtml(String id);

    /***
     * 毒品检材入库
     * @param sample
     * @param dlpUser
     * @return
     */
    List<OutSampleVO> drugMaterialPutInRepository(List<InRepositoryDTO> sample, DLPUser dlpUser);

    /**
     * 毒品检材封装
     * @param sampleStorage
     * @param drugId
     * @return
     */
    OutSampleVO drugMaterialToOutSampleVO(SampleStorage sampleStorage, String drugId);

    /**
     * 批量删除毒品检材
     * @param ids
     * @return
     */
    boolean delete(List<String> ids);

    /**
     * 复制检材
     * @param dto
     * @return
     */
    DrugMaterialInfoVO copy(DrugMaterialInfoDTO dto);
}
