package com.aucma.dms.mapper;

import com.aucma.dms.domain.DmsPlanInspect;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 巡检计划信息Mapper接口
 *
 * @author Open Platform
 * @date 2024-01-17
 */
public interface DmsPlanInspectMapper
{
    /**
     * 查询巡检计划信息
     *
     * @param planInspectId 巡检计划信息主键
     * @return 巡检计划信息
     */
    public DmsPlanInspect selectDmsPlanInspectByPlanInspectId(@Param("planInspectId") Long planInspectId);

    /**
     * 查询巡检计划信息列表
     *
     * @param dmsPlanInspect 巡检计划信息
     * @return 巡检计划信息集合
     */
    public List<DmsPlanInspect> selectDmsPlanInspectList(DmsPlanInspect dmsPlanInspect);

    /**
     * 新增巡检计划信息
     *
     * @param dmsPlanInspect 巡检计划信息
     * @return 结果
     */
    public int insertDmsPlanInspect(DmsPlanInspect dmsPlanInspect);

    /**
     * 修改巡检计划信息
     *
     * @param dmsPlanInspect 巡检计划信息
     * @return 结果
     */
    public int updateDmsPlanInspect(DmsPlanInspect dmsPlanInspect);

    /**
     * 删除巡检计划信息
     *
     * @param planInspectId 巡检计划信息主键
     * @return 结果
     */
    public int deleteDmsPlanInspectByPlanInspectId(@Param("planInspectId") Long planInspectId);

    /**
     * 批量删除巡检计划信息
     *
     * @param planInspectIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDmsPlanInspectByPlanInspectIds(@Param("planInspectIds") Long[] planInspectIds);

    DmsPlanInspect selectPlanInspectJoinJobByInspectId(@Param("planInspectId") Long planInspectId);
    DmsPlanInspect selectPlanInspectJoinJobByInspectId1(@Param("planInspectId") String planInspectId);

    /**
     * 查询待执行的巡检计划列表
     * @return 待执行的巡检计划列表
     */
    List<DmsPlanInspect> selectPendingInspectPlans();

    /**
     * 更新巡检计划的下次执行时间
     * @param planInspectId 计划ID
     * @param planTime 下次执行时间
     * @return 更新结果
     */
    int updatePlanNextTime(@Param("planInspectId") Long planInspectId,
                           @Param("planTime") Date planTime);

    /**
     * 锁定计划行（FOR UPDATE），用于并发场景下串行生成工单
     *
     * @param planInspectId 计划ID
     * @return 计划ID（不存在返回null）
     */
    Long lockPlanById(@Param("planInspectId") Long planInspectId);

}
