package com.ruoyi.asset.service;

import java.util.List;
import com.ruoyi.asset.domain.AmsRepairOperateContext;
import com.ruoyi.asset.domain.AmsRepairOrder;

/**
 * 报修维修管理Service接口
 *
 * @author Yangk
 * @date 2026-06-16
 */
public interface IAmsRepairOrderService
{
    /**
     * 查询报修维修管理
     *
     * @param repairId 报修维修管理主键
     * @return 报修维修管理
     */
    public AmsRepairOrder selectAmsRepairOrderByRepairId(Long repairId);

    /**
     * 查询报修维修管理列表
     *
     * @param amsRepairOrder 报修维修管理
     * @return 报修维修管理集合
     */
    public List<AmsRepairOrder> selectAmsRepairOrderList(AmsRepairOrder amsRepairOrder);

    /**
     * 新增报修维修管理
     *
     * @param amsRepairOrder 报修维修管理
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int insertAmsRepairOrder(AmsRepairOrder amsRepairOrder, AmsRepairOperateContext operateContext);

    /**
     * 修改报修维修管理
     *
     * @param amsRepairOrder 报修维修管理
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int updateAmsRepairOrder(AmsRepairOrder amsRepairOrder, AmsRepairOperateContext operateContext);

    /**
     * 批量删除报修维修管理
     *
     * @param repairIds 需要删除的报修维修管理主键集合
     * @return 结果
     */
    public int deleteAmsRepairOrderByRepairIds(String repairIds);

    /**
     * 删除报修维修管理信息
     *
     * @param repairId 报修维修管理主键
     * @return 结果
     */
    public int deleteAmsRepairOrderByRepairId(Long repairId);

    /**
     * 提交报修申请
     *
     * @param repairId 报修维修管理ID
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int submitRepair(Long repairId, AmsRepairOperateContext operateContext);

    /**
     * 确认受理报修
     *
     * @param repairId 报修维修管理ID
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int confirmRepair(Long repairId, AmsRepairOperateContext operateContext);

    /**
     * 驳回报修申请
     *
     * @param repairId 报修维修管理ID
     * @param rejectReason 驳回原因
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int rejectRepair(Long repairId, String rejectReason, AmsRepairOperateContext operateContext);

    /**
     * 开始维修
     *
     * @param amsRepairOrder 包含维修方信息的实体
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int startRepair(AmsRepairOrder amsRepairOrder, AmsRepairOperateContext operateContext);

    /**
     * 完成维修
     *
     * @param amsRepairOrder 包含维修费用、结果的实体
     * @param operateContext 操作上下文
     * @return 结果
     */
    public int finishRepair(AmsRepairOrder amsRepairOrder, AmsRepairOperateContext operateContext);

    /**
     * 查询可用于报修的在库/在用资产列表
     *
     * @param asset 过滤条件
     * @param currentRepairId 当前报修单ID（排除自身）
     * @return 可报修资产列表
     */
    public List<com.ruoyi.asset.domain.AmsAsset> selectAvailableRepairAssetList(com.ruoyi.asset.domain.AmsAsset asset, Long currentRepairId);
}
