package com.ruoyi.asset.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.asset.domain.AmsInventoryTask;
import com.ruoyi.asset.domain.AmsInventoryTaskItem;
import com.ruoyi.asset.domain.AmsInventoryTaskSurplus;

/**
 * 盘点任务管理Mapper接口
 *
 * @author Yangk
 * @date 2026-06-18
 */
public interface AmsInventoryTaskMapper
{
    /**
     * 查询盘点任务管理
     *
     * @param taskId 盘点任务管理主键
     * @return 盘点任务管理
     */
    public AmsInventoryTask selectAmsInventoryTaskByTaskId(Long taskId);

    /**
     * 加行锁查询盘点任务
     *
     * @param taskId 盘点任务主键
     * @return 盘点任务
     */
    public AmsInventoryTask selectAmsInventoryTaskByTaskIdForUpdate(Long taskId);

    /**
     * 查询盘点任务管理列表
     *
     * @param amsInventoryTask 盘点任务管理
     * @return 盘点任务管理集合
     */
    public List<AmsInventoryTask> selectAmsInventoryTaskList(AmsInventoryTask amsInventoryTask);

    /**
     * 新增盘点任务管理
     *
     * @param amsInventoryTask 盘点任务管理
     * @return 结果
     */
    public int insertAmsInventoryTask(AmsInventoryTask amsInventoryTask);

    /**
     * 修改盘点任务管理
     *
     * @param amsInventoryTask 盘点任务管理
     * @return 结果
     */
    public int updateAmsInventoryTask(AmsInventoryTask amsInventoryTask);

    /**
     * 更新盘点任务状态
     *
     * @param amsInventoryTask 盘点任务
     * @return 结果
     */
    public int updateAmsInventoryTaskStatus(AmsInventoryTask amsInventoryTask);

    /**
     * 按盘点范围查询资产快照
     *
     * @param task 盘点任务范围
     * @param assetStatuses 可盘点资产状态
     * @return 盘点明细快照
     */
    public List<AmsInventoryTaskItem> selectInventoryAssetSnapshotList(@Param("task") AmsInventoryTask task,
                                                                       @Param("assetStatuses") String[] assetStatuses);

    /**
     * 更新盘点明细结果
     *
     * @param amsInventoryTaskItem 盘点明细
     * @return 结果
     */
    public int updateAmsInventoryTaskItemResult(AmsInventoryTaskItem amsInventoryTaskItem);

    /**
     * 查询盘点任务盘盈明细列表
     *
     * @param taskId 盘点任务ID
     * @return 盘盈明细集合
     */
    public List<AmsInventoryTaskSurplus> selectAmsInventoryTaskSurplusList(Long taskId);

    /**
     * 加锁查询盘点任务盘盈明细
     *
     * @param surplusId 盘盈明细ID
     * @return 盘盈明细
     */
    public AmsInventoryTaskSurplus selectAmsInventoryTaskSurplusBySurplusIdForUpdate(Long surplusId);

    /**
     * 统计任务应盘明细中的资产数量
     *
     * @param taskId 盘点任务ID
     * @param assetId 资产ID
     * @return 数量
     */
    public int countInventoryTaskItemByTaskIdAndAssetId(@Param("taskId") Long taskId,
                                                        @Param("assetId") Long assetId);

    /**
     * 统计任务盘盈明细中的资产数量
     *
     * @param taskId 盘点任务ID
     * @param assetId 资产ID
     * @return 数量
     */
    public int countInventoryTaskSurplusByAssetId(@Param("taskId") Long taskId,
                                                  @Param("assetId") Long assetId);

    /**
     * 统计任务盘盈明细中的 EPC 数量
     *
     * @param taskId 盘点任务ID
     * @param epcCode EPC 编码
     * @return 数量
     */
    public int countInventoryTaskSurplusByEpcCode(@Param("taskId") Long taskId,
                                                  @Param("epcCode") String epcCode);

    /**
     * 新增盘点任务盘盈明细
     *
     * @param surplus 盘盈明细
     * @return 结果
     */
    public int insertAmsInventoryTaskSurplus(AmsInventoryTaskSurplus surplus);

    /**
     * 确认任务下所有盘盈明细
     *
     * @param taskId 盘点任务ID
     * @param confirmStatus 确认状态
     * @param updateBy 更新人
     * @return 结果
     */
    public int confirmAmsInventoryTaskSurplusByTaskId(@Param("taskId") Long taskId,
                                                      @Param("confirmStatus") String confirmStatus,
                                                      @Param("updateBy") String updateBy);

    /**
     * 逻辑删除盘盈明细
     *
     * @param surplusId 盘盈明细ID
     * @param updateBy 更新人
     * @return 结果
     */
    public int deleteAmsInventoryTaskSurplusBySurplusId(@Param("surplusId") Long surplusId,
                                                        @Param("updateBy") String updateBy);

    /**
     * 按任务逻辑删除盘盈明细
     *
     * @param taskId 盘点任务ID
     * @return 结果
     */
    public int deleteAmsInventoryTaskSurplusByTaskId(Long taskId);

    /**
     * 删除盘点任务管理
     *
     * @param taskId 盘点任务管理主键
     * @return 结果
     */
    public int deleteAmsInventoryTaskByTaskId(Long taskId);

    /**
     * 批量删除盘点任务管理
     *
     * @param taskIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAmsInventoryTaskByTaskIds(String[] taskIds);

    /**
     * 批量删除盘点任务明细
     *
     * @param taskIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAmsInventoryTaskItemByTaskIds(String[] taskIds);

    /**
     * 批量新增盘点任务明细
     *
     * @param amsInventoryTaskItemList 盘点任务明细列表
     * @return 结果
     */
    public int batchAmsInventoryTaskItem(List<AmsInventoryTaskItem> amsInventoryTaskItemList);


    /**
     * 通过盘点任务管理主键删除盘点任务明细信息
     *
     * @param taskId 盘点任务管理ID
     * @return 结果
     */
    public int deleteAmsInventoryTaskItemByTaskId(Long taskId);
}
