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

import java.util.List;

import com.yomahub.liteflow.flow.LiteflowResponse;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualParam;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignManualTypeParam;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignMethodParam;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectMethodParam;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignProjectNoMethodParam;
import com.zt.plat.module.qms.business.bus.liteflow.param.SampleTaskAssignSampleParam;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;

public interface SampleTaskAssignService {

	/**
	 * 获取分配用户列表
	 * @return
	 */
	List<AdminUserRespDTO> getAssignUserList();

	/**
	 * 根据用户id获取用户信息
	 * @param userId
	 * @return
	 */
	AdminUserRespDTO getUserInfoById(Long userId);

	/**
	 * 获取未指派任务子样信息
	 * @return
	 */
	List<UnAssignTaskedSubSampleRespVO> getAssaySampleList(BusinessAssayTaskDataReqVO reqVO);
	
	/**
	 * 根据子样id列表，查询分析方法项目
	 * @param businessSubSampleIdList 子样id列表
	 * @param configAssayMethodId 分析方法id
	 * @return
	 */
	List<AssayMethodProjectRespVO> getAssayMethodProjectList(List<Long> businessSubSampleIdList, Long configAssayMethodId);

	/**
	 * 根据大样id，分析方法 查询检测标准中分析方法项目
	 * @param baseSampleId 大样id
	 * @param configAssayMethodId 分析方法id
	 * @return
	 */
	List<AssayMethodProjectRespVO> getMaterialAssayStandardMethodProjectList(List<Long> businessSubSampleIdList, Long baseSampleId, Long configAssayMethodId);

	/**
	 * 修改分析方法
	 * @param req
	 */
	void changeMethod(ChangeAssayMethodReqVO req);
	
	/**
	 * 按方法分配任务
	 * @param param
	 */
	LiteflowResponse methodAssign(SampleTaskAssignMethodParam param);

	/**
	 * 按样品分配任务
	 * @param param
	 */
	LiteflowResponse sampleAssign(SampleTaskAssignSampleParam param);

	/**
	 * 手动分配任务
	 * @param param
	 * @return
	 */
	LiteflowResponse manualAssign(SampleTaskAssignManualParam param);

	/**
	 * 手动类型分配
	 * @param param
	 * @return
	 */
	LiteflowResponse manualTypeAssign(SampleTaskAssignManualTypeParam param);

	/**
	 * 按检测项目分配（已有方法）
	 * @param param
	 * @return
	 */
	LiteflowResponse projectMethodAssign(SampleTaskAssignProjectMethodParam param);

	/**
	 * 按检测项目分配（无方法）
	 * @param param
	 * @return
	 */
	LiteflowResponse projectNoMethodAssign(SampleTaskAssignProjectNoMethodParam param);

	/**
	 * 提交任务单
	 * @param id
	 */
	void submitAssign(Long id);

	/**
	 * 作废任务单
	 * @param id
	 */
	void voidAssign(Long id);

	/**
	 * 批量删除指派明细
	 * @param req
	 */
	void removeAssignTaskDetail(BatchDeleteReqVO req);

	/**
	 * 创建质控样
	 * @param req
	 */
	void createQcSample(CreateQcSampleReqVO req);

	/**
	 * 删除质控样
	 * @param req
	 */
	void deleteQcSample(DeleteQcSampleReqVO req);


}
