# 人员

## 人员新增或更新
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.addOrUpdate(List<UserParam> userList)
ID参数为空时，执行新增；反之，执行更新。

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 否 | ID参数为空时，执行新增；反之，执行更新
| customUserId | 自定义ID | Long | 否 | 自定义ID参数为空才自动生成ID
| dataMap | 属性结合 | Map | 否 | 键为remuneration实体（bos_user）的字段标识，值为相应字段的值；支持扩展字段
| isSuccess | 是否成功 | boolean | 否 | 回填处理结果：是否成功
| msg | 错误信息 | String | 否 | 失败信息。成功时为空。
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。


**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    // user.setCustomUserId(123456780L);
    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("number", "000001");
    dataMap.put("name", "人名");
    dataMap.put("username", "用户名");
    dataMap.put("usertype", "1");
    dataMap.put("phone", "13800000000");
    dataMap.put("email", "email@kingdee.com");
    dataMap.put("idcard", "");
    dataMap.put("birthday", "1993-8-8");
    dataMap.put("gender", "1");
    dataMap.put("picturefield", "");
    
    // 职位分录
    List<Map<String, Object>> posList = new ArrayList<>();
    Map<String, Object> entryentity = new HashMap<>();
    // 设置部门ID
    entryentity.put("dpt", 100000);
    entryentity.put("position", "总裁");
    entryentity.put("isincharge", false);
    entryentity.put("ispartjob", false);
    entryentity.put("seq", 1);
    posList.add(entryentity);
    
    entryentity = new HashMap<>();
    // 设置部门编码
    Map<String, Object> dptNumMap = new HashMap<>();
    dptNumMap.put("number", "01");
    entryentity.put("dpt", dptNumMap);
    
    entryentity.put("position", "总经理");
    entryentity.put("isincharge", true);
    entryentity.put("ispartjob", true);
    entryentity.put("seq", 2);
    posList.add(entryentity);
    
    dataMap.put("entryentity", posList);
    user.setDataMap(dataMap);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.addOrUpdate(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```


## 人员新增
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.add(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| customUserId | 自定义ID | Long | 否 | 自定义ID参数为空才自动生成ID
| dataMap | 属性结合 | Map | 否 | 键为remuneration实体（bos_user）的字段标识，值为相应字段的值；支持扩展字段
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。


**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    // user.setCustomUserId(123456780L);
    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("number", "000001");
    dataMap.put("name", "人名");
    dataMap.put("username", "用户名");
    dataMap.put("usertype", "1");
    dataMap.put("phone", "13800000000");
    dataMap.put("email", "email@kingdee.com");
    dataMap.put("idcard", "");
    dataMap.put("birthday", "1993-8-8");
    dataMap.put("gender", "1");
    dataMap.put("picturefield", "");
    
    // 职位分录
    List<Map<String, Object>> posList = new ArrayList<>();
    Map<String, Object> entryentity = new HashMap<>();
    // 设置部门ID
    entryentity.put("dpt", 100000);
    entryentity.put("position", "总裁");
    entryentity.put("isincharge", false);
    entryentity.put("ispartjob", false);
    entryentity.put("seq", 1);
    posList.add(entryentity);
    
    entryentity = new HashMap<>();
    // 设置部门编码
    Map<String, Object> dptNumMap = new HashMap<>();
    dptNumMap.put("number", "01");
    entryentity.put("dpt", dptNumMap);
    
    entryentity.put("position", "总经理");
    entryentity.put("isincharge", true);
    entryentity.put("ispartjob", true);
    entryentity.put("seq", 2);
    posList.add(entryentity);
    
    dataMap.put("entryentity", posList);
    user.setDataMap(dataMap);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.add(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

                     
## 人员修改
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.update(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
| dataMap | 属性结合 | Map | 否 | 键为remuneration实体（bos_user）的字段标识，值为相应字段的值；支持扩展字段
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。


**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("number", "000001");
    dataMap.put("name", "人名");
    dataMap.put("username", "用户名");
    dataMap.put("usertype", "1");
    dataMap.put("phone", "13800000000");
    dataMap.put("email", "email@kingdee.com");
    dataMap.put("idcard", "");
    dataMap.put("birthday", "1993-8-8");
    dataMap.put("gender", "1");
    dataMap.put("picturefield", "");
    
    // 职位分录
    List<Map<String, Object>> posList = new ArrayList<>();
    Map<String, Object> entryentity = new HashMap<>();
    // 设置部门ID
    entryentity.put("dpt", 100000);
    entryentity.put("position", "总裁");
    entryentity.put("isincharge", false);
    entryentity.put("ispartjob", false);
    entryentity.put("seq", 1);
    posList.add(entryentity);
    
    entryentity = new HashMap<>();
    // 设置部门编码
    Map<String, Object> dptNumMap = new HashMap<>();
    dptNumMap.put("number", "01");
    entryentity.put("dpt", dptNumMap);
    
    entryentity.put("position", "总经理");
    entryentity.put("isincharge", true);
    entryentity.put("ispartjob", true);
    entryentity.put("seq", 2);
    posList.add(entryentity);
    
    dataMap.put("entryentity", posList);
    user.setDataMap(dataMap);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.update(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

                     
## 人员删除
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.delete(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    paramList.add(user);

    user = new UserParam();
    user.setId(123456781L);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.delete(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

                    
## 人员启用
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.enable(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    paramList.add(user);

    user = new UserParam();
    user.setId(123456781L);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.enable(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

                    
## 人员禁用
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.disable(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    paramList.add(user);

    user = new UserParam();
    user.setId(123456781L);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.disable(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

           
## 人员启用HR
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.enableHR(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    paramList.add(user);

    user = new UserParam();
    user.setId(123456781L);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.enableHR(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

           
## 人员禁用HR
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.disableHR(List<UserParam> userList)

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 | 
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    paramList.add(user);

    user = new UserParam();
    user.setId(123456781L);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.disableHR(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

           
## 修改人员职位
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.updatePosition(List<UserParam> userList)
数据结构和调用方法和update接口一致。

**参数说明**

列表为部分必须、常用或者重要的参数，详情请查看参数对象[UserParam](#userparam)

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| id | ID | Long | 是 |  |
| dataMap | 属性结合 | Map | 否 | 键为remuneration实体（bos_user）的字段标识，值为相应字段的值；支持扩展字段
	
**返回值**

执行结果回填到参数对象[UserParam](#userparam)，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
  List<UserParam> paramList = new ArrayList<>();
    UserParam user = new UserParam();
    user.setId(123456780L);
    Map<String, Object> dataMap = new HashMap<>();
    
    // 职位分录
    List<Map<String, Object>> posList = new ArrayList<>();
    Map<String, Object> entryentity = new HashMap<>();
    // 设置部门ID
    entryentity.put("dpt", 100000);
    entryentity.put("position", "总裁");
    entryentity.put("isincharge", false);
    entryentity.put("ispartjob", false);
    entryentity.put("seq", 1);
    posList.add(entryentity);
    
    entryentity = new HashMap<>();
    // 设置部门编码
    Map<String, Object> dptNumMap = new HashMap<>();
    dptNumMap.put("number", "01");
    entryentity.put("dpt", dptNumMap);
    
    entryentity.put("position", "总经理");
    entryentity.put("isincharge", true);
    entryentity.put("ispartjob", true);
    entryentity.put("seq", 2);
    posList.add(entryentity);
    
    dataMap.put("entryentity", posList);
    user.setDataMap(dataMap);
    paramList.add(user);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
    userService.updatePosition(paramList);
    
    // 判断执行结果
    for (UserParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```

           
## 修改组织负责人
##### 接口名： kd.bos.servicehelper.permission.PermissionServiceHelper.modifyUserAsOrgAdmin(List<AdminParam> paramList)
数据结构和调用方法和update接口一致。

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | Long | 是 |  |
| orgId | 组织ID | Long | 是 |  |
| isAdmin | 是否负责人 | boolean | 是 |  |
	
**返回值**

执行结果回填到参数对象AdminParam，须判断是否执行成功标志success，失败时错误信息通过参数对象OrgParam的msg属性获取。

**代码示例**
```java
    List<AdminParam> paramList = new ArrayList<>();
    AdminParam adminParam = new AdminParam();
    adminParam.setAdmin(true);
    adminParam.setUserId(userId);
    adminParam.setOrgId(orgId);
    paramList.add(adminParam);
    
    adminParam = new AdminParam();
    adminParam.setAdmin(false);
    adminParam.setUserId(userId);
    adminParam.setOrgId(orgId);
    paramList.add(adminParam);
    
    // 业务调用可以参照接口名，以下举例说明微服务调用方式
    PermissionService permissionService = ServiceFactory.getService(PermissionService.class);
    permissionService.modifyUserAsOrgAdmin(paramList);
    
    // 判断执行结果
    for (AdminParam result : paramList) {
        if (!result.isSuccess()) {
            this.getView().showTipNotification(result.getMsg());
            break;
        }
    }
```
           
## 获取人员信息
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.get(List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |
	
**返回值**

Map结构
```json
{
  "id": // 内码,
  "number": // 编码,
  "name": // 多语言对象,
  "birthday": // 生日,
  "eid": // 云之家工作圈ID,
  "gender": // 性别,
  "isregisted": // 是否已注册,
  "usertype": // 人员类型,
  "source": // 来源,
  "pswstrategy": // 密码策略对象,
  "isactived": // 是否已激活,
   "phone": // 手机号码,
   "enable": // 使用状态,
   "idcard": // 身份证号码,
   "picturefield": // 头像,
   "fuid": // 云之家UID,
   "email": // 邮箱,
   "username": // 用户名,
   "useropenid": // 云之家公开码（openId）,
   "status": // 数据状态,
    "entryentity": [ // 任职信息
        {
          "superior": // 直接上级人员对象,
          "ispartjob": // 是否兼职,
          "dpt": //任职部门的组织对象,
          "position": 职位多语言对象,
          "seq": // 序列号,
          "isincharge": // 是否组织负责人
        }
      ]
 }
```

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    List<Map<String, Object>> userInfoList = UserServiceHelper.get(userIds);
```
           
## 获取人员指定字段信息
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.get(List<Long> userIds, String[] properties, String[] jobProperties)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |
| properties | 人员字段集合 | String[] | 否 |  | 为空时默认为返回值字段
| jobProperties | 人员任职信息字段集合 | String[] | 否 |  |为空时默认为返回值字段
	
**返回值**

Map结构
```json
{
  "id": // 内码,
  "number": // 编码,
  "name": // 多语言对象,
  "birthday": // 生日,
  "eid": // 云之家工作圈ID,
  "gender": // 性别,
  "isregisted": // 是否已注册,
  "usertype": // 人员类型,
  "source": // 来源,
  "pswstrategy": // 密码策略对象,
  "isactived": // 是否已激活,
   "phone": // 手机号码,
   "enable": // 使用状态,
   "idcard": // 身份证号码,
   "picturefield": // 头像,
   "fuid": // 云之家UID,
   "email": // 邮箱,
   "username": // 用户名,
   "useropenid": // 云之家公开码（openId）,
   "status": // 数据状态,
    "entryentity": [ // 任职信息
        {
          "superior": // 直接上级人员对象,
          "ispartjob": // 是否兼职,
          "dpt": //任职部门的组织对象,
          "position": 职位多语言对象,
          "seq": // 序列号,
          "isincharge": // 是否组织负责人
        }
      ]
 }
```

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    List<Map<String, Object>> userInfoList = UserServiceHelper.get(userIds, new String[]{"id,name"}, new String[]{"position"});
```
           
## 获取人员职位信息
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getPosition(List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |
	
**返回值**

Map结构
```json
{
  "id": // 内码,
  "name": // 多语言对象,
    "entryentity": [ // 任职信息
        {
          "id": // 分录主键,
          "superior": // 直接上级人员对象,
          "ispartjob": // 是否兼职,
          "dpt": //任职部门的组织对象,
          "position": 职位多语言对象,
          "seq": // 序列号,
          "isincharge": // 是否组织负责人
        }
      ]
 }
```

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    List<Map<String, Object>> userPositionList = UserServiceHelper.getPosition.get(userIds);
```
           
##  获取人员主职部门
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getUserMainOrgId(long userId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | long | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| long | 主职部门ID  |

**代码示例**
```java
    long mainOrgId = UserServiceHelper.getUserMainOrgId(12345678L);
```
           
## 批量获取人员主职部门
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getUserMainOrgIds(List<Long> userIds)
批量返回所有部门，无法区分人员各自所在部门。

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List | 主职部门ID列表  |

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    List<Long> mainOrgIds = UserServiceHelper.getUserMainOrgIds(userIds);
```
           
## 批量获取人员主职部门
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getUserMainOrgId(List<Long> userIds)
批量返回所有部门，按照<人员-部门>键值对区分人员各自所在部门。

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List | 人员与主职部门的Map列表  |

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    List<Map<Long, Long>> userOrgMapList = UserServiceHelper.getUserMainOrgId(userIds);
```

## 批量获取人员主职部门所属公司
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getCompanyByUserIds(List<Long> userIds)
批量返回人员主职位部门所属的公司（形态类型为法人企业或者法人分支机构的数据），按照<人员ID-公司ID>键值对区分人员主职位部门所属的公司。

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List | 是 |  |

**返回值**

| 返回类型 | 说明
| -------------- | -------------- |
| Map | 人员ID与其主职部门所属公司ID的Mapping |

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(12345678L);
    Map<Long, Long> companyMap = UserServiceHelper.getCompanyByUserIds(userIds);
```


## 获取所有的人员类型
##### 接口名： getAllUserType(boolean includeDisable)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| includeDisable | 是否包含禁用的类型 | boolean | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List | 人员类型列表  |

**代码示例**
```java
    List<Long> usertypeList = UserServiceHelper.getAllUserType(false);
```
           
## 获取指定部门下的所有人员
##### 接口名： getAllUsersOfOrg(int jobType, List<Long> orgIds, boolean includeSubOrg, boolean includeDisableUser)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| jobType | 任职类型 | int | 是 | 1：只获取主职人员；2：只获取兼职部门人员；其他：部门下所有人员，不区分主职和兼职 |
| orgIds | 组织（部门）列表 | List | 是 |  |
| includeSubOrg | 是否包含下级部门 | boolean | 是 |  |
| includeDisableUser | 是否包含禁用的人员 | boolean | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Set | 人员ID列表  |

**代码示例**
```java
    List<Long> orgIds = new ArrayList<>(1);
    orgIds.add(100000L);
    Set<Long> userIds = UserServiceHelper.getAllUsersOfOrg(1, orgIds, false, false);
```
           
## 获取人员变动信息
##### 接口名： List<Map<String, Object>> getUserChangeInfos(String timestamp, boolean includeDptAdmin, boolean includeCompany)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| timestamp | 查询时间戳 | String | 是 | 格式YYYY-MM-dd |
| includeDptAdmin | 返回结果是否包含人员所在部门的负责人 | boolean | 是 |  |
| includeCompany | 返回结果是否包含人员所属公司 | boolean | 是 |  |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Map < String, Object>> |   |

 人员变动信息列表，Map格式：
 * key:id,uid,number,name,dpt,phone,email,chargerName,chargerNumber,companyName,type
 * 描述：人员ID，云之家UID、工号、姓名、部门、手机、邮箱，部门负责人及其工号、调用部门所属公司名称、变更类型（新增、修改、删除，禁用）。
 * 变更类型:1：新增 2：修改 3：删除 4:禁用
 ```json
[
  {
    "changetime": "2020-07-08 17:09:51",
    "uid": "111",
    "number": "111",
    "companyId": 926704850899600500,
    "phone": "13800000000",
    "dptId": 926704850899600501,
    "companyName": "某控股股份有限公司",
    "name": "黎某",
    "dpt": "测试部门",
    "id": 931130375177004200,
    "type": "1",
    "email": ""
  },
  
  {
    "changetime": "2020-07-08 17:09:51",
    "companyName": "环球集团",
    "chargerName": "黎某",
    "dpt": "环球集团",
    "type": "5",
    "uid": "0",
    "number": "222",
    "chargerNumber": "IDE-000598",
    "companyId": 486095482586692600,
    "phone": "13800000001",
    "dptId": 486095482586692600,
    "name": "张三",
    "id": 926706562267898200,
    "email": ""
  }
]
 ```

**代码示例**
```java
    List<Map<String, Object>> userChangeInfoList = UserServiceHelper.getUserChangeInfos("2008-08-08", false, true);
```
       
## 获取人员所有的联系方式类型
##### 接口名： List<Map<String, Object>> getAllUserContactType()

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| id | 内码  |
| number | 编码  |
| name | 名称  |
| enable | 使用状态  |

**代码示例**
```java
    List<Map<String, Object>> contactTypeList = UserServiceHelper.getAllUserContactType();
```
           
## 获取人员所有的联系方式
##### 接口名： Map<Long, Map<String, List<String>>> getUserContact(List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员内码列表 | List | 否 | userIds为null时，查询所欲人员的信息 |
	
**返回值**

人员相同联系方式类型存在多个联系方式时，列表第一个为默认联系方式

| 返回类型 | 说明
| -------------- | -------------- | 
| Map | 人员联系方式集合  | <人员ID, <联系类型编码, 联系方式列表>>

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(100000L);
    Map<Long, Map<String, List<String>>> contactMap = UserServiceHelper.getUserContact(userIds);
```
           
## 获取人员的联系方式
##### 接口名： Map<Long, List<String>> getUserContact(String contactTypeNumber, List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| contactTypeNumber | 联系方式类型的编码 | String | 是 | 如phone、email |
| userIds | 人员内码列表 | List | 否 | userIds为null时，查询所欲人员的信息 |
	
**返回值**

人员相同联系方式类型存在多个联系方式时，列表第一个为默认联系方式

| 返回类型 | 说明
| -------------- | -------------- | 
| Map | 人员联系方式集合  | <人员ID, 联系方式列表>

**代码示例**
```java
    List<Long> userIds = new ArrayList<>(1);
    userIds.add(100000L);
    Map<Long, List<String>> contactMap = UserServiceHelper.getUserContact("phone", userIds);
```
           
## 获取人员负责的组织
##### 接口名： List<Long> getInchargeOrgs(long userID, boolean isIncludeSubOrg) 

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userID | 人员ID | long | 是 | 
| isIncludeSubOrg | 是否包含所负责部门的下级组织 | boolean | 是 |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 组织列表 

**代码示例**
```java
    List<Long> orgIds = UserServiceHelper.getInchargeOrgs(12345678L, false);
```
           
## 获取同级人员(不包括当前人员)
##### 接口名： List<Long> getUsersOfEqualLevel(long userId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userID | 人员ID | long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 人员列表 

**代码示例**
```java
    List<Long> userIds = UserServiceHelper.getUsersOfEqualLevel(12345678L);
```
           
## 获取同级人员
##### 接口名： List<Long> getUsersOfEqualLevel(long userId, boolean bIncludeCurUser)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userID | 人员ID | long | 是 | 
| bIncludeCurUser | 是否包含当前人员 | boolean | 是 |
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 人员列表 

**代码示例**
```java
    List<Long> userIds = UserServiceHelper.getUsersOfEqualLevel(12345678L, true);
```
           
## 获取多个组织的负责人
##### 接口名： Map<Long, Map<String, Object>> getManagersOfOrgs(List<Long> orgIds) 

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| orgIds | 组织ID列表 | List<Long> | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Map<Long, Map<String, Object>> | <组织ID - <负责人ID - 使用状态>> 

**代码示例**
```java
    Map<Long, Map<String, Object>> userMap = UserServiceHelper.getManagersOfOrgs(Collections.singletonList(100000L));
```
           
## 获取组织的负责人
##### 接口名： List<Long> getManagersOfOrg(long orgId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| orgId | 组织ID | long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 负责人ID列表

**代码示例**
```java
    List<Long> userIds = UserServiceHelper.getManagersOfOrg(100000L);
```
           
## 获取组织的直属人员
##### 接口名： List<Long> getDirectUsersOfOrg(long orgId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| orgId | 组织ID | long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 人员ID列表

**代码示例**
```java
    List<Long> userIds = UserServiceHelper.getDirectUsersOfOrg(100000L);
```
           
## 获取组织的直属人员
##### 接口名： List<Long> getDirectUsersOfOrg(long orgId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| orgId | 组织ID | long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> | 人员ID列表

**代码示例**
```java
    List<Long> userIds = UserServiceHelper.getDirectUsersOfOrg(100000L);
```

           
## 获取系统默认主题
##### 接口名： Map<String, Object> getDefaultUIThemeNumAndVer()

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Map<String, Object> |  key1: themeNum 主题编码; key2: themeVer  |

**代码示例**
```java
    Map<String, Object> defaultThemeMap = UserServiceHelper.getDefaultUIThemeNumAndVer();
```
           
## 获取指定主题的样式
##### 接口名： String getThemeCSS(String themeNum)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| themeNum | 主题编码 | String | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| String |  样式内容  |

**代码示例**
```java
    String themeCss = UserServiceHelper.getThemeCSS("red");
```
    
## 获取用户当前的主题
##### 接口名： Map<String, Object> getUserThemeNumAndVer(Long userID)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userID | 人员ID | Long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Map<String, Object> |  key1: themeNum 主题编码; key2: themeVer  |

**代码示例**
```java
    Map<String, Object> userThemeMap = UserServiceHelper.getUserThemeNumAndVer(12345678L);
```    
    
## 判断人员是否属于指定组织
##### 接口名： boolean isUserBelongTo(Long userId, Long orgId, boolean checkBelongToSubOrg)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | Long | 是 | 
| orgId | 组织ID | Long | 是 | 
| checkBelongToSubOrg | 是否校验下级组织 | boolean | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| boolean |   |

**代码示例**
```java
    boolean isBelongTo = UserServiceHelper.isUserBelongTo(12345678L, 100000L, false);
```    
    
## 判断人员是否可用
##### 接口名： boolean isUserEnable(long userId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | Long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| boolean |   |

**代码示例**
```java
    boolean enable = UserServiceHelper.isUserEnable(12345678L);
```    
    
    
## 批量判断人员是否可用
##### 接口名： Map<Long, Boolean> isUserEnable(List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List<Long> | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Map<Long, Boolean> |  <人员ID - 使用状态> |

**代码示例**
```java
    Map<Long, Boolean> userEnableMao = UserServiceHelper.isUserEnable(Collections.singletonList(12345678L));
```    
    
## 获取人员基本类型
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getUserBaseTypeByIds(List<Long> userIds)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userIds | 人员ID列表 | List<Long> | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| Map<Long, Integer> |  <人员ID - 类型> | 100：内部类型人员；200：外部类型人员；300：内部、外部类型同时存在的人员

**代码示例**
```java
    Map<Long, Integer> userTypeMao = UserServiceHelper.getUserBaseTypeByIds(Collections.singletonList(12345678L));
```    
    
## 获取人员所属的商务伙伴
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getBizPartnerByUserId(long userId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | Long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> |  商务伙伴ID集合 |

**代码示例**
```java
    List<Long> bizPartnerIds = UserServiceHelper.getBizPartnerByUserId(12345678L);
```    
    
## 获取人员负责管理的商务伙伴
##### 接口名： kd.bos.servicehelper.user.UserServiceHelper.getInChargeOfBizPartnerByUserId(long userId)

**参数说明**

| 参数 | 参数名称 | 数据类型 | 必选 | 说明
| -------------- | -------------- | ---------- | ------- |--------------
| userId | 人员ID | Long | 是 | 
	
**返回值**

| 返回类型 | 说明
| -------------- | -------------- | 
| List<Long> |  商务伙伴ID集合 |

**代码示例**
```java
    List<Long> bizPartnerIds = UserServiceHelper.getInChargeOfBizPartnerByUserId(12345678L);
```    
    
### 参数说明

<div id="userparam" name="userparam"></div>

#### 1.参数对象（kd.bos.permission.model.UserParam）

| 参数           | 参数名                    | 类型    | 说明    |
| ---------------- | ----------------------- | ------- | ------- |
| id             | ID                  | long  |  |
| customUserId             |  自定义ID                  | long  |  |
| dataMap             | 人员其他属性                 | Map  | 参照1.1 动态对象属性列表(dataMap)  |
 

#### 1.1 动态对象属性列表(dataMap)
##### 1.1.1 人员基本信息
| 属性名       | 标识         | 类型   |
| ------------ | ------------ | ------ |
| 主键         | id           | Long   |
| 编码(工号)   | number       | String |
| 名称         | name         | String |
| 数据状态     | status       | String |
| 使用状态     | enable       | String |
| 云之家openId | useropenid   | String |
| 性别         | gender       | String |
| 手机         | phone        | String |
| 邮箱         | email        | String |
| 人员头像     | picturefield | String |
| 生日         | birthday     | Date   |
| 身份证号     | idcard       | String |
| 姓名全拼     | fullpinyin   | String |
| 姓名简拼     | simplepinyin | String |
| 开始时间     | startdate    | Date   |
| 结束时间     | enddate      | Date   |
| .... （其他bos_user实体上的属性或者扩展属性）        | ....                 | ...    |

##### 1.1.1 人员任职信息(entryentity)
| 属性名   | 标识       | 类型   |
| -------- | ---------- | ------ |
| 部门     | dpt        | Long   |
| 职位     | position   | String |
| 负责人   | isincharge | String |
| 兼职     | ispartjob  | String |
| 直接上级 | superior   | Long   |

**代码示例**
```
    [
     {
      "id": 0,
      "customUserId": 1002510,
      "dataMap": {
       "number": "No1551851038482_3",
       "gender": "1",
       "entryentity": [
    ​    {
    ​     "ispartjob": false,
    ​     "dpt": 100000,
    ​     "position": "测试职位",
    ​     "isincharge": false,
    ​     "seq": 2
    ​    },
    ​    {
    ​     "ispartjob": false,
    ​     "dpt": 100001,
    ​     "position": "测试职位",
    ​     "isincharge": true,
    ​     "seq": 1
    ​    }
       ],
       "phone": "13800000002",
       "idcard": "",
       "name": "No1551851038482_3",
       "usertype": "1",
       "picturefield": "",
       "username": "No1551851038482_3"
      },
      "success": true
     },
     {
      "id": 0,
      "customUserId": 0,
      "dataMap": {
       "number": "No1551851038482_4",
       "gender": "1",
       "entryentity": [
    ​    {
    ​     "ispartjob": false,
    ​     "dpt": 100000,
    ​     "position": "测试职位",
    ​     "isincharge": false,
    ​     "seq": 2
    ​    },
    ​    {
    ​     "ispartjob": false,
    ​     "dpt": 100001,
    ​     "position": "测试职位",
    ​     "isincharge": true,
    ​     "seq": 1
    ​    }
       ],
       "phone": "13800000001",
       "idcard": "",
       "name": "No1551851038482_4",
       "usertype": "1",
       "picturefield": "",
       "username": "No1551851038482_4"
      },
      "success": true
     }
    ]
```

