package com.ruoyi.asset.service;

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

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

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

    /**
     * 新增报废管理
     *
     * @param amsDisposalOrder 报废管理
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int insertAmsDisposalOrder(AmsDisposalOrder amsDisposalOrder, AmsDisposalOperateContext operateContext);

    /**
     * 修改报废管理
     *
     * @param amsDisposalOrder 报废管理
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int updateAmsDisposalOrder(AmsDisposalOrder amsDisposalOrder, AmsDisposalOperateContext operateContext);

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

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

    /**
     * 提交报废申请
     *
     * @param orderId 报废单ID
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int submitDisposal(Long orderId, AmsDisposalOperateContext operateContext);

    /**
     * 确认报废处置
     *
     * @param orderId 报废单ID
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int confirmDisposal(Long orderId, AmsDisposalOperateContext operateContext);

    /**
     * 驳回报废申请
     *
     * @param orderId 报废单ID
     * @param rejectReason 驳回原因
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int rejectDisposal(Long orderId, String rejectReason, AmsDisposalOperateContext operateContext);

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