package cn.iocoder.yudao.module.product.service.harvestinfo;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.product.controller.admin.harvestinfo.vo.*;
import cn.iocoder.yudao.module.product.dal.dataobject.harvestinfo.HarvestInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 采收入库 Service 接口
 *
 * @author 芋道源码
 */
public interface HarvestInfoService {

    /**
     * 创建采收入库
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createHarvestInfo(@Valid HarvestInfoCreateReqVO createReqVO);

    /**
     * 更新采收入库
     *
     * @param updateReqVO 更新信息
     */
    void updateHarvestInfo(@Valid HarvestInfoUpdateReqVO updateReqVO);

    /**
     * 删除采收入库
     *
     * @param id 编号
     */
    void deleteHarvestInfo(Long id);

    /**
     * 获得采收入库
     *
     * @param id 编号
     * @return 采收入库
     */
    HarvestInfoRespVO getHarvestInfo(Long id);

    /**
     * 获得采收入库列表
     *
     * @param ids 编号
     * @return 采收入库列表
     */
    List<HarvestInfoDO> getHarvestInfoList(Collection<Long> ids);

    /**
     * 获得采收入库分页
     *
     * @param pageReqVO 分页查询
     * @return 采收入库分页
     */
    PageResult<HarvestInfoDO> getHarvestInfoPage(HarvestInfoPageReqVO pageReqVO);

    /**
     * 获得采收入库列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 采收入库列表
     */
    List<HarvestInfoDO> getHarvestInfoList(HarvestInfoExportReqVO exportReqVO);

    /**
     * 获得采收入库编号列表
     * @param count 数量
     * @return 编号
     */
    List<String> getHarverstIdList(Integer count);

    /**
     * 上链
     * @param id id
     */
    void upChain(Long id);

    /**
     * 更新链状态
     * @param id id
     * @param state 状态
     */
    void updateChainStatus(Long id, Integer state);

}
