package com.prolog.rdc.tms.service.basicConfigure;

import java.util.List;

import com.prolog.framework.core.pojo.Page;
import com.prolog.product.core.framework.entity.UserEntity;
import com.prolog.rdc.tms.model.dto.basicConfigure.StandardTemplateDetailsListDTO;
import com.prolog.rdc.tms.model.dto.basicConfigure.SysImportColDto;
import com.prolog.rdc.tms.model.dto.basicConfigure.SysImportTemplethPageDTO;
import com.prolog.rdc.tms.model.dto.basicConfigure.SysImportTemplethQueryHdDTO;
import com.prolog.rdc.tms.model.vo.basicConfigure.SysImportTemplethAddVO;
import com.prolog.rdc.tms.model.vo.basicConfigure.SysImportTemplethPageVO;
import com.prolog.rdc.tms.model.vo.basicConfigure.SysImportTemplethUpdateVO;

import javax.servlet.http.HttpServletResponse;

/**
 *
 * 导入配置模板汇总 Service
 *
 *
 * @className: SysImportTemplethService
 * @author: kh
 * @creationTime: 2022-01-12 10:12:37
 * @description:
 * @modifier:
 * @modifyTime:
 * @reviseRemarks:
 *
 * @version :1.0.0
 *
 */
public interface SysImportTemplethService {

	/**
	 * 根据汇总主键查询导入模板汇总和明细
	 * 
	 * @param id
	 * @return {@link SysImportTemplethQueryHdDTO}
	 * @throws @date 2022/1/12 14:33
	 */
	SysImportTemplethQueryHdDTO queryHd(Long id) throws Exception;

	/**
	 * 根据对象编号查询当前用户下，启用的导入模板汇总信息
	 * 
	 * @param importObjNo 导入对象
	 * @return {@link SysImportTemplethQueryHdDTO}
	 * @throws @date 2022/1/17 10:37
	 */
	SysImportTemplethQueryHdDTO queryTempleteh(String importObjNo,Long enterpriseId);

	/**
	 * 分页查询导入模板汇总
	 * 
	 * @param vo 分页查询条件vo
	 * @return
	 * @throws Exception
	 */
	Page<SysImportTemplethPageDTO> listPage(SysImportTemplethPageVO vo) throws Exception;

	/**
	 * 保存导入模板明细和汇总
	 * 
	 * @param vo
	 * @return
	 * @throws @date 2022/1/12 15:11
	 */
	void add(SysImportTemplethAddVO vo) throws Exception;

	/**
	 * 更新导入模板汇总和明细
	 * 
	 * @param vo
	 * @return
	 * @throws @date 2022/1/12 16:15
	 */
	void update(SysImportTemplethUpdateVO vo) throws Exception;

	/**
	 * 验证是否重复
	 * 
	 * @param user          用户
	 * @param importObjNo   导入对象编号
	 * @param templeteName  模板名称
	 * @param importObjName 导入对象名称
	 * @param hid           汇总主键
	 * @return
	 * @throws @date 2022/1/12 16:23
	 */
	void queryValidRepeat(UserEntity user, String importObjNo, String templeteName, String importObjName, Long hid) throws Exception;

	/**
	 * 删除汇总和明细，逻辑删除，更新templetStatus为0
	 * 
	 * @param ids
	 * @return
	 * @throws @date 2022/1/12 16:51
	 */
	void delete(String ids) throws Exception;

	/**
	 * 启用或停用导入模板
	 * 
	 * @param id     主键
	 * @param status 状态 0停用，1启用
	 * @return
	 * @throws @date 2022/1/12 17:14
	 */
	void enable(Long id, Integer status) throws Exception;

	/**
	 * 验证同一公司下模板名称是否重复
	 * 
	 * @param templeteName
	 * @return
	 * @throws @date 2022/1/12 17:53
	 */
	void queryValidTemplteName(String templeteName, String hid) throws Exception;

	/**
	 * 标准版模板详情查询
	 * 
	 * @param importObjNo
	 * @return
	 */
	List<StandardTemplateDetailsListDTO> listStandardTemplateDetailsData(String importObjNo);

	/**
	 * 根据导入对象编号，查询导入字段列表，转换成界面表头对象
	 * 
	 * @param importObjNo
	 * @return {@link List< SysImportColDto>}
	 * @throws @date 2022/1/17 15:22
	 */
	List<SysImportColDto> listColumns(String importObjNo) throws Exception;

	/**
	 * 自定义模板导出
	 * @param templateId
	 * @param response
	 * @throws Exception
	 */
	void downloadTemplateById(Long templateId, HttpServletResponse response) throws Exception;

	/**
	 * 标准版模板详情查询
	 *
	 * @param templateId
	 * @return
	 */
	List<StandardTemplateDetailsListDTO> templateDetail(String templateId);
}
