// 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)接口查询获得, 字段权限要求（满足任一）: 获取职务级别信息, 读写员工的职务级别信息
	JobGradeID               string                                                  `json:"job_grade_id,omitempty"`                // 职等 ID, 字段权限要求（满足任一）: 获取职等信息, 读写职等信息
	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"`           // 成本中心分摊信息
	WorkShift                *QueryCoreHRJobDataRespItemJobDataWorkShift             `json:"work_shift,omitempty"`                  // 排班类型, 字段权限要求: 获取排班信息
	CompensationType         *QueryCoreHRJobDataRespItemJobDataCompensationType      `json:"compensation_type,omitempty"`           // 薪资类型, 字段权限要求: 获取薪资类型
	ServiceCompany           string                                                  `json:"service_company,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"` // 内容
}

// QueryCoreHRJobDataRespItemJobDataCompensationType ...
type QueryCoreHRJobDataRespItemJobDataCompensationType struct {
	EnumName string                                                      `json:"enum_name,omitempty"` // 枚举值
	Display  []*QueryCoreHRJobDataRespItemJobDataCompensationTypeDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// QueryCoreHRJobDataRespItemJobDataCompensationTypeDisplay ...
type QueryCoreHRJobDataRespItemJobDataCompensationTypeDisplay 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"`           // 分摊比例
}

// 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
}

// QueryCoreHRJobDataRespItemJobDataWorkShift ...
type QueryCoreHRJobDataRespItemJobDataWorkShift struct {
	EnumName string                                               `json:"enum_name,omitempty"` // 枚举值
	Display  []*QueryCoreHRJobDataRespItemJobDataWorkShiftDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// QueryCoreHRJobDataRespItemJobDataWorkShiftDisplay ...
type QueryCoreHRJobDataRespItemJobDataWorkShiftDisplay struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// queryCoreHRJobDataResp ...
type queryCoreHRJobDataResp struct {
	Code  int64                   `json:"code,omitempty"` // 错误码, 非 0 表示失败
	Msg   string                  `json:"msg,omitempty"`  // 错误描述
	Data  *QueryCoreHRJobDataResp `json:"data,omitempty"`
	Error *ErrorDetail            `json:"error,omitempty"`
}
