package com.czg.product.service;

import com.czg.product.dto.ConsStockFlowDTO;
import com.czg.product.entity.ConsStockFlow;
import com.czg.product.param.ConsCheckStockParam;
import com.czg.product.param.ConsInOutStockHeadParam;
import com.czg.product.param.ConsReportDamageParam;
import com.czg.product.param.ConsStockFlowParam;
import com.czg.product.vo.ConsCheckStockRecordVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

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

/**
 * 耗材库存变动记录
 *
 * @author Tankaikai tankaikai@aliyun.com
 * @since 1.0 2025-02-21
 */
public interface ConsStockFlowService extends IService<ConsStockFlow> {

    /**
     * 手动入库
     *
     * @param param 手动出库入参
     */
    ConsInOutStockHeadParam inStock(ConsInOutStockHeadParam param);

    /**
     * 手动出库
     *
     * @param param 手动出库入参
     */
    void outStock(ConsInOutStockHeadParam param);

    /**
     * 库存盘点
     *
     * @param param 库存盘点入参
     */
    void checkStock(ConsCheckStockParam param);

    /**
     * 获取盘点记录
     *
     * @param conId 耗材id
     * @return 盘点记录列表
     */
    Page<ConsCheckStockRecordVo> getCheckStockRecordPage(Long conId);

    /**
     * 获取盘点记录
     *
     * @param conId 耗材id
     * @return 盘点记录列表
     */
    List<ConsCheckStockRecordVo> getCheckStockRecordList(Long conId);

    /**
     * 耗材报损
     *
     * @param param 耗材报损入参
     */
    void reportDamage(ConsReportDamageParam param);

    /**
     * 获取耗材库存变动记录
     *
     * @param param 查询参数
     * @return 分页数据
     */
    Page<ConsStockFlowDTO> findConsStockFlowPage(ConsStockFlowParam param);

    /**
     * 保存库存变动记录
     *
     * @param entity 库存变动记录实体
     */
    void saveFlow(ConsStockFlow entity, BigDecimal conWarning);

    /**
     * 发送库存消息
     *
     * @param entity   库存变动记录实体
     * @param warning  警戒值
     */
    boolean sendStockMsg(ConsStockFlow entity, BigDecimal warning);
}
