package com.ruoyi.asset.service;

import java.util.List;
import com.ruoyi.asset.domain.AmsAsset;
import com.ruoyi.asset.domain.AmsTransferOrder;

/**
 * 调拨管理Service接口
 * 
 * @author Yangk
 * @date 2026-06-12
 */
public interface IAmsTransferOrderService 
{
    /**
     * 查询调拨管理
     * 
     * @param orderId 调拨管理主键
     * @return 调拨管理
     */
    public AmsTransferOrder selectAmsTransferOrderByOrderId(Long orderId);

    /**
     * 查询调拨管理列表
     * 
     * @param amsTransferOrder 调拨管理
     * @return 调拨管理集合
     */
    public List<AmsTransferOrder> selectAmsTransferOrderList(AmsTransferOrder amsTransferOrder);

    /**
     * 分页查询当前可加入调拨单的在库资产
     * <p>只返回 IN_STOCK 且未被其他有效调拨单占用的资产，
     * 供调拨单新增/编辑页的资产弹窗选择器使用。</p>
     *
     * @param amsAsset 查询条件（编码、名称、类别、状态等模糊搜索）
     * @param currentOrderId 当前编辑调拨单ID，新增时为空，编辑时传入以排除自身占用
     * @return 可调拨资产集合
     */
    public List<AmsAsset> selectAvailableTransferAssetList(AmsAsset amsAsset, Long currentOrderId);

    /**
     * 新增调拨管理
     * 
     * @param amsTransferOrder 调拨管理
     * @return 结果
     */
    public int insertAmsTransferOrder(AmsTransferOrder amsTransferOrder, Long applicantId, String applicantName);

    /**
     * 修改调拨管理
     * 
     * @param amsTransferOrder 调拨管理
     * @return 结果
     */
    public int updateAmsTransferOrder(AmsTransferOrder amsTransferOrder);

    /**
     * 提交调拨单（草稿 → 待确认）
     * <p>提交前会校验资产当前归属是否与草稿保存时一致，防止覆盖其他业务的变更。</p>
     */
    public int submitTransfer(Long orderId, String operateLoginName);

    /**
     * 确认调拨（待确认 → 已调拨）
     * <p>逐条调用公共流转服务更新资产当前归属并写入履历记录。</p>
     */
    public int confirmTransfer(Long orderId, Long operateUserId, String operateUserName, String operateLoginName);

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

    /**
     * 删除调拨管理信息
     * 
     * @param orderId 调拨管理主键
     * @return 结果
     */
    public int deleteAmsTransferOrderByOrderId(Long orderId);
}
