package cn.iocoder.yudao.module.mes.service.dvrepair;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.dashboard.vo.dashboard.EventStatisticsVO;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO;
import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 设备维修记录 Service 接口
 *
 * @author 内蒙必硕
 */
public interface DvRepairService {

    /**
     * 创建设备维修记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDvRepair(@Valid DvRepairSaveReqVO createReqVO);

    /**
     * 更新设备维修记录
     *
     * @param updateReqVO 更新信息
     */
    void updateDvRepair(@Valid DvRepairSaveReqVO updateReqVO);

    /**
     * 删除设备维修记录
     *
     * @param id 编号
     */
    void deleteDvRepair(List<Long> idList);

    /**
     * 获得设备维修记录
     *
     * @param id 编号
     * @return 设备维修记录
     */
    DvRepairDO getDvRepair(Long id);

    /**
     * 获得设备维修记录分页
     *
     * @param pageReqVO 分页查询
     * @return 设备维修记录分页
     */
    PageResult<DvRepairDO> getDvRepairPage(DvRepairPageReqVO pageReqVO);

    // ==================== 子表（设备维修记录行） ====================

    /**
     * 获得设备维修记录行列表
     *
     * @param repairId 维修单ID
     * @return 设备维修记录行列表
     */
    List<DvRepairLineDO> getDvRepairLineListByRepairId(Long repairId);

    void updateRepairLine(@Valid DvRepairLineSaveReqVO updateReqVO);

    void batchUpdateTicketResults(@Valid List<DvRepairLineSaveReqVO> updateReqVOList);

    void updateDvRepairStatus(@Valid DvRepirUpdateReqVO updateReqVO);

    List<DvRepairLineRespVO> getRepairListByDeviceId(Long deviceId, String startTime, String endTime,String ids);

    Long getRepairListCountByRepairStatus();

    List<DvRepairDO> getDvRepairDOListByStatus();

    void selectCountDeviceRepair(EventStatisticsVO eventStatisticsVO);

    List<DvRepairDO> getList();
}