package cn.iocoder.yudao.module.pms.service.maintain;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportProcessVO;
import cn.iocoder.yudao.module.pms.controller.admin.maintain.IotMaintainController;
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainPageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainSaveVO;
import cn.iocoder.yudao.module.pms.controller.admin.stat.vo.OrderVo;
import cn.iocoder.yudao.module.pms.controller.admin.stat.vo.ReportCost;
import cn.iocoder.yudao.module.pms.dal.dataobject.maintain.IotMaintainDO;
import cn.iocoder.yudao.module.pms.dal.dataobject.oa.IotOaPersonDO;
import cn.iocoder.yudao.module.pms.oa.CallBackOaVo;

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

/**
 * 维修工单 Service 接口
 *
 * @author phli
 */
public interface IotMaintainService {
    Boolean ifFinished(List<Long> deviceIds);
    PageResult<ReportCost> getReportCost(IotMaintainPageReqVO reqVO);
    void methodDeal(IotMaintainController.MaintainMethod method);
    void oaDeal(CallBackOaVo callBackOaVo);
    List<IotOaPersonDO> getMaintainPerson(String id);
    List<IotOaPersonDO> getProjectPerson(String id);
    PageResult<OrderVo> getNotice(OrderVo pageReqVO);
    void approvalMaintain(Long businessKey, Integer bpmStatus);
    Long submitForApproval(Long id);
    Long updateMaintainProcess(IotFailureReportProcessVO iotFailureReportProcessVO);
    /**
     * 创建维修工单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotMaintain(@Valid IotMaintainSaveVO createReqVO);

    /**
     * 更新维修工单
     *
     * @param updateReqVO 更新信息
     */
    void updateIotMaintain(@Valid IotMaintainSaveVO updateReqVO);

    /**
     * 删除维修工单
     *
     * @param id 编号
     */
    void deleteIotMaintain(Long id);

    /**
     * 获得维修工单
     *
     * @param id 编号
     * @return 维修工单
     */
    IotMaintainDO getIotMaintain(Long id);

    /**
     * 获得维修工单分页
     *
     * @param pageReqVO 分页查询
     * @return 维修工单分页
     */
    PageResult<IotMaintainDO> getIotMaintainPage(IotMaintainPageReqVO pageReqVO);
    PageResult<IotMaintainDO> getIotMaintainPageApp(IotMaintainPageReqVO pageReqVO);

    /**
     * 调拨后同步 维修 保养 巡检 工单历史数据
     * @param deviceIds 设备id集合
     * @param deptId 调拨后的部门id
     */
    void syncWordOrderData(List<Long> deviceIds, Long deptId);
}
