package com.ruoyi.asset.service;

import java.util.List;
import com.ruoyi.asset.domain.AmsAsset;
import com.ruoyi.asset.domain.AmsBorrowOrder;
import com.ruoyi.asset.domain.AmsBorrowOrderItem;

/**
 * 借用归还管理Service接口
 *
 * @author Yangk
 * @date 2026-06-16
 */
public interface IAmsBorrowOrderService
{
    /**
     * 查询借用归还管理
     *
     * @param orderId 借用归还管理主键
     * @return 借用归还管理
     */
    public AmsBorrowOrder selectAmsBorrowOrderByOrderId(Long orderId);

    /**
     * 查询借用归还管理列表
     *
     * @param amsBorrowOrder 借用归还管理
     * @return 借用归还管理集合
     */
    public List<AmsBorrowOrder> selectAmsBorrowOrderList(AmsBorrowOrder amsBorrowOrder);

    /**
     * 新增借用归还管理
     *
     * @param amsBorrowOrder 借用归还管理
     * @return 结果
     */
    public int insertAmsBorrowOrder(AmsBorrowOrder amsBorrowOrder);

    /**
     * 修改借用归还管理
     *
     * @param amsBorrowOrder 借用归还管理
     * @return 结果
     */
    public int updateAmsBorrowOrder(AmsBorrowOrder amsBorrowOrder);

    /**
     * 批量删除借用归还管理
     *
     * @param orderIds 需要删除的借用归还管理主键集合
     * @return 结果
     */
    public int deleteAmsBorrowOrderByOrderIds(String orderIds);

    /**
     * 删除借用归还管理信息
     *
     * @param orderId 借用归还管理主键
     * @return 结果
     */
    public int deleteAmsBorrowOrderByOrderId(Long orderId);

    /**
     * 查询可用于借用的资产列表
     *
     * @param asset 资产查询条件
     * @param currentOrderId 当前单据ID（排除自身）
     * @return 可借用资产列表
     */
    public List<AmsAsset> selectAvailableBorrowAssetList(AmsAsset asset, Long currentOrderId);

    /**
     * 提交借用单
     *
     * @param orderId 借用单ID
     * @param operateLoginName 操作人账号
     * @return 结果
     */
    public int submitBorrow(Long orderId, String operateLoginName);

    /**
     * 确认借出
     *
     * @param orderId 借用单ID
     * @param operateUserId 操作人ID
     * @param operateUserName 操作人姓名
     * @param operateLoginName 操作人账号
     * @return 结果
     */
    public int confirmBorrow(Long orderId, Long operateUserId, String operateUserName, String operateLoginName);

    /**
     * 驳回借用申请
     *
     * @param orderId 借用单ID
     * @param rejectReason 驳回原因
     * @param operateLoginName 操作人账号
     * @return 结果
     */
    public int rejectBorrow(Long orderId, String rejectReason, String operateLoginName);

    /**
     * 发起归还申请（明细级别分批归还）
     *
     * @param orderId 借用单ID
     * @param returnItems 申请归还的明细项（内含归还的仓库/位置ID）
     * @param operateLoginName 操作人账号
     * @return 结果
     */
    public int applyReturn(Long orderId, List<AmsBorrowOrderItem> returnItems, String operateLoginName);

    /**
     * 确认归还（明细级别确认）
     *
     * @param orderId 借用单ID
     * @param returnItems 确认归还的明细项
     * @param operateUserId 操作人ID
     * @param operateUserName 操作人姓名
     * @param operateLoginName 操作人账号
     * @return 结果
     */
    public int confirmReturn(Long orderId, List<AmsBorrowOrderItem> returnItems, Long operateUserId, String operateUserName, String operateLoginName);
}
