package com.sunda.spmsoversea.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsoversea.dto.WerksAllStorageInvSearchDTO;
import com.sunda.spmsoversea.dto.WerksStorageInvSearchDTO;
import com.sunda.spmsoversea.dto.WhsStorageInvSearchDTO;
import com.sunda.spmsoversea.entity.WhsStorageInventory;

/**
 * <p>
 * 储位库存信息表 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-09-10
 */
public interface IWhsStorageInventoryService extends IService<WhsStorageInventory> {

    /** 根据储位 uuid 和物料编号 materialNo 查询库存数据 */
    WhsStorageInventory getWhsStorageInventory(String uuid, String materialNo);

    /** 线程安全控制————海外仓储位库存操作，包括库存校验，operateType = add 加库存；operateType = sub 减库存；加减库存时 qty 都取正数；此法不带操作日志；*/
    ResponseResult updateWhsStorageInventory(String storageUuid, String materialNo, double qty, String operateType);


    /** 本工厂 库存搜索：工厂、物料号、物料描述、库区、储位编号 —— 结果带具体储位信息，按储位给库存信息，工厂必输其余可选 */
    ResponseResult getWerksStorageInvList(WerksStorageInvSearchDTO werksStorageInvSearchDTO);

    /** 跨工厂 库存搜索：工厂、物料号、物料描述 —— 结果不带具体储位信息，按工厂物料求和，所有条件可选 */
    ResponseResult getStorageInvList(WhsStorageInvSearchDTO whsStorageInvSearchDTO);

    /** 根据工厂、料号查询所有详细储位库存信息 */
    ResponseResult getWerksStorageByMaterialNo(String werks, String materialNo);

    /** 获取条件下所有储位库存，不分页 */
    ResponseResult getWerksAllStorageInv(WerksAllStorageInvSearchDTO werksAllStorageInvSearchDTO);
    
    /** 本工厂 零库存搜索：工厂、物料号、物料描述、库区、储位编号 —— 结果带具体储位信息，按储位给库存信息，工厂必输其余可选 */
	ResponseResult getWerksStorageZeroInvList(WerksStorageInvSearchDTO werksStorageInvSearchDTO);
	
	/** 获取条件下所有储位零库存，不分页 */
	ResponseResult getWerksAllZeroStorageInv(WerksAllStorageInvSearchDTO werksAllStorageInvSearchDTO);
	
	/**
	 * 根据工厂获取全部贸易货储位库存
	 * @param werksAllStorageInvSearchDTO
	 * @return
	 */
	List<Map<String, Object>> getWerksAllStorageInvM(WerksAllStorageInvSearchDTO werksAllStorageInvSearchDTO) throws Exception;
}
