package digital.laboratory.platform.entrustment.service;

import com.baomidou.mybatisplus.extension.service.IService;
import digital.laboratory.platform.entrustment.vo.SampleBoxLiteVO;
import digital.laboratory.platform.entrustment.vo.SampleBoxVO;
import digital.laboratory.platform.sys.entity.entrustment.SampleBox;

import java.util.List;

/**
 * 受理时检材重新包装的容器服务类
 *
 * @author Zhang Xiaolong created at  2022-07-06
 * @describe 受理时检材重新包装的容器服务类
 */
public interface SampleBoxService extends IService<SampleBox> {

	/**
	 * ## 根据委托编码生成样本盒编码
	 * 用于标识每一个样本盒。一个委托最多可以有99个样本盒子
	 *
	 * ```
	 * BZ <委托编码去掉前缀2个字符后剩下22位> <顺序号2位>
	 * 例如:
	 * BZ 6101022022100002000001 02
	 * 合计 26 位
	 * ```
	 * @param entrustmentNo
	 * @return
	 */
	String getNewBoxNoForEntrustment(String entrustmentNo);

	/**
	 * ## 根据污水任务编码生成样本盒编码
	 * 用于标识每一个样本盒。一个委托最多可以有9999个样本盒子
	 *
	 * ```
	 * BZ <污水任务编码去掉前缀2个字符后剩下7位> <顺序号4位>
	 * 例如:
	 * BZ 2022201 0002
	 * 合计 13 位
	 * ```
	 * @param sewageJobNo
	 * @return
	 */
	String getNewBoxNoForSewageJob(String sewageJobNo);

	String getNewBoxNoForOther(String newBoxNumber);

	/**
	 * 取指定的样本命盒子的信息, 包含其中的样本编号列表
	 * 样本编号来自检材清单
	 * @param id
	 * @return
	 */
	SampleBoxLiteVO getSampleBoxLiteVOById(String id);

	/**
	 * 取指定的样本命盒子的信息, 包含其中的样本列表
	 * 样本列表来自样本表, 必须在相关的委托【受理完成】后才能取到。因为只有受理完成后才会生成样本清单
	 * 在受理未完成前, 取到的样本列表为空
	 * @param id
	 * @return
	 */
	SampleBoxVO getSampleBoxVOById(String id);

	/**
	 * 构建盒子打印内容
	 * @param id
	 * @return
	 */
	String buildSampleBoxLabelContent(String id) throws Exception;


	//获取盒子列表，并附带样本数量的统计属性
	List<SampleBoxVO> getSampleBoxList(SampleBox sampleBox);

    String printBoxLabel(String id,Integer type);

	SampleBox controlsSampleBox(SampleBox sampleBox,Integer opCode);

    String printLabelForOther(String boxId, Integer type);

	String getOrderIdBy16UUId();
}
