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

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.WorkTeamDetailRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.WorkTeamPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.WorkTeamRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.WorkTeamSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDetailDO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;

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

/**
 * 生产班组 Service 接口
 *
 * @author 内蒙必硕
 */
public interface WorkTeamService {

    /**
     * 创建生产班组
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWorkTeam(@Valid WorkTeamSaveReqVO createReqVO);

    /**
     * 更新生产班组
     *
     * @param updateReqVO 更新信息
     */
    void updateWorkTeam(@Valid WorkTeamSaveReqVO updateReqVO);

    /**
     * 删除生产班组
     *
     * @param id 编号
     */
    void deleteWorkTeam(Long id);

    /**
     * 获得生产班组
     *
     * @param id 编号
     * @return 生产班组
     */
    WorkTeamDO getWorkTeam(Long id);

    /**
     * 获得生产班组分页
     *
     * @param pageReqVO 分页查询
     * @return 生产班组分页
     */
    PageResult<WorkTeamRespVO> getWorkTeamPage(WorkTeamPageReqVO pageReqVO);

    // ==================== 子表（班组成员） ====================

    /**
     * 获得班组成员分页
     *
     * @param pageReqVO  分页查询
     * @param workTeamId 班组id
     * @return 班组成员分页
     */
    PageResult<WorkTeamDetailRespVO> getWorkTeamDetailPage(PageParam pageReqVO, Long workTeamId);

    /**
     * 创建班组成员
     *
     * @param workTeamDetail 创建信息
     * @return 编号
     */
    Long createWorkTeamDetail(@Valid WorkTeamDetailDO workTeamDetail);

    /**
     * 更新班组成员
     *
     * @param workTeamDetail 更新信息
     */
    void updateWorkTeamDetail(@Valid WorkTeamDetailDO workTeamDetail);

    /**
     * 删除班组成员
     *
     * @param id 编号
     */
    void deleteWorkTeamDetail(Long id);
    List<WorkTeamDO> selectBy(WorkTeamDO detailDO);
    /**
     * 获得班组成员
     *
     * @param id 编号
     * @return 班组成员
     */
    WorkTeamDetailDO getWorkTeamDetail(Long id);
    List<WorkTeamDetailDO> getProcessUsers(String processType, String groupType);

    /**
     * 通过用户 ID 查询用户们
     *
     * @param ids 用户 ID 们
     * @return 用户对象信息
     */
    List<AdminUserRespDTO> getUserList(String processType, String groupType);
    List<AdminUserRespDTO> getUserList2(Long orgId, String groupType);

    List<WorkTeamDetailDO> getUserWorkTeamDetail(Long workerId, Integer userRole);

    List<WorkTeamDO> selectByIds(List<Long> ids);
    List<WorkTeamDetailDO> getDetailByWorkTeamIds(List<Long> workerIds);
    public List<WorkTeamDO> getList(WorkTeamDO workTeamDO);
}