package com.ygtx.gxt.mapper;

import java.util.List;

import com.ygtx.gxt.domain.GxtOrderData;
import com.ygtx.gxt.domain.GxtRepairOrder;
import org.apache.ibatis.annotations.Mapper;
import com.ygtx.gxt.domain.GxtUserScore;
import org.apache.ibatis.annotations.Param;

/**
 * 维修工单Mapper接口
 *
 * @author ouyj
 * @date 2025-10-30
 */
@Mapper
public interface GxtRepairOrderMapper
{
    /**
     * 查询维修工单
     *
     * @param id 维修工单主键
     * @return 维修工单
     */
    public GxtRepairOrder selectGxtRepairOrderById(Long id);

    /**
     * 查询维修工单列表
     *
     * @param gxtRepairOrder 维修工单
     * @return 维修工单集合
     */
    public List<GxtRepairOrder> selectGxtRepairOrderList(GxtRepairOrder gxtRepairOrder);

    public List<GxtRepairOrder> selectGxtRepairOrderListByMonth(GxtRepairOrder gxtRepairOrder);

    /**
     * 查询用于自动结单的维修工单列表
     * 查询状态为assigned或to_finish且接单时间、停机时间、恢复运行时间不为空的工单
     *
     * @param gxtRepairOrder 维修工单
     * @return 维修工单集合
     */
    public List<GxtRepairOrder> selectGxtRepairOrderListForAutoFinalize(GxtRepairOrder gxtRepairOrder);

    /**
     * 新增维修工单
     *
     * @param gxtRepairOrder 维修工单
     * @return 结果
     */
    public int insertGxtRepairOrder(GxtRepairOrder gxtRepairOrder);

    /**
     * 修改维修工单
     *
     * @param gxtRepairOrder 维修工单
     * @return 结果
     */
    public int updateGxtRepairOrder(GxtRepairOrder gxtRepairOrder);

    /**
     * 删除维修工单
     *
     * @param id 维修工单主键
     * @return 结果
     */
    public int deleteGxtRepairOrderById(Long id);

    /**
     * 批量删除维修工单
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteGxtRepairOrderByIds(Long[] ids);

    /**
     * 根据工单编码查询维修工单
     *
     * @param workOrderProjectNo 工单编码
     * @return 维修工单
     */
    public GxtRepairOrder selectGxtRepairOrderByWorkOrderProjectNo(String workOrderProjectNo);

    /**
     * 查询维修工单列表(无权限过滤)
     *
     * @param gxtRepairOrder 维修工单
     * @return 维修工单集合
     */
    public List<GxtRepairOrder> selectGxtRepairOrderListNoPermi(GxtRepairOrder gxtRepairOrder);

    /**
     * 根据ID查询维修工单及人员信息
     *
     * @param id 维修工单主键
     * @return 维修工单
     */
    public GxtRepairOrder selectRepairOrderWithPersonById(Long id);

    public GxtOrderData selectHomePageData(@Param("userId") Long userId,@Param("monthPeriod") String monthPeriod);

    public List<GxtUserScore> selectHomePageRank(GxtUserScore gxtUserScore);
    
    /**
     * 查询设备最近的维修工单
     *
     * @return 维修工单集合
     */
    public List<GxtRepairOrder> selectLatestGxtRepairOrderByDeviceId(@Param("pcsDeviceId") Long pcsDeviceId, @Param("limit") Integer limit);
    
    public List<GxtRepairOrder> selectGxtRepairOrderByDeviceIdWithCondition(@Param("pcsDeviceId") Long pcsDeviceId, 
        @Param("workOrderStatus") String workOrderStatus, 
        @Param("excludeStatus") boolean excludeStatus, 
        @Param("orderByField") String orderByField, 
        @Param("limit") Integer limit);
}
