package com.aucma.dms.service;

import com.aucma.dms.domain.DmsBillsMaintDetail;
import com.aucma.dms.domain.DmsBillsMaintInstance;

import java.util.List;

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

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

    /**
     * 新增保养工单
     *
     * @param planMaintCode 保养计划编号
     * @return 结果
     */
    public int insertDmsBillsMaintInstance(String planMaintCode);

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

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

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

    int insertDmsBillsMaintInstancePDA(DmsBillsMaintInstance dmsBillsMaintInstance);


    /**
     * 获取最新一条未完成的保养工单
     *
     * @param dmsBillsMaintInstance
     * @return
     */
    public DmsBillsMaintInstance getNewestBillsMaintInstance(DmsBillsMaintInstance dmsBillsMaintInstance);


    /**
     * 开始保养
     *
     * @param dmsBillsMaintDetail 保养工单明细
     * @return DmsBillsMaintDetail
     */
    public DmsBillsMaintDetail startMaint(DmsBillsMaintDetail dmsBillsMaintDetail);


    /**
     * 完成保养
     *
     * @param dmsBillsMaintDetail 保养工单明细
     * @return 结果
     */
    public int completeMaint(DmsBillsMaintDetail dmsBillsMaintDetail);

    /**
     * 获取保养工单设备列表（网页版保养执行）
     *
     * @param maintInstanceId 保养工单ID
     * @return 设备明细列表
     */
    public List<DmsBillsMaintDetail> getDeviceList(Long maintInstanceId);

    /**
     * 更新设备保养状态（简化版，只更新合格/不合格）
     *
     * @param detail 设备明细
     * @return 结果
     */
    public int updateDeviceStatus(DmsBillsMaintDetail detail);

    /**
     * 定时任务专用：创建已完成状态的保养工单（含明细），所有设备默认保养完成
     *
     * @param planMaintCode 保养计划编号
     * @return 结果
     */
    int insertCompletedMaintInstance(String planMaintCode);
}
