package com.zg.project.wisdom.service;

import java.util.List;
import com.zg.project.wisdom.domain.RkRecord;
import com.zg.project.wisdom.domain.vo.RecordStatisticVO;

/**
 * 出入库记录Service接口
 * 
 * @author zg
 * @date 2026-01-20
 */
public interface IRkRecordService 
{
    /**
     * 查询出入库记录
     * 
     * @param id 出入库记录主键
     * @return 出入库记录
     */
    public RkRecord selectRkRecordById(Long id);

    /**
     * 根据单据号查询出入库记录明细
     *
     * @param billNo 单据号
     * @return 出入库记录明细列表
     */
    List<RkRecord> selectRkRecordListByBillNo(String billNo);

    /**
     * 查询出入库记录列表
     * 
     * @param rkRecord 出入库记录
     * @return 出入库记录集合
     */
    public List<RkRecord> selectRkRecordList(RkRecord rkRecord);

    /**
     * 新增出入库记录
     * 
     * @param rkRecord 出入库记录
     * @return 结果
     */
    public int insertRkRecord(RkRecord rkRecord);

    /**
     * 修改出入库记录
     * 
     * @param rkRecord 出入库记录
     * @return 结果
     */
    public int updateRkRecord(RkRecord rkRecord);

    /**
     * 批量删除出入库记录
     * 
     * @param ids 需要删除的出入库记录主键集合
     * @return 结果
     */
    public int deleteRkRecordByIds(Long[] ids);

    /**
     * 删除出入库记录信息
     * 
     * @param id 出入库记录主键
     * @return 结果
     */
    public int deleteRkRecordById(Long id);

    /**
     * 批量将指定入库记录回退为预入库
     */
    int rollbackToPreIn(List<Long> recordIds);

    /**
     * 批量将指定入库记录完成入库
     */
    int finishIn(List<Long> ids);
    /**
     * 撤销出库（已出库 → 预出库）
     */
    int rollbackOut(List<Long> recordIds);

    /**
     * 批量完成预出库 → 已出库
     */
    int finishOut(List<Long> recordIds);

    /**
     * 删除预出库记录（仅限 exec_status = 0）
     */
    int deletePreOutRecords(Long[] ids);


    RecordStatisticVO getRecordStatistic(RkRecord query);
}
