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

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.common.controller.admin.moldrepair.vo.MoldRepairLineRespVO;
import cn.iocoder.yudao.module.common.controller.admin.moldrepair.vo.MoldRepairLineSaveReqVO;
import cn.iocoder.yudao.module.common.controller.admin.moldrepair.vo.MoldRepairUpdateReqVO;
import cn.iocoder.yudao.module.common.controller.admin.moldrepair.vo.*;
import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairDO;
import cn.iocoder.yudao.module.common.dal.dataobject.moldrepair.MoldRepairLineDO;
import cn.iocoder.yudao.module.common.dal.mysql.moldrepair.MoldRepairLineMapper;

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

/**
 * 模具维修记录 Service 接口
 *
 * @author 内蒙必硕
 */
public interface MoldRepairService {

    /**
     * 创建模具维修记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMoldRepair(@Valid MoldRepairSaveReqVO createReqVO);

    /**
     * 更新模具维修记录
     *
     * @param updateReqVO 更新信息
     */
    void updateMoldRepair(@Valid MoldRepairSaveReqVO updateReqVO);

    /**
     * 删除模具维修记录
     *
     * @param id 编号
     */
    void deleteMoldRepair(List<Long> idList);

    /**
     * 获得模具维修记录
     *
     * @param id 编号
     * @return 模具维修记录
     */
    MoldRepairDO getMoldRepair(Long id);

    /**
     * 获得模具维修记录分页
     *
     * @param pageReqVO 分页查询
     * @return 模具维修记录分页
     */
    PageResult<MoldRepairDO> getMoldRepairPage(MoldRepairPageReqVO pageReqVO);

    // ==================== 子表（模具维修记录行） ====================

    /**
     * 获得模具维修记录行列表
     *
     * @param repairId 维修单ID
     * @return 模具维修记录行列表
     */
    List<MoldRepairLineDO> getMoldRepairLineListByRepairId(Long repairId);

    void updateRepairLine(@Valid MoldRepairLineSaveReqVO updateReqVO);

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

    void updateMoldRepairStatus(@Valid MoldRepairUpdateReqVO updateReqVO);

    List<MoldRepairLineRespVO> getRepairListByMoldId(Long moldId, String startTime, String endTime, String ids);

    Long getRepairListCountByRepairStatus();

    List<MoldRepairDO> getMoldRepairDOListByStatus();

    void selectCountMoldRepair(EventStatisticsVO eventStatisticsVO);

    List<MoldRepairDO> getList();
}

