package com.ruoyi.asset.mapper;

import java.util.List;
import com.ruoyi.asset.domain.AmsAsset;
import com.ruoyi.asset.domain.AmsDisposalOrder;
import com.ruoyi.asset.domain.AmsDisposalOrderItem;

/**
 * 报废管理Mapper接口
 *
 * @author Yangk
 * @date 2026-06-17
 */
public interface AmsDisposalOrderMapper
{
    /**
     * 查询报废管理
     *
     * @param orderId 报废管理主键
     * @return 报废管理
     */
    public AmsDisposalOrder selectAmsDisposalOrderByOrderId(Long orderId);

    /**
     * 查询报废管理列表
     *
     * @param amsDisposalOrder 报废管理
     * @return 报废管理集合
     */
    public List<AmsDisposalOrder> selectAmsDisposalOrderList(AmsDisposalOrder amsDisposalOrder);

    /**
     * 新增报废管理
     *
     * @param amsDisposalOrder 报废管理
     * @return 结果
     */
    public int insertAmsDisposalOrder(AmsDisposalOrder amsDisposalOrder);

    /**
     * 修改报废管理
     *
     * @param amsDisposalOrder 报废管理
     * @return 结果
     */
    public int updateAmsDisposalOrder(AmsDisposalOrder amsDisposalOrder);

    /**
     * 删除报废管理
     *
     * @param orderId 报废管理主键
     * @return 结果
     */
    public int deleteAmsDisposalOrderByOrderId(Long orderId);

    /**
     * 批量删除报废管理
     *
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAmsDisposalOrderByOrderIds(String[] orderIds);

    /**
     * 批量删除报废单明细
     *
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAmsDisposalOrderItemByOrderIds(String[] orderIds);

    /**
     * 批量新增报废单明细
     *
     * @param amsDisposalOrderItemList 报废单明细列表
     * @return 结果
     */
    public int batchAmsDisposalOrderItem(List<AmsDisposalOrderItem> amsDisposalOrderItemList);


    /**
     * 通过报废管理主键删除报废单明细信息
     *
     * @param orderId 报废管理ID
     * @return 结果
     */
    public int deleteAmsDisposalOrderItemByOrderId(Long orderId);

    /**
     * 悲观锁锁定单据
     *
     * @param orderId 单据ID
     * @return 结果
     */
    public AmsDisposalOrder selectAmsDisposalOrderByOrderIdForUpdate(Long orderId);

    /**
     * 查询可用于报废的资产列表
     *
     * @param asset 资产查询条件
     * @param currentOrderId 当前报废单ID
     * @return 资产列表
     */
    public List<AmsAsset> selectAvailableDisposalAssetList(@org.apache.ibatis.annotations.Param("asset") AmsAsset asset, @org.apache.ibatis.annotations.Param("currentOrderId") Long currentOrderId);

    /**
     * 查询资产被其他活跃报废单占用的次数
     *
     * @param assetId 资产ID
     * @param currentOrderId 当前报废单ID
     * @return 占用单据数量
     */
    public int countOtherActiveDisposalOrderByAssetId(@org.apache.ibatis.annotations.Param("assetId") Long assetId, @org.apache.ibatis.annotations.Param("currentOrderId") Long currentOrderId);
}
