Skip to content

职位序列管理

功能描述

序列是用户属性之一,用来为不同的用户定义不同的工作类型,例如产品、研发、测试、运营等。可以根据企业实际需要添加序列,后续在创建或更新用户时,为用户设置相匹配的序列。该API提供完整的职位序列管理功能,支持创建层级化的序列结构、序列信息的查询更新和删除,满足企业精细化的人员分类和岗位管理需求。

函数列表

函数名称功能描述认证方式HTTP方法
CreateJobFamilyAsync创建一个序列tenant_access_tokenPOST
UpdateJobFamilyAsync更新指定序列的信息tenant_access_tokenPUT
GetJobFamilyByIdAsync获取指定序列的信息tenant_access_tokenGET
GetJobFamilesListAsync获取当前租户下的序列信息列表tenant_access_tokenGET
DeleteJobFamilyByIdAsync删除指定序列tenant_access_tokenDELETE

CreateJobFamilyAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • familyCreateRequest (必填) - 职位序列创建请求体

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "job_family": {
      "job_family_id": "6968045635650973636",
      "name": "技术研发",
      "description": "负责公司核心技术研发和产品开发",
      "parent_job_family_id": "",
      "status": true,
      "i18n_name": [
        {
          "locale": "zh_cn",
          "value": "技术研发"
        },
        {
          "locale": "en_us",
          "value": "R&D"
        }
      ],
      "i18n_description": [
        {
          "locale": "zh_cn",
          "value": "负责公司核心技术研发"
        },
        {
          "locale": "en_us",
          "value": "Core technology R&D"
        }
      ]
    }
  }
}

错误响应:
{
  "code": 400,
  "msg": "序列名称已存在"
}

说明

  • 序列名称在租户内必须唯一
  • 支持创建层级化的序列结构,通过parent_job_family_id指定父序列
  • description字符长度上限为5,000
  • 支持多语言配置
  • status默认为true(启用状态)

代码示例

csharp
// 创建新的职位序列
var createRequest = new JobFamilyCreateUpdateRequest
{
    Name = "技术研发",
    Description = "负责公司核心技术研发和产品开发,包括前端、后端、移动端等技术方向",
    Status = true,
    ParentJobFamilyId = null, // 顶级序列
    I18nName = new List<I18nContent>
    {
        new I18nContent
        {
            Locale = "zh_cn",
            Value = "技术研发"
        },
        new I18nContent
        {
            Locale = "en_us",
            Value = "R&D Department"
        }
    },
    I18nDescription = new List<I18nContent>
    {
        new I18nContent
        {
            Locale = "zh_cn",
            Value = "负责公司核心技术研发和产品开发"
        },
        new I18nContent
        {
            Locale = "en_us",
            Value = "Responsible for core technology R&D and product development"
        }
    }
};

var result = await _feishuApi.CreateJobFamilyAsync(
    tenantAccessToken,
    createRequest);

if (result.Success)
{
    var jobFamily = result.Data.JobFamily;
    Console.WriteLine($"序列创建成功:{jobFamily.Name} (ID: {jobFamily.JobFamilyId})");
    Console.WriteLine($"描述:{jobFamily.Description}");
    Console.WriteLine($"状态:{(jobFamily.Status ? "启用" : "停用")");
    
    // 显示多语言配置
    if (jobFamily.I18nName != null)
    {
        foreach (var i18n in jobFamily.I18nName)
        {
            Console.WriteLine($"  {i18n.Locale}: {i18n.Value}");
        }
    }
}
else
{
    Console.WriteLine($"创建失败:{result.Message}");
}

UpdateJobFamilyAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • job_family_id (必填) - 序列ID
  • familyCreateRequest (必填) - 职位序列更新请求体

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "job_family": {
      "job_family_id": "6968045635650973636",
      "name": "技术研发部",
      "description": "负责公司核心技术研发、产品开发和技术创新",
      "parent_job_family_id": "",
      "status": true
    }
  }
}

错误响应:
{
  "code": 404,
  "msg": "序列不存在"
}

说明

  • 可以更新序列的所有字段
  • 序列名称仍需保持租户内唯一
  • 更新父序列ID时要注意层级关系

代码示例

csharp
// 更新职位序列信息
var updateRequest = new JobFamilyCreateUpdateRequest
{
    Name = "技术研发部",
    Description = "负责公司核心技术研发、产品开发和技术创新工作",
    Status = true,
    ParentJobFamilyId = null,
    I18nName = new List<I18nContent>
    {
        new I18nContent
        {
            Locale = "zh_cn",
            Value = "技术研发部"
        },
        new I18nContent
        {
            Locale = "en_us",
            Value = "R&D Department"
        }
    }
};

var result = await _feishuApi.UpdateJobFamilyAsync(
    tenantAccessToken,
    "6968045635650973636",
    updateRequest);

if (result.Success)
{
    var updatedFamily = result.Data.JobFamily;
    Console.WriteLine($"序列更新成功:{updatedFamily.Name}");
    
    // 如果要停用序列
    if (!updatedFamily.Status)
    {
        Console.WriteLine("注意:该序列已被停用,现有用户不受影响但新建用户无法选择此序列");
    }
}
else
{
    Console.WriteLine($"更新失败:{result.Message}");
}

GetJobFamilyByIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • job_family_id (必填) - 序列ID

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "job_family": {
      "job_family_id": "6968045635650973636",
      "name": "技术研发",
      "description": "负责公司核心技术研发",
      "parent_job_family_id": "",
      "status": true,
      "i18n_name": [
        {
          "locale": "zh_cn",
          "value": "技术研发"
        }
      ]
    }
  }
}

错误响应:
{
  "code": 404,
  "msg": "序列不存在"
}

说明

  • 获取单个序列的完整信息
  • 包含多语言配置和层级关系

代码示例

csharp
// 获取指定序列详情
var result = await _feishuApi.GetJobFamilyByIdAsync(
    tenantAccessToken,
    "6968045635650973636");

if (result.Success)
{
    var jobFamily = result.Data.JobFamily;
    Console.WriteLine($"序列名称:{jobFamily.Name}");
    Console.WriteLine($"序列ID:{jobFamily.JobFamilyId}");
    Console.WriteLine($"描述:{jobFamily.Description ?? "无描述"}");
    Console.WriteLine($"状态:{(jobFamily.Status ? "启用" : "停用")}");
    
    if (!string.IsNullOrEmpty(jobFamily.ParentJobFamilyId))
    {
        Console.WriteLine($"父序列ID:{jobFamily.ParentJobFamilyId}");
        
        // 可以进一步查询父序列信息
        var parentResult = await _feishuApi.GetJobFamilyByIdAsync(
            tenantAccessToken,
            jobFamily.ParentJobFamilyId);
        
        if (parentResult.Success)
        {
            Console.WriteLine($"父序列名称:{parentResult.Data.JobFamily.Name}");
        }
    }
    
    // 显示多语言配置
    if (jobFamily.I18nName?.Any() == true)
    {
        Console.WriteLine("多语言名称:");
        foreach (var i18n in jobFamily.I18nName)
        {
            Console.WriteLine($"  {i18n.Locale}: {i18n.Value}");
        }
    }
}
else
{
    Console.WriteLine($"获取失败:{result.Message}");
}

GetJobFamilesListAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • name (必填) - 序列名称,用于搜索过滤
  • page_size (可选) - 分页大小,默认10
  • page_token (可选) - 分页标记

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "items": [
      {
        "job_family_id": "6968045635650973636",
        "name": "技术研发",
        "description": "负责公司核心技术研发",
        "parent_job_family_id": "",
        "status": true
      },
      {
        "job_family_id": "6968045635650973637",
        "name": "产品设计",
        "description": "负责产品规划和设计",
        "parent_job_family_id": "",
        "status": true
      }
    ],
    "page_token": "next_page_token"
  }
}

说明

  • name参数用于搜索过滤,支持模糊匹配
  • 支持分页获取大量数据
  • 返回按创建时间排序的序列列表

代码示例

csharp
// 获取序列列表(支持搜索和分页)
var pageSize = 20;
var pageToken = "";
var searchKeyword = "技术"; // 搜索包含"技术"的序列
var allJobFamilies = new List<JobFamilyInfo>();

do
{
    var result = await _feishuApi.GetJobFamilesListAsync(
        tenantAccessToken,
        name: searchKeyword,
        page_size: pageSize,
        page_token: string.IsNullOrEmpty(pageToken) ? null : pageToken);

    if (result.Success)
    {
        allJobFamilies.AddRange(result.Data.Items);
        
        Console.WriteLine($"第 {allJobFamilies.Count / pageSize + 1} 页结果:");
        
        // 构建层级关系显示
        var topLevelFamilies = result.Data.Items.Where(f => string.IsNullOrEmpty(f.ParentJobFamilyId));
        var childFamilies = result.Data.Items.Where(f => !string.IsNullOrEmpty(f.ParentJobFamilyId));
        
        Console.WriteLine("\n顶级序列:");
        foreach (var family in topLevelFamilies)
        {
            Console.WriteLine($"  {family.Name} ({family.JobFamilyId}) - {(family.Status ? "启用" : "停用")}");
        }
        
        Console.WriteLine("\n子序列:");
        foreach (var family in childFamilies)
        {
            Console.WriteLine($"  {family.Name} (父序列: {family.ParentJobFamilyId}) - {(family.Status ? "启用" : "停用")}");
        }

        pageToken = result.Data.PageToken;
    }
    else
    {
        Console.WriteLine($"获取失败:{result.Message}");
        break;
    }
} while (!string.IsNullOrEmpty(pageToken));

Console.WriteLine($"\n总共找到 {allJobFamilies.Count} 个包含'{searchKeyword}'的序列");

DeleteJobFamilyByIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • job_family_id (必填) - 序列ID

响应

json
成功响应:
{
  "code": 0,
  "msg": "success"
}

错误响应:
{
  "code": 400,
  "msg": "序列存在子序列,无法删除"
}

错误响应:
{
  "code": 404,
  "msg": "序列不存在"
}

说明

  • 仅支持删除没有子序列的序列
  • 删除前建议先停用序列
  • 删除操作不可恢复

代码示例

csharp
// 安全删除序列(先检查是否存在子序列)
var jobFamilyIdToDelete = "6968045635650973636";

// 先获取序列详情
var getResult = await _feishuApi.GetJobFamilyByIdAsync(
    tenantAccessToken,
    jobFamilyIdToDelete);

if (!getResult.Success)
{
    Console.WriteLine("序列不存在");
    return;
}

var jobFamily = getResult.Data.JobFamily;
Console.WriteLine($"准备删除序列:{jobFamily.Name}");

// 检查是否有子序列
var listResult = await _feishuApi.GetJobFamilesListAsync(
    tenantAccessToken,
    name: "", // 搜索所有序列
    page_size: 100);

if (listResult.Success)
{
    var childFamilies = listResult.Data.Items
        .Where(f => f.ParentJobFamilyId == jobFamilyIdToDelete)
        .ToList();

    if (childFamilies.Any())
    {
        Console.WriteLine("无法删除:该序列存在以下子序列:");
        foreach (var child in childFamilies)
        {
            Console.WriteLine($"  - {child.Name} ({child.JobFamilyId})");
        }
        Console.WriteLine("请先删除或重新分配所有子序列");
        return;
    }
}

// 确认删除
Console.WriteLine("确认要删除这个序列吗?删除后不可恢复。");
// 这里可以添加用户确认逻辑

var deleteResult = await _feishuApi.DeleteJobFamilyByIdAsync(
    tenantAccessToken,
    jobFamilyIdToDelete);

if (deleteResult.Success)
{
    Console.WriteLine("序列删除成功");
}
else
{
    Console.WriteLine($"删除失败:{deleteResult.Message}");
}

高级应用场景示例

批量创建序列层级结构

csharp
// 创建完整的序列层级结构
async Task CreateJobFamilyHierarchy()
{
    // 1. 创建顶级序列
    var techFamilyRequest = new JobFamilyCreateUpdateRequest
    {
        Name = "技术类",
        Description = "技术相关岗位序列",
        Status = true
    };
    
    var techResult = await _feishuApi.CreateJobFamilyAsync(tenantAccessToken, techFamilyRequest);
    if (!techResult.Success) return;
    
    var techFamilyId = techResult.Data.JobFamily.JobFamilyId;
    
    // 2. 创建子序列
    var subFamilies = new[]
    {
        new { Name = "研发", Description = "产品研发岗位" },
        new { Name = "测试", Description = "质量测试岗位" },
        new { Name = "运维", Description = "系统运维岗位" }
    };
    
    foreach (var subFamily in subFamilies)
    {
        var subRequest = new JobFamilyCreateUpdateRequest
        {
            Name = subFamily.Name,
            Description = subFamily.Description,
            ParentJobFamilyId = techFamilyId,
            Status = true
        };
        
        await _feishuApi.CreateJobFamilyAsync(tenantAccessToken, subRequest);
    }
    
    Console.WriteLine("序列层级结构创建完成");
}

版本记录

版本日期说明作者
v1.0.02025-11-20初始版本,包含所有职位序列管理APIMud Studio