package com.openhis.workflow.service;

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

import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.dto.AdjustPriceDto;

/**
 * 库存项目管理Service接口
 *
 * @author system
 * @date 2025-02-20
 */
public interface IInventoryItemService extends IService<InventoryItem> {

    /**
     * 入库
     *
     * @param InventoryItemList 入库项目
     */
    void stockIn(List<InventoryItem> InventoryItemList);

    /**
     * 更新库房数量
     *
     * @param id 主键
     * @param quantity 最小单位库存数量
     * @param now 当前时间
     * @return 更新件数
     */
    Boolean updateInventoryQuantity(Long id, BigDecimal quantity, Date now);

    /**
     * 查询
     *
     * @param itemId 项目编号
     * @param lotNumber 产品批号
     * @param locationId 仓库
     * @param tenantId 租户id
     * @return 单据详情
     */
    List<InventoryItem> selectInventoryByItemId(Long itemId, String lotNumber, Long locationId, Integer tenantId);

    /**
     * 查询
     *
     * @param itemIdList 项目编号列表
     * @param tenantId 租户id
     * @return 单据详情
     */
    List<InventoryItem> selectInventoryByItemIdList(List<Long> itemIdList, Integer tenantId);

    /**
     * Desc: 根据id 数组检索库存 > 0 的药品或耗材
     * 
     * @param productIds
     * @Author raymond
     * @Date 16:45 2025/10/16
     * @return java.util.List<com.openhis.workflow.domain.InventoryItem>
     **/
    List<AdjustPriceDto> searchResultDataList(List<Long> productIds);

    /**
     * Desc: 根据id 数组检索库存 > 0 的药品或耗材并分组
     * 
     * @param productIds
     * @Author raymond
     * @Date 16:45 2025/10/16
     * @return java.util.List<com.openhis.workflow.domain.InventoryItem>
     **/
    List<AdjustPriceDto> searchResultDataListByGroup(List<Long> productIds);

    List<InventoryItem> selectAllInventory();
}
