package com.aucma.dms.mapper;

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

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

/**
 * 保养计划信息Mapper接口
 *
 * @author xins
 * @date 2024-01-08
 */
public interface DmsPlanMaintMapper
{
    /**
     * 查询保养计划信息
     *
     * @param planMaintId 保养计划信息主键
     * @return 保养计划信息
     */
    public DmsPlanMaint selectDmsPlanMaintByPlanMaintId(@Param("planMaintId") Long planMaintId);

    /**
     * 查询保养计划信息列表
     *
     * @param dmsPlanMaint 保养计划信息
     * @return 保养计划信息集合
     */
    public List<DmsPlanMaint> selectDmsPlanMaintList(DmsPlanMaint dmsPlanMaint);

    /**
     * 新增保养计划信息
     *
     * @param dmsPlanMaint 保养计划信息
     * @return 结果
     */
    public int insertDmsPlanMaint(DmsPlanMaint dmsPlanMaint);

    /**
     * 修改保养计划信息
     *
     * @param dmsPlanMaint 保养计划信息
     * @return 结果
     */
    public int updateDmsPlanMaint(DmsPlanMaint dmsPlanMaint);

    /**
     * 删除保养计划信息
     *
     * @param planMaintId 保养计划信息主键
     * @return 结果
     */
    public int deleteDmsPlanMaintByPlanMaintId(@Param("planMaintId") Long planMaintId);

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

    /**
     * 批量删除保养计划明细
     *
     * @param planMaintIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDmsPlanMaintDetailByPlanMaintIds(@Param("planMaintIds") Long[] planMaintIds);

    /**
     * 批量新增保养计划明细
     *
     * @param dmsPlanMaintDetailList 保养计划明细列表
     * @return 结果
     */
    public int batchDmsPlanMaintDetail(@Param("dmsPlanMaintDetailList") List<DmsPlanMaintDetail> dmsPlanMaintDetailList);


    /**
     * 通过保养计划信息主键删除保养计划明细信息
     *
     * @param planMaintId 保养计划信息ID
     * @return 结果
     */
    public int deleteDmsPlanMaintDetailByPlanMaintId(@Param("planMaintId") Long planMaintId);



    /**
     * 查询保养计划信息
     *
     * @param planMaintCode 保养计划信息Code
     * @return 保养计划信息
     */
    public DmsPlanMaint selectDmsPlanMaintJoinByPlanMaintCode(@Param("planMaintCode") String planMaintCode);



    /**
     * 查询保养计划信息,Join job
     *
     * @param planMaintId 保养计划信息主键
     * @return 保养计划信息
     */
    public DmsPlanMaint selectPlanMaintJoinJobByPlanMaintId(@Param("planMaintId") Long planMaintId);

    /**
     * 查询待执行的保养计划列表
     * @return 待执行的保养计划列表
     */
    List<DmsPlanMaint> selectPendingMaintPlans();

    /**
     * 更新保养计划的下次执行时间
     * @param planMaintId 计划ID
     * @param maintTime 下次执行时间
     * @return 更新结果
     */
    int updatePlanNextTime(@Param("planMaintId") Long planMaintId,
                           @Param("maintTime") Date maintTime);

    /**
     * 锁定保养计划行，避免并发重复生成工单
     * @param planMaintId 计划ID
     * @return 锁定到的计划ID
     */
    Long lockPlanById(@Param("planMaintId") Long planMaintId);

}
