package com.bonus.system.dept.dao;

import com.bonus.system.api.domain.MapVo;
import com.bonus.system.basic.domain.SysOrg;
import com.bonus.system.dept.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 项目部角色-数据访问层
 * @author fly
 */
@Repository("ProDeptRoleDao")
public interface ProDeptRoleDao {

    /**
     * 获取项目部角色列表
     * @param bean 参数
     * @return list bean
     */
    List<ProDeptRoleBean> getRoleUserList(@Param("bean") ProDeptRoleBean bean);

    List<ProDeptRoleBean> getRoleUserNoManagerList(@Param("bean")ProDeptRoleBean bean);

    /**
     * 查询组织选择列表
     * @return list bean
     */
    List<OrgUserVo> selectOrgUserList(ProDeptRoleBean bean);

    /**
     * 查询角色原绑定人员
     * @param departmentId 角色id
     * @return 绑定人员
     */
    List<String> getRoleUserById(Long departmentId);

    /**
     * 新增项目部角色表
     * @param bean
     * @return
     */
    int insertDeptRole(ProDeptRoleDo bean);
    /**
     * 修改项目部角色表
     * @param bean
     * @return
     */
    int updateDeptRole(ProDeptRoleDo bean);

    int deletePersonAssignment(ProDeptRoleDo bean);

    int insertPersonAssignment( List<ProDeptRoleDo> list);

    int checkPersonAssignment(ProDeptRoleDo bean);

    /**
     * 查询统项目部其他岗位已选择人员
     * @param bean
     * @return
     */
    List<String> getUserByRoleAndOrg(@Param("bean")ProDeptRoleBean bean, @Param("list")List<Long> roleIds);

    /**
     * 查询其他项目部已选择人员
     * @param bean
     * @return
     */
    List<String> getUserByOtherRoleAndOrg(ProDeptRoleBean bean);

    /**
     * 八大员查询
     * @param bean
     * @return
     */
    List<EightRoleBean> getOrgEightRoleList(EightRoleBean bean);

    /**
     * 八大员详情
     * @param orgList
     * @return
     */
    List<String> getOrgEightRoleDetail(@Param("list") List<String> orgList, @Param("parentOrgName")String parentOrgName);

    List<ProDeptRoleBean> getDataDetail(List<String> list);

    List<ProDeptRoleBean> getMoreOrgData(ProDeptRoleBean bean);

    List<ProDeptRoleBean> getMoreOrgDataByUserName(@Param("bean") ProDeptRoleBean bean, @Param("list") List<ProDeptRoleBean> moreOrgData);

    ProDeptRoleBean getInfoById(ProDeptRoleBean o);

    List<Long> getSubAllOrgList(List<MapVo> orgList);

    Long getParentOrgById(MapVo mapVo);

    String getOrgChildById(Long orgId);

    /**
     * 项目部管理->项目部角色管理->项目部角色一键审批
     * @param bean
     * @return void
     * @author cwchen
     * @date 2025/2/11 15:20
     */
    void batchRoleCheck(ProDeptRoleDo bean);
}
