diff --git a/README.md b/README.md index 71bd7e35..95c1de8b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ https://godoc.org/github.com/chyroc/lark ## Support APIs -API Count: 1010, Event Count: 141 +API Count: 1011, Event Count: 141
@@ -483,6 +483,7 @@ API Count: 1010, Event Count: 141 - DeleteCoreHRJobData - UpdateCoreHRJobData - GetCoreHRJobData + - QueryCoreHRJobData - BatchGetCoreHRJobData - GetCoreHRJobDataList - GetCoreHRDepartmentParentList diff --git a/README_CN.md b/README_CN.md index 6e51ba56..ae6b3f0a 100644 --- a/README_CN.md +++ b/README_CN.md @@ -38,7 +38,7 @@ https://godoc.org/github.com/chyroc/lark ## 支持的接口 -API 总数: 1010, 事件总数: 141 +API 总数: 1011, 事件总数: 141
@@ -483,6 +483,7 @@ API 总数: 1010, 事件总数: 141 - DeleteCoreHRJobData - UpdateCoreHRJobData - GetCoreHRJobData + - QueryCoreHRJobData - BatchGetCoreHRJobData - GetCoreHRJobDataList - GetCoreHRDepartmentParentList diff --git a/api_corehr_job_data_query.go b/api_corehr_job_data_query.go new file mode 100644 index 00000000..aec745ab --- /dev/null +++ b/api_corehr_job_data_query.go @@ -0,0 +1,179 @@ +// Code generated by lark_sdk_gen. DO NOT EDIT. +/** + * Copyright 2022 chyroc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package lark + +import ( + "context" +) + +// QueryCoreHRJobData 获取任职信息列表。 +// +// 该接口会按照应用拥有的「员工资源」的权限范围返回数据, 请确定在「开发者后台 - 权限管理 - 数据权限」中已申请「员工资源」权限范围 +// +// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/employees-job_data/query +func (r *CoreHRService) QueryCoreHRJobData(ctx context.Context, request *QueryCoreHRJobDataReq, options ...MethodOptionFunc) (*QueryCoreHRJobDataResp, *Response, error) { + if r.cli.mock.mockCoreHRQueryCoreHRJobData != nil { + r.cli.Log(ctx, LogLevelDebug, "[lark] CoreHR#QueryCoreHRJobData mock enable") + return r.cli.mock.mockCoreHRQueryCoreHRJobData(ctx, request, options...) + } + + req := &RawRequestReq{ + Scope: "CoreHR", + API: "QueryCoreHRJobData", + Method: "POST", + URL: r.cli.openBaseURL + "/open-apis/corehr/v2/employees/job_datas/query", + Body: request, + MethodOption: newMethodOption(options), + NeedTenantAccessToken: true, + } + resp := new(queryCoreHRJobDataResp) + + response, err := r.cli.RawRequest(ctx, req, resp) + return resp.Data, response, err +} + +// MockCoreHRQueryCoreHRJobData mock CoreHRQueryCoreHRJobData method +func (r *Mock) MockCoreHRQueryCoreHRJobData(f func(ctx context.Context, request *QueryCoreHRJobDataReq, options ...MethodOptionFunc) (*QueryCoreHRJobDataResp, *Response, error)) { + r.mockCoreHRQueryCoreHRJobData = f +} + +// UnMockCoreHRQueryCoreHRJobData un-mock CoreHRQueryCoreHRJobData method +func (r *Mock) UnMockCoreHRQueryCoreHRJobData() { + r.mockCoreHRQueryCoreHRJobData = nil +} + +// QueryCoreHRJobDataReq ... +type QueryCoreHRJobDataReq struct { + PageSize int64 `query:"page_size" json:"-"` // 分页大小, 最大 100, 示例值: 100, 取值范围: `1` ~ `100` + PageToken *string `query:"page_token" json:"-"` // 分页标记, 第一次请求不填, 表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: 6891251722631890445 + UserIDType *IDType `query:"user_id_type" json:"-"` // 用户 ID 类型, 示例值: open_id, 可选值有: open_id: 标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。[了解更多: 如何获取 Open ID](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid), union_id: 标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的, 在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID, 应用开发商可以把同个用户在多个应用中的身份关联起来。[了解更多: 如何获取 Union ID?](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id), user_id: 标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内, 一个用户的 User ID 在所有应用(包括商店应用)中都保持一致。User ID 主要用于在不同的应用间打通用户数据。[了解更多: 如何获取 User ID?](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id), people_corehr_id: 以飞书人事的 ID 来识别用户, 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID + DepartmentIDType *DepartmentIDType `query:"department_id_type" json:"-"` // 此次调用中使用的部门 ID 类型, 示例值: people_corehr_department_id, 可选值有: open_department_id: 以 open_department_id 来标识部门, department_id: 以 department_id 来标识部门, people_corehr_department_id: 以 people_corehr_department_id 来标识部门, 默认值: `people_corehr_department_id` + GetAllVersion *bool `json:"get_all_version,omitempty"` // 是否获取所有任职记录, true 为获取员工所有版本的任职记录, false 为仅获取当前生效的任职记录, 默认为 false, 示例值: false + DataDate *string `json:"data_date,omitempty"` // 查看数据日期, 示例值: "2020-01-01" + EffectiveDateStart *string `json:"effective_date_start,omitempty"` // 生效日期 - 搜索范围开始, 示例值: "2020-01-01" + EffectiveDateEnd *string `json:"effective_date_end,omitempty"` // 生效日期 - 搜索范围结束, 示例值: "2020-01-01" +} + +// QueryCoreHRJobDataResp ... +type QueryCoreHRJobDataResp struct { + Items []*QueryCoreHRJobDataRespItem `json:"items,omitempty"` // 任职信息 + PageToken string `json:"page_token,omitempty"` // 分页标记, 当 has_more 为 true 时, 会同时返回新的 page_token, 否则不返回 page_token + HasMore bool `json:"has_more,omitempty"` // 是否还有更多项 +} + +// QueryCoreHRJobDataRespItem ... +type QueryCoreHRJobDataRespItem struct { + EmploymentID string `json:"employment_id,omitempty"` // Employment ID + JobDatas []*QueryCoreHRJobDataRespItemJobData `json:"job_datas,omitempty"` // 实体在 CoreHR 内部的唯一键 +} + +// QueryCoreHRJobDataRespItemJobData ... +type QueryCoreHRJobDataRespItemJobData struct { + JobDataID string `json:"job_data_id,omitempty"` // 任职信息 ID + VersionID string `json:"version_id,omitempty"` // 任职记录版本 ID + EmployeeTypeID string `json:"employee_type_id,omitempty"` // 人员类型 ID, 枚举值及详细信息可通过[查询单个人员类型](https://open.feishu.cn/document/server-docs/corehr-v1/basic-infomation/employee_type/get)接口查询获得 + WorkingHoursTypeID string `json:"working_hours_type_id,omitempty"` // 工时制度 ID, 枚举值及详细信息可通过[查询单个工时制度](https://open.feishu.cn/document/server-docs/corehr-v1/basic-infomation/working_hours_type/get)接口查询获得 + WorkLocationID string `json:"work_location_id,omitempty"` // 工作地点 ID, 枚举值及详细信息可通过[查询单个地点](https://open.feishu.cn/document/server-docs/corehr-v1/organization-management/location/get)接口查询获得 + DepartmentID string `json:"department_id,omitempty"` // 部门 ID, 枚举值及详细信息可通过[查询单个部门](https://open.feishu.cn/document/server-docs/corehr-v1/organization-management/department/get)接口查询获得 + JobID string `json:"job_id,omitempty"` // 职务 ID, 枚举值及详细信息可通过[查询单个职务](https://open.feishu.cn/document/server-docs/corehr-v1/job-management/job/get)接口查询获得, 字段权限要求(满足任一): 获取员工的职务信息, 获取职务级别信息, 读写员工的职务级别信息 + JobLevelID string `json:"job_level_id,omitempty"` // 职级 ID, 枚举值及详细信息可通过[查询单个职级](https://open.feishu.cn/document/server-docs/corehr-v1/job-management/job_level/get)接口查询获得, 字段权限要求(满足任一): 获取职务级别信息, 读写员工的职务级别信息 + JobFamilyID string `json:"job_family_id,omitempty"` // 序列 ID, 枚举值及详细信息可通过[查询单个序列](https://open.feishu.cn/document/server-docs/corehr-v1/job-management/job_family/get)接口查询获得 + ProbationStartDate string `json:"probation_start_date,omitempty"` // 试用期开始日期 + ProbationEndDate string `json:"probation_end_date,omitempty"` // 试用期结束日期(实际结束日期) + PrimaryJobData bool `json:"primary_job_data,omitempty"` // 是否为主任职 + EmploymentID string `json:"employment_id,omitempty"` // 雇佣 ID + EffectiveTime string `json:"effective_time,omitempty"` // 生效时间 + ExpirationTime string `json:"expiration_time,omitempty"` // 失效时间 + AssignmentStartReason *QueryCoreHRJobDataRespItemJobDataAssignmentStartReason `json:"assignment_start_reason,omitempty"` // 任职原因, 枚举值可通过文档[枚举常量介绍](https://open.feishu.cn/document/server-docs/corehr-v1/feishu-people-enum-constant)任职原因(assignment_start_reason)枚举定义部分获得, 字段权限要求: 查看任职记录的原因字段 + ProbationExpectedEndDate string `json:"probation_expected_end_date,omitempty"` // 预计试用期结束日期 + ProbationOutcome *QueryCoreHRJobDataRespItemJobDataProbationOutcome `json:"probation_outcome,omitempty"` // 试用期结果, 枚举值可通过文档[枚举常量介绍](https://open.feishu.cn/document/server-docs/corehr-v1/feishu-people-enum-constant)试用期结果(probation_outcome)枚举定义部分获得 + DirectManager *QueryCoreHRJobDataRespItemJobDataDirectManager `json:"direct_manager,omitempty"` // 直属上级 + DottedLineManagers []*QueryCoreHRJobDataRespItemJobDataDottedLineManager `json:"dotted_line_managers,omitempty"` // 虚线上级 + SecondDirectManager *QueryCoreHRJobDataRespItemJobDataSecondDirectManager `json:"second_direct_manager,omitempty"` // 第二实线主管 + CostCenterRates []*QueryCoreHRJobDataRespItemJobDataCostCenterRate `json:"cost_center_rates,omitempty"` // 成本中心分摊信息 + CustomFields []*QueryCoreHRJobDataRespItemJobDataCustomField `json:"custom_fields,omitempty"` // 自定义字段, 字段权限要求: 查看任职信息中的自定义字段信息 +} + +// QueryCoreHRJobDataRespItemJobDataAssignmentStartReason ... +type QueryCoreHRJobDataRespItemJobDataAssignmentStartReason struct { + EnumName string `json:"enum_name,omitempty"` // 枚举值 + Display []*QueryCoreHRJobDataRespItemJobDataAssignmentStartReasonDisplay `json:"display,omitempty"` // 枚举多语展示 +} + +// QueryCoreHRJobDataRespItemJobDataAssignmentStartReasonDisplay ... +type QueryCoreHRJobDataRespItemJobDataAssignmentStartReasonDisplay struct { + Lang string `json:"lang,omitempty"` // 语言 + Value string `json:"value,omitempty"` // 内容 +} + +// QueryCoreHRJobDataRespItemJobDataCostCenterRate ... +type QueryCoreHRJobDataRespItemJobDataCostCenterRate struct { + CostCenterID string `json:"cost_center_id,omitempty"` // 成本中心 ID, 可以通过[搜索成本中心信息](https://open.feishu.cn/document/server-docs/corehr-v1/organization-management/cost_center/search)接口获取对应的成本中心信息 + Rate int64 `json:"rate,omitempty"` // 分摊比例 +} + +// QueryCoreHRJobDataRespItemJobDataCustomField ... +type QueryCoreHRJobDataRespItemJobDataCustomField struct { + CustomApiName string `json:"custom_api_name,omitempty"` // 自定义字段 apiname, 即自定义字段的唯一标识 + Name *QueryCoreHRJobDataRespItemJobDataCustomFieldName `json:"name,omitempty"` // 自定义字段名称 + Type int64 `json:"type,omitempty"` // 自定义字段类型 + Value string `json:"value,omitempty"` // 字段值, 是 json 转义后的字符串, 根据元数据定义不同, 字段格式不同(如 123, 123.23, "true", ["id1", "id2"], "2006-01-02 15:04:05") +} + +// QueryCoreHRJobDataRespItemJobDataCustomFieldName ... +type QueryCoreHRJobDataRespItemJobDataCustomFieldName struct { + ZhCn string `json:"zh_cn,omitempty"` // 中文 + EnUs string `json:"en_us,omitempty"` // 英文 +} + +// QueryCoreHRJobDataRespItemJobDataDirectManager ... +type QueryCoreHRJobDataRespItemJobDataDirectManager struct { + JobDataID string `json:"job_data_id,omitempty"` // 任职信息 ID + EmploymentID string `json:"employment_id,omitempty"` // 雇佣 ID +} + +// QueryCoreHRJobDataRespItemJobDataDottedLineManager ... +type QueryCoreHRJobDataRespItemJobDataDottedLineManager struct { + JobDataID string `json:"job_data_id,omitempty"` // 任职信息 ID + EmploymentID string `json:"employment_id,omitempty"` // 雇佣 ID +} + +// QueryCoreHRJobDataRespItemJobDataProbationOutcome ... +type QueryCoreHRJobDataRespItemJobDataProbationOutcome struct { + EnumName string `json:"enum_name,omitempty"` // 枚举值 + Display []*QueryCoreHRJobDataRespItemJobDataProbationOutcomeDisplay `json:"display,omitempty"` // 枚举多语展示 +} + +// QueryCoreHRJobDataRespItemJobDataProbationOutcomeDisplay ... +type QueryCoreHRJobDataRespItemJobDataProbationOutcomeDisplay struct { + Lang string `json:"lang,omitempty"` // 语言 + Value string `json:"value,omitempty"` // 内容 +} + +// QueryCoreHRJobDataRespItemJobDataSecondDirectManager ... +type QueryCoreHRJobDataRespItemJobDataSecondDirectManager struct { + JobDataID string `json:"job_data_id,omitempty"` // 任职信息 ID + EmploymentID string `json:"employment_id,omitempty"` // 雇佣 ID +} + +// queryCoreHRJobDataResp ... +type queryCoreHRJobDataResp struct { + Code int64 `json:"code,omitempty"` // 错误码, 非 0 表示失败 + Msg string `json:"msg,omitempty"` // 错误描述 + Data *QueryCoreHRJobDataResp `json:"data,omitempty"` +} diff --git a/mock.go b/mock.go index b3ae5c02..e8dd85c6 100644 --- a/mock.go +++ b/mock.go @@ -430,6 +430,7 @@ type Mock struct { mockCoreHRDeleteCoreHRJobData func(ctx context.Context, request *DeleteCoreHRJobDataReq, options ...MethodOptionFunc) (*DeleteCoreHRJobDataResp, *Response, error) mockCoreHRUpdateCoreHRJobData func(ctx context.Context, request *UpdateCoreHRJobDataReq, options ...MethodOptionFunc) (*UpdateCoreHRJobDataResp, *Response, error) mockCoreHRGetCoreHRJobData func(ctx context.Context, request *GetCoreHRJobDataReq, options ...MethodOptionFunc) (*GetCoreHRJobDataResp, *Response, error) + mockCoreHRQueryCoreHRJobData func(ctx context.Context, request *QueryCoreHRJobDataReq, options ...MethodOptionFunc) (*QueryCoreHRJobDataResp, *Response, error) mockCoreHRBatchGetCoreHRJobData func(ctx context.Context, request *BatchGetCoreHRJobDataReq, options ...MethodOptionFunc) (*BatchGetCoreHRJobDataResp, *Response, error) mockCoreHRGetCoreHRJobDataList func(ctx context.Context, request *GetCoreHRJobDataListReq, options ...MethodOptionFunc) (*GetCoreHRJobDataListResp, *Response, error) mockCoreHRGetCoreHRDepartmentParentList func(ctx context.Context, request *GetCoreHRDepartmentParentListReq, options ...MethodOptionFunc) (*GetCoreHRDepartmentParentListResp, *Response, error) diff --git a/test/CoreHR_sample_test.go b/test/CoreHR_sample_test.go index bf6ec4d5..229d3c95 100644 --- a/test/CoreHR_sample_test.go +++ b/test/CoreHR_sample_test.go @@ -637,6 +637,18 @@ func Test_CoreHR_Sample_Failed(t *testing.T) { as.Equal(err.Error(), "mock-failed") }) + t.Run("", func(t *testing.T) { + + cli.Mock().MockCoreHRQueryCoreHRJobData(func(ctx context.Context, request *lark.QueryCoreHRJobDataReq, options ...lark.MethodOptionFunc) (*lark.QueryCoreHRJobDataResp, *lark.Response, error) { + return nil, nil, fmt.Errorf("mock-failed") + }) + defer cli.Mock().UnMockCoreHRQueryCoreHRJobData() + + _, _, err := moduleCli.QueryCoreHRJobData(ctx, &lark.QueryCoreHRJobDataReq{}) + as.NotNil(err) + as.Equal(err.Error(), "mock-failed") + }) + t.Run("", func(t *testing.T) { cli.Mock().MockCoreHRBatchGetCoreHRJobData(func(ctx context.Context, request *lark.BatchGetCoreHRJobDataReq, options ...lark.MethodOptionFunc) (*lark.BatchGetCoreHRJobDataResp, *lark.Response, error) { @@ -2062,6 +2074,13 @@ func Test_CoreHR_Sample_Failed(t *testing.T) { as.True(lark.GetErrorCode(err) > 0, fmt.Sprintf("need get lark err, but get %s", err)) }) + t.Run("", func(t *testing.T) { + + _, _, err := moduleCli.QueryCoreHRJobData(ctx, &lark.QueryCoreHRJobDataReq{}) + as.NotNil(err) + as.True(lark.GetErrorCode(err) > 0, fmt.Sprintf("need get lark err, but get %s", err)) + }) + t.Run("", func(t *testing.T) { _, _, err := moduleCli.BatchGetCoreHRJobData(ctx, &lark.BatchGetCoreHRJobDataReq{}) @@ -3130,6 +3149,13 @@ func Test_CoreHR_Sample_Failed(t *testing.T) { as.Equal("fake raw request", err.Error()) }) + t.Run("", func(t *testing.T) { + + _, _, err := moduleCli.QueryCoreHRJobData(ctx, &lark.QueryCoreHRJobDataReq{}) + as.NotNil(err) + as.Equal("fake raw request", err.Error()) + }) + t.Run("", func(t *testing.T) { _, _, err := moduleCli.BatchGetCoreHRJobData(ctx, &lark.BatchGetCoreHRJobDataReq{})