package com.aucma.dms.mapper;

import com.aucma.dms.domain.DmsBillsMaintDetail;
import com.aucma.dms.domain.DmsBillsMaintDetailProject;
import com.aucma.dms.domain.DmsBillsMaintInstance;
import com.aucma.dms.domain.DmsMaintInstanceActivity;
import org.apache.ibatis.annotations.Param;

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

/**
 * 保养工单Mapper接口
 *
 * @author Open Platform
 * @date 2024-02-29
 */
public interface DmsBillsMaintInstanceMapper {
    /**
     * 查询保养工单
     *
     * @param maintInstanceId 保养工单主键
     * @return 保养工单
     */
    public DmsBillsMaintInstance selectDmsBillsMaintInstanceByMaintInstanceId(@Param("maintInstanceId") Long maintInstanceId);

    /**
     * 查询保养工单列表
     *
     * @param dmsBillsMaintInstance 保养工单
     * @return 保养工单集合
     */
    public List<DmsBillsMaintInstance> selectDmsBillsMaintInstanceList(DmsBillsMaintInstance dmsBillsMaintInstance);

    /**
     * 新增保养工单
     *
     * @param dmsBillsMaintInstance 保养工单
     * @return 结果
     */
    public int insertDmsBillsMaintInstance(DmsBillsMaintInstance dmsBillsMaintInstance);

    /**
     * 修改保养工单
     *
     * @param dmsBillsMaintInstance 保养工单
     * @return 结果
     */
    public int updateDmsBillsMaintInstance(DmsBillsMaintInstance dmsBillsMaintInstance);

    /**
     * 删除保养工单
     *
     * @param maintInstanceId 保养工单主键
     * @return 结果
     */
    public int deleteDmsBillsMaintInstanceByMaintInstanceId(@Param("maintInstanceId") Long maintInstanceId);

    /**
     * 批量删除保养工单
     *
     * @param maintInstanceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDmsBillsMaintInstanceByMaintInstanceIds(@Param("maintInstanceIds") Long[] maintInstanceIds);




    /**
     * 批量新增保养工单明细
     *
     * @param dmsBillsMaintDetailList 保养工单明细列表
     * @return 结果
     */
    public int batchDmsBillsMaintDetail(@Param("dmsBillsMaintDetailList") List<DmsBillsMaintDetail> dmsBillsMaintDetailList);

    /**
     * 新增保养工单明细（单条）
     *
     * @param dmsBillsMaintDetail 保养工单明细
     * @return 结果
     */
    int insertDmsBillsMaintDetail(DmsBillsMaintDetail dmsBillsMaintDetail);

    /**
     * 查询最新一条保养工单，Join 第一步节点
     *
     * @param dmsBillsMaintInstance 保养工单
     * @return 保养工单
     */
    public DmsBillsMaintInstance selectNewestDmsBillsMaintInstance(DmsBillsMaintInstance dmsBillsMaintInstance);

    int batchDmsProject(@Param("list") List<DmsBillsMaintDetailProject> list);

    List<DmsMaintInstanceActivity> selectDmsMaintInfo(@Param("maintInstanceId") Long maintInstanceId);

    /**
     * 检查指定计划今天是否已生成工单
     * @param planMaintId 计划ID
     * @return 工单数量
     */
    int countByPlanIdAndToday(@Param("planMaintId") Long planMaintId);

    /**
     * 统一从 DB 获取当前时间，避免应用机与数据库时钟偏差
     * @return DB 当前时间
     */
    Date selectDbNow();
}
