
package com.tmerclub.cloud.product.service;

import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.common.product.dto.StockPointSkuDTO;
import com.tmerclub.cloud.common.product.vo.StockPointSkuVO;
import com.tmerclub.cloud.product.model.StockPointSku;

import java.util.List;

/**
 *
 *
 * @author tmerclub
 * @date 2023-11-09 18:00:43
 */
public interface StockPointSkuService {

    /**
     * 分页获取列表
     * @param pageDTO 分页参数
     * @return 列表分页数据
     */
    PageVO<StockPointSku> page(PageDTO pageDTO);

    /**
     * 根据id获取
     *
     * @param stockPointSkuId id
     * @return
     */
    StockPointSku getByStockPointSkuId(Long stockPointSkuId);

    /**
     * 保存
     * @param stockPointSku
     */
    void save(StockPointSku stockPointSku);

    /**
     * 更新
     * @param stockPointSku
     */
    void update(StockPointSku stockPointSku);

    /**
     * 根据id删除
     * @param stockPointSkuId id
     */
    void deleteById(Long stockPointSkuId);

    /**
     * 根据id集合删除
     * @param stockPointSkuIds 关联id集合
     */
    void deleteByIds(List<Long> stockPointSkuIds);

    /**
     * 根据商品id删除
     * @param spuId id
     */
    void deleteBySpuId(Long spuId);

    /**
     * 根据关联库存数据id批量删除
     * @param stockPointSkuIdList
     */
    void batchDeleteByStockPointSkuIdList(List<Long> stockPointSkuIdList);


    /**
     * 批量保存库存点和商品关联
     * @param stockPointDTOList
     */
    void batchSave(List<StockPointSkuDTO> stockPointDTOList);

    /**
     * 根据skuid批量获取关联数据
     * @param skuIds
     * @return
     */
    List<StockPointSkuVO> listBySkuIds(List<Long> skuIds);

    /**
     * 根据skuid批量获取关联数据
     * @param skuIds
     * @return
     */
    List<StockPointSkuVO> listPointIdsBySkuIds(List<Long> skuIds);

    /**
     * 修改库存商品关联
     * @param stockPointDTOList
     * @param isUpdate true修改  false新增
     */
    void changeStockPoint(List<StockPointSkuDTO> stockPointDTOList, boolean isUpdate);

    /**
     * 根据库存点id获取关联数据
     * @param stockPointId
     * @return
     */
    List<StockPointSkuVO> listByPointId(Long stockPointId);

    /**
     * 根据skuid和库存点id删除数据
     * @param skuId
     * @param stockPointId
     */
    void removeBySkuIdAndPointId(Long skuId, Long stockPointId);

    /**
     * 获取指定sku的仓库列表
     * @param skuIds
     * @return
     */
    List<StockPointSkuVO> listPointBySkuIds(List<Long> skuIds);

    /***
     * 根据库存点id修改库存模式
     * @param stockPointId
     * @param stockMode
     */
    void updateStockMode(Long stockPointId, Integer stockMode);

    /**
     * 过滤被删除的库存和门店，以及被修改为共享模式的门店
     * @param stockPointSkuVOList
     * @return
     */
    List<StockPointSkuDTO> filtePoint(List<StockPointSkuDTO> stockPointSkuVOList);

    /**
     * 获取库存点skuVO集合
     * @param stockPointSkuDTO 库存点skuDTO
     * @return 库存点sku集合
     */
    List<StockPointSkuVO> listStockPointSku(StockPointSkuDTO stockPointSkuDTO);

    /**
     * 检查库存点集合是否含有该sku集合
     * @param stockPointIds 库存点id集合
     * @param skuIds skuId集合
     * @return 包含的skuId集合
     */
    List<Long> checkStockPointContainSku(List<Long> stockPointIds, List<Long> skuIds);
}
