
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.product.dto.TakeStockDTO;
import com.tmerclub.cloud.product.model.TakeStock;
import com.tmerclub.cloud.product.vo.TakeStockVO;
import jakarta.servlet.http.HttpServletResponse;

/**
 * @author lhd
 * @date 2022-06-22 16:57:27
 */
public interface TakeStockService {

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

    /**
     * 根据id获取
     *
     * @param takeStockId id
     * @return
     */
    TakeStockVO getByTakeStockId(Long takeStockId);

    /**
     * 保存
     *
     * @param takeStock
     */
    void save(TakeStock takeStock);

    /**
     * 更新
     *
     * @param takeStock
     */
    void update(TakeStock takeStock);

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

    /**
     * 分页查询实物盘点数据
     *
     * @param pageDTO
     * @param takeStockDTO
     * @return
     */
    PageVO<TakeStockVO> pageByParam(PageDTO pageDTO, TakeStockDTO takeStockDTO);

    /**
     * 更新实物盘点
     *
     * @param takeStockDTO
     */
    void updateTakeStock(TakeStockDTO takeStockDTO);

    /**
     * 完成实物盘点
     *
     * @param takeStockDTO
     */
    void finishTakeStock(TakeStockDTO takeStockDTO);

    /**
     * 作废实物盘点(通过仓库id)
     * @param warehouseId 仓库id
     */
    void nullifyByWarehouseId(Long warehouseId);

    /**
     * excel导出
     *
     * @param takeStockDTO
     * @param response
     */
    void exportExcel(TakeStockDTO takeStockDTO, HttpServletResponse response);

    /**
     * 统计未完成的实物盘点数
     * @param warehouseId 仓库id
     * @return 未完成数
     */
    Long countUnFinish(Long warehouseId);
}
