package cn.iocoder.yudao.module.server.service.workorderInfos;

import java.util.*;
import javax.validation.*;
import javax.validation.constraints.NotEmpty;

import cn.iocoder.yudao.module.server.controller.admin.workorderInfos.vo.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.server.dal.dataobject.workorderInfos.WorkorderInfosDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;

/**
 * 工单 Service 接口
 *
 * @author wyj
 */
public interface WorkorderInfosService {

    /**
     * 创建工单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWorkorderInfos(@Valid WorkorderInfosSaveReqVO createReqVO);

    /**
     * 更新工单
     *
     * @param updateReqVO 更新信息
     */
    void updateWorkorderInfos(@Valid WorkorderInfosSaveReqVO updateReqVO);
    void closeWorkorderInfos(Long id);

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

    /**
     * 获得工单
     *
     * @param id 编号
     * @return 工单
     */
    WorkorderInfosRespVO getWorkorderInfos(Long id);

    /**
     * 获得工单分页
     *
     * @param pageReqVO 分页查询
     * @return 工单分页
     */
    PageResult<WorkorderInfosRespVO> getWorkorderInfosPage(WorkorderInfosPageReqVO pageReqVO);

    /**
     * 获得所属用户
     *
     * @param deptDO
     * @return 获得所属用户
     */
    List<DeptDO> getBelongingUser(DeptDO deptDO);

    /**
     * 工单获得所属用户
     * @return 工单获得所属用户
     */
    List<DeptDO> getWorkorderBelongingUser();

    Integer createFile(@NotEmpty(message = "文件内容不能为空") byte[] content,
                      String name, String directory, String type,String uploadType);

    /**
     * 审核工单
     *
     * @param updateReqVO 审核工单
     */
    void checkWorkorderInfos(@Valid WorkorderInfosSaveReqVO updateReqVO);

    /**
     * 首页卡片
     * @return
     */
    HashMap<String, Long> getCardList();

    /**
     * 首页部门工单统计
     * @return
     */
    List<DeptWorkorderVO> getDeptWorkorder();

    /**
     * pending-workorder
     * @return
     */
    PageResult<WorkorderInfosRespVO> getPendingWorkorder(WorkorderInfosPageReqVO pageReqVO);
}