package cn.estsh.i3plus.core.api.iservice.busi;

import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.model.platform.UserDetailModel;
import cn.estsh.i3plus.pojo.platform.bean.*;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @Description : 用户服务
 * @Reference :
 * @Author : wei.peng
 * @Date : 2018-10-25 16:21
 * @Modify :
 **/
public interface ISysUserInfoService {


    /**
     * 新增数据
     * @param userInfo
     * @return
     */
    @ApiOperation(value = "新增用户",notes = "新增一个用户信息")
    SysUserInfo insertSysUserInfo(SysUserInfo userInfo);

    /**
     * 修改数据
     * @param userInfo
     */
    @ApiOperation(value = "修改用户",notes = "修改一个用户信息")
    void updateSysUserInfo(SysUserInfo userInfo);

    /**
     * 刷新 用户部门关系
     * @param userInfoId
     * @param departmentIds
     * @param userName
     */
    @ApiOperation(value = "刷新用户关系",notes = "刷新用户部门关系")
    void refreshRefUserDepartment(Long userInfoId, Long[] departmentIds, String userName);

    /**
     * 刷新用户岗位信息
     * @param userInfoId
     * @param positionIds
     * @param userName
     */
    @ApiOperation(value = "刷新用户关系",notes = "刷新用户岗位关系")
    void refreshRefUserPosition(Long userInfoId, Long[] positionIds , String userName);

    /**
     * 刷新用户组织信息
     * @param userInfoId
     * @param organizeId
     * @param userName
     */
    @ApiOperation(value = "刷新用户关系",notes = "刷新用户组织关系")
    void refreshRefUserOrganize(Long userInfoId, Long organizeId, String userName);

    /**
     * 刷新用户账号信息
     * @param userInfoId
     */
    @ApiOperation(value = "刷新用户账号信息",notes = "根据UserInfoId 刷新用户账号信息")
    void refreshUserInfoUserNum(Long userInfoId);

    /**
     * 根据Key 删除数据
     * @param id
     */
    @ApiOperation(value = "删除用户",notes = "根据UserInfoId 删除用户信息")
    void deleteSysUserInfoById(Long id);

    /**
     * 根据id批量删除岗位
     * @param ids id数组
     * @return
     */
    @ApiOperation(value = "删除用户-批量",notes = "根据UserInfoId 批量删除用户信息")
    void deleteSysUserInfoByIds(Long[] ids);

    /**
     * 根据Key 数据
     * @param id
     * @return
     */
    @ApiOperation(value = "查询用户信息",notes = "根据 UserInfoId查询用户信息")
    SysUserInfo getSysUserInfoById(Long id);

    /**
     * 查询所有数据
     * @return
     */
    @ApiOperation(value = "查询用户信息",notes = "查询所有用户信息")
    List listSysUserInfo();

    /**
     * 复杂查询
     * @param userInfo
     * @param pager
     * @return
     */
    @ApiOperation(value = "查询用户信息",notes = "根据复杂查询条件查询用户信息(分页信息)")
    ListPager<SysUserInfo> querySysUserInfo(SysUserInfo userInfo, Pager pager);

    /**
     * 用户唯一校验
     * @param userInfo
     */
    @ApiOperation(value = "用户唯一校验",notes = "校验用户信息唯一性")
    void checkSysUserInfoOnly(SysUserInfo userInfo);

    /**
     * 查询用户部门关系
     * @param userId
     * @return
     */
    @ApiOperation(value = "关系查询-用户部门",notes = "查询用户部门关系")
    List<SysRefUserDepartment> findRefUserDepartmentByUserId(Long userId);

    @ApiOperation(value = "关系查询-用户部门",notes = "根据部门或者组织集合查询用户部门关系")
    List<SysRefUserDepartment> querySysRefUserDepartment(UserDetailModel model);

    /**
     * 查询用户岗位关系
     * @param userId
     * @return
     */
    @ApiOperation(value = "关系查询-用户岗位",notes = "查询用户岗位关系")
    List<SysRefUserPosition> findSysRefUserPositionByUserId(Long userId);

    /**
     * 根据(组织ID,部门ID,用户名称,用户工号) 查询用户信息
     * @param info
     * @param idList 用户ID 集合
     * @return
     */
    @ApiOperation(value = "查询用户信息",notes = "根据组织、部门、名称+工号组合查询条件查询用户信息")
    List<SysUserInfo> querySysUserInfoList(SysUserInfo info, List<Long> idList);

    @ApiOperation(value = "查询用户信息",notes = "根据组织、部门、名称+工号组合查询条件查询用户信息")
    List<SysUserInfo> querySysUserInfoList(UserDetailModel model, List<Long> idList);

    /**
     * 用户唯一校验  用户工号
     * @param no
     * @param id
     * @return
     */
    @ApiOperation(value = "用户唯一校验  用户工号",notes = "用户唯一校验  用户工号")
    boolean checkUserInfoByUserEmpNo(String no,long id);

}
