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

import java.math.BigDecimal;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.prolog.framework.common.message.RestMessage;
import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.IntfErrorLogDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemByCargoOwnerPageDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemByEncodingNameDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemCheckDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemPagingQueryDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemPopupDTO;
import com.prolog.rdc.tms.model.dto.basicData.ItemUnitDTO;
import com.prolog.rdc.tms.model.vo.IntfItemSaveVO;
import com.prolog.rdc.tms.model.vo.basicConfigure.ImportPageVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemAddVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemBatchDeleteVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemByCargoOwnerPageVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemByEncodingNameVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemCheckVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemCopyVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemModifyVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemPagingQueryVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemPopupVO;
import com.prolog.rdc.tms.model.vo.basicData.ItemWhetherEnableVO;

/**
 * 
 *
 * 基础数据-商品管理服务层
 *
 * @className :ItemService
 * @author :fanzw
 * @creationTime :2022/02/25
 * @description :
 *
 * @modifier :fanzw
 * @modifyTime :2022/02/25
 * @reviseRemarks:
 *
 * @version :1.0.0
 *
 */
public interface ItemService {

	/**
	 * 商品资料分页查询
	 * 
	 * @param itemPagingQueryVO
	 * @return
	 */
	Page<ItemPagingQueryDTO> pageItemData(ItemPagingQueryVO itemPagingQueryVO);

	/**
	 * 商品资料查看
	 * 
	 * @param itemCheckVO
	 * @return
	 */
	ItemCheckDTO getItemData(ItemCheckVO itemCheckVO);

	/**
	 * 商品资料弹窗
	 * 
	 * @param itemPopupVO
	 * @return
	 */
	Page<ItemPopupDTO> popupItemData(ItemPopupVO itemPopupVO);

	/**
	 * 商品资料根据货主分页查询
	 * 
	 * @param itemByCargoOwnerPageVO
	 * @return
	 */
	Page<ItemByCargoOwnerPageDTO> pageItemByCargoOwnerData(ItemByCargoOwnerPageVO itemByCargoOwnerPageVO);

	/**
	 * 商品资料新增
	 * 
	 * @param itemAddVO
	 */
	void addItemData(ItemAddVO itemAddVO);

	/**
	 * 商品资料复制
	 * 
	 * @param itemCopyVO
	 */
	void copyItemData(ItemCopyVO itemCopyVO);

	/**
	 * 商品资料修改
	 * 
	 * @param itemModifyVO
	 */
	void modifyItemData(ItemModifyVO itemModifyVO);

	/**
	 * 商品资料批量删除
	 * 
	 * @param itemBatchDeleteVOs
	 */
	void batchDeleteItemData(List<ItemBatchDeleteVO> itemBatchDeleteVOs);

	/**
	 * 商品资料是否启用
	 * 
	 * @param itemWhetherEnableVO
	 */
	void whetherEnableItemData(ItemWhetherEnableVO itemWhetherEnableVO);

	/**
	 * 商品资料导入
	 * 
	 * @param file
	 */
	void improtItemData(MultipartFile file, String importBatchNumber) throws Exception;

	/**
	 * 商品批量导入撤销
	 * 
	 * @param batchno
	 */
	void rollbackData(String batchno);

	/**
	 * 商品导入分页查询
	 * 
	 * @param importPageVO
	 */
	RestMessage<Object> pageItemByImportBatchNumberData(ImportPageVO importPageVO);

	/**
	 * 根据商品编码名称查询商品资料
	 * 
	 * @param itemByEncodingNameVO
	 */
	ItemByEncodingNameDTO getItemByEncodingNameData(ItemByEncodingNameVO itemByEncodingNameVO);

	/**
	 * 根据商品ID查询单位重量体积
	 * 
	 * @param itemIds
	 * @return
	 */
	List<ItemUnitDTO> listItemUnitData(List<BigDecimal> itemIds);

	/**
	 * 商品接口转TMS
	 * 
	 * @param intfItemSaveVOs
	 */
	List<IntfErrorLogDTO> saveItemInterfaceData(List<IntfItemSaveVO> intfItemSaveVOs);

	ItemByEncodingNameDTO getItemByEncodingNameDataIntf(ItemByEncodingNameVO itemByEncodingNameVO);

	/**
	 * 临时商品资料新增
	 *
	 * @param itemAddVO
	 */
	void addTempItemData(ItemAddVO itemAddVO);

	/**
	 * 根据商品名称取商品资料
	 *
	 * @param itemCheckVO
	 * @return
	 */
	ItemCheckDTO getItemByNameData(ItemCheckVO itemCheckVO);
}
