package com.yiqi.core.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yiqi.core.domain.GoodsInfo;
import com.yiqi.core.domain.GoodsSku;
import com.yiqi.core.domain.vo.GoodsSkuAddVO;
import com.yiqi.core.domain.vo.GoodsSkuQueryVO;
import com.yiqi.order.domain.OrderGoodsSku;
import com.yiqi.order.domain.OrderPurchaseGoodsSku;
import com.yiqi.order.domain.dto.RetailQueryGoodsDTO;

/**
 * 物料明细Service接口
 *
 * @author ruoyi
 * @date 2023-08-21
 */
public interface IGoodsSkuService extends IService<GoodsSku> {
    /**
     * 查询物料明细
     *
     * @param id 物料明细主键
     * @return 物料明细
     */
    public GoodsSkuQueryVO selectGoodsSkuById(Long id);

    /**
     * 查询物料明细列表
     *
     * @param goodsSku 物料明细
     * @return 物料明细集合
     */
    public List<GoodsSkuQueryVO> selectGoodsSkuList(GoodsSku goodsSku);

    /**
     * 新增物料明细
     *
     * @param goodsSkuAddVO 物料明细
     * @return 结果
     */
    public int insertGoodsSku(GoodsSkuAddVO goodsSkuAddVO);

    /**
     * 修改物料明细
     *
     * @param goodsSkuAddVO 物料明细
     * @return 结果
     */
    public int updateGoodsSku(GoodsSkuAddVO goodsSkuAddVO);

    /**
     * 批量删除物料明细
     *
     * @param ids 需要删除的物料明细主键集合
     * @return 结果
     */
    public int deleteGoodsSkuByIds(Long[] ids);

    /**
     * 删除物料明细信息
     *
     * @param id 物料明细主键
     * @return 结果
     */
    public int deleteGoodsSkuById(Long id);


    /**
     * 查询材料申请物料列表
     *
     * @param goodsCategoryId 商品分类id
     * @return 结果
     */
    public List<GoodsSkuQueryVO> getGoodsSkuPurchaseList(Long goodsCategoryId, String keywords);

    /**
     * 零售商品列表
     *
     * @param retailQueryGoodsDTO 商品分类id
     * @return 结果
     */
    public List<GoodsInfo> getGoodsListToGoodsRetail(RetailQueryGoodsDTO retailQueryGoodsDTO);


    /**
     * 零售商品物料列表
     *
     * @param goodsId 商品id
     * @return 结果
     */
    public List<GoodsSkuQueryVO> getGoodsSkuListToGoodsRetail(Long goodsId);

    /**
     * @desc 修改商品SKU状态
     * @param goodsSkuAddVO
     * @return
     */
    int updateGoodsSkuStatus(GoodsSkuAddVO goodsSkuAddVO);


    /**
     * 平台采购增加或者扣减库存
     *
     * @param orderPurchaseGoodsSkuList 减去商品物料库存
     * @return 结果
     */
    public int addOrMinusGoodsSkuStockByPurchase(Integer addOrMinus, List<OrderPurchaseGoodsSku> orderPurchaseGoodsSkuList);


    /**
     * 平台商品零售增加或者扣减库存
     *
     * @param orderGoodsSkuList 减去商品物料库存
     * @return 结果
     */
    public int addOrMinusGoodsSkuStockByGoods(Integer addOrMinus, List<OrderGoodsSku> orderGoodsSkuList);
}
