
package com.tmerclub.cloud.product.service;

import com.tmerclub.cloud.api.product.dto.SkuStockLockDTO;
import com.tmerclub.cloud.api.product.dto.StockBillLogItemDTO;
import com.tmerclub.cloud.api.product.vo.SkuStockVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;

/**
 * 库存锁定信息
 *
 * @author tmerclub
 * @date 2020-12-22 16:12:10
 */
public interface SkuStockLockService {

    /**
     * 锁定库存
     * @param skuStockLocksParam 参数
     * @return 是否成功
     */
    ServerResponseEntity<?> lock(List<StockBillLogItemDTO> skuStockLocksParam);

    /**
     * 采购订单锁定库存
     * @param skuStockLocks 参数
     * @return 正常返回 订单id_仓库id_skuId_剩余库存,订单id_仓库id_skuId_剩余库存,...
     *         异常返回 skuId
     */
    String lockPurchaseOrder(List<SkuStockLockDTO> skuStockLocks);

    /**
     * 减少锁定库存
     * @param skuStockLocks 参数
     * @return 正常返回 订单id_仓库id_skuId_剩余库存,订单id_仓库id_skuId_剩余库存,...
     *         异常返回 skuId
     */
    String purchaseOrderReduceLockStock(List<SkuStockLockDTO> skuStockLocks);

    /**
     * 调拨订单锁定库存
     * @param skuStockLocks 库存锁定参数
     * @return 操作后的redis库存信息
     */
    String lockAllotOrder(List<SkuStockLockDTO> skuStockLocks);

    /**
     * 调拨订单减少锁定库存
     * @param skuStockLocks 库存锁定参数
     * @return 操作后的redis库存信息
     */
    String reduceLockAllotOrder(List<SkuStockLockDTO> skuStockLocks);

    /**
     * 改变库存
     * @param skuStockLocks 参数
     * @return 正常返回 订单id_仓库id_skuId_剩余库存,订单id_仓库id_skuId_剩余库存,...
     *         异常返回 skuId
     */
    String changeStock(List<SkuStockVO> skuStockLocks);

    /**
     * 根据订单号进行库存解锁
     * @param orderIds 订单ids
     */
    void unlockStockByCancel(List<Long> orderIds);

    /**
     * 根据解锁的订单记录进行库存解锁，并且删除库存的出入库日志
     * @param skuStockList 订单项记录
     */
    void unlockStockByException(List<SkuStockVO> skuStockList);

    /**
     * 正式锁定库存，标记为使用状态
     * @param orderIds 订单ids
     */
    void markerStockUse(List<Long> orderIds);
}
