// Package performance code generated by oapi sdk gen
/*
 * MIT License
 *
 * Copyright (c) 2022 Lark Technologies Pte. Ltd.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package larkperformance

import (
	"fmt"

	"context"
	"errors"

	"github.com/larksuite/oapi-sdk-go/v3/event"

	"github.com/larksuite/oapi-sdk-go/v3/core"
)

const (
	UserIdTypeUserId  = "user_id"  // 以user_id来识别用户
	UserIdTypeUnionId = "union_id" // 以union_id来识别用户
	UserIdTypeOpenId  = "open_id"  // 以open_id来识别用户
)

const (
	UserIdTypeImportAdditionalInformationUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeImportAdditionalInformationUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeImportAdditionalInformationOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeImportAdditionalInformationPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeQueryAdditionalInformationUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryAdditionalInformationUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryAdditionalInformationOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryAdditionalInformationPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeDeleteAdditionalInformationsBatchUserId  = "user_id"  // 以user_id来识别用户
	UserIdTypeDeleteAdditionalInformationsBatchUnionId = "union_id" // 以union_id来识别用户
	UserIdTypeDeleteAdditionalInformationsBatchOpenId  = "open_id"  // 以open_id来识别用户
)

const (
	UserIdTypeImportMetricDetailUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeImportMetricDetailUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeImportMetricDetailOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeImportMetricDetailPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeQueryMetricDetailUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryMetricDetailUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryMetricDetailOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryMetricDetailPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	RangeOfAvailabilityAdminsAndReviewees = "admins_and_reviewees" // 允许管理员下发和被评估人选用
	RangeOfAvailabilityOnlyAdmins         = "only_admins"          // 仅允许管理员下发
)

const (
	ScoringSettingTypeScoreManually  = "score_manually"   // 手动评分
	ScoringSettingTypeScoreByFormula = "score_by_formula" // 公式评分
)

const (
	UserIdTypeQueryMetricLibUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryMetricLibUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryMetricLibOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryMetricLibPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	StatusToBeConfigured = "to_be_configured" // 待完成配置
	StatusToBeActivated  = "to_be_activated"  // 待启用
	StatusEnabled        = "enabled"          // 已启用
	StatusDisabled       = "disabled"         // 已停用
)

const (
	UserIdTypeQueryMetricTemplateUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryMetricTemplateUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryMetricTemplateOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryMetricTemplatePeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeQueryReviewDataUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryReviewDataUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryReviewDataOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryReviewDataPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeQueryRevieweeUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeQueryRevieweeUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeQueryRevieweeOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeQueryRevieweePeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	ScopeVisibleSettingNotLimit               = 0 // 无限制
	ScopeVisibleSettingBackendAdminNotVisible = 1 // 后台管理员不可见

)

const (
	UserIdTypeWriteUserGroupUserRelUserId        = "user_id"         // 以user_id来识别用户
	UserIdTypeWriteUserGroupUserRelUnionId       = "union_id"        // 以union_id来识别用户
	UserIdTypeWriteUserGroupUserRelOpenId        = "open_id"         // 以open_id来识别用户
	UserIdTypeWriteUserGroupUserRelPeopleAdminId = "people_admin_id" // 以people_admin_id来识别用户
)

const (
	UserIdTypeQueryUserInfoUserId  = "user_id"  // 以user_id来识别用户
	UserIdTypeQueryUserInfoUnionId = "union_id" // 以union_id来识别用户
	UserIdTypeQueryUserInfoOpenId  = "open_id"  // 以open_id来识别用户
)

type Activity struct {
	Id *string `json:"id,omitempty"` // 项目 ID

	Name *I18n `json:"name,omitempty"` // 项目名称

	Description *I18n `json:"description,omitempty"` // 项目描述

	SemesterId *string `json:"semester_id,omitempty"` // 周期 ID

	Mode *string `json:"mode,omitempty"` // 项目模式

	Progress *string `json:"progress,omitempty"` // 项目状态

	CreateTime *string `json:"create_time,omitempty"` // 项目创建时间，毫秒时间戳

	ModifyTime *string `json:"modify_time,omitempty"` // 项目更新时间，毫秒时间戳

	CreateUserId *string `json:"create_user_id,omitempty"` // 项目创建人 ID

	ModifyUserId *string `json:"modify_user_id,omitempty"` // 项目更新人 ID
}

type ActivityBuilder struct {
	id     string // 项目 ID
	idFlag bool

	name     *I18n // 项目名称
	nameFlag bool

	description     *I18n // 项目描述
	descriptionFlag bool

	semesterId     string // 周期 ID
	semesterIdFlag bool

	mode     string // 项目模式
	modeFlag bool

	progress     string // 项目状态
	progressFlag bool

	createTime     string // 项目创建时间，毫秒时间戳
	createTimeFlag bool

	modifyTime     string // 项目更新时间，毫秒时间戳
	modifyTimeFlag bool

	createUserId     string // 项目创建人 ID
	createUserIdFlag bool

	modifyUserId     string // 项目更新人 ID
	modifyUserIdFlag bool
}

func NewActivityBuilder() *ActivityBuilder {
	builder := &ActivityBuilder{}
	return builder
}

// 项目 ID
//
// 示例值：7343513161666707459
func (builder *ActivityBuilder) Id(id string) *ActivityBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 项目名称
//
// 示例值：
func (builder *ActivityBuilder) Name(name *I18n) *ActivityBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 项目描述
//
// 示例值：
func (builder *ActivityBuilder) Description(description *I18n) *ActivityBuilder {
	builder.description = description
	builder.descriptionFlag = true
	return builder
}

// 周期 ID
//
// 示例值：7343513161666707459
func (builder *ActivityBuilder) SemesterId(semesterId string) *ActivityBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 项目模式
//
// 示例值：performance_review
func (builder *ActivityBuilder) Mode(mode string) *ActivityBuilder {
	builder.mode = mode
	builder.modeFlag = true
	return builder
}

// 项目状态
//
// 示例值：configurable
func (builder *ActivityBuilder) Progress(progress string) *ActivityBuilder {
	builder.progress = progress
	builder.progressFlag = true
	return builder
}

// 项目创建时间，毫秒时间戳
//
// 示例值：1691951256000
func (builder *ActivityBuilder) CreateTime(createTime string) *ActivityBuilder {
	builder.createTime = createTime
	builder.createTimeFlag = true
	return builder
}

// 项目更新时间，毫秒时间戳
//
// 示例值：1691951256000
func (builder *ActivityBuilder) ModifyTime(modifyTime string) *ActivityBuilder {
	builder.modifyTime = modifyTime
	builder.modifyTimeFlag = true
	return builder
}

// 项目创建人 ID
//
// 示例值：6924187793321444877
func (builder *ActivityBuilder) CreateUserId(createUserId string) *ActivityBuilder {
	builder.createUserId = createUserId
	builder.createUserIdFlag = true
	return builder
}

// 项目更新人 ID
//
// 示例值：6924187793321444877
func (builder *ActivityBuilder) ModifyUserId(modifyUserId string) *ActivityBuilder {
	builder.modifyUserId = modifyUserId
	builder.modifyUserIdFlag = true
	return builder
}

func (builder *ActivityBuilder) Build() *Activity {
	req := &Activity{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.descriptionFlag {
		req.Description = builder.description
	}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId

	}
	if builder.modeFlag {
		req.Mode = &builder.mode

	}
	if builder.progressFlag {
		req.Progress = &builder.progress

	}
	if builder.createTimeFlag {
		req.CreateTime = &builder.createTime

	}
	if builder.modifyTimeFlag {
		req.ModifyTime = &builder.modifyTime

	}
	if builder.createUserIdFlag {
		req.CreateUserId = &builder.createUserId

	}
	if builder.modifyUserIdFlag {
		req.ModifyUserId = &builder.modifyUserId

	}
	return req
}

type AdditionalInformation struct {
	ItemId *string `json:"item_id,omitempty"` // 飞书绩效的事项 ID

	ExternalId *string `json:"external_id,omitempty"` // 外部系统的事项 ID，没有则返回为空

	RevieweeUserId *string `json:"reviewee_user_id,omitempty"` // 被评估人 ID

	Item *string `json:"item,omitempty"` // 事项

	Time *string `json:"time,omitempty"` // 事项时间，格式为文本内容

	DetailedDescription *string `json:"detailed_description,omitempty"` // 事项详细描述
}

type AdditionalInformationBuilder struct {
	itemId     string // 飞书绩效的事项 ID
	itemIdFlag bool

	externalId     string // 外部系统的事项 ID，没有则返回为空
	externalIdFlag bool

	revieweeUserId     string // 被评估人 ID
	revieweeUserIdFlag bool

	item     string // 事项
	itemFlag bool

	time     string // 事项时间，格式为文本内容
	timeFlag bool

	detailedDescription     string // 事项详细描述
	detailedDescriptionFlag bool
}

func NewAdditionalInformationBuilder() *AdditionalInformationBuilder {
	builder := &AdditionalInformationBuilder{}
	return builder
}

// 飞书绩效的事项 ID
//
// 示例值：7350195758357807123
func (builder *AdditionalInformationBuilder) ItemId(itemId string) *AdditionalInformationBuilder {
	builder.itemId = itemId
	builder.itemIdFlag = true
	return builder
}

// 外部系统的事项 ID，没有则返回为空
//
// 示例值：6789523104723558912
func (builder *AdditionalInformationBuilder) ExternalId(externalId string) *AdditionalInformationBuilder {
	builder.externalId = externalId
	builder.externalIdFlag = true
	return builder
}

// 被评估人 ID
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b3
func (builder *AdditionalInformationBuilder) RevieweeUserId(revieweeUserId string) *AdditionalInformationBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 事项
//
// 示例值：文本
func (builder *AdditionalInformationBuilder) Item(item string) *AdditionalInformationBuilder {
	builder.item = item
	builder.itemFlag = true
	return builder
}

// 事项时间，格式为文本内容
//
// 示例值：2024-03-12
func (builder *AdditionalInformationBuilder) Time(time string) *AdditionalInformationBuilder {
	builder.time = time
	builder.timeFlag = true
	return builder
}

// 事项详细描述
//
// 示例值：多行文本
func (builder *AdditionalInformationBuilder) DetailedDescription(detailedDescription string) *AdditionalInformationBuilder {
	builder.detailedDescription = detailedDescription
	builder.detailedDescriptionFlag = true
	return builder
}

func (builder *AdditionalInformationBuilder) Build() *AdditionalInformation {
	req := &AdditionalInformation{}
	if builder.itemIdFlag {
		req.ItemId = &builder.itemId

	}
	if builder.externalIdFlag {
		req.ExternalId = &builder.externalId

	}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = &builder.revieweeUserId

	}
	if builder.itemFlag {
		req.Item = &builder.item

	}
	if builder.timeFlag {
		req.Time = &builder.time

	}
	if builder.detailedDescriptionFlag {
		req.DetailedDescription = &builder.detailedDescription

	}
	return req
}

type CooperationProject struct {
	Id *string `json:"id,omitempty"` // 合作项目 ID

	Name *I18n `json:"name,omitempty"` // 合作项目的名称

	Roles []*CooperationRole `json:"roles,omitempty"` // 项目角色

	UserRoles []*CooperationUserRole `json:"user_roles,omitempty"` // 评估人项目角色

	UnderlingRoles []*CooperationUserRole `json:"underling_roles,omitempty"` // 被评估人项目角色
}

type CooperationProjectBuilder struct {
	id     string // 合作项目 ID
	idFlag bool

	name     *I18n // 合作项目的名称
	nameFlag bool

	roles     []*CooperationRole // 项目角色
	rolesFlag bool

	userRoles     []*CooperationUserRole // 评估人项目角色
	userRolesFlag bool

	underlingRoles     []*CooperationUserRole // 被评估人项目角色
	underlingRolesFlag bool
}

func NewCooperationProjectBuilder() *CooperationProjectBuilder {
	builder := &CooperationProjectBuilder{}
	return builder
}

// 合作项目 ID
//
// 示例值：7309457114076807188
func (builder *CooperationProjectBuilder) Id(id string) *CooperationProjectBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 合作项目的名称
//
// 示例值：
func (builder *CooperationProjectBuilder) Name(name *I18n) *CooperationProjectBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 项目角色
//
// 示例值：
func (builder *CooperationProjectBuilder) Roles(roles []*CooperationRole) *CooperationProjectBuilder {
	builder.roles = roles
	builder.rolesFlag = true
	return builder
}

// 评估人项目角色
//
// 示例值：
func (builder *CooperationProjectBuilder) UserRoles(userRoles []*CooperationUserRole) *CooperationProjectBuilder {
	builder.userRoles = userRoles
	builder.userRolesFlag = true
	return builder
}

// 被评估人项目角色
//
// 示例值：
func (builder *CooperationProjectBuilder) UnderlingRoles(underlingRoles []*CooperationUserRole) *CooperationProjectBuilder {
	builder.underlingRoles = underlingRoles
	builder.underlingRolesFlag = true
	return builder
}

func (builder *CooperationProjectBuilder) Build() *CooperationProject {
	req := &CooperationProject{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.rolesFlag {
		req.Roles = builder.roles
	}
	if builder.userRolesFlag {
		req.UserRoles = builder.userRoles
	}
	if builder.underlingRolesFlag {
		req.UnderlingRoles = builder.underlingRoles
	}
	return req
}

type CooperationRole struct {
	ReviewerRole *CooperationUserRole `json:"reviewer_role,omitempty"` // 评估人的项目角色。在未配置项目角色情况下，该字段为空值。

	RevieweeRole *CooperationUserRole `json:"reviewee_role,omitempty"` // 被评估人的项目角色。在未配置项目角色情况下，该字段为空值。
}

type CooperationRoleBuilder struct {
	reviewerRole     *CooperationUserRole // 评估人的项目角色。在未配置项目角色情况下，该字段为空值。
	reviewerRoleFlag bool

	revieweeRole     *CooperationUserRole // 被评估人的项目角色。在未配置项目角色情况下，该字段为空值。
	revieweeRoleFlag bool
}

func NewCooperationRoleBuilder() *CooperationRoleBuilder {
	builder := &CooperationRoleBuilder{}
	return builder
}

// 评估人的项目角色。在未配置项目角色情况下，该字段为空值。
//
// 示例值：
func (builder *CooperationRoleBuilder) ReviewerRole(reviewerRole *CooperationUserRole) *CooperationRoleBuilder {
	builder.reviewerRole = reviewerRole
	builder.reviewerRoleFlag = true
	return builder
}

// 被评估人的项目角色。在未配置项目角色情况下，该字段为空值。
//
// 示例值：
func (builder *CooperationRoleBuilder) RevieweeRole(revieweeRole *CooperationUserRole) *CooperationRoleBuilder {
	builder.revieweeRole = revieweeRole
	builder.revieweeRoleFlag = true
	return builder
}

func (builder *CooperationRoleBuilder) Build() *CooperationRole {
	req := &CooperationRole{}
	if builder.reviewerRoleFlag {
		req.ReviewerRole = builder.reviewerRole
	}
	if builder.revieweeRoleFlag {
		req.RevieweeRole = builder.revieweeRole
	}
	return req
}

type CooperationUserRole struct {
	RoleId *string `json:"role_id,omitempty"` // 角色 ID

	Name *I18n `json:"name,omitempty"` // 名称
}

type CooperationUserRoleBuilder struct {
	roleId     string // 角色 ID
	roleIdFlag bool

	name     *I18n // 名称
	nameFlag bool
}

func NewCooperationUserRoleBuilder() *CooperationUserRoleBuilder {
	builder := &CooperationUserRoleBuilder{}
	return builder
}

// 角色 ID
//
// 示例值：7213434603057807379
func (builder *CooperationUserRoleBuilder) RoleId(roleId string) *CooperationUserRoleBuilder {
	builder.roleId = roleId
	builder.roleIdFlag = true
	return builder
}

// 名称
//
// 示例值：
func (builder *CooperationUserRoleBuilder) Name(name *I18n) *CooperationUserRoleBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *CooperationUserRoleBuilder) Build() *CooperationUserRole {
	req := &CooperationUserRole{}
	if builder.roleIdFlag {
		req.RoleId = &builder.roleId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	return req
}

type CustomMetricConfig struct {
	DefaultFormulaId *string `json:"default_formula_id,omitempty"` // 新增指标默认公式ID,非指标库指标的公式ID使用该值

	LeastMetricsSize *int `json:"least_metrics_size,omitempty"` // 维度允许添加指标下限(包含)

	AddMetricOptions []int `json:"add_metric_options,omitempty"` // 添加的指标方式
}

type CustomMetricConfigBuilder struct {
	defaultFormulaId     string // 新增指标默认公式ID,非指标库指标的公式ID使用该值
	defaultFormulaIdFlag bool

	leastMetricsSize     int // 维度允许添加指标下限(包含)
	leastMetricsSizeFlag bool

	addMetricOptions     []int // 添加的指标方式
	addMetricOptionsFlag bool
}

func NewCustomMetricConfigBuilder() *CustomMetricConfigBuilder {
	builder := &CustomMetricConfigBuilder{}
	return builder
}

// 新增指标默认公式ID,非指标库指标的公式ID使用该值
//
// 示例值：7296701873237786643
func (builder *CustomMetricConfigBuilder) DefaultFormulaId(defaultFormulaId string) *CustomMetricConfigBuilder {
	builder.defaultFormulaId = defaultFormulaId
	builder.defaultFormulaIdFlag = true
	return builder
}

// 维度允许添加指标下限(包含)
//
// 示例值：1
func (builder *CustomMetricConfigBuilder) LeastMetricsSize(leastMetricsSize int) *CustomMetricConfigBuilder {
	builder.leastMetricsSize = leastMetricsSize
	builder.leastMetricsSizeFlag = true
	return builder
}

// 添加的指标方式
//
// 示例值：
func (builder *CustomMetricConfigBuilder) AddMetricOptions(addMetricOptions []int) *CustomMetricConfigBuilder {
	builder.addMetricOptions = addMetricOptions
	builder.addMetricOptionsFlag = true
	return builder
}

func (builder *CustomMetricConfigBuilder) Build() *CustomMetricConfig {
	req := &CustomMetricConfig{}
	if builder.defaultFormulaIdFlag {
		req.DefaultFormulaId = &builder.defaultFormulaId

	}
	if builder.leastMetricsSizeFlag {
		req.LeastMetricsSize = &builder.leastMetricsSize

	}
	if builder.addMetricOptionsFlag {
		req.AddMetricOptions = builder.addMetricOptions
	}
	return req
}

type DefaultInvitation struct {
	Invitations []*Invitation `json:"invitations,omitempty"` // 邀请关系列表
}

type DefaultInvitationBuilder struct {
	invitations     []*Invitation // 邀请关系列表
	invitationsFlag bool
}

func NewDefaultInvitationBuilder() *DefaultInvitationBuilder {
	builder := &DefaultInvitationBuilder{}
	return builder
}

// 邀请关系列表
//
// 示例值：
func (builder *DefaultInvitationBuilder) Invitations(invitations []*Invitation) *DefaultInvitationBuilder {
	builder.invitations = invitations
	builder.invitationsFlag = true
	return builder
}

func (builder *DefaultInvitationBuilder) Build() *DefaultInvitation {
	req := &DefaultInvitation{}
	if builder.invitationsFlag {
		req.Invitations = builder.invitations
	}
	return req
}

type Department struct {
	Id *string `json:"id,omitempty"` // 部门 ID，与入参中的department_id_type类型一致，详情请查看：获取单个部门信息

	Name *I18n `json:"name,omitempty"` // 部门名称
}

type DepartmentBuilder struct {
	id     string // 部门 ID，与入参中的department_id_type类型一致，详情请查看：获取单个部门信息
	idFlag bool

	name     *I18n // 部门名称
	nameFlag bool
}

func NewDepartmentBuilder() *DepartmentBuilder {
	builder := &DepartmentBuilder{}
	return builder
}

// 部门 ID，与入参中的department_id_type类型一致，详情请查看：获取单个部门信息
//
// 示例值：od-4e6ac4d14bcd5071a37a39de902c7141
func (builder *DepartmentBuilder) Id(id string) *DepartmentBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 部门名称
//
// 示例值：
func (builder *DepartmentBuilder) Name(name *I18n) *DepartmentBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *DepartmentBuilder) Build() *Department {
	req := &Department{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	return req
}

type DepartmentId struct {
	DepartmentId *string `json:"department_id,omitempty"` //

	OpenDepartmentId *string `json:"open_department_id,omitempty"` //
}

type DepartmentIdBuilder struct {
	departmentId     string //
	departmentIdFlag bool

	openDepartmentId     string //
	openDepartmentIdFlag bool
}

func NewDepartmentIdBuilder() *DepartmentIdBuilder {
	builder := &DepartmentIdBuilder{}
	return builder
}

//
//
// 示例值：
func (builder *DepartmentIdBuilder) DepartmentId(departmentId string) *DepartmentIdBuilder {
	builder.departmentId = departmentId
	builder.departmentIdFlag = true
	return builder
}

//
//
// 示例值：
func (builder *DepartmentIdBuilder) OpenDepartmentId(openDepartmentId string) *DepartmentIdBuilder {
	builder.openDepartmentId = openDepartmentId
	builder.openDepartmentIdFlag = true
	return builder
}

func (builder *DepartmentIdBuilder) Build() *DepartmentId {
	req := &DepartmentId{}
	if builder.departmentIdFlag {
		req.DepartmentId = &builder.departmentId

	}
	if builder.openDepartmentIdFlag {
		req.OpenDepartmentId = &builder.openDepartmentId

	}
	return req
}

type DirectProjectLeaderRecordInfo struct {
	ReviewerId *User `json:"reviewer_id,omitempty"` // 评估人 ID

	CooperationProjects []*CooperationProject `json:"cooperation_projects,omitempty"` // 评估人作为直属项目上级所在的项目

	ReviewDependProjects []*CooperationProject `json:"review_depend_projects,omitempty"` // 评估依据的项目

	ParticipatedProjects []*CooperationProject `json:"participated_projects,omitempty"` // 共同参与的项目
}

type DirectProjectLeaderRecordInfoBuilder struct {
	reviewerId     *User // 评估人 ID
	reviewerIdFlag bool

	cooperationProjects     []*CooperationProject // 评估人作为直属项目上级所在的项目
	cooperationProjectsFlag bool

	reviewDependProjects     []*CooperationProject // 评估依据的项目
	reviewDependProjectsFlag bool

	participatedProjects     []*CooperationProject // 共同参与的项目
	participatedProjectsFlag bool
}

func NewDirectProjectLeaderRecordInfoBuilder() *DirectProjectLeaderRecordInfoBuilder {
	builder := &DirectProjectLeaderRecordInfoBuilder{}
	return builder
}

// 评估人 ID
//
// 示例值：
func (builder *DirectProjectLeaderRecordInfoBuilder) ReviewerId(reviewerId *User) *DirectProjectLeaderRecordInfoBuilder {
	builder.reviewerId = reviewerId
	builder.reviewerIdFlag = true
	return builder
}

// 评估人作为直属项目上级所在的项目
//
// 示例值：
func (builder *DirectProjectLeaderRecordInfoBuilder) CooperationProjects(cooperationProjects []*CooperationProject) *DirectProjectLeaderRecordInfoBuilder {
	builder.cooperationProjects = cooperationProjects
	builder.cooperationProjectsFlag = true
	return builder
}

// 评估依据的项目
//
// 示例值：
func (builder *DirectProjectLeaderRecordInfoBuilder) ReviewDependProjects(reviewDependProjects []*CooperationProject) *DirectProjectLeaderRecordInfoBuilder {
	builder.reviewDependProjects = reviewDependProjects
	builder.reviewDependProjectsFlag = true
	return builder
}

// 共同参与的项目
//
// 示例值：
func (builder *DirectProjectLeaderRecordInfoBuilder) ParticipatedProjects(participatedProjects []*CooperationProject) *DirectProjectLeaderRecordInfoBuilder {
	builder.participatedProjects = participatedProjects
	builder.participatedProjectsFlag = true
	return builder
}

func (builder *DirectProjectLeaderRecordInfoBuilder) Build() *DirectProjectLeaderRecordInfo {
	req := &DirectProjectLeaderRecordInfo{}
	if builder.reviewerIdFlag {
		req.ReviewerId = builder.reviewerId
	}
	if builder.cooperationProjectsFlag {
		req.CooperationProjects = builder.cooperationProjects
	}
	if builder.reviewDependProjectsFlag {
		req.ReviewDependProjects = builder.reviewDependProjects
	}
	if builder.participatedProjectsFlag {
		req.ParticipatedProjects = builder.participatedProjects
	}
	return req
}

type EvaluationScale struct {
	UserId *string `json:"user_id,omitempty"` // 员工 ID

	UserEvaluationScales []*UserEvaluationScale `json:"user_evaluation_scales,omitempty"` // 员工的360° 评估尺度
}

type EvaluationScaleBuilder struct {
	userId     string // 员工 ID
	userIdFlag bool

	userEvaluationScales     []*UserEvaluationScale // 员工的360° 评估尺度
	userEvaluationScalesFlag bool
}

func NewEvaluationScaleBuilder() *EvaluationScaleBuilder {
	builder := &EvaluationScaleBuilder{}
	return builder
}

// 员工 ID
//
// 示例值：
func (builder *EvaluationScaleBuilder) UserId(userId string) *EvaluationScaleBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 员工的360° 评估尺度
//
// 示例值：
func (builder *EvaluationScaleBuilder) UserEvaluationScales(userEvaluationScales []*UserEvaluationScale) *EvaluationScaleBuilder {
	builder.userEvaluationScales = userEvaluationScales
	builder.userEvaluationScalesFlag = true
	return builder
}

func (builder *EvaluationScaleBuilder) Build() *EvaluationScale {
	req := &EvaluationScale{}
	if builder.userIdFlag {
		req.UserId = &builder.userId

	}
	if builder.userEvaluationScalesFlag {
		req.UserEvaluationScales = builder.userEvaluationScales
	}
	return req
}

type Field struct {
	FieldId *string `json:"field_id,omitempty"` // 评估题 ID

	Name *I18n `json:"name,omitempty"` // 如果是填写项，为填写项名称；如果是评估项，为评估项名称

	IndicatorId *string `json:"indicator_id,omitempty"` // 评估项 ID

	TagBasedQuestionId *string `json:"tag_based_question_id,omitempty"` // 标签填写题 ID

	ObjectiveTextQustionTitle *I18n `json:"objective_text_qustion_title,omitempty"` // O 的填写项标题

	KeyresultTextQustionTitle *I18n `json:"keyresult_text_qustion_title,omitempty"` // KR 的填写项标题

	ParentFieldId *string `json:"parent_field_id,omitempty"` // 关联的父级评估项 ID

	KpiTemplateId *string `json:"kpi_template_id,omitempty"` // 指标模板ID
}

type FieldBuilder struct {
	fieldId     string // 评估题 ID
	fieldIdFlag bool

	name     *I18n // 如果是填写项，为填写项名称；如果是评估项，为评估项名称
	nameFlag bool

	indicatorId     string // 评估项 ID
	indicatorIdFlag bool

	tagBasedQuestionId     string // 标签填写题 ID
	tagBasedQuestionIdFlag bool

	objectiveTextQustionTitle     *I18n // O 的填写项标题
	objectiveTextQustionTitleFlag bool

	keyresultTextQustionTitle     *I18n // KR 的填写项标题
	keyresultTextQustionTitleFlag bool

	parentFieldId     string // 关联的父级评估项 ID
	parentFieldIdFlag bool

	kpiTemplateId     string // 指标模板ID
	kpiTemplateIdFlag bool
}

func NewFieldBuilder() *FieldBuilder {
	builder := &FieldBuilder{}
	return builder
}

// 评估题 ID
//
// 示例值：7343513161666707459
func (builder *FieldBuilder) FieldId(fieldId string) *FieldBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 如果是填写项，为填写项名称；如果是评估项，为评估项名称
//
// 示例值：
func (builder *FieldBuilder) Name(name *I18n) *FieldBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 评估项 ID
//
// 示例值：7343513161666707459
func (builder *FieldBuilder) IndicatorId(indicatorId string) *FieldBuilder {
	builder.indicatorId = indicatorId
	builder.indicatorIdFlag = true
	return builder
}

// 标签填写题 ID
//
// 示例值：7343513161666707459
func (builder *FieldBuilder) TagBasedQuestionId(tagBasedQuestionId string) *FieldBuilder {
	builder.tagBasedQuestionId = tagBasedQuestionId
	builder.tagBasedQuestionIdFlag = true
	return builder
}

// O 的填写项标题
//
// 示例值：
func (builder *FieldBuilder) ObjectiveTextQustionTitle(objectiveTextQustionTitle *I18n) *FieldBuilder {
	builder.objectiveTextQustionTitle = objectiveTextQustionTitle
	builder.objectiveTextQustionTitleFlag = true
	return builder
}

// KR 的填写项标题
//
// 示例值：
func (builder *FieldBuilder) KeyresultTextQustionTitle(keyresultTextQustionTitle *I18n) *FieldBuilder {
	builder.keyresultTextQustionTitle = keyresultTextQustionTitle
	builder.keyresultTextQustionTitleFlag = true
	return builder
}

// 关联的父级评估项 ID
//
// 示例值：7343513161666707459
func (builder *FieldBuilder) ParentFieldId(parentFieldId string) *FieldBuilder {
	builder.parentFieldId = parentFieldId
	builder.parentFieldIdFlag = true
	return builder
}

// 指标模板ID
//
// 示例值：7494252079230222371
func (builder *FieldBuilder) KpiTemplateId(kpiTemplateId string) *FieldBuilder {
	builder.kpiTemplateId = kpiTemplateId
	builder.kpiTemplateIdFlag = true
	return builder
}

func (builder *FieldBuilder) Build() *Field {
	req := &Field{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.indicatorIdFlag {
		req.IndicatorId = &builder.indicatorId

	}
	if builder.tagBasedQuestionIdFlag {
		req.TagBasedQuestionId = &builder.tagBasedQuestionId

	}
	if builder.objectiveTextQustionTitleFlag {
		req.ObjectiveTextQustionTitle = builder.objectiveTextQustionTitle
	}
	if builder.keyresultTextQustionTitleFlag {
		req.KeyresultTextQustionTitle = builder.keyresultTextQustionTitle
	}
	if builder.parentFieldIdFlag {
		req.ParentFieldId = &builder.parentFieldId

	}
	if builder.kpiTemplateIdFlag {
		req.KpiTemplateId = &builder.kpiTemplateId

	}
	return req
}

type Formula struct {
	FormulaId *string `json:"formula_id,omitempty"` // 公式 ID

	FormulaName *string `json:"formula_name,omitempty"` // 公式名称

	FormulaDetails *string `json:"formula_details,omitempty"` // 公式详情
}

type FormulaBuilder struct {
	formulaId     string // 公式 ID
	formulaIdFlag bool

	formulaName     string // 公式名称
	formulaNameFlag bool

	formulaDetails     string // 公式详情
	formulaDetailsFlag bool
}

func NewFormulaBuilder() *FormulaBuilder {
	builder := &FormulaBuilder{}
	return builder
}

// 公式 ID
//
// 示例值：7302271694582841364
func (builder *FormulaBuilder) FormulaId(formulaId string) *FormulaBuilder {
	builder.formulaId = formulaId
	builder.formulaIdFlag = true
	return builder
}

// 公式名称
//
// 示例值：示例公式
func (builder *FormulaBuilder) FormulaName(formulaName string) *FormulaBuilder {
	builder.formulaName = formulaName
	builder.formulaNameFlag = true
	return builder
}

// 公式详情
//
// 示例值：1 + 1
func (builder *FormulaBuilder) FormulaDetails(formulaDetails string) *FormulaBuilder {
	builder.formulaDetails = formulaDetails
	builder.formulaDetailsFlag = true
	return builder
}

func (builder *FormulaBuilder) Build() *Formula {
	req := &Formula{}
	if builder.formulaIdFlag {
		req.FormulaId = &builder.formulaId

	}
	if builder.formulaNameFlag {
		req.FormulaName = &builder.formulaName

	}
	if builder.formulaDetailsFlag {
		req.FormulaDetails = &builder.formulaDetails

	}
	return req
}

type I18n struct {
	ZhCn *string `json:"zh_cn,omitempty"` // 中文

	EnUs *string `json:"en_us,omitempty"` // 英文
}

type I18nBuilder struct {
	zhCn     string // 中文
	zhCnFlag bool

	enUs     string // 英文
	enUsFlag bool
}

func NewI18nBuilder() *I18nBuilder {
	builder := &I18nBuilder{}
	return builder
}

// 中文
//
// 示例值：体验
func (builder *I18nBuilder) ZhCn(zhCn string) *I18nBuilder {
	builder.zhCn = zhCn
	builder.zhCnFlag = true
	return builder
}

// 英文
//
// 示例值：Interactive experience
func (builder *I18nBuilder) EnUs(enUs string) *I18nBuilder {
	builder.enUs = enUs
	builder.enUsFlag = true
	return builder
}

func (builder *I18nBuilder) Build() *I18n {
	req := &I18n{}
	if builder.zhCnFlag {
		req.ZhCn = &builder.zhCn

	}
	if builder.enUsFlag {
		req.EnUs = &builder.enUs

	}
	return req
}

type ImportedMetric struct {
	RevieweeUserId *string `json:"reviewee_user_id,omitempty"` // 被评估人 ID

	MetricId *string `json:"metric_id,omitempty"` // 指标 ID，指标的统一标识

	Fields []*ImportedMetricField `json:"fields,omitempty"` // 指标字段信息
}

type ImportedMetricBuilder struct {
	revieweeUserId     string // 被评估人 ID
	revieweeUserIdFlag bool

	metricId     string // 指标 ID，指标的统一标识
	metricIdFlag bool

	fields     []*ImportedMetricField // 指标字段信息
	fieldsFlag bool
}

func NewImportedMetricBuilder() *ImportedMetricBuilder {
	builder := &ImportedMetricBuilder{}
	return builder
}

// 被评估人 ID
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b3
func (builder *ImportedMetricBuilder) RevieweeUserId(revieweeUserId string) *ImportedMetricBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 指标 ID，指标的统一标识
//
// 示例值：7272580325522276372
func (builder *ImportedMetricBuilder) MetricId(metricId string) *ImportedMetricBuilder {
	builder.metricId = metricId
	builder.metricIdFlag = true
	return builder
}

// 指标字段信息
//
// 示例值：
func (builder *ImportedMetricBuilder) Fields(fields []*ImportedMetricField) *ImportedMetricBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

func (builder *ImportedMetricBuilder) Build() *ImportedMetric {
	req := &ImportedMetric{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = &builder.revieweeUserId

	}
	if builder.metricIdFlag {
		req.MetricId = &builder.metricId

	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	return req
}

type ImportedMetricField struct {
	FieldId *string `json:"field_id,omitempty"` // 指标字段 ID

	FieldValue *string `json:"field_value,omitempty"` // 字段值

	FieldValuePerson *string `json:"field_value_person,omitempty"` // 字段值，当字段为人员信息时必填
}

type ImportedMetricFieldBuilder struct {
	fieldId     string // 指标字段 ID
	fieldIdFlag bool

	fieldValue     string // 字段值
	fieldValueFlag bool

	fieldValuePerson     string // 字段值，当字段为人员信息时必填
	fieldValuePersonFlag bool
}

func NewImportedMetricFieldBuilder() *ImportedMetricFieldBuilder {
	builder := &ImportedMetricFieldBuilder{}
	return builder
}

// 指标字段 ID
//
// 示例值：7283776005142675476
func (builder *ImportedMetricFieldBuilder) FieldId(fieldId string) *ImportedMetricFieldBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 字段值
//
// 示例值：100
func (builder *ImportedMetricFieldBuilder) FieldValue(fieldValue string) *ImportedMetricFieldBuilder {
	builder.fieldValue = fieldValue
	builder.fieldValueFlag = true
	return builder
}

// 字段值，当字段为人员信息时必填
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b3
func (builder *ImportedMetricFieldBuilder) FieldValuePerson(fieldValuePerson string) *ImportedMetricFieldBuilder {
	builder.fieldValuePerson = fieldValuePerson
	builder.fieldValuePersonFlag = true
	return builder
}

func (builder *ImportedMetricFieldBuilder) Build() *ImportedMetricField {
	req := &ImportedMetricField{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.fieldValueFlag {
		req.FieldValue = &builder.fieldValue

	}
	if builder.fieldValuePersonFlag {
		req.FieldValuePerson = &builder.fieldValuePerson

	}
	return req
}

type Indicator struct {
	Id *string `json:"id,omitempty"` // 评估项 ID

	Name *I18n `json:"name,omitempty"` // 评估项名称

	Type *string `json:"type,omitempty"` // 评估项类型

	Options []*IndicatorOption `json:"options,omitempty"` // 评估项等级列表
}

type IndicatorBuilder struct {
	id     string // 评估项 ID
	idFlag bool

	name     *I18n // 评估项名称
	nameFlag bool

	type_    string // 评估项类型
	typeFlag bool

	options     []*IndicatorOption // 评估项等级列表
	optionsFlag bool
}

func NewIndicatorBuilder() *IndicatorBuilder {
	builder := &IndicatorBuilder{}
	return builder
}

// 评估项 ID
//
// 示例值：7343513161666707459
func (builder *IndicatorBuilder) Id(id string) *IndicatorBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 评估项名称
//
// 示例值：
func (builder *IndicatorBuilder) Name(name *I18n) *IndicatorBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 评估项类型
//
// 示例值：plus
func (builder *IndicatorBuilder) Type(type_ string) *IndicatorBuilder {
	builder.type_ = type_
	builder.typeFlag = true
	return builder
}

// 评估项等级列表
//
// 示例值：
func (builder *IndicatorBuilder) Options(options []*IndicatorOption) *IndicatorBuilder {
	builder.options = options
	builder.optionsFlag = true
	return builder
}

func (builder *IndicatorBuilder) Build() *Indicator {
	req := &Indicator{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.typeFlag {
		req.Type = &builder.type_

	}
	if builder.optionsFlag {
		req.Options = builder.options
	}
	return req
}

type IndicatorOption struct {
	Id *string `json:"id,omitempty"` // 等级 ID

	Name *I18n `json:"name,omitempty"` // 等级名称

	Lable *string `json:"lable,omitempty"` // 等级代号
}

type IndicatorOptionBuilder struct {
	id     string // 等级 ID
	idFlag bool

	name     *I18n // 等级名称
	nameFlag bool

	lable     string // 等级代号
	lableFlag bool
}

func NewIndicatorOptionBuilder() *IndicatorOptionBuilder {
	builder := &IndicatorOptionBuilder{}
	return builder
}

// 等级 ID
//
// 示例值：7343513161666707459
func (builder *IndicatorOptionBuilder) Id(id string) *IndicatorOptionBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 等级名称
//
// 示例值：
func (builder *IndicatorOptionBuilder) Name(name *I18n) *IndicatorOptionBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 等级代号
//
// 示例值：qwerty
func (builder *IndicatorOptionBuilder) Lable(lable string) *IndicatorOptionBuilder {
	builder.lable = lable
	builder.lableFlag = true
	return builder
}

func (builder *IndicatorOptionBuilder) Build() *IndicatorOption {
	req := &IndicatorOption{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.lableFlag {
		req.Lable = &builder.lable

	}
	return req
}

type Invitation struct {
	RevieweeUserId *string `json:"reviewee_user_id,omitempty"` // 被评估人ID

	Reviewers []*InvitationReviewer `json:"reviewers,omitempty"` // 评估人列表
}

type InvitationBuilder struct {
	revieweeUserId     string // 被评估人ID
	revieweeUserIdFlag bool

	reviewers     []*InvitationReviewer // 评估人列表
	reviewersFlag bool
}

func NewInvitationBuilder() *InvitationBuilder {
	builder := &InvitationBuilder{}
	return builder
}

// 被评估人ID
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b2
func (builder *InvitationBuilder) RevieweeUserId(revieweeUserId string) *InvitationBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 评估人列表
//
// 示例值：
func (builder *InvitationBuilder) Reviewers(reviewers []*InvitationReviewer) *InvitationBuilder {
	builder.reviewers = reviewers
	builder.reviewersFlag = true
	return builder
}

func (builder *InvitationBuilder) Build() *Invitation {
	req := &Invitation{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = &builder.revieweeUserId

	}
	if builder.reviewersFlag {
		req.Reviewers = builder.reviewers
	}
	return req
}

type InvitationRelation struct {
	RevieweeUserId *string `json:"reviewee_user_id,omitempty"` // 被评估人ID

	ReviewerUserIds []string `json:"reviewer_user_ids,omitempty"` // 评估人ID列表
}

type InvitationRelationBuilder struct {
	revieweeUserId     string // 被评估人ID
	revieweeUserIdFlag bool

	reviewerUserIds     []string // 评估人ID列表
	reviewerUserIdsFlag bool
}

func NewInvitationRelationBuilder() *InvitationRelationBuilder {
	builder := &InvitationRelationBuilder{}
	return builder
}

// 被评估人ID
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b3
func (builder *InvitationRelationBuilder) RevieweeUserId(revieweeUserId string) *InvitationRelationBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 评估人ID列表
//
// 示例值：
func (builder *InvitationRelationBuilder) ReviewerUserIds(reviewerUserIds []string) *InvitationRelationBuilder {
	builder.reviewerUserIds = reviewerUserIds
	builder.reviewerUserIdsFlag = true
	return builder
}

func (builder *InvitationRelationBuilder) Build() *InvitationRelation {
	req := &InvitationRelation{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = &builder.revieweeUserId

	}
	if builder.reviewerUserIdsFlag {
		req.ReviewerUserIds = builder.reviewerUserIds
	}
	return req
}

type InvitationReviewer struct {
	ReviewerUserId *string `json:"reviewer_user_id,omitempty"` // 评估人ID

	Source *string `json:"source,omitempty"` // 来源
}

type InvitationReviewerBuilder struct {
	reviewerUserId     string // 评估人ID
	reviewerUserIdFlag bool

	source     string // 来源
	sourceFlag bool
}

func NewInvitationReviewerBuilder() *InvitationReviewerBuilder {
	builder := &InvitationReviewerBuilder{}
	return builder
}

// 评估人ID
//
// 示例值：ou_3245842393d09e9428ad4655da6e30b3
func (builder *InvitationReviewerBuilder) ReviewerUserId(reviewerUserId string) *InvitationReviewerBuilder {
	builder.reviewerUserId = reviewerUserId
	builder.reviewerUserIdFlag = true
	return builder
}

// 来源
//
// 示例值：openapi
func (builder *InvitationReviewerBuilder) Source(source string) *InvitationReviewerBuilder {
	builder.source = source
	builder.sourceFlag = true
	return builder
}

func (builder *InvitationReviewerBuilder) Build() *InvitationReviewer {
	req := &InvitationReviewer{}
	if builder.reviewerUserIdFlag {
		req.ReviewerUserId = &builder.reviewerUserId

	}
	if builder.sourceFlag {
		req.Source = &builder.source

	}
	return req
}

type InvitedReviewRecordInfo struct {
	ReviewerId *User `json:"reviewer_id,omitempty"` // 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值

	IsRejected *bool `json:"is_rejected,omitempty"` // 是否拒绝

	RejectedReason *string `json:"rejected_reason,omitempty"` // 360° 评估人拒绝评估的理由，当 360° 评估环节被评估人拒绝时有值

	DistributeType *int `json:"distribute_type,omitempty"` // 360° 评估人的评估尺度标签

	AvgDiff *string `json:"avg_diff,omitempty"` // 360° 评估人的评估尺度数值

	RelationshipWithReviewee *string `json:"relationship_with_reviewee,omitempty"` // 360° 评估人的与被评估人关系。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值

	Invitedby *string `json:"invitedby,omitempty"` // 360° 评估人的邀请人类型。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值
}

type InvitedReviewRecordInfoBuilder struct {
	reviewerId     *User // 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值
	reviewerIdFlag bool

	isRejected     bool // 是否拒绝
	isRejectedFlag bool

	rejectedReason     string // 360° 评估人拒绝评估的理由，当 360° 评估环节被评估人拒绝时有值
	rejectedReasonFlag bool

	distributeType     int // 360° 评估人的评估尺度标签
	distributeTypeFlag bool

	avgDiff     string // 360° 评估人的评估尺度数值
	avgDiffFlag bool

	relationshipWithReviewee     string // 360° 评估人的与被评估人关系。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值
	relationshipWithRevieweeFlag bool

	invitedby     string // 360° 评估人的邀请人类型。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值
	invitedbyFlag bool
}

func NewInvitedReviewRecordInfoBuilder() *InvitedReviewRecordInfoBuilder {
	builder := &InvitedReviewRecordInfoBuilder{}
	return builder
}

// 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值
//
// 示例值：
func (builder *InvitedReviewRecordInfoBuilder) ReviewerId(reviewerId *User) *InvitedReviewRecordInfoBuilder {
	builder.reviewerId = reviewerId
	builder.reviewerIdFlag = true
	return builder
}

// 是否拒绝
//
// 示例值：false
func (builder *InvitedReviewRecordInfoBuilder) IsRejected(isRejected bool) *InvitedReviewRecordInfoBuilder {
	builder.isRejected = isRejected
	builder.isRejectedFlag = true
	return builder
}

// 360° 评估人拒绝评估的理由，当 360° 评估环节被评估人拒绝时有值
//
// 示例值：test
func (builder *InvitedReviewRecordInfoBuilder) RejectedReason(rejectedReason string) *InvitedReviewRecordInfoBuilder {
	builder.rejectedReason = rejectedReason
	builder.rejectedReasonFlag = true
	return builder
}

// 360° 评估人的评估尺度标签
//
// 示例值：1
func (builder *InvitedReviewRecordInfoBuilder) DistributeType(distributeType int) *InvitedReviewRecordInfoBuilder {
	builder.distributeType = distributeType
	builder.distributeTypeFlag = true
	return builder
}

// 360° 评估人的评估尺度数值
//
// 示例值：1.23
func (builder *InvitedReviewRecordInfoBuilder) AvgDiff(avgDiff string) *InvitedReviewRecordInfoBuilder {
	builder.avgDiff = avgDiff
	builder.avgDiffFlag = true
	return builder
}

// 360° 评估人的与被评估人关系。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值
//
// 示例值：direct_report
func (builder *InvitedReviewRecordInfoBuilder) RelationshipWithReviewee(relationshipWithReviewee string) *InvitedReviewRecordInfoBuilder {
	builder.relationshipWithReviewee = relationshipWithReviewee
	builder.relationshipWithRevieweeFlag = true
	return builder
}

// 360° 评估人的邀请人类型。如果开启了 360 匿名评估，并且是对全部查看者匿名，且配置隐藏描述信息则不返回该值
//
// 示例值：system_default
func (builder *InvitedReviewRecordInfoBuilder) Invitedby(invitedby string) *InvitedReviewRecordInfoBuilder {
	builder.invitedby = invitedby
	builder.invitedbyFlag = true
	return builder
}

func (builder *InvitedReviewRecordInfoBuilder) Build() *InvitedReviewRecordInfo {
	req := &InvitedReviewRecordInfo{}
	if builder.reviewerIdFlag {
		req.ReviewerId = builder.reviewerId
	}
	if builder.isRejectedFlag {
		req.IsRejected = &builder.isRejected

	}
	if builder.rejectedReasonFlag {
		req.RejectedReason = &builder.rejectedReason

	}
	if builder.distributeTypeFlag {
		req.DistributeType = &builder.distributeType

	}
	if builder.avgDiffFlag {
		req.AvgDiff = &builder.avgDiff

	}
	if builder.relationshipWithRevieweeFlag {
		req.RelationshipWithReviewee = &builder.relationshipWithReviewee

	}
	if builder.invitedbyFlag {
		req.Invitedby = &builder.invitedby

	}
	return req
}

type JobFamily struct {
	Id *string `json:"id,omitempty"` // 序列 ID

	Name *I18n `json:"name,omitempty"` // 序列名称
}

type JobFamilyBuilder struct {
	id     string // 序列 ID
	idFlag bool

	name     *I18n // 序列名称
	nameFlag bool
}

func NewJobFamilyBuilder() *JobFamilyBuilder {
	builder := &JobFamilyBuilder{}
	return builder
}

// 序列 ID
//
// 示例值：mga5oa8ayjlp9rb
func (builder *JobFamilyBuilder) Id(id string) *JobFamilyBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 序列名称
//
// 示例值：
func (builder *JobFamilyBuilder) Name(name *I18n) *JobFamilyBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *JobFamilyBuilder) Build() *JobFamily {
	req := &JobFamily{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	return req
}

type JobLevel struct {
	Id *string `json:"id,omitempty"` // 职级 ID

	Name *I18n `json:"name,omitempty"` // 职级名称
}

type JobLevelBuilder struct {
	id     string // 职级 ID
	idFlag bool

	name     *I18n // 职级名称
	nameFlag bool
}

func NewJobLevelBuilder() *JobLevelBuilder {
	builder := &JobLevelBuilder{}
	return builder
}

// 职级 ID
//
// 示例值：mga5oa8ayjlp9rb
func (builder *JobLevelBuilder) Id(id string) *JobLevelBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 职级名称
//
// 示例值：
func (builder *JobLevelBuilder) Name(name *I18n) *JobLevelBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *JobLevelBuilder) Build() *JobLevel {
	req := &JobLevel{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	return req
}

type KeyresultData struct {
	KeyresultId *string `json:"keyresult_id,omitempty"` // 关键举措 ID

	Score *string `json:"score,omitempty"` // 关键举措的评分

	Text *string `json:"text,omitempty"` // 该关键举措的填写项内容

	Richtext *string `json:"richtext,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
}

type KeyresultDataBuilder struct {
	keyresultId     string // 关键举措 ID
	keyresultIdFlag bool

	score     string // 关键举措的评分
	scoreFlag bool

	text     string // 该关键举措的填写项内容
	textFlag bool

	richtext     string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	richtextFlag bool
}

func NewKeyresultDataBuilder() *KeyresultDataBuilder {
	builder := &KeyresultDataBuilder{}
	return builder
}

// 关键举措 ID
//
// 示例值：7343513161666707459
func (builder *KeyresultDataBuilder) KeyresultId(keyresultId string) *KeyresultDataBuilder {
	builder.keyresultId = keyresultId
	builder.keyresultIdFlag = true
	return builder
}

// 关键举措的评分
//
// 示例值：1.1
func (builder *KeyresultDataBuilder) Score(score string) *KeyresultDataBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// 该关键举措的填写项内容
//
// 示例值：qwerty
func (builder *KeyresultDataBuilder) Text(text string) *KeyresultDataBuilder {
	builder.text = text
	builder.textFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：{"ops":[{"name":"insert","text":"qwerty","attributes":{"bold":true}}]}
func (builder *KeyresultDataBuilder) Richtext(richtext string) *KeyresultDataBuilder {
	builder.richtext = richtext
	builder.richtextFlag = true
	return builder
}

func (builder *KeyresultDataBuilder) Build() *KeyresultData {
	req := &KeyresultData{}
	if builder.keyresultIdFlag {
		req.KeyresultId = &builder.keyresultId

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.textFlag {
		req.Text = &builder.text

	}
	if builder.richtextFlag {
		req.Richtext = &builder.richtext

	}
	return req
}

type MetricData struct {
	Id *string `json:"id,omitempty"` // 指标 ID，可以通过获取指标详情接口获取详细信息

	Score *string `json:"score,omitempty"` // 指标评分
}

type MetricDataBuilder struct {
	id     string // 指标 ID，可以通过获取指标详情接口获取详细信息
	idFlag bool

	score     string // 指标评分
	scoreFlag bool
}

func NewMetricDataBuilder() *MetricDataBuilder {
	builder := &MetricDataBuilder{}
	return builder
}

// 指标 ID，可以通过获取指标详情接口获取详细信息
//
// 示例值：7343513161666707459
func (builder *MetricDataBuilder) Id(id string) *MetricDataBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 指标评分
//
// 示例值：1.1
func (builder *MetricDataBuilder) Score(score string) *MetricDataBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

func (builder *MetricDataBuilder) Build() *MetricData {
	req := &MetricData{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	return req
}

type MetricDetail struct {
	MetricId *string `json:"metric_id,omitempty"` // 指标 ID

	Name *string `json:"name,omitempty"` // 指标名称，指标在该明细数据中的名称

	Fields []*MetricFieldInDetails `json:"fields,omitempty"` // 指标字段信息

	DimensionId *string `json:"dimension_id,omitempty"` // 指标所属的指标维度 ID

	DimensionName *I18n `json:"dimension_name,omitempty"` // 指标维度名称

	DimensionWeight *string `json:"dimension_weight,omitempty"` // 指标维度的维度权重，如果没有设置则返回为空

	AddFrom *string `json:"add_from,omitempty"` // 指标添加来源

	IsFromLibrary *bool `json:"is_from_library,omitempty"` // 指标是否引自指标库
}

type MetricDetailBuilder struct {
	metricId     string // 指标 ID
	metricIdFlag bool

	name     string // 指标名称，指标在该明细数据中的名称
	nameFlag bool

	fields     []*MetricFieldInDetails // 指标字段信息
	fieldsFlag bool

	dimensionId     string // 指标所属的指标维度 ID
	dimensionIdFlag bool

	dimensionName     *I18n // 指标维度名称
	dimensionNameFlag bool

	dimensionWeight     string // 指标维度的维度权重，如果没有设置则返回为空
	dimensionWeightFlag bool

	addFrom     string // 指标添加来源
	addFromFlag bool

	isFromLibrary     bool // 指标是否引自指标库
	isFromLibraryFlag bool
}

func NewMetricDetailBuilder() *MetricDetailBuilder {
	builder := &MetricDetailBuilder{}
	return builder
}

// 指标 ID
//
// 示例值：7272581996315099155
func (builder *MetricDetailBuilder) MetricId(metricId string) *MetricDetailBuilder {
	builder.metricId = metricId
	builder.metricIdFlag = true
	return builder
}

// 指标名称，指标在该明细数据中的名称
//
// 示例值：示例指标
func (builder *MetricDetailBuilder) Name(name string) *MetricDetailBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 指标字段信息
//
// 示例值：
func (builder *MetricDetailBuilder) Fields(fields []*MetricFieldInDetails) *MetricDetailBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

// 指标所属的指标维度 ID
//
// 示例值：7303895818346430484
func (builder *MetricDetailBuilder) DimensionId(dimensionId string) *MetricDetailBuilder {
	builder.dimensionId = dimensionId
	builder.dimensionIdFlag = true
	return builder
}

// 指标维度名称
//
// 示例值：
func (builder *MetricDetailBuilder) DimensionName(dimensionName *I18n) *MetricDetailBuilder {
	builder.dimensionName = dimensionName
	builder.dimensionNameFlag = true
	return builder
}

// 指标维度的维度权重，如果没有设置则返回为空
//
// 示例值：90%
func (builder *MetricDetailBuilder) DimensionWeight(dimensionWeight string) *MetricDetailBuilder {
	builder.dimensionWeight = dimensionWeight
	builder.dimensionWeightFlag = true
	return builder
}

// 指标添加来源
//
// 示例值：
func (builder *MetricDetailBuilder) AddFrom(addFrom string) *MetricDetailBuilder {
	builder.addFrom = addFrom
	builder.addFromFlag = true
	return builder
}

// 指标是否引自指标库
//
// 示例值：
func (builder *MetricDetailBuilder) IsFromLibrary(isFromLibrary bool) *MetricDetailBuilder {
	builder.isFromLibrary = isFromLibrary
	builder.isFromLibraryFlag = true
	return builder
}

func (builder *MetricDetailBuilder) Build() *MetricDetail {
	req := &MetricDetail{}
	if builder.metricIdFlag {
		req.MetricId = &builder.metricId

	}
	if builder.nameFlag {
		req.Name = &builder.name

	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	if builder.dimensionIdFlag {
		req.DimensionId = &builder.dimensionId

	}
	if builder.dimensionNameFlag {
		req.DimensionName = builder.dimensionName
	}
	if builder.dimensionWeightFlag {
		req.DimensionWeight = &builder.dimensionWeight

	}
	if builder.addFromFlag {
		req.AddFrom = &builder.addFrom

	}
	if builder.isFromLibraryFlag {
		req.IsFromLibrary = &builder.isFromLibrary

	}
	return req
}

type MetricDimension struct {
	GroupId *string `json:"group_id,omitempty"` // 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空

	MetricDimensionId *string `json:"metric_dimension_id,omitempty"` // 指标维度 ID

	Name *I18n `json:"name,omitempty"` // 指标维度名称

	EvaluationRuleIdForEachMetric *string `json:"evaluation_rule_id_for_each_metric,omitempty"` // 每条指标的评估规则 ID

	DimensionWeight *string `json:"dimension_weight,omitempty"` // 维度权重，如果没有设置则返回为空（备注：和 0 区分）

	Description *I18n `json:"description,omitempty"` // 维度描述

	ReviewRuleOption *int `json:"review_rule_option,omitempty"` // 指标评分规则设置

	CustomMetricConfig *CustomMetricConfig `json:"custom_metric_config,omitempty"` // 自定义指标设置
}

type MetricDimensionBuilder struct {
	groupId     string // 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空
	groupIdFlag bool

	metricDimensionId     string // 指标维度 ID
	metricDimensionIdFlag bool

	name     *I18n // 指标维度名称
	nameFlag bool

	evaluationRuleIdForEachMetric     string // 每条指标的评估规则 ID
	evaluationRuleIdForEachMetricFlag bool

	dimensionWeight     string // 维度权重，如果没有设置则返回为空（备注：和 0 区分）
	dimensionWeightFlag bool

	description     *I18n // 维度描述
	descriptionFlag bool

	reviewRuleOption     int // 指标评分规则设置
	reviewRuleOptionFlag bool

	customMetricConfig     *CustomMetricConfig // 自定义指标设置
	customMetricConfigFlag bool
}

func NewMetricDimensionBuilder() *MetricDimensionBuilder {
	builder := &MetricDimensionBuilder{}
	return builder
}

// 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空
//
// 示例值：7296753366268215316
func (builder *MetricDimensionBuilder) GroupId(groupId string) *MetricDimensionBuilder {
	builder.groupId = groupId
	builder.groupIdFlag = true
	return builder
}

// 指标维度 ID
//
// 示例值：7296753366268215316
func (builder *MetricDimensionBuilder) MetricDimensionId(metricDimensionId string) *MetricDimensionBuilder {
	builder.metricDimensionId = metricDimensionId
	builder.metricDimensionIdFlag = true
	return builder
}

// 指标维度名称
//
// 示例值：
func (builder *MetricDimensionBuilder) Name(name *I18n) *MetricDimensionBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 每条指标的评估规则 ID
//
// 示例值：7296701873237786643
func (builder *MetricDimensionBuilder) EvaluationRuleIdForEachMetric(evaluationRuleIdForEachMetric string) *MetricDimensionBuilder {
	builder.evaluationRuleIdForEachMetric = evaluationRuleIdForEachMetric
	builder.evaluationRuleIdForEachMetricFlag = true
	return builder
}

// 维度权重，如果没有设置则返回为空（备注：和 0 区分）
//
// 示例值：90
func (builder *MetricDimensionBuilder) DimensionWeight(dimensionWeight string) *MetricDimensionBuilder {
	builder.dimensionWeight = dimensionWeight
	builder.dimensionWeightFlag = true
	return builder
}

// 维度描述
//
// 示例值：
func (builder *MetricDimensionBuilder) Description(description *I18n) *MetricDimensionBuilder {
	builder.description = description
	builder.descriptionFlag = true
	return builder
}

// 指标评分规则设置
//
// 示例值：0
func (builder *MetricDimensionBuilder) ReviewRuleOption(reviewRuleOption int) *MetricDimensionBuilder {
	builder.reviewRuleOption = reviewRuleOption
	builder.reviewRuleOptionFlag = true
	return builder
}

// 自定义指标设置
//
// 示例值：
func (builder *MetricDimensionBuilder) CustomMetricConfig(customMetricConfig *CustomMetricConfig) *MetricDimensionBuilder {
	builder.customMetricConfig = customMetricConfig
	builder.customMetricConfigFlag = true
	return builder
}

func (builder *MetricDimensionBuilder) Build() *MetricDimension {
	req := &MetricDimension{}
	if builder.groupIdFlag {
		req.GroupId = &builder.groupId

	}
	if builder.metricDimensionIdFlag {
		req.MetricDimensionId = &builder.metricDimensionId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.evaluationRuleIdForEachMetricFlag {
		req.EvaluationRuleIdForEachMetric = &builder.evaluationRuleIdForEachMetric

	}
	if builder.dimensionWeightFlag {
		req.DimensionWeight = &builder.dimensionWeight

	}
	if builder.descriptionFlag {
		req.Description = builder.description
	}
	if builder.reviewRuleOptionFlag {
		req.ReviewRuleOption = &builder.reviewRuleOption

	}
	if builder.customMetricConfigFlag {
		req.CustomMetricConfig = builder.customMetricConfig
	}
	return req
}

type MetricField struct {
	FieldId *string `json:"field_id,omitempty"` // 指标字段信息

	Name *I18n `json:"name,omitempty"` // 字段名称

	Type *string `json:"type,omitempty"` // 字段类型
}

type MetricFieldBuilder struct {
	fieldId     string // 指标字段信息
	fieldIdFlag bool

	name     *I18n // 字段名称
	nameFlag bool

	type_    string // 字段类型
	typeFlag bool
}

func NewMetricFieldBuilder() *MetricFieldBuilder {
	builder := &MetricFieldBuilder{}
	return builder
}

// 指标字段信息
//
// 示例值：7272581996315099155
func (builder *MetricFieldBuilder) FieldId(fieldId string) *MetricFieldBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 字段名称
//
// 示例值：
func (builder *MetricFieldBuilder) Name(name *I18n) *MetricFieldBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 字段类型
//
// 示例值：text
func (builder *MetricFieldBuilder) Type(type_ string) *MetricFieldBuilder {
	builder.type_ = type_
	builder.typeFlag = true
	return builder
}

func (builder *MetricFieldBuilder) Build() *MetricField {
	req := &MetricField{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.typeFlag {
		req.Type = &builder.type_

	}
	return req
}

type MetricFieldInDetails struct {
	FieldId *string `json:"field_id,omitempty"` // 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取

	FieldValue *string `json:"field_value,omitempty"` // 字段值

	FieldValuePerson *User `json:"field_value_person,omitempty"` // 字段值，当字段为人员信息时有值
}

type MetricFieldInDetailsBuilder struct {
	fieldId     string // 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取
	fieldIdFlag bool

	fieldValue     string // 字段值
	fieldValueFlag bool

	fieldValuePerson     *User // 字段值，当字段为人员信息时有值
	fieldValuePersonFlag bool
}

func NewMetricFieldInDetailsBuilder() *MetricFieldInDetailsBuilder {
	builder := &MetricFieldInDetailsBuilder{}
	return builder
}

// 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取
//
// 示例值：7296082067266207764
func (builder *MetricFieldInDetailsBuilder) FieldId(fieldId string) *MetricFieldInDetailsBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 字段值
//
// 示例值：90
func (builder *MetricFieldInDetailsBuilder) FieldValue(fieldValue string) *MetricFieldInDetailsBuilder {
	builder.fieldValue = fieldValue
	builder.fieldValueFlag = true
	return builder
}

// 字段值，当字段为人员信息时有值
//
// 示例值：
func (builder *MetricFieldInDetailsBuilder) FieldValuePerson(fieldValuePerson *User) *MetricFieldInDetailsBuilder {
	builder.fieldValuePerson = fieldValuePerson
	builder.fieldValuePersonFlag = true
	return builder
}

func (builder *MetricFieldInDetailsBuilder) Build() *MetricFieldInDetails {
	req := &MetricFieldInDetails{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.fieldValueFlag {
		req.FieldValue = &builder.fieldValue

	}
	if builder.fieldValuePersonFlag {
		req.FieldValuePerson = builder.fieldValuePerson
	}
	return req
}

type MetricFieldInLibrary struct {
	FieldId *string `json:"field_id,omitempty"` // 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取

	InputSetting *string `json:"input_setting,omitempty"` // 字段填写方式设置

	FieldValue *string `json:"field_value,omitempty"` // 字段值

	FieldValuePerson *User `json:"field_value_person,omitempty"` // 字段值，当字段为人员信息时有值
}

type MetricFieldInLibraryBuilder struct {
	fieldId     string // 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取
	fieldIdFlag bool

	inputSetting     string // 字段填写方式设置
	inputSettingFlag bool

	fieldValue     string // 字段值
	fieldValueFlag bool

	fieldValuePerson     *User // 字段值，当字段为人员信息时有值
	fieldValuePersonFlag bool
}

func NewMetricFieldInLibraryBuilder() *MetricFieldInLibraryBuilder {
	builder := &MetricFieldInLibraryBuilder{}
	return builder
}

// 指标字段 ID。 系统预置的指标字段 ID 分别为：指标 1；权重 2；指标单位 3；目标值 4；完成值 5；完成说明 7。更多指标字段详情可通过【获取指标字段详情】接口获取
//
// 示例值：7296701873237786643
func (builder *MetricFieldInLibraryBuilder) FieldId(fieldId string) *MetricFieldInLibraryBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 字段填写方式设置
//
// 示例值：admin
func (builder *MetricFieldInLibraryBuilder) InputSetting(inputSetting string) *MetricFieldInLibraryBuilder {
	builder.inputSetting = inputSetting
	builder.inputSettingFlag = true
	return builder
}

// 字段值
//
// 示例值：90
func (builder *MetricFieldInLibraryBuilder) FieldValue(fieldValue string) *MetricFieldInLibraryBuilder {
	builder.fieldValue = fieldValue
	builder.fieldValueFlag = true
	return builder
}

// 字段值，当字段为人员信息时有值
//
// 示例值：
func (builder *MetricFieldInLibraryBuilder) FieldValuePerson(fieldValuePerson *User) *MetricFieldInLibraryBuilder {
	builder.fieldValuePerson = fieldValuePerson
	builder.fieldValuePersonFlag = true
	return builder
}

func (builder *MetricFieldInLibraryBuilder) Build() *MetricFieldInLibrary {
	req := &MetricFieldInLibrary{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.inputSettingFlag {
		req.InputSetting = &builder.inputSetting

	}
	if builder.fieldValueFlag {
		req.FieldValue = &builder.fieldValue

	}
	if builder.fieldValuePersonFlag {
		req.FieldValuePerson = builder.fieldValuePerson
	}
	return req
}

type MetricFieldInTemplate struct {
	Id *string `json:"id,omitempty"` // 指标字段 ID

	InputSetting *string `json:"input_setting,omitempty"` // 字段填写方式设置

	FiledValue *string `json:"filed_value,omitempty"` // 字段值

	FieldValuePerson *User `json:"field_value_person,omitempty"` // 字段值，当字段为人员信息的时候有值
}

type MetricFieldInTemplateBuilder struct {
	id     string // 指标字段 ID
	idFlag bool

	inputSetting     string // 字段填写方式设置
	inputSettingFlag bool

	filedValue     string // 字段值
	filedValueFlag bool

	fieldValuePerson     *User // 字段值，当字段为人员信息的时候有值
	fieldValuePersonFlag bool
}

func NewMetricFieldInTemplateBuilder() *MetricFieldInTemplateBuilder {
	builder := &MetricFieldInTemplateBuilder{}
	return builder
}

// 指标字段 ID
//
// 示例值：7272581996315099155
func (builder *MetricFieldInTemplateBuilder) Id(id string) *MetricFieldInTemplateBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 字段填写方式设置
//
// 示例值：
func (builder *MetricFieldInTemplateBuilder) InputSetting(inputSetting string) *MetricFieldInTemplateBuilder {
	builder.inputSetting = inputSetting
	builder.inputSettingFlag = true
	return builder
}

// 字段值
//
// 示例值：100
func (builder *MetricFieldInTemplateBuilder) FiledValue(filedValue string) *MetricFieldInTemplateBuilder {
	builder.filedValue = filedValue
	builder.filedValueFlag = true
	return builder
}

// 字段值，当字段为人员信息的时候有值
//
// 示例值：
func (builder *MetricFieldInTemplateBuilder) FieldValuePerson(fieldValuePerson *User) *MetricFieldInTemplateBuilder {
	builder.fieldValuePerson = fieldValuePerson
	builder.fieldValuePersonFlag = true
	return builder
}

func (builder *MetricFieldInTemplateBuilder) Build() *MetricFieldInTemplate {
	req := &MetricFieldInTemplate{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.inputSettingFlag {
		req.InputSetting = &builder.inputSetting

	}
	if builder.filedValueFlag {
		req.FiledValue = &builder.filedValue

	}
	if builder.fieldValuePersonFlag {
		req.FieldValuePerson = builder.fieldValuePerson
	}
	return req
}

type MetricGroup struct {
	GroupId *string `json:"group_id,omitempty"` // 人群分组ID

	Name *string `json:"name,omitempty"` // 名称
}

type MetricGroupBuilder struct {
	groupId     string // 人群分组ID
	groupIdFlag bool

	name     string // 名称
	nameFlag bool
}

func NewMetricGroupBuilder() *MetricGroupBuilder {
	builder := &MetricGroupBuilder{}
	return builder
}

// 人群分组ID
//
// 示例值：7296466589195436051
func (builder *MetricGroupBuilder) GroupId(groupId string) *MetricGroupBuilder {
	builder.groupId = groupId
	builder.groupIdFlag = true
	return builder
}

// 名称
//
// 示例值：分组1
func (builder *MetricGroupBuilder) Name(name string) *MetricGroupBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *MetricGroupBuilder) Build() *MetricGroup {
	req := &MetricGroup{}
	if builder.groupIdFlag {
		req.GroupId = &builder.groupId

	}
	if builder.nameFlag {
		req.Name = &builder.name

	}
	return req
}

type MetricInLibrary struct {
	MetricId *string `json:"metric_id,omitempty"` // 指标 ID

	Name *string `json:"name,omitempty"` // 指标名称

	TypeId *string `json:"type_id,omitempty"` // 指标类型 ID

	Tags []*MetricTag `json:"tags,omitempty"` // 所属的标签

	Fields []*MetricFieldInLibrary `json:"fields,omitempty"` // 指标字段信息

	ScoringSettingType *string `json:"scoring_setting_type,omitempty"` // 评分设置类型

	ScoringFormula *Formula `json:"scoring_formula,omitempty"` // 评分公式

	DataSourceInputters []*User `json:"data_source_inputters,omitempty"` // 数据源录入人 ID

	RangeOfAvailability *string `json:"range_of_availability,omitempty"` // 可用范围

	IsActive *bool `json:"is_active,omitempty"` // 状态是否为启用
}

type MetricInLibraryBuilder struct {
	metricId     string // 指标 ID
	metricIdFlag bool

	name     string // 指标名称
	nameFlag bool

	typeId     string // 指标类型 ID
	typeIdFlag bool

	tags     []*MetricTag // 所属的标签
	tagsFlag bool

	fields     []*MetricFieldInLibrary // 指标字段信息
	fieldsFlag bool

	scoringSettingType     string // 评分设置类型
	scoringSettingTypeFlag bool

	scoringFormula     *Formula // 评分公式
	scoringFormulaFlag bool

	dataSourceInputters     []*User // 数据源录入人 ID
	dataSourceInputtersFlag bool

	rangeOfAvailability     string // 可用范围
	rangeOfAvailabilityFlag bool

	isActive     bool // 状态是否为启用
	isActiveFlag bool
}

func NewMetricInLibraryBuilder() *MetricInLibraryBuilder {
	builder := &MetricInLibraryBuilder{}
	return builder
}

// 指标 ID
//
// 示例值：7272581996315099155
func (builder *MetricInLibraryBuilder) MetricId(metricId string) *MetricInLibraryBuilder {
	builder.metricId = metricId
	builder.metricIdFlag = true
	return builder
}

// 指标名称
//
// 示例值：销售额
func (builder *MetricInLibraryBuilder) Name(name string) *MetricInLibraryBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 指标类型 ID
//
// 示例值：7272578300650717203
func (builder *MetricInLibraryBuilder) TypeId(typeId string) *MetricInLibraryBuilder {
	builder.typeId = typeId
	builder.typeIdFlag = true
	return builder
}

// 所属的标签
//
// 示例值：
func (builder *MetricInLibraryBuilder) Tags(tags []*MetricTag) *MetricInLibraryBuilder {
	builder.tags = tags
	builder.tagsFlag = true
	return builder
}

// 指标字段信息
//
// 示例值：
func (builder *MetricInLibraryBuilder) Fields(fields []*MetricFieldInLibrary) *MetricInLibraryBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

// 评分设置类型
//
// 示例值：
func (builder *MetricInLibraryBuilder) ScoringSettingType(scoringSettingType string) *MetricInLibraryBuilder {
	builder.scoringSettingType = scoringSettingType
	builder.scoringSettingTypeFlag = true
	return builder
}

// 评分公式
//
// 示例值：
func (builder *MetricInLibraryBuilder) ScoringFormula(scoringFormula *Formula) *MetricInLibraryBuilder {
	builder.scoringFormula = scoringFormula
	builder.scoringFormulaFlag = true
	return builder
}

// 数据源录入人 ID
//
// 示例值：
func (builder *MetricInLibraryBuilder) DataSourceInputters(dataSourceInputters []*User) *MetricInLibraryBuilder {
	builder.dataSourceInputters = dataSourceInputters
	builder.dataSourceInputtersFlag = true
	return builder
}

// 可用范围
//
// 示例值：
func (builder *MetricInLibraryBuilder) RangeOfAvailability(rangeOfAvailability string) *MetricInLibraryBuilder {
	builder.rangeOfAvailability = rangeOfAvailability
	builder.rangeOfAvailabilityFlag = true
	return builder
}

// 状态是否为启用
//
// 示例值：
func (builder *MetricInLibraryBuilder) IsActive(isActive bool) *MetricInLibraryBuilder {
	builder.isActive = isActive
	builder.isActiveFlag = true
	return builder
}

func (builder *MetricInLibraryBuilder) Build() *MetricInLibrary {
	req := &MetricInLibrary{}
	if builder.metricIdFlag {
		req.MetricId = &builder.metricId

	}
	if builder.nameFlag {
		req.Name = &builder.name

	}
	if builder.typeIdFlag {
		req.TypeId = &builder.typeId

	}
	if builder.tagsFlag {
		req.Tags = builder.tags
	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	if builder.scoringSettingTypeFlag {
		req.ScoringSettingType = &builder.scoringSettingType

	}
	if builder.scoringFormulaFlag {
		req.ScoringFormula = builder.scoringFormula
	}
	if builder.dataSourceInputtersFlag {
		req.DataSourceInputters = builder.dataSourceInputters
	}
	if builder.rangeOfAvailabilityFlag {
		req.RangeOfAvailability = &builder.rangeOfAvailability

	}
	if builder.isActiveFlag {
		req.IsActive = &builder.isActive

	}
	return req
}

type MetricInTemplate struct {
	GroupId *string `json:"group_id,omitempty"` // 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空

	MetricId *string `json:"metric_id,omitempty"` // 指标 ID（备注：指标的统一标识 ID。如果模板存在分组，需要+分组 ID 才能标识到指标模板唯一的指标）

	Name *string `json:"name,omitempty"` // 指标名称，指标在该模板中的名称

	TypeId *string `json:"type_id,omitempty"` // 指标类型 ID

	Fields []*MetricFieldInTemplate `json:"fields,omitempty"` // 指标字段信息

	IsFromLibrary *bool `json:"is_from_library,omitempty"` // 指标是否引自指标库

	ScoringSettingType *string `json:"scoring_setting_type,omitempty"` // 评分设置类型

	DataSourceInputters []*User `json:"data_source_inputters,omitempty"` // 数据源录入人

	MetricDimensionId *string `json:"metric_dimension_id,omitempty"` // 所属维度ID

	ReviewRuleConfig *MetricReviewRuleConfig `json:"review_rule_config,omitempty"` // 指标评估规则配置
}

type MetricInTemplateBuilder struct {
	groupId     string // 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空
	groupIdFlag bool

	metricId     string // 指标 ID（备注：指标的统一标识 ID。如果模板存在分组，需要+分组 ID 才能标识到指标模板唯一的指标）
	metricIdFlag bool

	name     string // 指标名称，指标在该模板中的名称
	nameFlag bool

	typeId     string // 指标类型 ID
	typeIdFlag bool

	fields     []*MetricFieldInTemplate // 指标字段信息
	fieldsFlag bool

	isFromLibrary     bool // 指标是否引自指标库
	isFromLibraryFlag bool

	scoringSettingType     string // 评分设置类型
	scoringSettingTypeFlag bool

	dataSourceInputters     []*User // 数据源录入人
	dataSourceInputtersFlag bool

	metricDimensionId     string // 所属维度ID
	metricDimensionIdFlag bool

	reviewRuleConfig     *MetricReviewRuleConfig // 指标评估规则配置
	reviewRuleConfigFlag bool
}

func NewMetricInTemplateBuilder() *MetricInTemplateBuilder {
	builder := &MetricInTemplateBuilder{}
	return builder
}

// 所属人群分组 ID，模板分人群设置指标时，指标维度按照人群分组；未分人群设置时该值为空
//
// 示例值：7272581996315099155
func (builder *MetricInTemplateBuilder) GroupId(groupId string) *MetricInTemplateBuilder {
	builder.groupId = groupId
	builder.groupIdFlag = true
	return builder
}

// 指标 ID（备注：指标的统一标识 ID。如果模板存在分组，需要+分组 ID 才能标识到指标模板唯一的指标）
//
// 示例值：7272581996315099155
func (builder *MetricInTemplateBuilder) MetricId(metricId string) *MetricInTemplateBuilder {
	builder.metricId = metricId
	builder.metricIdFlag = true
	return builder
}

// 指标名称，指标在该模板中的名称
//
// 示例值：销售额
func (builder *MetricInTemplateBuilder) Name(name string) *MetricInTemplateBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 指标类型 ID
//
// 示例值：7272581996315099155
func (builder *MetricInTemplateBuilder) TypeId(typeId string) *MetricInTemplateBuilder {
	builder.typeId = typeId
	builder.typeIdFlag = true
	return builder
}

// 指标字段信息
//
// 示例值：
func (builder *MetricInTemplateBuilder) Fields(fields []*MetricFieldInTemplate) *MetricInTemplateBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

// 指标是否引自指标库
//
// 示例值：
func (builder *MetricInTemplateBuilder) IsFromLibrary(isFromLibrary bool) *MetricInTemplateBuilder {
	builder.isFromLibrary = isFromLibrary
	builder.isFromLibraryFlag = true
	return builder
}

// 评分设置类型
//
// 示例值：
func (builder *MetricInTemplateBuilder) ScoringSettingType(scoringSettingType string) *MetricInTemplateBuilder {
	builder.scoringSettingType = scoringSettingType
	builder.scoringSettingTypeFlag = true
	return builder
}

// 数据源录入人
//
// 示例值：
func (builder *MetricInTemplateBuilder) DataSourceInputters(dataSourceInputters []*User) *MetricInTemplateBuilder {
	builder.dataSourceInputters = dataSourceInputters
	builder.dataSourceInputtersFlag = true
	return builder
}

// 所属维度ID
//
// 示例值：7272581996315099155
func (builder *MetricInTemplateBuilder) MetricDimensionId(metricDimensionId string) *MetricInTemplateBuilder {
	builder.metricDimensionId = metricDimensionId
	builder.metricDimensionIdFlag = true
	return builder
}

// 指标评估规则配置
//
// 示例值：
func (builder *MetricInTemplateBuilder) ReviewRuleConfig(reviewRuleConfig *MetricReviewRuleConfig) *MetricInTemplateBuilder {
	builder.reviewRuleConfig = reviewRuleConfig
	builder.reviewRuleConfigFlag = true
	return builder
}

func (builder *MetricInTemplateBuilder) Build() *MetricInTemplate {
	req := &MetricInTemplate{}
	if builder.groupIdFlag {
		req.GroupId = &builder.groupId

	}
	if builder.metricIdFlag {
		req.MetricId = &builder.metricId

	}
	if builder.nameFlag {
		req.Name = &builder.name

	}
	if builder.typeIdFlag {
		req.TypeId = &builder.typeId

	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	if builder.isFromLibraryFlag {
		req.IsFromLibrary = &builder.isFromLibrary

	}
	if builder.scoringSettingTypeFlag {
		req.ScoringSettingType = &builder.scoringSettingType

	}
	if builder.dataSourceInputtersFlag {
		req.DataSourceInputters = builder.dataSourceInputters
	}
	if builder.metricDimensionIdFlag {
		req.MetricDimensionId = &builder.metricDimensionId

	}
	if builder.reviewRuleConfigFlag {
		req.ReviewRuleConfig = builder.reviewRuleConfig
	}
	return req
}

type MetricReviewRuleConfig struct {
	Max *string `json:"max,omitempty"` // 上限

	Min *string `json:"min,omitempty"` // 下限
}

type MetricReviewRuleConfigBuilder struct {
	max     string // 上限
	maxFlag bool

	min     string // 下限
	minFlag bool
}

func NewMetricReviewRuleConfigBuilder() *MetricReviewRuleConfigBuilder {
	builder := &MetricReviewRuleConfigBuilder{}
	return builder
}

// 上限
//
// 示例值：10
func (builder *MetricReviewRuleConfigBuilder) Max(max string) *MetricReviewRuleConfigBuilder {
	builder.max = max
	builder.maxFlag = true
	return builder
}

// 下限
//
// 示例值：0
func (builder *MetricReviewRuleConfigBuilder) Min(min string) *MetricReviewRuleConfigBuilder {
	builder.min = min
	builder.minFlag = true
	return builder
}

func (builder *MetricReviewRuleConfigBuilder) Build() *MetricReviewRuleConfig {
	req := &MetricReviewRuleConfig{}
	if builder.maxFlag {
		req.Max = &builder.max

	}
	if builder.minFlag {
		req.Min = &builder.min

	}
	return req
}

type MetricTag struct {
	TagId *string `json:"tag_id,omitempty"` // 标签 ID

	TagName *I18n `json:"tag_name,omitempty"` // 标签名称

	Index *int `json:"index,omitempty"` // 标签顺序

	CreateTime *string `json:"create_time,omitempty"` // 创建时间戳（单位：毫秒）

	UpdateTime *string `json:"update_time,omitempty"` // 更新时间戳（单位：毫秒）
}

type MetricTagBuilder struct {
	tagId     string // 标签 ID
	tagIdFlag bool

	tagName     *I18n // 标签名称
	tagNameFlag bool

	index     int // 标签顺序
	indexFlag bool

	createTime     string // 创建时间戳（单位：毫秒）
	createTimeFlag bool

	updateTime     string // 更新时间戳（单位：毫秒）
	updateTimeFlag bool
}

func NewMetricTagBuilder() *MetricTagBuilder {
	builder := &MetricTagBuilder{}
	return builder
}

// 标签 ID
//
// 示例值：7302271694582841364
func (builder *MetricTagBuilder) TagId(tagId string) *MetricTagBuilder {
	builder.tagId = tagId
	builder.tagIdFlag = true
	return builder
}

// 标签名称
//
// 示例值：
func (builder *MetricTagBuilder) TagName(tagName *I18n) *MetricTagBuilder {
	builder.tagName = tagName
	builder.tagNameFlag = true
	return builder
}

// 标签顺序
//
// 示例值：100
func (builder *MetricTagBuilder) Index(index int) *MetricTagBuilder {
	builder.index = index
	builder.indexFlag = true
	return builder
}

// 创建时间戳（单位：毫秒）
//
// 示例值：1678870702466
func (builder *MetricTagBuilder) CreateTime(createTime string) *MetricTagBuilder {
	builder.createTime = createTime
	builder.createTimeFlag = true
	return builder
}

// 更新时间戳（单位：毫秒）
//
// 示例值：1605529625257
func (builder *MetricTagBuilder) UpdateTime(updateTime string) *MetricTagBuilder {
	builder.updateTime = updateTime
	builder.updateTimeFlag = true
	return builder
}

func (builder *MetricTagBuilder) Build() *MetricTag {
	req := &MetricTag{}
	if builder.tagIdFlag {
		req.TagId = &builder.tagId

	}
	if builder.tagNameFlag {
		req.TagName = builder.tagName
	}
	if builder.indexFlag {
		req.Index = &builder.index

	}
	if builder.createTimeFlag {
		req.CreateTime = &builder.createTime

	}
	if builder.updateTimeFlag {
		req.UpdateTime = &builder.updateTime

	}
	return req
}

type MetricTemplate struct {
	Id *string `json:"id,omitempty"` // 指标模板ID

	Name *I18n `json:"name,omitempty"` // 模版名称

	Description *I18n `json:"description,omitempty"` // 模板描述

	Status *string `json:"status,omitempty"` // 状态

	IsSetByGroup *bool `json:"is_set_by_group,omitempty"` // 是否分人群设置指标

	TotalMetricScoreMethod *string `json:"total_metric_score_method,omitempty"` // 指标总分计算方式

	MetricWeightMethod *string `json:"metric_weight_method,omitempty"` // 指标权重计算方式

	MetricDimensions []*MetricDimension `json:"metric_dimensions,omitempty"` // 指标维度列表

	Metrics []*MetricInTemplate `json:"metrics,omitempty"` // 指标列表

	Groups []*MetricGroup `json:"groups,omitempty"` // 人群分组
}

type MetricTemplateBuilder struct {
	id     string // 指标模板ID
	idFlag bool

	name     *I18n // 模版名称
	nameFlag bool

	description     *I18n // 模板描述
	descriptionFlag bool

	status     string // 状态
	statusFlag bool

	isSetByGroup     bool // 是否分人群设置指标
	isSetByGroupFlag bool

	totalMetricScoreMethod     string // 指标总分计算方式
	totalMetricScoreMethodFlag bool

	metricWeightMethod     string // 指标权重计算方式
	metricWeightMethodFlag bool

	metricDimensions     []*MetricDimension // 指标维度列表
	metricDimensionsFlag bool

	metrics     []*MetricInTemplate // 指标列表
	metricsFlag bool

	groups     []*MetricGroup // 人群分组
	groupsFlag bool
}

func NewMetricTemplateBuilder() *MetricTemplateBuilder {
	builder := &MetricTemplateBuilder{}
	return builder
}

// 指标模板ID
//
// 示例值：7296488199415660563
func (builder *MetricTemplateBuilder) Id(id string) *MetricTemplateBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 模版名称
//
// 示例值：
func (builder *MetricTemplateBuilder) Name(name *I18n) *MetricTemplateBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 模板描述
//
// 示例值：
func (builder *MetricTemplateBuilder) Description(description *I18n) *MetricTemplateBuilder {
	builder.description = description
	builder.descriptionFlag = true
	return builder
}

// 状态
//
// 示例值：to_be_configured
func (builder *MetricTemplateBuilder) Status(status string) *MetricTemplateBuilder {
	builder.status = status
	builder.statusFlag = true
	return builder
}

// 是否分人群设置指标
//
// 示例值：
func (builder *MetricTemplateBuilder) IsSetByGroup(isSetByGroup bool) *MetricTemplateBuilder {
	builder.isSetByGroup = isSetByGroup
	builder.isSetByGroupFlag = true
	return builder
}

// 指标总分计算方式
//
// 示例值：
func (builder *MetricTemplateBuilder) TotalMetricScoreMethod(totalMetricScoreMethod string) *MetricTemplateBuilder {
	builder.totalMetricScoreMethod = totalMetricScoreMethod
	builder.totalMetricScoreMethodFlag = true
	return builder
}

// 指标权重计算方式
//
// 示例值：
func (builder *MetricTemplateBuilder) MetricWeightMethod(metricWeightMethod string) *MetricTemplateBuilder {
	builder.metricWeightMethod = metricWeightMethod
	builder.metricWeightMethodFlag = true
	return builder
}

// 指标维度列表
//
// 示例值：
func (builder *MetricTemplateBuilder) MetricDimensions(metricDimensions []*MetricDimension) *MetricTemplateBuilder {
	builder.metricDimensions = metricDimensions
	builder.metricDimensionsFlag = true
	return builder
}

// 指标列表
//
// 示例值：
func (builder *MetricTemplateBuilder) Metrics(metrics []*MetricInTemplate) *MetricTemplateBuilder {
	builder.metrics = metrics
	builder.metricsFlag = true
	return builder
}

// 人群分组
//
// 示例值：
func (builder *MetricTemplateBuilder) Groups(groups []*MetricGroup) *MetricTemplateBuilder {
	builder.groups = groups
	builder.groupsFlag = true
	return builder
}

func (builder *MetricTemplateBuilder) Build() *MetricTemplate {
	req := &MetricTemplate{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.descriptionFlag {
		req.Description = builder.description
	}
	if builder.statusFlag {
		req.Status = &builder.status

	}
	if builder.isSetByGroupFlag {
		req.IsSetByGroup = &builder.isSetByGroup

	}
	if builder.totalMetricScoreMethodFlag {
		req.TotalMetricScoreMethod = &builder.totalMetricScoreMethod

	}
	if builder.metricWeightMethodFlag {
		req.MetricWeightMethod = &builder.metricWeightMethod

	}
	if builder.metricDimensionsFlag {
		req.MetricDimensions = builder.metricDimensions
	}
	if builder.metricsFlag {
		req.Metrics = builder.metrics
	}
	if builder.groupsFlag {
		req.Groups = builder.groups
	}
	return req
}

type ObjectiveData struct {
	ObjectiveId *string `json:"objective_id,omitempty"` // 目标 ID

	Score *string `json:"score,omitempty"` // 目标的评分

	Text *string `json:"text,omitempty"` // 评估人在该填写项填写的文本

	KeyresultData []*KeyresultData `json:"keyresult_data,omitempty"` // 评估的关键举措，当评估内容是对关键举措（KR）评估时有值

	Richtext *string `json:"richtext,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
}

type ObjectiveDataBuilder struct {
	objectiveId     string // 目标 ID
	objectiveIdFlag bool

	score     string // 目标的评分
	scoreFlag bool

	text     string // 评估人在该填写项填写的文本
	textFlag bool

	keyresultData     []*KeyresultData // 评估的关键举措，当评估内容是对关键举措（KR）评估时有值
	keyresultDataFlag bool

	richtext     string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	richtextFlag bool
}

func NewObjectiveDataBuilder() *ObjectiveDataBuilder {
	builder := &ObjectiveDataBuilder{}
	return builder
}

// 目标 ID
//
// 示例值：7343513161666707459
func (builder *ObjectiveDataBuilder) ObjectiveId(objectiveId string) *ObjectiveDataBuilder {
	builder.objectiveId = objectiveId
	builder.objectiveIdFlag = true
	return builder
}

// 目标的评分
//
// 示例值：1.1
func (builder *ObjectiveDataBuilder) Score(score string) *ObjectiveDataBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// 评估人在该填写项填写的文本
//
// 示例值：qwertyu
func (builder *ObjectiveDataBuilder) Text(text string) *ObjectiveDataBuilder {
	builder.text = text
	builder.textFlag = true
	return builder
}

// 评估的关键举措，当评估内容是对关键举措（KR）评估时有值
//
// 示例值：
func (builder *ObjectiveDataBuilder) KeyresultData(keyresultData []*KeyresultData) *ObjectiveDataBuilder {
	builder.keyresultData = keyresultData
	builder.keyresultDataFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：{"ops":[{"name":"insert","text":"qwerty","attributes":{"bold":true}}]}
func (builder *ObjectiveDataBuilder) Richtext(richtext string) *ObjectiveDataBuilder {
	builder.richtext = richtext
	builder.richtextFlag = true
	return builder
}

func (builder *ObjectiveDataBuilder) Build() *ObjectiveData {
	req := &ObjectiveData{}
	if builder.objectiveIdFlag {
		req.ObjectiveId = &builder.objectiveId

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.textFlag {
		req.Text = &builder.text

	}
	if builder.keyresultDataFlag {
		req.KeyresultData = builder.keyresultData
	}
	if builder.richtextFlag {
		req.Richtext = &builder.richtext

	}
	return req
}

type Okr struct {
	Id *string `json:"id,omitempty"` // OKR ID

	PeriodId *string `json:"period_id,omitempty"` // OKR周期 ID

	CreateDate *string `json:"create_date,omitempty"` // 快照数据记录日期, 2006-01-02

	Name *I18n `json:"name,omitempty"` // OKR周期名称

	Objectives []*OkrObjective `json:"objectives,omitempty"` // Objective列表
}

type OkrBuilder struct {
	id     string // OKR ID
	idFlag bool

	periodId     string // OKR周期 ID
	periodIdFlag bool

	createDate     string // 快照数据记录日期, 2006-01-02
	createDateFlag bool

	name     *I18n // OKR周期名称
	nameFlag bool

	objectives     []*OkrObjective // Objective列表
	objectivesFlag bool
}

func NewOkrBuilder() *OkrBuilder {
	builder := &OkrBuilder{}
	return builder
}

// OKR ID
//
// 示例值：7072252816005349396
func (builder *OkrBuilder) Id(id string) *OkrBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// OKR周期 ID
//
// 示例值：7067724095781142548
func (builder *OkrBuilder) PeriodId(periodId string) *OkrBuilder {
	builder.periodId = periodId
	builder.periodIdFlag = true
	return builder
}

// 快照数据记录日期, 2006-01-02
//
// 示例值：2022-12-01
func (builder *OkrBuilder) CreateDate(createDate string) *OkrBuilder {
	builder.createDate = createDate
	builder.createDateFlag = true
	return builder
}

// OKR周期名称
//
// 示例值：
func (builder *OkrBuilder) Name(name *I18n) *OkrBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// Objective列表
//
// 示例值：
func (builder *OkrBuilder) Objectives(objectives []*OkrObjective) *OkrBuilder {
	builder.objectives = objectives
	builder.objectivesFlag = true
	return builder
}

func (builder *OkrBuilder) Build() *Okr {
	req := &Okr{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.periodIdFlag {
		req.PeriodId = &builder.periodId

	}
	if builder.createDateFlag {
		req.CreateDate = &builder.createDate

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.objectivesFlag {
		req.Objectives = builder.objectives
	}
	return req
}

type OkrObjective struct {
	Id *string `json:"id,omitempty"` // Objective ID

	Content *string `json:"content,omitempty"` // Objective 内容

	Score *int `json:"score,omitempty"` // Objective 分数（0 - 100）

	Weight *float64 `json:"weight,omitempty"` // Objective的权重（0 - 100）

	ProgressRate *OkrProgressRate `json:"progress_rate,omitempty"` // Objective进度

	KeyResults []*OkrObjectiveKr `json:"key_results,omitempty"` // Objective KeyResult 列表

	CategoryId *string `json:"category_id,omitempty"` // OKR 分类 ID
}

type OkrObjectiveBuilder struct {
	id     string // Objective ID
	idFlag bool

	content     string // Objective 内容
	contentFlag bool

	score     int // Objective 分数（0 - 100）
	scoreFlag bool

	weight     float64 // Objective的权重（0 - 100）
	weightFlag bool

	progressRate     *OkrProgressRate // Objective进度
	progressRateFlag bool

	keyResults     []*OkrObjectiveKr // Objective KeyResult 列表
	keyResultsFlag bool

	categoryId     string // OKR 分类 ID
	categoryIdFlag bool
}

func NewOkrObjectiveBuilder() *OkrObjectiveBuilder {
	builder := &OkrObjectiveBuilder{}
	return builder
}

// Objective ID
//
// 示例值：7073360513731690515
func (builder *OkrObjectiveBuilder) Id(id string) *OkrObjectiveBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// Objective 内容
//
// 示例值：需求@刘三
func (builder *OkrObjectiveBuilder) Content(content string) *OkrObjectiveBuilder {
	builder.content = content
	builder.contentFlag = true
	return builder
}

// Objective 分数（0 - 100）
//
// 示例值：100
func (builder *OkrObjectiveBuilder) Score(score int) *OkrObjectiveBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// Objective的权重（0 - 100）
//
// 示例值：40
func (builder *OkrObjectiveBuilder) Weight(weight float64) *OkrObjectiveBuilder {
	builder.weight = weight
	builder.weightFlag = true
	return builder
}

// Objective进度
//
// 示例值：
func (builder *OkrObjectiveBuilder) ProgressRate(progressRate *OkrProgressRate) *OkrObjectiveBuilder {
	builder.progressRate = progressRate
	builder.progressRateFlag = true
	return builder
}

// Objective KeyResult 列表
//
// 示例值：
func (builder *OkrObjectiveBuilder) KeyResults(keyResults []*OkrObjectiveKr) *OkrObjectiveBuilder {
	builder.keyResults = keyResults
	builder.keyResultsFlag = true
	return builder
}

// OKR 分类 ID
//
// 示例值：7436592808418344995
func (builder *OkrObjectiveBuilder) CategoryId(categoryId string) *OkrObjectiveBuilder {
	builder.categoryId = categoryId
	builder.categoryIdFlag = true
	return builder
}

func (builder *OkrObjectiveBuilder) Build() *OkrObjective {
	req := &OkrObjective{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.contentFlag {
		req.Content = &builder.content

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.weightFlag {
		req.Weight = &builder.weight

	}
	if builder.progressRateFlag {
		req.ProgressRate = builder.progressRate
	}
	if builder.keyResultsFlag {
		req.KeyResults = builder.keyResults
	}
	if builder.categoryIdFlag {
		req.CategoryId = &builder.categoryId

	}
	return req
}

type OkrObjectiveKr struct {
	Id *string `json:"id,omitempty"` // Key Result ID

	Content *string `json:"content,omitempty"` // KeyResult 内容

	Score *int `json:"score,omitempty"` // KeyResult打分（0 - 100）

	Weight *float64 `json:"weight,omitempty"` // KeyResult的权重（0 - 100）

	ProgressRate *OkrProgressRate `json:"progress_rate,omitempty"` // KeyResult进度
}

type OkrObjectiveKrBuilder struct {
	id     string // Key Result ID
	idFlag bool

	content     string // KeyResult 内容
	contentFlag bool

	score     int // KeyResult打分（0 - 100）
	scoreFlag bool

	weight     float64 // KeyResult的权重（0 - 100）
	weightFlag bool

	progressRate     *OkrProgressRate // KeyResult进度
	progressRateFlag bool
}

func NewOkrObjectiveKrBuilder() *OkrObjectiveKrBuilder {
	builder := &OkrObjectiveKrBuilder{}
	return builder
}

// Key Result ID
//
// 示例值：7073360471990140948
func (builder *OkrObjectiveKrBuilder) Id(id string) *OkrObjectiveKrBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// KeyResult 内容
//
// 示例值：1111@张三9
func (builder *OkrObjectiveKrBuilder) Content(content string) *OkrObjectiveKrBuilder {
	builder.content = content
	builder.contentFlag = true
	return builder
}

// KeyResult打分（0 - 100）
//
// 示例值：100
func (builder *OkrObjectiveKrBuilder) Score(score int) *OkrObjectiveKrBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// KeyResult的权重（0 - 100）
//
// 示例值：50
func (builder *OkrObjectiveKrBuilder) Weight(weight float64) *OkrObjectiveKrBuilder {
	builder.weight = weight
	builder.weightFlag = true
	return builder
}

// KeyResult进度
//
// 示例值：
func (builder *OkrObjectiveKrBuilder) ProgressRate(progressRate *OkrProgressRate) *OkrObjectiveKrBuilder {
	builder.progressRate = progressRate
	builder.progressRateFlag = true
	return builder
}

func (builder *OkrObjectiveKrBuilder) Build() *OkrObjectiveKr {
	req := &OkrObjectiveKr{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.contentFlag {
		req.Content = &builder.content

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.weightFlag {
		req.Weight = &builder.weight

	}
	if builder.progressRateFlag {
		req.ProgressRate = builder.progressRate
	}
	return req
}

type OkrProgressRate struct {
	Percent *int `json:"percent,omitempty"` // 进度百分比 >= 0

	Status *string `json:"status,omitempty"` // 进度状态:"-1" 暂无"0" 正常"1" 风险"2" 延期
}

type OkrProgressRateBuilder struct {
	percent     int // 进度百分比 >= 0
	percentFlag bool

	status     string // 进度状态:"-1" 暂无"0" 正常"1" 风险"2" 延期
	statusFlag bool
}

func NewOkrProgressRateBuilder() *OkrProgressRateBuilder {
	builder := &OkrProgressRateBuilder{}
	return builder
}

// 进度百分比 >= 0
//
// 示例值：30
func (builder *OkrProgressRateBuilder) Percent(percent int) *OkrProgressRateBuilder {
	builder.percent = percent
	builder.percentFlag = true
	return builder
}

// 进度状态:"-1" 暂无"0" 正常"1" 风险"2" 延期
//
// 示例值：0
func (builder *OkrProgressRateBuilder) Status(status string) *OkrProgressRateBuilder {
	builder.status = status
	builder.statusFlag = true
	return builder
}

func (builder *OkrProgressRateBuilder) Build() *OkrProgressRate {
	req := &OkrProgressRate{}
	if builder.percentFlag {
		req.Percent = &builder.percent

	}
	if builder.statusFlag {
		req.Status = &builder.status

	}
	return req
}

type OpenResult struct {
	UserId *UserId `json:"user_id,omitempty"` // 被评估人 ID

	SemesterId *string `json:"semester_id,omitempty"` // 绩效评估周期 ID

	ActivityId *string `json:"activity_id,omitempty"` // 绩效评估项目 ID

	OpenTime *string `json:"open_time,omitempty"` // 结果开通时间，毫秒时间戳
}

type OpenResultBuilder struct {
	userId     *UserId // 被评估人 ID
	userIdFlag bool

	semesterId     string // 绩效评估周期 ID
	semesterIdFlag bool

	activityId     string // 绩效评估项目 ID
	activityIdFlag bool

	openTime     string // 结果开通时间，毫秒时间戳
	openTimeFlag bool
}

func NewOpenResultBuilder() *OpenResultBuilder {
	builder := &OpenResultBuilder{}
	return builder
}

// 被评估人 ID
//
// 示例值：
func (builder *OpenResultBuilder) UserId(userId *UserId) *OpenResultBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 绩效评估周期 ID
//
// 示例值：7343576973861453844
func (builder *OpenResultBuilder) SemesterId(semesterId string) *OpenResultBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 绩效评估项目 ID
//
// 示例值：7343577163150393363
func (builder *OpenResultBuilder) ActivityId(activityId string) *OpenResultBuilder {
	builder.activityId = activityId
	builder.activityIdFlag = true
	return builder
}

// 结果开通时间，毫秒时间戳
//
// 示例值：1704038400000
func (builder *OpenResultBuilder) OpenTime(openTime string) *OpenResultBuilder {
	builder.openTime = openTime
	builder.openTimeFlag = true
	return builder
}

func (builder *OpenResultBuilder) Build() *OpenResult {
	req := &OpenResult{}
	if builder.userIdFlag {
		req.UserId = builder.userId
	}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId

	}
	if builder.activityIdFlag {
		req.ActivityId = &builder.activityId

	}
	if builder.openTimeFlag {
		req.OpenTime = &builder.openTime

	}
	return req
}

type Question struct {
	QuestionId *string `json:"question_id,omitempty"` // 填写题 ID

	Name *I18n `json:"name,omitempty"` // 填写题名称

	TagItems []*TagItem `json:"tag_items,omitempty"` // 标签列表
}

type QuestionBuilder struct {
	questionId     string // 填写题 ID
	questionIdFlag bool

	name     *I18n // 填写题名称
	nameFlag bool

	tagItems     []*TagItem // 标签列表
	tagItemsFlag bool
}

func NewQuestionBuilder() *QuestionBuilder {
	builder := &QuestionBuilder{}
	return builder
}

// 填写题 ID
//
// 示例值：7343513161666707459
func (builder *QuestionBuilder) QuestionId(questionId string) *QuestionBuilder {
	builder.questionId = questionId
	builder.questionIdFlag = true
	return builder
}

// 填写题名称
//
// 示例值：
func (builder *QuestionBuilder) Name(name *I18n) *QuestionBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 标签列表
//
// 示例值：
func (builder *QuestionBuilder) TagItems(tagItems []*TagItem) *QuestionBuilder {
	builder.tagItems = tagItems
	builder.tagItemsFlag = true
	return builder
}

func (builder *QuestionBuilder) Build() *Question {
	req := &Question{}
	if builder.questionIdFlag {
		req.QuestionId = &builder.questionId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.tagItemsFlag {
		req.TagItems = builder.tagItems
	}
	return req
}

type ReviewDataChange struct {
	UserId *UserId `json:"user_id,omitempty"` // 被更新的被评估人 ID

	SemesterId *string `json:"semester_id,omitempty"` // 被更新的绩效评估周期 ID

	ActivityId *string `json:"activity_id,omitempty"` // 被更新的绩效评估项目 ID

	StageChanges []*StageChange `json:"stage_changes,omitempty"` // 被更新的环节
}

type ReviewDataChangeBuilder struct {
	userId     *UserId // 被更新的被评估人 ID
	userIdFlag bool

	semesterId     string // 被更新的绩效评估周期 ID
	semesterIdFlag bool

	activityId     string // 被更新的绩效评估项目 ID
	activityIdFlag bool

	stageChanges     []*StageChange // 被更新的环节
	stageChangesFlag bool
}

func NewReviewDataChangeBuilder() *ReviewDataChangeBuilder {
	builder := &ReviewDataChangeBuilder{}
	return builder
}

// 被更新的被评估人 ID
//
// 示例值：
func (builder *ReviewDataChangeBuilder) UserId(userId *UserId) *ReviewDataChangeBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 被更新的绩效评估周期 ID
//
// 示例值：7343576973861453844
func (builder *ReviewDataChangeBuilder) SemesterId(semesterId string) *ReviewDataChangeBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 被更新的绩效评估项目 ID
//
// 示例值：7343577163150393363
func (builder *ReviewDataChangeBuilder) ActivityId(activityId string) *ReviewDataChangeBuilder {
	builder.activityId = activityId
	builder.activityIdFlag = true
	return builder
}

// 被更新的环节
//
// 示例值：
func (builder *ReviewDataChangeBuilder) StageChanges(stageChanges []*StageChange) *ReviewDataChangeBuilder {
	builder.stageChanges = stageChanges
	builder.stageChangesFlag = true
	return builder
}

func (builder *ReviewDataChangeBuilder) Build() *ReviewDataChange {
	req := &ReviewDataChange{}
	if builder.userIdFlag {
		req.UserId = builder.userId
	}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId

	}
	if builder.activityIdFlag {
		req.ActivityId = &builder.activityId

	}
	if builder.stageChangesFlag {
		req.StageChanges = builder.stageChanges
	}
	return req
}

type ReviewDataPermission struct {
	UserId *User `json:"user_id,omitempty"` //

	SemesterId *string `json:"semester_id,omitempty"` // 绩效评估周期 ID

	ActivityId *string `json:"activity_id,omitempty"` // 绩效评估项目 ID，详细信息请参考获取项目配置

	ReviewTemplateId *string `json:"review_template_id,omitempty"` // 被评估人在该周期对应的后台评估模板 ID，详细信息请参考获取评估模版配置

	Stages []*ReviewDataPermissionStage `json:"stages,omitempty"` // 本周期内各环节内容
}

type ReviewDataPermissionBuilder struct {
	userId     *User //
	userIdFlag bool

	semesterId     string // 绩效评估周期 ID
	semesterIdFlag bool

	activityId     string // 绩效评估项目 ID，详细信息请参考获取项目配置
	activityIdFlag bool

	reviewTemplateId     string // 被评估人在该周期对应的后台评估模板 ID，详细信息请参考获取评估模版配置
	reviewTemplateIdFlag bool

	stages     []*ReviewDataPermissionStage // 本周期内各环节内容
	stagesFlag bool
}

func NewReviewDataPermissionBuilder() *ReviewDataPermissionBuilder {
	builder := &ReviewDataPermissionBuilder{}
	return builder
}

//
//
// 示例值：
func (builder *ReviewDataPermissionBuilder) UserId(userId *User) *ReviewDataPermissionBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 绩效评估周期 ID
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionBuilder) SemesterId(semesterId string) *ReviewDataPermissionBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 绩效评估项目 ID，详细信息请参考获取项目配置
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionBuilder) ActivityId(activityId string) *ReviewDataPermissionBuilder {
	builder.activityId = activityId
	builder.activityIdFlag = true
	return builder
}

// 被评估人在该周期对应的后台评估模板 ID，详细信息请参考获取评估模版配置
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionBuilder) ReviewTemplateId(reviewTemplateId string) *ReviewDataPermissionBuilder {
	builder.reviewTemplateId = reviewTemplateId
	builder.reviewTemplateIdFlag = true
	return builder
}

// 本周期内各环节内容
//
// 示例值：
func (builder *ReviewDataPermissionBuilder) Stages(stages []*ReviewDataPermissionStage) *ReviewDataPermissionBuilder {
	builder.stages = stages
	builder.stagesFlag = true
	return builder
}

func (builder *ReviewDataPermissionBuilder) Build() *ReviewDataPermission {
	req := &ReviewDataPermission{}
	if builder.userIdFlag {
		req.UserId = builder.userId
	}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId

	}
	if builder.activityIdFlag {
		req.ActivityId = &builder.activityId

	}
	if builder.reviewTemplateIdFlag {
		req.ReviewTemplateId = &builder.reviewTemplateId

	}
	if builder.stagesFlag {
		req.Stages = builder.stages
	}
	return req
}

type ReviewDataPermissionField struct {
	FieldId *string `json:"field_id,omitempty"` // 评估题 ID，指评估内容中的每个评估项或填写项

	IndicatorId *string `json:"indicator_id,omitempty"` // 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值，详细信息请参考获取评估项配置

	Action []string `json:"action,omitempty"` // 对该评估题有权限进行的操作
}

type ReviewDataPermissionFieldBuilder struct {
	fieldId     string // 评估题 ID，指评估内容中的每个评估项或填写项
	fieldIdFlag bool

	indicatorId     string // 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值，详细信息请参考获取评估项配置
	indicatorIdFlag bool

	action     []string // 对该评估题有权限进行的操作
	actionFlag bool
}

func NewReviewDataPermissionFieldBuilder() *ReviewDataPermissionFieldBuilder {
	builder := &ReviewDataPermissionFieldBuilder{}
	return builder
}

// 评估题 ID，指评估内容中的每个评估项或填写项
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionFieldBuilder) FieldId(fieldId string) *ReviewDataPermissionFieldBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值，详细信息请参考获取评估项配置
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionFieldBuilder) IndicatorId(indicatorId string) *ReviewDataPermissionFieldBuilder {
	builder.indicatorId = indicatorId
	builder.indicatorIdFlag = true
	return builder
}

// 对该评估题有权限进行的操作
//
// 示例值：
func (builder *ReviewDataPermissionFieldBuilder) Action(action []string) *ReviewDataPermissionFieldBuilder {
	builder.action = action
	builder.actionFlag = true
	return builder
}

func (builder *ReviewDataPermissionFieldBuilder) Build() *ReviewDataPermissionField {
	req := &ReviewDataPermissionField{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.indicatorIdFlag {
		req.IndicatorId = &builder.indicatorId

	}
	if builder.actionFlag {
		req.Action = builder.action
	}
	return req
}

type ReviewDataPermissionStage struct {
	StageId *string `json:"stage_id,omitempty"` // 环节 ID

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	Units []*ReviewDataPermissionUnit `json:"units,omitempty"` // 评估内容列表
}

type ReviewDataPermissionStageBuilder struct {
	stageId     string // 环节 ID
	stageIdFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	units     []*ReviewDataPermissionUnit // 评估内容列表
	unitsFlag bool
}

func NewReviewDataPermissionStageBuilder() *ReviewDataPermissionStageBuilder {
	builder := &ReviewDataPermissionStageBuilder{}
	return builder
}

// 环节 ID
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionStageBuilder) StageId(stageId string) *ReviewDataPermissionStageBuilder {
	builder.stageId = stageId
	builder.stageIdFlag = true
	return builder
}

// 环节类型
//
// 示例值：leader_review
func (builder *ReviewDataPermissionStageBuilder) StageType(stageType string) *ReviewDataPermissionStageBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 评估内容列表
//
// 示例值：
func (builder *ReviewDataPermissionStageBuilder) Units(units []*ReviewDataPermissionUnit) *ReviewDataPermissionStageBuilder {
	builder.units = units
	builder.unitsFlag = true
	return builder
}

func (builder *ReviewDataPermissionStageBuilder) Build() *ReviewDataPermissionStage {
	req := &ReviewDataPermissionStage{}
	if builder.stageIdFlag {
		req.StageId = &builder.stageId

	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.unitsFlag {
		req.Units = builder.units
	}
	return req
}

type ReviewDataPermissionUnit struct {
	UnitId *string `json:"unit_id,omitempty"` // 评估内容 ID

	Fields []*ReviewDataPermissionField `json:"fields,omitempty"` // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
}

type ReviewDataPermissionUnitBuilder struct {
	unitId     string // 评估内容 ID
	unitIdFlag bool

	fields     []*ReviewDataPermissionField // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
	fieldsFlag bool
}

func NewReviewDataPermissionUnitBuilder() *ReviewDataPermissionUnitBuilder {
	builder := &ReviewDataPermissionUnitBuilder{}
	return builder
}

// 评估内容 ID
//
// 示例值：7343513161666707459
func (builder *ReviewDataPermissionUnitBuilder) UnitId(unitId string) *ReviewDataPermissionUnitBuilder {
	builder.unitId = unitId
	builder.unitIdFlag = true
	return builder
}

// 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
//
// 示例值：
func (builder *ReviewDataPermissionUnitBuilder) Fields(fields []*ReviewDataPermissionField) *ReviewDataPermissionUnitBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

func (builder *ReviewDataPermissionUnitBuilder) Build() *ReviewDataPermissionUnit {
	req := &ReviewDataPermissionUnit{}
	if builder.unitIdFlag {
		req.UnitId = &builder.unitId

	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	return req
}

type ReviewDetail struct {
	FieldId *string `json:"field_id,omitempty"` // 评估题 ID，指评估内容中的每个评估项或填写项

	ReviewerUserId *User `json:"reviewer_user_id,omitempty"` // 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值

	SubmitTime *string `json:"submit_time,omitempty"` // 该评估题的最后提交时间

	IndicatorId *string `json:"indicator_id,omitempty"` // 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值

	OptionId *string `json:"option_id,omitempty"` // 评估等级 ID

	Score *string `json:"score,omitempty"` // 评分

	Text *string `json:"text,omitempty"` // 填写项填写的文本

	TagBasedQuestionId *string `json:"tag_based_question_id,omitempty"` // 标签填写题的 ID

	TagTextItemData []*TagText `json:"tag_text_item_data,omitempty"` // 标签填写项的内容

	PerfCoefficientValue *string `json:"perf_coefficient_value,omitempty"` // 绩效系数值

	SubIndicatorData []*SubIndicator `json:"sub_indicator_data,omitempty"` // 子评估项内容

	ObjectiveData []*ObjectiveData `json:"objective_data,omitempty"` // 评估的目标数据，当评估内容是对目标（O）或关键举措（KR）评估时有值

	MetricData []*MetricData `json:"metric_data,omitempty"` // 评估的指标，当评估内容是对指标评估时有值

	LeaderReviewDataSource *string `json:"leader_review_data_source,omitempty"` // 终评环节填写内容的来源（仅终评环节的数据有值）

	MultiTexts []string `json:"multi_texts,omitempty"` // 工作/总结类型的文本内容

	Richtext *string `json:"richtext,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)

	MultiRichtexts []string `json:"multi_richtexts,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)

	IsPrincipalReviewItem *bool `json:"is_principal_review_item,omitempty"` // 该评估题是否是首要评估项
}

type ReviewDetailBuilder struct {
	fieldId     string // 评估题 ID，指评估内容中的每个评估项或填写项
	fieldIdFlag bool

	reviewerUserId     *User // 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值
	reviewerUserIdFlag bool

	submitTime     string // 该评估题的最后提交时间
	submitTimeFlag bool

	indicatorId     string // 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值
	indicatorIdFlag bool

	optionId     string // 评估等级 ID
	optionIdFlag bool

	score     string // 评分
	scoreFlag bool

	text     string // 填写项填写的文本
	textFlag bool

	tagBasedQuestionId     string // 标签填写题的 ID
	tagBasedQuestionIdFlag bool

	tagTextItemData     []*TagText // 标签填写项的内容
	tagTextItemDataFlag bool

	perfCoefficientValue     string // 绩效系数值
	perfCoefficientValueFlag bool

	subIndicatorData     []*SubIndicator // 子评估项内容
	subIndicatorDataFlag bool

	objectiveData     []*ObjectiveData // 评估的目标数据，当评估内容是对目标（O）或关键举措（KR）评估时有值
	objectiveDataFlag bool

	metricData     []*MetricData // 评估的指标，当评估内容是对指标评估时有值
	metricDataFlag bool

	leaderReviewDataSource     string // 终评环节填写内容的来源（仅终评环节的数据有值）
	leaderReviewDataSourceFlag bool

	multiTexts     []string // 工作/总结类型的文本内容
	multiTextsFlag bool

	richtext     string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	richtextFlag bool

	multiRichtexts     []string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	multiRichtextsFlag bool

	isPrincipalReviewItem     bool // 该评估题是否是首要评估项
	isPrincipalReviewItemFlag bool
}

func NewReviewDetailBuilder() *ReviewDetailBuilder {
	builder := &ReviewDetailBuilder{}
	return builder
}

// 评估题 ID，指评估内容中的每个评估项或填写项
//
// 示例值：7343513161666707459
func (builder *ReviewDetailBuilder) FieldId(fieldId string) *ReviewDetailBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 评估人 ID。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回该值
//
// 示例值：
func (builder *ReviewDetailBuilder) ReviewerUserId(reviewerUserId *User) *ReviewDetailBuilder {
	builder.reviewerUserId = reviewerUserId
	builder.reviewerUserIdFlag = true
	return builder
}

// 该评估题的最后提交时间
//
// 示例值：7343513161666707459
func (builder *ReviewDetailBuilder) SubmitTime(submitTime string) *ReviewDetailBuilder {
	builder.submitTime = submitTime
	builder.submitTimeFlag = true
	return builder
}

// 评估项 ID（不包含子评估项），option_id 或 score 有值的时候有值
//
// 示例值：7343513161666707459
func (builder *ReviewDetailBuilder) IndicatorId(indicatorId string) *ReviewDetailBuilder {
	builder.indicatorId = indicatorId
	builder.indicatorIdFlag = true
	return builder
}

// 评估等级 ID
//
// 示例值：7343513161666707459
func (builder *ReviewDetailBuilder) OptionId(optionId string) *ReviewDetailBuilder {
	builder.optionId = optionId
	builder.optionIdFlag = true
	return builder
}

// 评分
//
// 示例值：1.1
func (builder *ReviewDetailBuilder) Score(score string) *ReviewDetailBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// 填写项填写的文本
//
// 示例值：qwert
func (builder *ReviewDetailBuilder) Text(text string) *ReviewDetailBuilder {
	builder.text = text
	builder.textFlag = true
	return builder
}

// 标签填写题的 ID
//
// 示例值：7343513161666707459
func (builder *ReviewDetailBuilder) TagBasedQuestionId(tagBasedQuestionId string) *ReviewDetailBuilder {
	builder.tagBasedQuestionId = tagBasedQuestionId
	builder.tagBasedQuestionIdFlag = true
	return builder
}

// 标签填写项的内容
//
// 示例值：
func (builder *ReviewDetailBuilder) TagTextItemData(tagTextItemData []*TagText) *ReviewDetailBuilder {
	builder.tagTextItemData = tagTextItemData
	builder.tagTextItemDataFlag = true
	return builder
}

// 绩效系数值
//
// 示例值：1.1
func (builder *ReviewDetailBuilder) PerfCoefficientValue(perfCoefficientValue string) *ReviewDetailBuilder {
	builder.perfCoefficientValue = perfCoefficientValue
	builder.perfCoefficientValueFlag = true
	return builder
}

// 子评估项内容
//
// 示例值：
func (builder *ReviewDetailBuilder) SubIndicatorData(subIndicatorData []*SubIndicator) *ReviewDetailBuilder {
	builder.subIndicatorData = subIndicatorData
	builder.subIndicatorDataFlag = true
	return builder
}

// 评估的目标数据，当评估内容是对目标（O）或关键举措（KR）评估时有值
//
// 示例值：
func (builder *ReviewDetailBuilder) ObjectiveData(objectiveData []*ObjectiveData) *ReviewDetailBuilder {
	builder.objectiveData = objectiveData
	builder.objectiveDataFlag = true
	return builder
}

// 评估的指标，当评估内容是对指标评估时有值
//
// 示例值：
func (builder *ReviewDetailBuilder) MetricData(metricData []*MetricData) *ReviewDetailBuilder {
	builder.metricData = metricData
	builder.metricDataFlag = true
	return builder
}

// 终评环节填写内容的来源（仅终评环节的数据有值）
//
// 示例值：review
func (builder *ReviewDetailBuilder) LeaderReviewDataSource(leaderReviewDataSource string) *ReviewDetailBuilder {
	builder.leaderReviewDataSource = leaderReviewDataSource
	builder.leaderReviewDataSourceFlag = true
	return builder
}

// 工作/总结类型的文本内容
//
// 示例值：
func (builder *ReviewDetailBuilder) MultiTexts(multiTexts []string) *ReviewDetailBuilder {
	builder.multiTexts = multiTexts
	builder.multiTextsFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：{"ops":[{"name":"insert","text":"qwerty","attributes":{"bold":true}}]}
func (builder *ReviewDetailBuilder) Richtext(richtext string) *ReviewDetailBuilder {
	builder.richtext = richtext
	builder.richtextFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：
func (builder *ReviewDetailBuilder) MultiRichtexts(multiRichtexts []string) *ReviewDetailBuilder {
	builder.multiRichtexts = multiRichtexts
	builder.multiRichtextsFlag = true
	return builder
}

// 该评估题是否是首要评估项
//
// 示例值：true
func (builder *ReviewDetailBuilder) IsPrincipalReviewItem(isPrincipalReviewItem bool) *ReviewDetailBuilder {
	builder.isPrincipalReviewItem = isPrincipalReviewItem
	builder.isPrincipalReviewItemFlag = true
	return builder
}

func (builder *ReviewDetailBuilder) Build() *ReviewDetail {
	req := &ReviewDetail{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.reviewerUserIdFlag {
		req.ReviewerUserId = builder.reviewerUserId
	}
	if builder.submitTimeFlag {
		req.SubmitTime = &builder.submitTime

	}
	if builder.indicatorIdFlag {
		req.IndicatorId = &builder.indicatorId

	}
	if builder.optionIdFlag {
		req.OptionId = &builder.optionId

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.textFlag {
		req.Text = &builder.text

	}
	if builder.tagBasedQuestionIdFlag {
		req.TagBasedQuestionId = &builder.tagBasedQuestionId

	}
	if builder.tagTextItemDataFlag {
		req.TagTextItemData = builder.tagTextItemData
	}
	if builder.perfCoefficientValueFlag {
		req.PerfCoefficientValue = &builder.perfCoefficientValue

	}
	if builder.subIndicatorDataFlag {
		req.SubIndicatorData = builder.subIndicatorData
	}
	if builder.objectiveDataFlag {
		req.ObjectiveData = builder.objectiveData
	}
	if builder.metricDataFlag {
		req.MetricData = builder.metricData
	}
	if builder.leaderReviewDataSourceFlag {
		req.LeaderReviewDataSource = &builder.leaderReviewDataSource

	}
	if builder.multiTextsFlag {
		req.MultiTexts = builder.multiTexts
	}
	if builder.richtextFlag {
		req.Richtext = &builder.richtext

	}
	if builder.multiRichtextsFlag {
		req.MultiRichtexts = builder.multiRichtexts
	}
	if builder.isPrincipalReviewItemFlag {
		req.IsPrincipalReviewItem = &builder.isPrincipalReviewItem

	}
	return req
}

type ReviewProfile struct {
	UserId *User `json:"user_id,omitempty"` // 被评估人 ID

	SemesterId *string `json:"semester_id,omitempty"` // 绩效评估周期 ID

	ActivityId *string `json:"activity_id,omitempty"` // 绩效评估项目 ID

	ReviewTemplateId *string `json:"review_template_id,omitempty"` // 被评估人在该周期对应的后台评估模板 ID

	Stages []*ReviewStage `json:"stages,omitempty"` // 本周期内各环节内容
}

type ReviewProfileBuilder struct {
	userId     *User // 被评估人 ID
	userIdFlag bool

	semesterId     string // 绩效评估周期 ID
	semesterIdFlag bool

	activityId     string // 绩效评估项目 ID
	activityIdFlag bool

	reviewTemplateId     string // 被评估人在该周期对应的后台评估模板 ID
	reviewTemplateIdFlag bool

	stages     []*ReviewStage // 本周期内各环节内容
	stagesFlag bool
}

func NewReviewProfileBuilder() *ReviewProfileBuilder {
	builder := &ReviewProfileBuilder{}
	return builder
}

// 被评估人 ID
//
// 示例值：
func (builder *ReviewProfileBuilder) UserId(userId *User) *ReviewProfileBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 绩效评估周期 ID
//
// 示例值：7343513161666707459
func (builder *ReviewProfileBuilder) SemesterId(semesterId string) *ReviewProfileBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 绩效评估项目 ID
//
// 示例值：7343513161666707459
func (builder *ReviewProfileBuilder) ActivityId(activityId string) *ReviewProfileBuilder {
	builder.activityId = activityId
	builder.activityIdFlag = true
	return builder
}

// 被评估人在该周期对应的后台评估模板 ID
//
// 示例值：7343513161666707459
func (builder *ReviewProfileBuilder) ReviewTemplateId(reviewTemplateId string) *ReviewProfileBuilder {
	builder.reviewTemplateId = reviewTemplateId
	builder.reviewTemplateIdFlag = true
	return builder
}

// 本周期内各环节内容
//
// 示例值：
func (builder *ReviewProfileBuilder) Stages(stages []*ReviewStage) *ReviewProfileBuilder {
	builder.stages = stages
	builder.stagesFlag = true
	return builder
}

func (builder *ReviewProfileBuilder) Build() *ReviewProfile {
	req := &ReviewProfile{}
	if builder.userIdFlag {
		req.UserId = builder.userId
	}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId

	}
	if builder.activityIdFlag {
		req.ActivityId = &builder.activityId

	}
	if builder.reviewTemplateIdFlag {
		req.ReviewTemplateId = &builder.reviewTemplateId

	}
	if builder.stagesFlag {
		req.Stages = builder.stages
	}
	return req
}

type ReviewRecord struct {
	Progress *int `json:"progress,omitempty"` // 评估人的环节状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成

	Units []*ReviewUnit `json:"units,omitempty"` // 评估记录中的评估内容明细

	InvitedReviewRecordInfo *InvitedReviewRecordInfo `json:"invited_review_record_info,omitempty"` // 360 ° 评估记录的信息。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回评估人的部分信息

	DirectProjectLeaderRecordInfo *DirectProjectLeaderRecordInfo `json:"direct_project_leader_record_info,omitempty"` // 项目上级评估记录信息

	RecordId *string `json:"record_id,omitempty"` // 评估记录 ID
}

type ReviewRecordBuilder struct {
	progress     int // 评估人的环节状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
	progressFlag bool

	units     []*ReviewUnit // 评估记录中的评估内容明细
	unitsFlag bool

	invitedReviewRecordInfo     *InvitedReviewRecordInfo // 360 ° 评估记录的信息。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回评估人的部分信息
	invitedReviewRecordInfoFlag bool

	directProjectLeaderRecordInfo     *DirectProjectLeaderRecordInfo // 项目上级评估记录信息
	directProjectLeaderRecordInfoFlag bool

	recordId     string // 评估记录 ID
	recordIdFlag bool
}

func NewReviewRecordBuilder() *ReviewRecordBuilder {
	builder := &ReviewRecordBuilder{}
	return builder
}

// 评估人的环节状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
//
// 示例值：1
func (builder *ReviewRecordBuilder) Progress(progress int) *ReviewRecordBuilder {
	builder.progress = progress
	builder.progressFlag = true
	return builder
}

// 评估记录中的评估内容明细
//
// 示例值：
func (builder *ReviewRecordBuilder) Units(units []*ReviewUnit) *ReviewRecordBuilder {
	builder.units = units
	builder.unitsFlag = true
	return builder
}

// 360 ° 评估记录的信息。如果开启了 360 匿名评估，并且是对全部查看者匿名，则不返回评估人的部分信息
//
// 示例值：
func (builder *ReviewRecordBuilder) InvitedReviewRecordInfo(invitedReviewRecordInfo *InvitedReviewRecordInfo) *ReviewRecordBuilder {
	builder.invitedReviewRecordInfo = invitedReviewRecordInfo
	builder.invitedReviewRecordInfoFlag = true
	return builder
}

// 项目上级评估记录信息
//
// 示例值：
func (builder *ReviewRecordBuilder) DirectProjectLeaderRecordInfo(directProjectLeaderRecordInfo *DirectProjectLeaderRecordInfo) *ReviewRecordBuilder {
	builder.directProjectLeaderRecordInfo = directProjectLeaderRecordInfo
	builder.directProjectLeaderRecordInfoFlag = true
	return builder
}

// 评估记录 ID
//
// 示例值：7343513161666707459
func (builder *ReviewRecordBuilder) RecordId(recordId string) *ReviewRecordBuilder {
	builder.recordId = recordId
	builder.recordIdFlag = true
	return builder
}

func (builder *ReviewRecordBuilder) Build() *ReviewRecord {
	req := &ReviewRecord{}
	if builder.progressFlag {
		req.Progress = &builder.progress

	}
	if builder.unitsFlag {
		req.Units = builder.units
	}
	if builder.invitedReviewRecordInfoFlag {
		req.InvitedReviewRecordInfo = builder.invitedReviewRecordInfo
	}
	if builder.directProjectLeaderRecordInfoFlag {
		req.DirectProjectLeaderRecordInfo = builder.directProjectLeaderRecordInfo
	}
	if builder.recordIdFlag {
		req.RecordId = &builder.recordId

	}
	return req
}

type ReviewStage struct {
	StageId *string `json:"stage_id,omitempty"` // 环节 ID

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	ReviewStageRoles []string `json:"review_stage_roles,omitempty"` // 评估型环节的执行人角色

	TemplateId *string `json:"template_id,omitempty"` // 该环节对应的环节模板的 ID

	Records []*ReviewRecord `json:"records,omitempty"` // 评估内容记录。多人评估的环节有多份记录，比如 360 评估环节。如果开启了 360 匿名评估，并且是对全部查看者匿名，则评估记录数低于匿名下限，则不返回 360 评估记录

	ReviewStageRole *string `json:"review_stage_role,omitempty"` // 评估型环节的执行人角色
}

type ReviewStageBuilder struct {
	stageId     string // 环节 ID
	stageIdFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	reviewStageRoles     []string // 评估型环节的执行人角色
	reviewStageRolesFlag bool

	templateId     string // 该环节对应的环节模板的 ID
	templateIdFlag bool

	records     []*ReviewRecord // 评估内容记录。多人评估的环节有多份记录，比如 360 评估环节。如果开启了 360 匿名评估，并且是对全部查看者匿名，则评估记录数低于匿名下限，则不返回 360 评估记录
	recordsFlag bool

	reviewStageRole     string // 评估型环节的执行人角色
	reviewStageRoleFlag bool
}

func NewReviewStageBuilder() *ReviewStageBuilder {
	builder := &ReviewStageBuilder{}
	return builder
}

// 环节 ID
//
// 示例值：7343513161666707459
func (builder *ReviewStageBuilder) StageId(stageId string) *ReviewStageBuilder {
	builder.stageId = stageId
	builder.stageIdFlag = true
	return builder
}

// 环节类型
//
// 示例值：review
func (builder *ReviewStageBuilder) StageType(stageType string) *ReviewStageBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 评估型环节的执行人角色
//
// 示例值：
func (builder *ReviewStageBuilder) ReviewStageRoles(reviewStageRoles []string) *ReviewStageBuilder {
	builder.reviewStageRoles = reviewStageRoles
	builder.reviewStageRolesFlag = true
	return builder
}

// 该环节对应的环节模板的 ID
//
// 示例值：7343513161666707459
func (builder *ReviewStageBuilder) TemplateId(templateId string) *ReviewStageBuilder {
	builder.templateId = templateId
	builder.templateIdFlag = true
	return builder
}

// 评估内容记录。多人评估的环节有多份记录，比如 360 评估环节。如果开启了 360 匿名评估，并且是对全部查看者匿名，则评估记录数低于匿名下限，则不返回 360 评估记录
//
// 示例值：
func (builder *ReviewStageBuilder) Records(records []*ReviewRecord) *ReviewStageBuilder {
	builder.records = records
	builder.recordsFlag = true
	return builder
}

// 评估型环节的执行人角色
//
// 示例值：reviewee
func (builder *ReviewStageBuilder) ReviewStageRole(reviewStageRole string) *ReviewStageBuilder {
	builder.reviewStageRole = reviewStageRole
	builder.reviewStageRoleFlag = true
	return builder
}

func (builder *ReviewStageBuilder) Build() *ReviewStage {
	req := &ReviewStage{}
	if builder.stageIdFlag {
		req.StageId = &builder.stageId

	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.reviewStageRolesFlag {
		req.ReviewStageRoles = builder.reviewStageRoles
	}
	if builder.templateIdFlag {
		req.TemplateId = &builder.templateId

	}
	if builder.recordsFlag {
		req.Records = builder.records
	}
	if builder.reviewStageRoleFlag {
		req.ReviewStageRole = &builder.reviewStageRole

	}
	return req
}

type ReviewTemplate struct {
	Templates []*Template `json:"templates,omitempty"` // 环节模板列表

	Units []*Unit `json:"units,omitempty"` // 评估内容列表

	ReviewTemplateId *string `json:"review_template_id,omitempty"` // 评估模板 ID

	Name *I18n `json:"name,omitempty"` // 评估模板名称

	Description *I18n `json:"description,omitempty"` // 评估模板描述

	Status *string `json:"status,omitempty"` // 状态
}

type ReviewTemplateBuilder struct {
	templates     []*Template // 环节模板列表
	templatesFlag bool

	units     []*Unit // 评估内容列表
	unitsFlag bool

	reviewTemplateId     string // 评估模板 ID
	reviewTemplateIdFlag bool

	name     *I18n // 评估模板名称
	nameFlag bool

	description     *I18n // 评估模板描述
	descriptionFlag bool

	status     string // 状态
	statusFlag bool
}

func NewReviewTemplateBuilder() *ReviewTemplateBuilder {
	builder := &ReviewTemplateBuilder{}
	return builder
}

// 环节模板列表
//
// 示例值：
func (builder *ReviewTemplateBuilder) Templates(templates []*Template) *ReviewTemplateBuilder {
	builder.templates = templates
	builder.templatesFlag = true
	return builder
}

// 评估内容列表
//
// 示例值：
func (builder *ReviewTemplateBuilder) Units(units []*Unit) *ReviewTemplateBuilder {
	builder.units = units
	builder.unitsFlag = true
	return builder
}

// 评估模板 ID
//
// 示例值：7343513161666723843
func (builder *ReviewTemplateBuilder) ReviewTemplateId(reviewTemplateId string) *ReviewTemplateBuilder {
	builder.reviewTemplateId = reviewTemplateId
	builder.reviewTemplateIdFlag = true
	return builder
}

// 评估模板名称
//
// 示例值：
func (builder *ReviewTemplateBuilder) Name(name *I18n) *ReviewTemplateBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 评估模板描述
//
// 示例值：
func (builder *ReviewTemplateBuilder) Description(description *I18n) *ReviewTemplateBuilder {
	builder.description = description
	builder.descriptionFlag = true
	return builder
}

// 状态
//
// 示例值：enabled
func (builder *ReviewTemplateBuilder) Status(status string) *ReviewTemplateBuilder {
	builder.status = status
	builder.statusFlag = true
	return builder
}

func (builder *ReviewTemplateBuilder) Build() *ReviewTemplate {
	req := &ReviewTemplate{}
	if builder.templatesFlag {
		req.Templates = builder.templates
	}
	if builder.unitsFlag {
		req.Units = builder.units
	}
	if builder.reviewTemplateIdFlag {
		req.ReviewTemplateId = &builder.reviewTemplateId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.descriptionFlag {
		req.Description = builder.description
	}
	if builder.statusFlag {
		req.Status = &builder.status

	}
	return req
}

type ReviewUnit struct {
	UnitId *string `json:"unit_id,omitempty"` // 评估内容 ID

	IsUnknown *bool `json:"is_unknown,omitempty"` // 是否为不了解。当评估人选不了解时，会返回为 true，其他时候不返回。

	Data []*ReviewDetail `json:"data,omitempty"` // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
}

type ReviewUnitBuilder struct {
	unitId     string // 评估内容 ID
	unitIdFlag bool

	isUnknown     bool // 是否为不了解。当评估人选不了解时，会返回为 true，其他时候不返回。
	isUnknownFlag bool

	data     []*ReviewDetail // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
	dataFlag bool
}

func NewReviewUnitBuilder() *ReviewUnitBuilder {
	builder := &ReviewUnitBuilder{}
	return builder
}

// 评估内容 ID
//
// 示例值：7343513161666707459
func (builder *ReviewUnitBuilder) UnitId(unitId string) *ReviewUnitBuilder {
	builder.unitId = unitId
	builder.unitIdFlag = true
	return builder
}

// 是否为不了解。当评估人选不了解时，会返回为 true，其他时候不返回。
//
// 示例值：
func (builder *ReviewUnitBuilder) IsUnknown(isUnknown bool) *ReviewUnitBuilder {
	builder.isUnknown = isUnknown
	builder.isUnknownFlag = true
	return builder
}

// 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
//
// 示例值：
func (builder *ReviewUnitBuilder) Data(data []*ReviewDetail) *ReviewUnitBuilder {
	builder.data = data
	builder.dataFlag = true
	return builder
}

func (builder *ReviewUnitBuilder) Build() *ReviewUnit {
	req := &ReviewUnit{}
	if builder.unitIdFlag {
		req.UnitId = &builder.unitId

	}
	if builder.isUnknownFlag {
		req.IsUnknown = &builder.isUnknown

	}
	if builder.dataFlag {
		req.Data = builder.data
	}
	return req
}

type Reviewee struct {
	RevieweeUserId *User `json:"reviewee_user_id,omitempty"` // 被评估人 ID

	ActivityIds []string `json:"activity_ids,omitempty"` // 被评估人参与的项目

	ReviewprofileUrl *string `json:"reviewprofile_url,omitempty"` // 被评估人在该周期的个人绩效详情页链接。如果参与的项目未启动则为空
}

type RevieweeBuilder struct {
	revieweeUserId     *User // 被评估人 ID
	revieweeUserIdFlag bool

	activityIds     []string // 被评估人参与的项目
	activityIdsFlag bool

	reviewprofileUrl     string // 被评估人在该周期的个人绩效详情页链接。如果参与的项目未启动则为空
	reviewprofileUrlFlag bool
}

func NewRevieweeBuilder() *RevieweeBuilder {
	builder := &RevieweeBuilder{}
	return builder
}

// 被评估人 ID
//
// 示例值：
func (builder *RevieweeBuilder) RevieweeUserId(revieweeUserId *User) *RevieweeBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 被评估人参与的项目
//
// 示例值：
func (builder *RevieweeBuilder) ActivityIds(activityIds []string) *RevieweeBuilder {
	builder.activityIds = activityIds
	builder.activityIdsFlag = true
	return builder
}

// 被评估人在该周期的个人绩效详情页链接。如果参与的项目未启动则为空
//
// 示例值：https://performance.feishu.cn/perf/profile?rootReviewId=7380183500051202067
func (builder *RevieweeBuilder) ReviewprofileUrl(reviewprofileUrl string) *RevieweeBuilder {
	builder.reviewprofileUrl = reviewprofileUrl
	builder.reviewprofileUrlFlag = true
	return builder
}

func (builder *RevieweeBuilder) Build() *Reviewee {
	req := &Reviewee{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = builder.revieweeUserId
	}
	if builder.activityIdsFlag {
		req.ActivityIds = builder.activityIds
	}
	if builder.reviewprofileUrlFlag {
		req.ReviewprofileUrl = &builder.reviewprofileUrl

	}
	return req
}

type RevieweeMetric struct {
	RevieweeUserId *User `json:"reviewee_user_id,omitempty"` // 被评估人

	MetricTemplateId *string `json:"metric_template_id,omitempty"` // 被评估人在该周期所属的指标模板 ID

	MetricDetails *MetricDetail `json:"metric_details,omitempty"` // 被评估人在周期下的指标明细数据

	RevieweeStageStatuses []*RevieweeStageStatus `json:"reviewee_stage_statuses,omitempty"` // 被评估人关键指标环节状态
}

type RevieweeMetricBuilder struct {
	revieweeUserId     *User // 被评估人
	revieweeUserIdFlag bool

	metricTemplateId     string // 被评估人在该周期所属的指标模板 ID
	metricTemplateIdFlag bool

	metricDetails     *MetricDetail // 被评估人在周期下的指标明细数据
	metricDetailsFlag bool

	revieweeStageStatuses     []*RevieweeStageStatus // 被评估人关键指标环节状态
	revieweeStageStatusesFlag bool
}

func NewRevieweeMetricBuilder() *RevieweeMetricBuilder {
	builder := &RevieweeMetricBuilder{}
	return builder
}

// 被评估人
//
// 示例值：
func (builder *RevieweeMetricBuilder) RevieweeUserId(revieweeUserId *User) *RevieweeMetricBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// 被评估人在该周期所属的指标模板 ID
//
// 示例值：7294570803306168339
func (builder *RevieweeMetricBuilder) MetricTemplateId(metricTemplateId string) *RevieweeMetricBuilder {
	builder.metricTemplateId = metricTemplateId
	builder.metricTemplateIdFlag = true
	return builder
}

// 被评估人在周期下的指标明细数据
//
// 示例值：
func (builder *RevieweeMetricBuilder) MetricDetails(metricDetails *MetricDetail) *RevieweeMetricBuilder {
	builder.metricDetails = metricDetails
	builder.metricDetailsFlag = true
	return builder
}

// 被评估人关键指标环节状态
//
// 示例值：
func (builder *RevieweeMetricBuilder) RevieweeStageStatuses(revieweeStageStatuses []*RevieweeStageStatus) *RevieweeMetricBuilder {
	builder.revieweeStageStatuses = revieweeStageStatuses
	builder.revieweeStageStatusesFlag = true
	return builder
}

func (builder *RevieweeMetricBuilder) Build() *RevieweeMetric {
	req := &RevieweeMetric{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = builder.revieweeUserId
	}
	if builder.metricTemplateIdFlag {
		req.MetricTemplateId = &builder.metricTemplateId

	}
	if builder.metricDetailsFlag {
		req.MetricDetails = builder.metricDetails
	}
	if builder.revieweeStageStatusesFlag {
		req.RevieweeStageStatuses = builder.revieweeStageStatuses
	}
	return req
}

type RevieweeStageStatus struct {
	StageId *string `json:"stage_id,omitempty"` // 环节ID

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	StageStatus *int `json:"stage_status,omitempty"` // 环节状态
}

type RevieweeStageStatusBuilder struct {
	stageId     string // 环节ID
	stageIdFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	stageStatus     int // 环节状态
	stageStatusFlag bool
}

func NewRevieweeStageStatusBuilder() *RevieweeStageStatusBuilder {
	builder := &RevieweeStageStatusBuilder{}
	return builder
}

// 环节ID
//
// 示例值：1
func (builder *RevieweeStageStatusBuilder) StageId(stageId string) *RevieweeStageStatusBuilder {
	builder.stageId = stageId
	builder.stageIdFlag = true
	return builder
}

// 环节类型
//
// 示例值：kpi_metric_setting
func (builder *RevieweeStageStatusBuilder) StageType(stageType string) *RevieweeStageStatusBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 环节状态
//
// 示例值：0
func (builder *RevieweeStageStatusBuilder) StageStatus(stageStatus int) *RevieweeStageStatusBuilder {
	builder.stageStatus = stageStatus
	builder.stageStatusFlag = true
	return builder
}

func (builder *RevieweeStageStatusBuilder) Build() *RevieweeStageStatus {
	req := &RevieweeStageStatus{}
	if builder.stageIdFlag {
		req.StageId = &builder.stageId

	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.stageStatusFlag {
		req.StageStatus = &builder.stageStatus

	}
	return req
}

type ReviewerInfo struct {
	InviteDistributeType *int `json:"invite_distribute_type,omitempty"` // 360° 评估人的评估尺度标签，枚举值为： 1：严格 2：适中 3：宽松

	InviteAvgDiff *string `json:"invite_avg_diff,omitempty"` // 360° 评估人的评估尺度数值

	InviteRelationshipWithReviewee *string `json:"invite_relationship_with_reviewee,omitempty"` // 360° 评估人的与被评估人关系，枚举值： direct_report 直属下级 skiplevel_report 隔级下级 former_direct_manager 原直属上级 skiplevel_manager 隔级上级 teammate 相同上级同事 crossteam_colleague 不同上级同事

	InviteInvitedby *string `json:"invite_invitedby,omitempty"` // 360° 评估人的邀请人类型，枚举值： system_default 系统默认 reviewee 被评估人本人 manager 上级 hrbp_or_others HRBP 或其他人

	CooperationProject *string `json:"cooperation_project,omitempty"` // 评估人作为直属项目上级所在的项目

	CooperationProjectName *I18n `json:"cooperation_project_name,omitempty"` // 合作项目的名称

	DirectProjectLeaderRoleId *string `json:"direct_project_leader_role_id,omitempty"` // 直属项目上级的项目角色 ID
}

type ReviewerInfoBuilder struct {
	inviteDistributeType     int // 360° 评估人的评估尺度标签，枚举值为： 1：严格 2：适中 3：宽松
	inviteDistributeTypeFlag bool

	inviteAvgDiff     string // 360° 评估人的评估尺度数值
	inviteAvgDiffFlag bool

	inviteRelationshipWithReviewee     string // 360° 评估人的与被评估人关系，枚举值： direct_report 直属下级 skiplevel_report 隔级下级 former_direct_manager 原直属上级 skiplevel_manager 隔级上级 teammate 相同上级同事 crossteam_colleague 不同上级同事
	inviteRelationshipWithRevieweeFlag bool

	inviteInvitedby     string // 360° 评估人的邀请人类型，枚举值： system_default 系统默认 reviewee 被评估人本人 manager 上级 hrbp_or_others HRBP 或其他人
	inviteInvitedbyFlag bool

	cooperationProject     string // 评估人作为直属项目上级所在的项目
	cooperationProjectFlag bool

	cooperationProjectName     *I18n // 合作项目的名称
	cooperationProjectNameFlag bool

	directProjectLeaderRoleId     string // 直属项目上级的项目角色 ID
	directProjectLeaderRoleIdFlag bool
}

func NewReviewerInfoBuilder() *ReviewerInfoBuilder {
	builder := &ReviewerInfoBuilder{}
	return builder
}

// 360° 评估人的评估尺度标签，枚举值为： 1：严格 2：适中 3：宽松
//
// 示例值：1
func (builder *ReviewerInfoBuilder) InviteDistributeType(inviteDistributeType int) *ReviewerInfoBuilder {
	builder.inviteDistributeType = inviteDistributeType
	builder.inviteDistributeTypeFlag = true
	return builder
}

// 360° 评估人的评估尺度数值
//
// 示例值：1.1
func (builder *ReviewerInfoBuilder) InviteAvgDiff(inviteAvgDiff string) *ReviewerInfoBuilder {
	builder.inviteAvgDiff = inviteAvgDiff
	builder.inviteAvgDiffFlag = true
	return builder
}

// 360° 评估人的与被评估人关系，枚举值： direct_report 直属下级 skiplevel_report 隔级下级 former_direct_manager 原直属上级 skiplevel_manager 隔级上级 teammate 相同上级同事 crossteam_colleague 不同上级同事
//
// 示例值：direct_report
func (builder *ReviewerInfoBuilder) InviteRelationshipWithReviewee(inviteRelationshipWithReviewee string) *ReviewerInfoBuilder {
	builder.inviteRelationshipWithReviewee = inviteRelationshipWithReviewee
	builder.inviteRelationshipWithRevieweeFlag = true
	return builder
}

// 360° 评估人的邀请人类型，枚举值： system_default 系统默认 reviewee 被评估人本人 manager 上级 hrbp_or_others HRBP 或其他人
//
// 示例值：reviewee
func (builder *ReviewerInfoBuilder) InviteInvitedby(inviteInvitedby string) *ReviewerInfoBuilder {
	builder.inviteInvitedby = inviteInvitedby
	builder.inviteInvitedbyFlag = true
	return builder
}

// 评估人作为直属项目上级所在的项目
//
// 示例值：7343513161666707459
func (builder *ReviewerInfoBuilder) CooperationProject(cooperationProject string) *ReviewerInfoBuilder {
	builder.cooperationProject = cooperationProject
	builder.cooperationProjectFlag = true
	return builder
}

// 合作项目的名称
//
// 示例值：
func (builder *ReviewerInfoBuilder) CooperationProjectName(cooperationProjectName *I18n) *ReviewerInfoBuilder {
	builder.cooperationProjectName = cooperationProjectName
	builder.cooperationProjectNameFlag = true
	return builder
}

// 直属项目上级的项目角色 ID
//
// 示例值：7343513161666707459
func (builder *ReviewerInfoBuilder) DirectProjectLeaderRoleId(directProjectLeaderRoleId string) *ReviewerInfoBuilder {
	builder.directProjectLeaderRoleId = directProjectLeaderRoleId
	builder.directProjectLeaderRoleIdFlag = true
	return builder
}

func (builder *ReviewerInfoBuilder) Build() *ReviewerInfo {
	req := &ReviewerInfo{}
	if builder.inviteDistributeTypeFlag {
		req.InviteDistributeType = &builder.inviteDistributeType

	}
	if builder.inviteAvgDiffFlag {
		req.InviteAvgDiff = &builder.inviteAvgDiff

	}
	if builder.inviteRelationshipWithRevieweeFlag {
		req.InviteRelationshipWithReviewee = &builder.inviteRelationshipWithReviewee

	}
	if builder.inviteInvitedbyFlag {
		req.InviteInvitedby = &builder.inviteInvitedby

	}
	if builder.cooperationProjectFlag {
		req.CooperationProject = &builder.cooperationProject

	}
	if builder.cooperationProjectNameFlag {
		req.CooperationProjectName = builder.cooperationProjectName
	}
	if builder.directProjectLeaderRoleIdFlag {
		req.DirectProjectLeaderRoleId = &builder.directProjectLeaderRoleId

	}
	return req
}

type Semester struct {
	Id *string `json:"id,omitempty"` // 周期 ID

	Name *I18n `json:"name,omitempty"` // 周期名称

	Type *string `json:"type,omitempty"` // 周期类型

	TypeGroup *string `json:"type_group,omitempty"` // 周期类型分组

	Year *int `json:"year,omitempty"` // 周期年份

	StartTime *string `json:"start_time,omitempty"` // 周期开始时间，毫秒时间戳

	EndTime *string `json:"end_time,omitempty"` // 周期结束时间，毫秒时间戳

	CreateTime *string `json:"create_time,omitempty"` // 周期创建时间，毫秒时间戳
}

type SemesterBuilder struct {
	id     string // 周期 ID
	idFlag bool

	name     *I18n // 周期名称
	nameFlag bool

	type_    string // 周期类型
	typeFlag bool

	typeGroup     string // 周期类型分组
	typeGroupFlag bool

	year     int // 周期年份
	yearFlag bool

	startTime     string // 周期开始时间，毫秒时间戳
	startTimeFlag bool

	endTime     string // 周期结束时间，毫秒时间戳
	endTimeFlag bool

	createTime     string // 周期创建时间，毫秒时间戳
	createTimeFlag bool
}

func NewSemesterBuilder() *SemesterBuilder {
	builder := &SemesterBuilder{}
	return builder
}

// 周期 ID
//
// 示例值：7343513161666707459
func (builder *SemesterBuilder) Id(id string) *SemesterBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 周期名称
//
// 示例值：
func (builder *SemesterBuilder) Name(name *I18n) *SemesterBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 周期类型
//
// 示例值：Q1
func (builder *SemesterBuilder) Type(type_ string) *SemesterBuilder {
	builder.type_ = type_
	builder.typeFlag = true
	return builder
}

// 周期类型分组
//
// 示例值：Quarter
func (builder *SemesterBuilder) TypeGroup(typeGroup string) *SemesterBuilder {
	builder.typeGroup = typeGroup
	builder.typeGroupFlag = true
	return builder
}

// 周期年份
//
// 示例值：2024
func (builder *SemesterBuilder) Year(year int) *SemesterBuilder {
	builder.year = year
	builder.yearFlag = true
	return builder
}

// 周期开始时间，毫秒时间戳
//
// 示例值：1625068800000
func (builder *SemesterBuilder) StartTime(startTime string) *SemesterBuilder {
	builder.startTime = startTime
	builder.startTimeFlag = true
	return builder
}

// 周期结束时间，毫秒时间戳
//
// 示例值：1640966399999
func (builder *SemesterBuilder) EndTime(endTime string) *SemesterBuilder {
	builder.endTime = endTime
	builder.endTimeFlag = true
	return builder
}

// 周期创建时间，毫秒时间戳
//
// 示例值：1625068800000
func (builder *SemesterBuilder) CreateTime(createTime string) *SemesterBuilder {
	builder.createTime = createTime
	builder.createTimeFlag = true
	return builder
}

func (builder *SemesterBuilder) Build() *Semester {
	req := &Semester{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.typeFlag {
		req.Type = &builder.type_

	}
	if builder.typeGroupFlag {
		req.TypeGroup = &builder.typeGroup

	}
	if builder.yearFlag {
		req.Year = &builder.year

	}
	if builder.startTimeFlag {
		req.StartTime = &builder.startTime

	}
	if builder.endTimeFlag {
		req.EndTime = &builder.endTime

	}
	if builder.createTimeFlag {
		req.CreateTime = &builder.createTime

	}
	return req
}

type SemesterStage struct {
	Id *string `json:"id,omitempty"` // 周期环节id

	Name *I18n `json:"name,omitempty"` // 周期环节名称

	Stages []*TemplateStage `json:"stages,omitempty"` // 模板环节列表
}

type SemesterStageBuilder struct {
	id     string // 周期环节id
	idFlag bool

	name     *I18n // 周期环节名称
	nameFlag bool

	stages     []*TemplateStage // 模板环节列表
	stagesFlag bool
}

func NewSemesterStageBuilder() *SemesterStageBuilder {
	builder := &SemesterStageBuilder{}
	return builder
}

// 周期环节id
//
// 示例值：7343513161666707459
func (builder *SemesterStageBuilder) Id(id string) *SemesterStageBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 周期环节名称
//
// 示例值：
func (builder *SemesterStageBuilder) Name(name *I18n) *SemesterStageBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 模板环节列表
//
// 示例值：
func (builder *SemesterStageBuilder) Stages(stages []*TemplateStage) *SemesterStageBuilder {
	builder.stages = stages
	builder.stagesFlag = true
	return builder
}

func (builder *SemesterStageBuilder) Build() *SemesterStage {
	req := &SemesterStage{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.stagesFlag {
		req.Stages = builder.stages
	}
	return req
}

type StageChange struct {
	StageId *string `json:"stage_id,omitempty"` // 被更新的环节 ID

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	ReviewStageRole *string `json:"review_stage_role,omitempty"` // 评估型环节的执行人角色
}

type StageChangeBuilder struct {
	stageId     string // 被更新的环节 ID
	stageIdFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	reviewStageRole     string // 评估型环节的执行人角色
	reviewStageRoleFlag bool
}

func NewStageChangeBuilder() *StageChangeBuilder {
	builder := &StageChangeBuilder{}
	return builder
}

// 被更新的环节 ID
//
// 示例值：7026250586485114406
func (builder *StageChangeBuilder) StageId(stageId string) *StageChangeBuilder {
	builder.stageId = stageId
	builder.stageIdFlag = true
	return builder
}

// 环节类型
//
// 示例值：leader_review
func (builder *StageChangeBuilder) StageType(stageType string) *StageChangeBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 评估型环节的执行人角色
//
// 示例值：solid_line_leader
func (builder *StageChangeBuilder) ReviewStageRole(reviewStageRole string) *StageChangeBuilder {
	builder.reviewStageRole = reviewStageRole
	builder.reviewStageRoleFlag = true
	return builder
}

func (builder *StageChangeBuilder) Build() *StageChange {
	req := &StageChange{}
	if builder.stageIdFlag {
		req.StageId = &builder.stageId

	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.reviewStageRoleFlag {
		req.ReviewStageRole = &builder.reviewStageRole

	}
	return req
}

type SubIndicator struct {
	FieldId *string `json:"field_id,omitempty"` // 子评估项的 ID

	IndicatorId *string `json:"indicator_id,omitempty"` // 子评估项的评估等级 ID

	OptionId *string `json:"option_id,omitempty"` // 子评估项的评分

	Score *string `json:"score,omitempty"` // 子评估项的填写项标题名称

	Text *string `json:"text,omitempty"` // 评估人在该子评估项填写的文本

	Richtext *string `json:"richtext,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
}

type SubIndicatorBuilder struct {
	fieldId     string // 子评估项的 ID
	fieldIdFlag bool

	indicatorId     string // 子评估项的评估等级 ID
	indicatorIdFlag bool

	optionId     string // 子评估项的评分
	optionIdFlag bool

	score     string // 子评估项的填写项标题名称
	scoreFlag bool

	text     string // 评估人在该子评估项填写的文本
	textFlag bool

	richtext     string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	richtextFlag bool
}

func NewSubIndicatorBuilder() *SubIndicatorBuilder {
	builder := &SubIndicatorBuilder{}
	return builder
}

// 子评估项的 ID
//
// 示例值：7343513161666707459
func (builder *SubIndicatorBuilder) FieldId(fieldId string) *SubIndicatorBuilder {
	builder.fieldId = fieldId
	builder.fieldIdFlag = true
	return builder
}

// 子评估项的评估等级 ID
//
// 示例值：7343513161666707459
func (builder *SubIndicatorBuilder) IndicatorId(indicatorId string) *SubIndicatorBuilder {
	builder.indicatorId = indicatorId
	builder.indicatorIdFlag = true
	return builder
}

// 子评估项的评分
//
// 示例值：7343513161666707459
func (builder *SubIndicatorBuilder) OptionId(optionId string) *SubIndicatorBuilder {
	builder.optionId = optionId
	builder.optionIdFlag = true
	return builder
}

// 子评估项的填写项标题名称
//
// 示例值：1.1
func (builder *SubIndicatorBuilder) Score(score string) *SubIndicatorBuilder {
	builder.score = score
	builder.scoreFlag = true
	return builder
}

// 评估人在该子评估项填写的文本
//
// 示例值：qwertyuiop
func (builder *SubIndicatorBuilder) Text(text string) *SubIndicatorBuilder {
	builder.text = text
	builder.textFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：{"ops":[{"name":"insert","text":"qwerty","attributes":{"bold":true}}]}
func (builder *SubIndicatorBuilder) Richtext(richtext string) *SubIndicatorBuilder {
	builder.richtext = richtext
	builder.richtextFlag = true
	return builder
}

func (builder *SubIndicatorBuilder) Build() *SubIndicator {
	req := &SubIndicator{}
	if builder.fieldIdFlag {
		req.FieldId = &builder.fieldId

	}
	if builder.indicatorIdFlag {
		req.IndicatorId = &builder.indicatorId

	}
	if builder.optionIdFlag {
		req.OptionId = &builder.optionId

	}
	if builder.scoreFlag {
		req.Score = &builder.score

	}
	if builder.textFlag {
		req.Text = &builder.text

	}
	if builder.richtextFlag {
		req.Richtext = &builder.richtext

	}
	return req
}

type TagItem struct {
	Id *string `json:"id,omitempty"` // 标签 ID

	Name *I18n `json:"name,omitempty"` // 标签名称
}

type TagItemBuilder struct {
	id     string // 标签 ID
	idFlag bool

	name     *I18n // 标签名称
	nameFlag bool
}

func NewTagItemBuilder() *TagItemBuilder {
	builder := &TagItemBuilder{}
	return builder
}

// 标签 ID
//
// 示例值：7343513161666707459
func (builder *TagItemBuilder) Id(id string) *TagItemBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 标签名称
//
// 示例值：
func (builder *TagItemBuilder) Name(name *I18n) *TagItemBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

func (builder *TagItemBuilder) Build() *TagItem {
	req := &TagItem{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	return req
}

type TagText struct {
	TagTextId *string `json:"tag_text_id,omitempty"` // 标签 ID

	TagText *string `json:"tag_text,omitempty"` // 评估人在该标签下填写的文本

	TagRichtext *string `json:"tag_richtext,omitempty"` // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
}

type TagTextBuilder struct {
	tagTextId     string // 标签 ID
	tagTextIdFlag bool

	tagText     string // 评估人在该标签下填写的文本
	tagTextFlag bool

	tagRichtext     string // 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
	tagRichtextFlag bool
}

func NewTagTextBuilder() *TagTextBuilder {
	builder := &TagTextBuilder{}
	return builder
}

// 标签 ID
//
// 示例值：7343513161666707459
func (builder *TagTextBuilder) TagTextId(tagTextId string) *TagTextBuilder {
	builder.tagTextId = tagTextId
	builder.tagTextIdFlag = true
	return builder
}

// 评估人在该标签下填写的文本
//
// 示例值：qwertyu
func (builder *TagTextBuilder) TagText(tagText string) *TagTextBuilder {
	builder.tagText = tagText
	builder.tagTextFlag = true
	return builder
}

// 富文本格式的填写内容，解析方式见 [editor](https://open.larkoffice.com/document/client-docs/gadget/component-component/basic-component/form/editor#51af2f4f)
//
// 示例值：{"ops":[{"name":"insert","text":"qwerty","attributes":{"bold":true}}]}
func (builder *TagTextBuilder) TagRichtext(tagRichtext string) *TagTextBuilder {
	builder.tagRichtext = tagRichtext
	builder.tagRichtextFlag = true
	return builder
}

func (builder *TagTextBuilder) Build() *TagText {
	req := &TagText{}
	if builder.tagTextIdFlag {
		req.TagTextId = &builder.tagTextId

	}
	if builder.tagTextFlag {
		req.TagText = &builder.tagText

	}
	if builder.tagRichtextFlag {
		req.TagRichtext = &builder.tagRichtext

	}
	return req
}

type Template struct {
	TemplateId *string `json:"template_id,omitempty"` // 环节模板 ID

	Name *I18n `json:"name,omitempty"` // 环节模板对应的环节名称

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	ReviewStageRole *string `json:"review_stage_role,omitempty"` // 环节执行角色

	ReviewStageDataWriteMode *string `json:"review_stage_data_write_mode,omitempty"` // 评估型环节评估模式
}

type TemplateBuilder struct {
	templateId     string // 环节模板 ID
	templateIdFlag bool

	name     *I18n // 环节模板对应的环节名称
	nameFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	reviewStageRole     string // 环节执行角色
	reviewStageRoleFlag bool

	reviewStageDataWriteMode     string // 评估型环节评估模式
	reviewStageDataWriteModeFlag bool
}

func NewTemplateBuilder() *TemplateBuilder {
	builder := &TemplateBuilder{}
	return builder
}

// 环节模板 ID
//
// 示例值：7343513161666707459
func (builder *TemplateBuilder) TemplateId(templateId string) *TemplateBuilder {
	builder.templateId = templateId
	builder.templateIdFlag = true
	return builder
}

// 环节模板对应的环节名称
//
// 示例值：
func (builder *TemplateBuilder) Name(name *I18n) *TemplateBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 环节类型
//
// 示例值：leader_review
func (builder *TemplateBuilder) StageType(stageType string) *TemplateBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 环节执行角色
//
// 示例值：reviewee
func (builder *TemplateBuilder) ReviewStageRole(reviewStageRole string) *TemplateBuilder {
	builder.reviewStageRole = reviewStageRole
	builder.reviewStageRoleFlag = true
	return builder
}

// 评估型环节评估模式
//
// 示例值：cooperate,independent
func (builder *TemplateBuilder) ReviewStageDataWriteMode(reviewStageDataWriteMode string) *TemplateBuilder {
	builder.reviewStageDataWriteMode = reviewStageDataWriteMode
	builder.reviewStageDataWriteModeFlag = true
	return builder
}

func (builder *TemplateBuilder) Build() *Template {
	req := &Template{}
	if builder.templateIdFlag {
		req.TemplateId = &builder.templateId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.reviewStageRoleFlag {
		req.ReviewStageRole = &builder.reviewStageRole

	}
	if builder.reviewStageDataWriteModeFlag {
		req.ReviewStageDataWriteMode = &builder.reviewStageDataWriteMode

	}
	return req
}

type TemplateStage struct {
	Id *string `json:"id,omitempty"` // 模板环节ID

	Name *I18n `json:"name,omitempty"` // 环节名称

	TemplateGroupId *string `json:"template_group_id,omitempty"` // 评估模板ID

	StageType *string `json:"stage_type,omitempty"` // 环节类型

	PerformRole *string `json:"perform_role,omitempty"` // 执行角色

	AsFinalResult *bool `json:"as_final_result,omitempty"` // 是否作为终评
}

type TemplateStageBuilder struct {
	id     string // 模板环节ID
	idFlag bool

	name     *I18n // 环节名称
	nameFlag bool

	templateGroupId     string // 评估模板ID
	templateGroupIdFlag bool

	stageType     string // 环节类型
	stageTypeFlag bool

	performRole     string // 执行角色
	performRoleFlag bool

	asFinalResult     bool // 是否作为终评
	asFinalResultFlag bool
}

func NewTemplateStageBuilder() *TemplateStageBuilder {
	builder := &TemplateStageBuilder{}
	return builder
}

// 模板环节ID
//
// 示例值：7343513161666707459
func (builder *TemplateStageBuilder) Id(id string) *TemplateStageBuilder {
	builder.id = id
	builder.idFlag = true
	return builder
}

// 环节名称
//
// 示例值：
func (builder *TemplateStageBuilder) Name(name *I18n) *TemplateStageBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 评估模板ID
//
// 示例值：7343513161666707459
func (builder *TemplateStageBuilder) TemplateGroupId(templateGroupId string) *TemplateStageBuilder {
	builder.templateGroupId = templateGroupId
	builder.templateGroupIdFlag = true
	return builder
}

// 环节类型
//
// 示例值：
func (builder *TemplateStageBuilder) StageType(stageType string) *TemplateStageBuilder {
	builder.stageType = stageType
	builder.stageTypeFlag = true
	return builder
}

// 执行角色
//
// 示例值：
func (builder *TemplateStageBuilder) PerformRole(performRole string) *TemplateStageBuilder {
	builder.performRole = performRole
	builder.performRoleFlag = true
	return builder
}

// 是否作为终评
//
// 示例值：
func (builder *TemplateStageBuilder) AsFinalResult(asFinalResult bool) *TemplateStageBuilder {
	builder.asFinalResult = asFinalResult
	builder.asFinalResultFlag = true
	return builder
}

func (builder *TemplateStageBuilder) Build() *TemplateStage {
	req := &TemplateStage{}
	if builder.idFlag {
		req.Id = &builder.id

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.templateGroupIdFlag {
		req.TemplateGroupId = &builder.templateGroupId

	}
	if builder.stageTypeFlag {
		req.StageType = &builder.stageType

	}
	if builder.performRoleFlag {
		req.PerformRole = &builder.performRole

	}
	if builder.asFinalResultFlag {
		req.AsFinalResult = &builder.asFinalResult

	}
	return req
}

type Unit struct {
	UnitId *string `json:"unit_id,omitempty"` // 评估内容 ID

	Name *I18n `json:"name,omitempty"` // 评估内容名称

	Fields []*Field `json:"fields,omitempty"` // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
}

type UnitBuilder struct {
	unitId     string // 评估内容 ID
	unitIdFlag bool

	name     *I18n // 评估内容名称
	nameFlag bool

	fields     []*Field // 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
	fieldsFlag bool
}

func NewUnitBuilder() *UnitBuilder {
	builder := &UnitBuilder{}
	return builder
}

// 评估内容 ID
//
// 示例值：7343513161666723843
func (builder *UnitBuilder) UnitId(unitId string) *UnitBuilder {
	builder.unitId = unitId
	builder.unitIdFlag = true
	return builder
}

// 评估内容名称
//
// 示例值：
func (builder *UnitBuilder) Name(name *I18n) *UnitBuilder {
	builder.name = name
	builder.nameFlag = true
	return builder
}

// 评估题列表，指评估内容中的每个题，可能是评估项或者填写项
//
// 示例值：
func (builder *UnitBuilder) Fields(fields []*Field) *UnitBuilder {
	builder.fields = fields
	builder.fieldsFlag = true
	return builder
}

func (builder *UnitBuilder) Build() *Unit {
	req := &Unit{}
	if builder.unitIdFlag {
		req.UnitId = &builder.unitId

	}
	if builder.nameFlag {
		req.Name = builder.name
	}
	if builder.fieldsFlag {
		req.Fields = builder.fields
	}
	return req
}

type User struct {
	OpenId *string `json:"open_id,omitempty"` // 用户的 open_id

	UserId *string `json:"user_id,omitempty"` // 用户的 user_id，取值与user_id_type一致
}

type UserBuilder struct {
	openId     string // 用户的 open_id
	openIdFlag bool

	userId     string // 用户的 user_id，取值与user_id_type一致
	userIdFlag bool
}

func NewUserBuilder() *UserBuilder {
	builder := &UserBuilder{}
	return builder
}

// 用户的 open_id
//
// 示例值：od-asd2dasdasd
func (builder *UserBuilder) OpenId(openId string) *UserBuilder {
	builder.openId = openId
	builder.openIdFlag = true
	return builder
}

// 用户的 user_id，取值与user_id_type一致
//
// 示例值：ou-ux987dsf6x
func (builder *UserBuilder) UserId(userId string) *UserBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

func (builder *UserBuilder) Build() *User {
	req := &User{}
	if builder.openIdFlag {
		req.OpenId = &builder.openId

	}
	if builder.userIdFlag {
		req.UserId = &builder.userId

	}
	return req
}

type UserEvaluationScale struct {
	IndicatorId *string `json:"indicator_id,omitempty"` // 评估项 ID

	DistributeType *int `json:"distribute_type,omitempty"` // 360° 评估人的评估尺度标签

	AvgDiff *string `json:"avg_diff,omitempty"` // 360° 评估人的评估尺度数值
}

type UserEvaluationScaleBuilder struct {
	indicatorId     string // 评估项 ID
	indicatorIdFlag bool

	distributeType     int // 360° 评估人的评估尺度标签
	distributeTypeFlag bool

	avgDiff     string // 360° 评估人的评估尺度数值
	avgDiffFlag bool
}

func NewUserEvaluationScaleBuilder() *UserEvaluationScaleBuilder {
	builder := &UserEvaluationScaleBuilder{}
	return builder
}

// 评估项 ID
//
// 示例值：7343513161666707459
func (builder *UserEvaluationScaleBuilder) IndicatorId(indicatorId string) *UserEvaluationScaleBuilder {
	builder.indicatorId = indicatorId
	builder.indicatorIdFlag = true
	return builder
}

// 360° 评估人的评估尺度标签
//
// 示例值：1
func (builder *UserEvaluationScaleBuilder) DistributeType(distributeType int) *UserEvaluationScaleBuilder {
	builder.distributeType = distributeType
	builder.distributeTypeFlag = true
	return builder
}

// 360° 评估人的评估尺度数值
//
// 示例值：1.23
func (builder *UserEvaluationScaleBuilder) AvgDiff(avgDiff string) *UserEvaluationScaleBuilder {
	builder.avgDiff = avgDiff
	builder.avgDiffFlag = true
	return builder
}

func (builder *UserEvaluationScaleBuilder) Build() *UserEvaluationScale {
	req := &UserEvaluationScale{}
	if builder.indicatorIdFlag {
		req.IndicatorId = &builder.indicatorId

	}
	if builder.distributeTypeFlag {
		req.DistributeType = &builder.distributeType

	}
	if builder.avgDiffFlag {
		req.AvgDiff = &builder.avgDiff

	}
	return req
}

type UserId struct {
	UserId *string `json:"user_id,omitempty"` //

	OpenId *string `json:"open_id,omitempty"` //

	UnionId *string `json:"union_id,omitempty"` //
}

type UserIdBuilder struct {
	userId     string //
	userIdFlag bool

	openId     string //
	openIdFlag bool

	unionId     string //
	unionIdFlag bool
}

func NewUserIdBuilder() *UserIdBuilder {
	builder := &UserIdBuilder{}
	return builder
}

//
//
// 示例值：
func (builder *UserIdBuilder) UserId(userId string) *UserIdBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

//
//
// 示例值：
func (builder *UserIdBuilder) OpenId(openId string) *UserIdBuilder {
	builder.openId = openId
	builder.openIdFlag = true
	return builder
}

//
//
// 示例值：
func (builder *UserIdBuilder) UnionId(unionId string) *UserIdBuilder {
	builder.unionId = unionId
	builder.unionIdFlag = true
	return builder
}

func (builder *UserIdBuilder) Build() *UserId {
	req := &UserId{}
	if builder.userIdFlag {
		req.UserId = &builder.userId

	}
	if builder.openIdFlag {
		req.OpenId = &builder.openId

	}
	if builder.unionIdFlag {
		req.UnionId = &builder.unionId

	}
	return req
}

type UserInfo struct {
	UserId *User `json:"user_id,omitempty"` // 人员

	DirectLeaderUserId *User `json:"direct_leader_user_id,omitempty"` // 用户的直属上级的用户ID

	Department *Department `json:"department,omitempty"` // 人员的部门

	JobFamily *JobFamily `json:"job_family,omitempty"` // 人员的序列

	JobLevel *JobLevel `json:"job_level,omitempty"` // 人员的职级
}

type UserInfoBuilder struct {
	userId     *User // 人员
	userIdFlag bool

	directLeaderUserId     *User // 用户的直属上级的用户ID
	directLeaderUserIdFlag bool

	department     *Department // 人员的部门
	departmentFlag bool

	jobFamily     *JobFamily // 人员的序列
	jobFamilyFlag bool

	jobLevel     *JobLevel // 人员的职级
	jobLevelFlag bool
}

func NewUserInfoBuilder() *UserInfoBuilder {
	builder := &UserInfoBuilder{}
	return builder
}

// 人员
//
// 示例值：
func (builder *UserInfoBuilder) UserId(userId *User) *UserInfoBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 用户的直属上级的用户ID
//
// 示例值：
func (builder *UserInfoBuilder) DirectLeaderUserId(directLeaderUserId *User) *UserInfoBuilder {
	builder.directLeaderUserId = directLeaderUserId
	builder.directLeaderUserIdFlag = true
	return builder
}

// 人员的部门
//
// 示例值：
func (builder *UserInfoBuilder) Department(department *Department) *UserInfoBuilder {
	builder.department = department
	builder.departmentFlag = true
	return builder
}

// 人员的序列
//
// 示例值：
func (builder *UserInfoBuilder) JobFamily(jobFamily *JobFamily) *UserInfoBuilder {
	builder.jobFamily = jobFamily
	builder.jobFamilyFlag = true
	return builder
}

// 人员的职级
//
// 示例值：
func (builder *UserInfoBuilder) JobLevel(jobLevel *JobLevel) *UserInfoBuilder {
	builder.jobLevel = jobLevel
	builder.jobLevelFlag = true
	return builder
}

func (builder *UserInfoBuilder) Build() *UserInfo {
	req := &UserInfo{}
	if builder.userIdFlag {
		req.UserId = builder.userId
	}
	if builder.directLeaderUserIdFlag {
		req.DirectLeaderUserId = builder.directLeaderUserId
	}
	if builder.departmentFlag {
		req.Department = builder.department
	}
	if builder.jobFamilyFlag {
		req.JobFamily = builder.jobFamily
	}
	if builder.jobLevelFlag {
		req.JobLevel = builder.jobLevel
	}
	return req
}

type UserOkr struct {
	RevieweeUserId *User `json:"reviewee_user_id,omitempty"` // 被评估人 ID

	Okrs []*Okr `json:"okrs,omitempty"` // OKR快照数据
}

type UserOkrBuilder struct {
	revieweeUserId     *User // 被评估人 ID
	revieweeUserIdFlag bool

	okrs     []*Okr // OKR快照数据
	okrsFlag bool
}

func NewUserOkrBuilder() *UserOkrBuilder {
	builder := &UserOkrBuilder{}
	return builder
}

// 被评估人 ID
//
// 示例值：
func (builder *UserOkrBuilder) RevieweeUserId(revieweeUserId *User) *UserOkrBuilder {
	builder.revieweeUserId = revieweeUserId
	builder.revieweeUserIdFlag = true
	return builder
}

// OKR快照数据
//
// 示例值：
func (builder *UserOkrBuilder) Okrs(okrs []*Okr) *UserOkrBuilder {
	builder.okrs = okrs
	builder.okrsFlag = true
	return builder
}

func (builder *UserOkrBuilder) Build() *UserOkr {
	req := &UserOkr{}
	if builder.revieweeUserIdFlag {
		req.RevieweeUserId = builder.revieweeUserId
	}
	if builder.okrsFlag {
		req.Okrs = builder.okrs
	}
	return req
}

type WriteUserGroupScopeData struct {
	SuccessUserIds []string `json:"success_user_ids,omitempty"` // 写入成功员工user_id列表

	FailUserDatas []*WriteUserGroupScopeFailUserData `json:"fail_user_datas,omitempty"` // 失败的员工信息列表
}

type WriteUserGroupScopeDataBuilder struct {
	successUserIds     []string // 写入成功员工user_id列表
	successUserIdsFlag bool

	failUserDatas     []*WriteUserGroupScopeFailUserData // 失败的员工信息列表
	failUserDatasFlag bool
}

func NewWriteUserGroupScopeDataBuilder() *WriteUserGroupScopeDataBuilder {
	builder := &WriteUserGroupScopeDataBuilder{}
	return builder
}

// 写入成功员工user_id列表
//
// 示例值：
func (builder *WriteUserGroupScopeDataBuilder) SuccessUserIds(successUserIds []string) *WriteUserGroupScopeDataBuilder {
	builder.successUserIds = successUserIds
	builder.successUserIdsFlag = true
	return builder
}

// 失败的员工信息列表
//
// 示例值：
func (builder *WriteUserGroupScopeDataBuilder) FailUserDatas(failUserDatas []*WriteUserGroupScopeFailUserData) *WriteUserGroupScopeDataBuilder {
	builder.failUserDatas = failUserDatas
	builder.failUserDatasFlag = true
	return builder
}

func (builder *WriteUserGroupScopeDataBuilder) Build() *WriteUserGroupScopeData {
	req := &WriteUserGroupScopeData{}
	if builder.successUserIdsFlag {
		req.SuccessUserIds = builder.successUserIds
	}
	if builder.failUserDatasFlag {
		req.FailUserDatas = builder.failUserDatas
	}
	return req
}

type WriteUserGroupScopeFailUserData struct {
	UserId *string `json:"user_id,omitempty"` // 员工user_id

	FailCode *int `json:"fail_code,omitempty"` // 失败原因枚举
}

type WriteUserGroupScopeFailUserDataBuilder struct {
	userId     string // 员工user_id
	userIdFlag bool

	failCode     int // 失败原因枚举
	failCodeFlag bool
}

func NewWriteUserGroupScopeFailUserDataBuilder() *WriteUserGroupScopeFailUserDataBuilder {
	builder := &WriteUserGroupScopeFailUserDataBuilder{}
	return builder
}

// 员工user_id
//
// 示例值：
func (builder *WriteUserGroupScopeFailUserDataBuilder) UserId(userId string) *WriteUserGroupScopeFailUserDataBuilder {
	builder.userId = userId
	builder.userIdFlag = true
	return builder
}

// 失败原因枚举
//
// 示例值：1
func (builder *WriteUserGroupScopeFailUserDataBuilder) FailCode(failCode int) *WriteUserGroupScopeFailUserDataBuilder {
	builder.failCode = failCode
	builder.failCodeFlag = true
	return builder
}

func (builder *WriteUserGroupScopeFailUserDataBuilder) Build() *WriteUserGroupScopeFailUserData {
	req := &WriteUserGroupScopeFailUserData{}
	if builder.userIdFlag {
		req.UserId = &builder.userId

	}
	if builder.failCodeFlag {
		req.FailCode = &builder.failCode

	}
	return req
}

type QueryActivityReqBodyBuilder struct {
	semesterIds     []string // 评估周期 ID 列表，获取指定评估周期的项目 ID，semester_id 可通过【获取周期】接口获得
	semesterIdsFlag bool

	activityIds     []string // 项目 ID 列表，如果同时传了「semester_ids」，则优先以「activity_ids」进行查询
	activityIdsFlag bool
}

func NewQueryActivityReqBodyBuilder() *QueryActivityReqBodyBuilder {
	builder := &QueryActivityReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，获取指定评估周期的项目 ID，semester_id 可通过【获取周期】接口获得
//
//示例值：
func (builder *QueryActivityReqBodyBuilder) SemesterIds(semesterIds []string) *QueryActivityReqBodyBuilder {
	builder.semesterIds = semesterIds
	builder.semesterIdsFlag = true
	return builder
}

// 项目 ID 列表，如果同时传了「semester_ids」，则优先以「activity_ids」进行查询
//
//示例值：
func (builder *QueryActivityReqBodyBuilder) ActivityIds(activityIds []string) *QueryActivityReqBodyBuilder {
	builder.activityIds = activityIds
	builder.activityIdsFlag = true
	return builder
}

func (builder *QueryActivityReqBodyBuilder) Build() *QueryActivityReqBody {
	req := &QueryActivityReqBody{}
	if builder.semesterIdsFlag {
		req.SemesterIds = builder.semesterIds
	}
	if builder.activityIdsFlag {
		req.ActivityIds = builder.activityIds
	}
	return req
}

type QueryActivityPathReqBodyBuilder struct {
	semesterIds     []string
	semesterIdsFlag bool
	activityIds     []string
	activityIdsFlag bool
}

func NewQueryActivityPathReqBodyBuilder() *QueryActivityPathReqBodyBuilder {
	builder := &QueryActivityPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，获取指定评估周期的项目 ID，semester_id 可通过【获取周期】接口获得
//
// 示例值：
func (builder *QueryActivityPathReqBodyBuilder) SemesterIds(semesterIds []string) *QueryActivityPathReqBodyBuilder {
	builder.semesterIds = semesterIds
	builder.semesterIdsFlag = true
	return builder
}

// 项目 ID 列表，如果同时传了「semester_ids」，则优先以「activity_ids」进行查询
//
// 示例值：
func (builder *QueryActivityPathReqBodyBuilder) ActivityIds(activityIds []string) *QueryActivityPathReqBodyBuilder {
	builder.activityIds = activityIds
	builder.activityIdsFlag = true
	return builder
}

func (builder *QueryActivityPathReqBodyBuilder) Build() (*QueryActivityReqBody, error) {
	req := &QueryActivityReqBody{}
	if builder.semesterIdsFlag {
		req.SemesterIds = builder.semesterIds
	}
	if builder.activityIdsFlag {
		req.ActivityIds = builder.activityIds
	}
	return req, nil
}

type QueryActivityReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryActivityReqBody
}

func NewQueryActivityReqBuilder() *QueryActivityReqBuilder {
	builder := &QueryActivityReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryActivityReqBuilder) UserIdType(userIdType string) *QueryActivityReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 获取项目的信息
func (builder *QueryActivityReqBuilder) Body(body *QueryActivityReqBody) *QueryActivityReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryActivityReqBuilder) Build() *QueryActivityReq {
	req := &QueryActivityReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryActivityReqBody struct {
	SemesterIds []string `json:"semester_ids,omitempty"` // 评估周期 ID 列表，获取指定评估周期的项目 ID，semester_id 可通过【获取周期】接口获得

	ActivityIds []string `json:"activity_ids,omitempty"` // 项目 ID 列表，如果同时传了「semester_ids」，则优先以「activity_ids」进行查询
}

type QueryActivityReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryActivityReqBody `body:""`
}

type QueryActivityRespData struct {
	Activities []*Activity `json:"activities,omitempty"` // 绩效评估项目列表。
}

type QueryActivityResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryActivityRespData `json:"data"` // 业务数据
}

func (resp *QueryActivityResp) Success() bool {
	return resp.Code == 0
}

type ImportAdditionalInformationReqBodyBuilder struct {
	semesterId     string // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	additionalInformations     []*AdditionalInformation // 补充信息列表，一次最多 1000 个
	additionalInformationsFlag bool

	importRecordName     string // 导入记录名称，管理员可在补充信息管理的导入记录中查看。不传则默认为 API 导入。
	importRecordNameFlag bool
}

func NewImportAdditionalInformationReqBodyBuilder() *ImportAdditionalInformationReqBodyBuilder {
	builder := &ImportAdditionalInformationReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
//示例值：7348736302176534547
func (builder *ImportAdditionalInformationReqBodyBuilder) SemesterId(semesterId string) *ImportAdditionalInformationReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 补充信息列表，一次最多 1000 个
//
//示例值：
func (builder *ImportAdditionalInformationReqBodyBuilder) AdditionalInformations(additionalInformations []*AdditionalInformation) *ImportAdditionalInformationReqBodyBuilder {
	builder.additionalInformations = additionalInformations
	builder.additionalInformationsFlag = true
	return builder
}

// 导入记录名称，管理员可在补充信息管理的导入记录中查看。不传则默认为 API 导入。
//
//示例值：API导入
func (builder *ImportAdditionalInformationReqBodyBuilder) ImportRecordName(importRecordName string) *ImportAdditionalInformationReqBodyBuilder {
	builder.importRecordName = importRecordName
	builder.importRecordNameFlag = true
	return builder
}

func (builder *ImportAdditionalInformationReqBodyBuilder) Build() *ImportAdditionalInformationReqBody {
	req := &ImportAdditionalInformationReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.additionalInformationsFlag {
		req.AdditionalInformations = builder.additionalInformations
	}
	if builder.importRecordNameFlag {
		req.ImportRecordName = &builder.importRecordName
	}
	return req
}

type ImportAdditionalInformationPathReqBodyBuilder struct {
	semesterId                 string
	semesterIdFlag             bool
	additionalInformations     []*AdditionalInformation
	additionalInformationsFlag bool
	importRecordName           string
	importRecordNameFlag       bool
}

func NewImportAdditionalInformationPathReqBodyBuilder() *ImportAdditionalInformationPathReqBodyBuilder {
	builder := &ImportAdditionalInformationPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
// 示例值：7348736302176534547
func (builder *ImportAdditionalInformationPathReqBodyBuilder) SemesterId(semesterId string) *ImportAdditionalInformationPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 补充信息列表，一次最多 1000 个
//
// 示例值：
func (builder *ImportAdditionalInformationPathReqBodyBuilder) AdditionalInformations(additionalInformations []*AdditionalInformation) *ImportAdditionalInformationPathReqBodyBuilder {
	builder.additionalInformations = additionalInformations
	builder.additionalInformationsFlag = true
	return builder
}

// 导入记录名称，管理员可在补充信息管理的导入记录中查看。不传则默认为 API 导入。
//
// 示例值：API导入
func (builder *ImportAdditionalInformationPathReqBodyBuilder) ImportRecordName(importRecordName string) *ImportAdditionalInformationPathReqBodyBuilder {
	builder.importRecordName = importRecordName
	builder.importRecordNameFlag = true
	return builder
}

func (builder *ImportAdditionalInformationPathReqBodyBuilder) Build() (*ImportAdditionalInformationReqBody, error) {
	req := &ImportAdditionalInformationReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.additionalInformationsFlag {
		req.AdditionalInformations = builder.additionalInformations
	}
	if builder.importRecordNameFlag {
		req.ImportRecordName = &builder.importRecordName
	}
	return req, nil
}

type ImportAdditionalInformationReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *ImportAdditionalInformationReqBody
}

func NewImportAdditionalInformationReqBuilder() *ImportAdditionalInformationReqBuilder {
	builder := &ImportAdditionalInformationReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 根据 client_token 是否一致来判断是否为同一请求
//
// 示例值：12454646
func (builder *ImportAdditionalInformationReqBuilder) ClientToken(clientToken string) *ImportAdditionalInformationReqBuilder {
	builder.apiReq.QueryParams.Set("client_token", fmt.Sprint(clientToken))
	return builder
}

//
//
// 示例值：open_id
func (builder *ImportAdditionalInformationReqBuilder) UserIdType(userIdType string) *ImportAdditionalInformationReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 可批量导入被评估人的补充信息作为评估参考（包括新增和更新场景）
func (builder *ImportAdditionalInformationReqBuilder) Body(body *ImportAdditionalInformationReqBody) *ImportAdditionalInformationReqBuilder {
	builder.body = body
	return builder
}

func (builder *ImportAdditionalInformationReqBuilder) Build() *ImportAdditionalInformationReq {
	req := &ImportAdditionalInformationReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type ImportAdditionalInformationReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得

	AdditionalInformations []*AdditionalInformation `json:"additional_informations,omitempty"` // 补充信息列表，一次最多 1000 个

	ImportRecordName *string `json:"import_record_name,omitempty"` // 导入记录名称，管理员可在补充信息管理的导入记录中查看。不传则默认为 API 导入。
}

type ImportAdditionalInformationReq struct {
	apiReq *larkcore.ApiReq
	Body   *ImportAdditionalInformationReqBody `body:""`
}

type ImportAdditionalInformationRespData struct {
	ImportRecordId *string `json:"import_record_id,omitempty"` // 导入记录 ID

	AdditionalInformations []*AdditionalInformation `json:"additional_informations,omitempty"` // 成功导入后的补充信息列表
}

type ImportAdditionalInformationResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *ImportAdditionalInformationRespData `json:"data"` // 业务数据
}

func (resp *ImportAdditionalInformationResp) Success() bool {
	return resp.Code == 0
}

type QueryAdditionalInformationReqBodyBuilder struct {
	semesterId     string // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	itemIds     []string // 事项 ID 列表，获取指定事项 ID 的信息。以下请求参数中「item_ids」、「external_ids」、「reviewee_user_ids」均为空时，返回该评估周期的所有补充信息。若单次请求中多个请求参数有值，按照【item_ids > external_ids > reviewee_user_ids】的顺序只识别第一个有值的请求参数
	itemIdsFlag bool

	externalIds     []string // 外部系统的事项 ID 列表，获取对应的飞书绩效事项 ID。「item_ids」参数有值时该参数不生效
	externalIdsFlag bool

	revieweeUserIds     []string // 被评估人 ID 列表，获取周期下被评估人的事项信息。「item_ids」、「external_ids」参数有值时该参数不生效
	revieweeUserIdsFlag bool
}

func NewQueryAdditionalInformationReqBodyBuilder() *QueryAdditionalInformationReqBodyBuilder {
	builder := &QueryAdditionalInformationReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
//示例值：7348736302176534547
func (builder *QueryAdditionalInformationReqBodyBuilder) SemesterId(semesterId string) *QueryAdditionalInformationReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 事项 ID 列表，获取指定事项 ID 的信息。以下请求参数中「item_ids」、「external_ids」、「reviewee_user_ids」均为空时，返回该评估周期的所有补充信息。若单次请求中多个请求参数有值，按照【item_ids > external_ids > reviewee_user_ids】的顺序只识别第一个有值的请求参数
//
//示例值：
func (builder *QueryAdditionalInformationReqBodyBuilder) ItemIds(itemIds []string) *QueryAdditionalInformationReqBodyBuilder {
	builder.itemIds = itemIds
	builder.itemIdsFlag = true
	return builder
}

// 外部系统的事项 ID 列表，获取对应的飞书绩效事项 ID。「item_ids」参数有值时该参数不生效
//
//示例值：
func (builder *QueryAdditionalInformationReqBodyBuilder) ExternalIds(externalIds []string) *QueryAdditionalInformationReqBodyBuilder {
	builder.externalIds = externalIds
	builder.externalIdsFlag = true
	return builder
}

// 被评估人 ID 列表，获取周期下被评估人的事项信息。「item_ids」、「external_ids」参数有值时该参数不生效
//
//示例值：
func (builder *QueryAdditionalInformationReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryAdditionalInformationReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

func (builder *QueryAdditionalInformationReqBodyBuilder) Build() *QueryAdditionalInformationReqBody {
	req := &QueryAdditionalInformationReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.itemIdsFlag {
		req.ItemIds = builder.itemIds
	}
	if builder.externalIdsFlag {
		req.ExternalIds = builder.externalIds
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	return req
}

type QueryAdditionalInformationPathReqBodyBuilder struct {
	semesterId          string
	semesterIdFlag      bool
	itemIds             []string
	itemIdsFlag         bool
	externalIds         []string
	externalIdsFlag     bool
	revieweeUserIds     []string
	revieweeUserIdsFlag bool
}

func NewQueryAdditionalInformationPathReqBodyBuilder() *QueryAdditionalInformationPathReqBodyBuilder {
	builder := &QueryAdditionalInformationPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
// 示例值：7348736302176534547
func (builder *QueryAdditionalInformationPathReqBodyBuilder) SemesterId(semesterId string) *QueryAdditionalInformationPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 事项 ID 列表，获取指定事项 ID 的信息。以下请求参数中「item_ids」、「external_ids」、「reviewee_user_ids」均为空时，返回该评估周期的所有补充信息。若单次请求中多个请求参数有值，按照【item_ids > external_ids > reviewee_user_ids】的顺序只识别第一个有值的请求参数
//
// 示例值：
func (builder *QueryAdditionalInformationPathReqBodyBuilder) ItemIds(itemIds []string) *QueryAdditionalInformationPathReqBodyBuilder {
	builder.itemIds = itemIds
	builder.itemIdsFlag = true
	return builder
}

// 外部系统的事项 ID 列表，获取对应的飞书绩效事项 ID。「item_ids」参数有值时该参数不生效
//
// 示例值：
func (builder *QueryAdditionalInformationPathReqBodyBuilder) ExternalIds(externalIds []string) *QueryAdditionalInformationPathReqBodyBuilder {
	builder.externalIds = externalIds
	builder.externalIdsFlag = true
	return builder
}

// 被评估人 ID 列表，获取周期下被评估人的事项信息。「item_ids」、「external_ids」参数有值时该参数不生效
//
// 示例值：
func (builder *QueryAdditionalInformationPathReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryAdditionalInformationPathReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

func (builder *QueryAdditionalInformationPathReqBodyBuilder) Build() (*QueryAdditionalInformationReqBody, error) {
	req := &QueryAdditionalInformationReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.itemIdsFlag {
		req.ItemIds = builder.itemIds
	}
	if builder.externalIdsFlag {
		req.ExternalIds = builder.externalIds
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	return req, nil
}

type QueryAdditionalInformationReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryAdditionalInformationReqBody
	limit  int // 最大返回多少记录，当使用迭代器访问时才有效
}

func NewQueryAdditionalInformationReqBuilder() *QueryAdditionalInformationReqBuilder {
	builder := &QueryAdditionalInformationReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 最大返回多少记录，当使用迭代器访问时才有效
func (builder *QueryAdditionalInformationReqBuilder) Limit(limit int) *QueryAdditionalInformationReqBuilder {
	builder.limit = limit
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryAdditionalInformationReqBuilder) UserIdType(userIdType string) *QueryAdditionalInformationReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取查询结果
//
// 示例值：
func (builder *QueryAdditionalInformationReqBuilder) PageToken(pageToken string) *QueryAdditionalInformationReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小 示例值：30 默认值：20 数据校验规则：最大值：50
//
// 示例值：30
func (builder *QueryAdditionalInformationReqBuilder) PageSize(pageSize int) *QueryAdditionalInformationReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 可批量查询被评估人的补充信息
func (builder *QueryAdditionalInformationReqBuilder) Body(body *QueryAdditionalInformationReqBody) *QueryAdditionalInformationReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryAdditionalInformationReqBuilder) Build() *QueryAdditionalInformationReq {
	req := &QueryAdditionalInformationReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.Limit = builder.limit
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryAdditionalInformationReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得

	ItemIds []string `json:"item_ids,omitempty"` // 事项 ID 列表，获取指定事项 ID 的信息。以下请求参数中「item_ids」、「external_ids」、「reviewee_user_ids」均为空时，返回该评估周期的所有补充信息。若单次请求中多个请求参数有值，按照【item_ids > external_ids > reviewee_user_ids】的顺序只识别第一个有值的请求参数

	ExternalIds []string `json:"external_ids,omitempty"` // 外部系统的事项 ID 列表，获取对应的飞书绩效事项 ID。「item_ids」参数有值时该参数不生效

	RevieweeUserIds []string `json:"reviewee_user_ids,omitempty"` // 被评估人 ID 列表，获取周期下被评估人的事项信息。「item_ids」、「external_ids」参数有值时该参数不生效
}

type QueryAdditionalInformationReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryAdditionalInformationReqBody `body:""`
	Limit  int                                // 最多返回多少记录，只有在使用迭代器访问时，才有效

}

type QueryAdditionalInformationRespData struct {
	AdditionalInformations []*AdditionalInformation `json:"additional_informations,omitempty"` // 补充信息列表

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryAdditionalInformationResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryAdditionalInformationRespData `json:"data"` // 业务数据
}

func (resp *QueryAdditionalInformationResp) Success() bool {
	return resp.Code == 0
}

type DeleteAdditionalInformationsBatchReqBodyBuilder struct {
	semesterId     string // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	additionalInformations     []string // 补充信息列表，一次最多 100 个
	additionalInformationsFlag bool
}

func NewDeleteAdditionalInformationsBatchReqBodyBuilder() *DeleteAdditionalInformationsBatchReqBodyBuilder {
	builder := &DeleteAdditionalInformationsBatchReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
//示例值：7348736302176534547
func (builder *DeleteAdditionalInformationsBatchReqBodyBuilder) SemesterId(semesterId string) *DeleteAdditionalInformationsBatchReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 补充信息列表，一次最多 100 个
//
//示例值：
func (builder *DeleteAdditionalInformationsBatchReqBodyBuilder) AdditionalInformations(additionalInformations []string) *DeleteAdditionalInformationsBatchReqBodyBuilder {
	builder.additionalInformations = additionalInformations
	builder.additionalInformationsFlag = true
	return builder
}

func (builder *DeleteAdditionalInformationsBatchReqBodyBuilder) Build() *DeleteAdditionalInformationsBatchReqBody {
	req := &DeleteAdditionalInformationsBatchReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.additionalInformationsFlag {
		req.AdditionalInformations = builder.additionalInformations
	}
	return req
}

type DeleteAdditionalInformationsBatchPathReqBodyBuilder struct {
	semesterId                 string
	semesterIdFlag             bool
	additionalInformations     []string
	additionalInformationsFlag bool
}

func NewDeleteAdditionalInformationsBatchPathReqBodyBuilder() *DeleteAdditionalInformationsBatchPathReqBodyBuilder {
	builder := &DeleteAdditionalInformationsBatchPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得
//
// 示例值：7348736302176534547
func (builder *DeleteAdditionalInformationsBatchPathReqBodyBuilder) SemesterId(semesterId string) *DeleteAdditionalInformationsBatchPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 补充信息列表，一次最多 100 个
//
// 示例值：
func (builder *DeleteAdditionalInformationsBatchPathReqBodyBuilder) AdditionalInformations(additionalInformations []string) *DeleteAdditionalInformationsBatchPathReqBodyBuilder {
	builder.additionalInformations = additionalInformations
	builder.additionalInformationsFlag = true
	return builder
}

func (builder *DeleteAdditionalInformationsBatchPathReqBodyBuilder) Build() (*DeleteAdditionalInformationsBatchReqBody, error) {
	req := &DeleteAdditionalInformationsBatchReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.additionalInformationsFlag {
		req.AdditionalInformations = builder.additionalInformations
	}
	return req, nil
}

type DeleteAdditionalInformationsBatchReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *DeleteAdditionalInformationsBatchReqBody
}

func NewDeleteAdditionalInformationsBatchReqBuilder() *DeleteAdditionalInformationsBatchReqBuilder {
	builder := &DeleteAdditionalInformationsBatchReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *DeleteAdditionalInformationsBatchReqBuilder) UserIdType(userIdType string) *DeleteAdditionalInformationsBatchReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 批量删除补充信息
func (builder *DeleteAdditionalInformationsBatchReqBuilder) Body(body *DeleteAdditionalInformationsBatchReqBody) *DeleteAdditionalInformationsBatchReqBuilder {
	builder.body = body
	return builder
}

func (builder *DeleteAdditionalInformationsBatchReqBuilder) Build() *DeleteAdditionalInformationsBatchReq {
	req := &DeleteAdditionalInformationsBatchReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type DeleteAdditionalInformationsBatchReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 评估周期 ID 列表，semester_id 可通过【获取周期】接口获得

	AdditionalInformations []string `json:"additional_informations,omitempty"` // 补充信息列表，一次最多 100 个
}

type DeleteAdditionalInformationsBatchReq struct {
	apiReq *larkcore.ApiReq
	Body   *DeleteAdditionalInformationsBatchReqBody `body:""`
}

type DeleteAdditionalInformationsBatchRespData struct {
	AdditionalInformations []string `json:"additional_informations,omitempty"` // 被删除的补充信息列表
}

type DeleteAdditionalInformationsBatchResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *DeleteAdditionalInformationsBatchRespData `json:"data"` // 业务数据
}

func (resp *DeleteAdditionalInformationsBatchResp) Success() bool {
	return resp.Code == 0
}

type QueryIndicatorReqBodyBuilder struct {
	indicatorIds     []string // 评估项 ID 列表，获取指定评估项的配置数据
	indicatorIdsFlag bool
}

func NewQueryIndicatorReqBodyBuilder() *QueryIndicatorReqBodyBuilder {
	builder := &QueryIndicatorReqBodyBuilder{}
	return builder
}

// 评估项 ID 列表，获取指定评估项的配置数据
//
//示例值：
func (builder *QueryIndicatorReqBodyBuilder) IndicatorIds(indicatorIds []string) *QueryIndicatorReqBodyBuilder {
	builder.indicatorIds = indicatorIds
	builder.indicatorIdsFlag = true
	return builder
}

func (builder *QueryIndicatorReqBodyBuilder) Build() *QueryIndicatorReqBody {
	req := &QueryIndicatorReqBody{}
	if builder.indicatorIdsFlag {
		req.IndicatorIds = builder.indicatorIds
	}
	return req
}

type QueryIndicatorPathReqBodyBuilder struct {
	indicatorIds     []string
	indicatorIdsFlag bool
}

func NewQueryIndicatorPathReqBodyBuilder() *QueryIndicatorPathReqBodyBuilder {
	builder := &QueryIndicatorPathReqBodyBuilder{}
	return builder
}

// 评估项 ID 列表，获取指定评估项的配置数据
//
// 示例值：
func (builder *QueryIndicatorPathReqBodyBuilder) IndicatorIds(indicatorIds []string) *QueryIndicatorPathReqBodyBuilder {
	builder.indicatorIds = indicatorIds
	builder.indicatorIdsFlag = true
	return builder
}

func (builder *QueryIndicatorPathReqBodyBuilder) Build() (*QueryIndicatorReqBody, error) {
	req := &QueryIndicatorReqBody{}
	if builder.indicatorIdsFlag {
		req.IndicatorIds = builder.indicatorIds
	}
	return req, nil
}

type QueryIndicatorReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryIndicatorReqBody
	limit  int // 最大返回多少记录，当使用迭代器访问时才有效
}

func NewQueryIndicatorReqBuilder() *QueryIndicatorReqBuilder {
	builder := &QueryIndicatorReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 最大返回多少记录，当使用迭代器访问时才有效
func (builder *QueryIndicatorReqBuilder) Limit(limit int) *QueryIndicatorReqBuilder {
	builder.limit = limit
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取查询结果
//
// 示例值：
func (builder *QueryIndicatorReqBuilder) PageToken(pageToken string) *QueryIndicatorReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryIndicatorReqBuilder) PageSize(pageSize int) *QueryIndicatorReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取评估题配置
func (builder *QueryIndicatorReqBuilder) Body(body *QueryIndicatorReqBody) *QueryIndicatorReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryIndicatorReqBuilder) Build() *QueryIndicatorReq {
	req := &QueryIndicatorReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.Limit = builder.limit
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryIndicatorReqBody struct {
	IndicatorIds []string `json:"indicator_ids,omitempty"` // 评估项 ID 列表，获取指定评估项的配置数据
}

type QueryIndicatorReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryIndicatorReqBody `body:""`
	Limit  int                    // 最多返回多少记录，只有在使用迭代器访问时，才有效

}

type QueryIndicatorRespData struct {
	Indicators []*Indicator `json:"indicators,omitempty"` // 评估项列表

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryIndicatorResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryIndicatorRespData `json:"data"` // 业务数据
}

func (resp *QueryIndicatorResp) Success() bool {
	return resp.Code == 0
}

type ImportMetricDetailReqBodyBuilder struct {
	semesterId     string // 周期 ID，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	importRecordName     string // 录入记录名称，数据源录入人在录入记录页面可以查看该记录名称。如果不传则默认为「API 录入」
	importRecordNameFlag bool

	importedMetrics     []*ImportedMetric // 指标明细列表，一次最多50个
	importedMetricsFlag bool
}

func NewImportMetricDetailReqBodyBuilder() *ImportMetricDetailReqBodyBuilder {
	builder := &ImportMetricDetailReqBodyBuilder{}
	return builder
}

// 周期 ID，semester_id 可通过【获取周期】接口获得
//
//示例值：7293040702907514899
func (builder *ImportMetricDetailReqBodyBuilder) SemesterId(semesterId string) *ImportMetricDetailReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 录入记录名称，数据源录入人在录入记录页面可以查看该记录名称。如果不传则默认为「API 录入」
//
//示例值：API录入
func (builder *ImportMetricDetailReqBodyBuilder) ImportRecordName(importRecordName string) *ImportMetricDetailReqBodyBuilder {
	builder.importRecordName = importRecordName
	builder.importRecordNameFlag = true
	return builder
}

// 指标明细列表，一次最多50个
//
//示例值：
func (builder *ImportMetricDetailReqBodyBuilder) ImportedMetrics(importedMetrics []*ImportedMetric) *ImportMetricDetailReqBodyBuilder {
	builder.importedMetrics = importedMetrics
	builder.importedMetricsFlag = true
	return builder
}

func (builder *ImportMetricDetailReqBodyBuilder) Build() *ImportMetricDetailReqBody {
	req := &ImportMetricDetailReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.importRecordNameFlag {
		req.ImportRecordName = &builder.importRecordName
	}
	if builder.importedMetricsFlag {
		req.ImportedMetrics = builder.importedMetrics
	}
	return req
}

type ImportMetricDetailPathReqBodyBuilder struct {
	semesterId           string
	semesterIdFlag       bool
	importRecordName     string
	importRecordNameFlag bool
	importedMetrics      []*ImportedMetric
	importedMetricsFlag  bool
}

func NewImportMetricDetailPathReqBodyBuilder() *ImportMetricDetailPathReqBodyBuilder {
	builder := &ImportMetricDetailPathReqBodyBuilder{}
	return builder
}

// 周期 ID，semester_id 可通过【获取周期】接口获得
//
// 示例值：7293040702907514899
func (builder *ImportMetricDetailPathReqBodyBuilder) SemesterId(semesterId string) *ImportMetricDetailPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 录入记录名称，数据源录入人在录入记录页面可以查看该记录名称。如果不传则默认为「API 录入」
//
// 示例值：API录入
func (builder *ImportMetricDetailPathReqBodyBuilder) ImportRecordName(importRecordName string) *ImportMetricDetailPathReqBodyBuilder {
	builder.importRecordName = importRecordName
	builder.importRecordNameFlag = true
	return builder
}

// 指标明细列表，一次最多50个
//
// 示例值：
func (builder *ImportMetricDetailPathReqBodyBuilder) ImportedMetrics(importedMetrics []*ImportedMetric) *ImportMetricDetailPathReqBodyBuilder {
	builder.importedMetrics = importedMetrics
	builder.importedMetricsFlag = true
	return builder
}

func (builder *ImportMetricDetailPathReqBodyBuilder) Build() (*ImportMetricDetailReqBody, error) {
	req := &ImportMetricDetailReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.importRecordNameFlag {
		req.ImportRecordName = &builder.importRecordName
	}
	if builder.importedMetricsFlag {
		req.ImportedMetrics = builder.importedMetrics
	}
	return req, nil
}

type ImportMetricDetailReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *ImportMetricDetailReqBody
}

func NewImportMetricDetailReqBuilder() *ImportMetricDetailReqBuilder {
	builder := &ImportMetricDetailReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 根据 client_token 是否一致来判断是否为同一请求
//
// 示例值：12454646
func (builder *ImportMetricDetailReqBuilder) ClientToken(clientToken string) *ImportMetricDetailReqBuilder {
	builder.apiReq.QueryParams.Set("client_token", fmt.Sprint(clientToken))
	return builder
}

// 用户ID类型
//
// 示例值：open_id
func (builder *ImportMetricDetailReqBuilder) UserIdType(userIdType string) *ImportMetricDetailReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 批量录入指定周期被评估人的关键指标详情
func (builder *ImportMetricDetailReqBuilder) Body(body *ImportMetricDetailReqBody) *ImportMetricDetailReqBuilder {
	builder.body = body
	return builder
}

func (builder *ImportMetricDetailReqBuilder) Build() *ImportMetricDetailReq {
	req := &ImportMetricDetailReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type ImportMetricDetailReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 周期 ID，semester_id 可通过【获取周期】接口获得

	ImportRecordName *string `json:"import_record_name,omitempty"` // 录入记录名称，数据源录入人在录入记录页面可以查看该记录名称。如果不传则默认为「API 录入」

	ImportedMetrics []*ImportedMetric `json:"imported_metrics,omitempty"` // 指标明细列表，一次最多50个
}

type ImportMetricDetailReq struct {
	apiReq *larkcore.ApiReq
	Body   *ImportMetricDetailReqBody `body:""`
}

type ImportMetricDetailRespData struct {
	ImportRecordId *string `json:"import_record_id,omitempty"` // 成功时返回导入记录 ID，失败时则为 null
}

type ImportMetricDetailResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *ImportMetricDetailRespData `json:"data"` // 业务数据
}

func (resp *ImportMetricDetailResp) Success() bool {
	return resp.Code == 0
}

type QueryMetricDetailReqBodyBuilder struct {
	semesterId     string // 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	revieweeUserIds     []string // 被评估人 ID 列表。如果不传则返回该周期所有参与的被评估人的关键指标详情
	revieweeUserIdsFlag bool
}

func NewQueryMetricDetailReqBodyBuilder() *QueryMetricDetailReqBodyBuilder {
	builder := &QueryMetricDetailReqBodyBuilder{}
	return builder
}

// 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
//
//示例值：6992035450862224940
func (builder *QueryMetricDetailReqBodyBuilder) SemesterId(semesterId string) *QueryMetricDetailReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 被评估人 ID 列表。如果不传则返回该周期所有参与的被评估人的关键指标详情
//
//示例值：
func (builder *QueryMetricDetailReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryMetricDetailReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

func (builder *QueryMetricDetailReqBodyBuilder) Build() *QueryMetricDetailReqBody {
	req := &QueryMetricDetailReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	return req
}

type QueryMetricDetailPathReqBodyBuilder struct {
	semesterId          string
	semesterIdFlag      bool
	revieweeUserIds     []string
	revieweeUserIdsFlag bool
}

func NewQueryMetricDetailPathReqBodyBuilder() *QueryMetricDetailPathReqBodyBuilder {
	builder := &QueryMetricDetailPathReqBodyBuilder{}
	return builder
}

// 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
//
// 示例值：6992035450862224940
func (builder *QueryMetricDetailPathReqBodyBuilder) SemesterId(semesterId string) *QueryMetricDetailPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 被评估人 ID 列表。如果不传则返回该周期所有参与的被评估人的关键指标详情
//
// 示例值：
func (builder *QueryMetricDetailPathReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryMetricDetailPathReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

func (builder *QueryMetricDetailPathReqBodyBuilder) Build() (*QueryMetricDetailReqBody, error) {
	req := &QueryMetricDetailReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	return req, nil
}

type QueryMetricDetailReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryMetricDetailReqBody
}

func NewQueryMetricDetailReqBuilder() *QueryMetricDetailReqBuilder {
	builder := &QueryMetricDetailReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryMetricDetailReqBuilder) UserIdType(userIdType string) *QueryMetricDetailReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 批量获取指定周期中被评估人的关键指标详情
func (builder *QueryMetricDetailReqBuilder) Body(body *QueryMetricDetailReqBody) *QueryMetricDetailReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryMetricDetailReqBuilder) Build() *QueryMetricDetailReq {
	req := &QueryMetricDetailReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryMetricDetailReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得

	RevieweeUserIds []string `json:"reviewee_user_ids,omitempty"` // 被评估人 ID 列表。如果不传则返回该周期所有参与的被评估人的关键指标详情
}

type QueryMetricDetailReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryMetricDetailReqBody `body:""`
}

type QueryMetricDetailRespData struct {
	SemesterId *string `json:"semester_id,omitempty"` // 周期ID

	RevieweeMetrics []*RevieweeMetric `json:"reviewee_metrics,omitempty"` // 指标明细列表
}

type QueryMetricDetailResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryMetricDetailRespData `json:"data"` // 业务数据
}

func (resp *QueryMetricDetailResp) Success() bool {
	return resp.Code == 0
}

type QueryMetricFieldReqBodyBuilder struct {
	fieldIds     []string // 指标的字段 ID，不传则默认获取全部字段信息
	fieldIdsFlag bool
}

func NewQueryMetricFieldReqBodyBuilder() *QueryMetricFieldReqBodyBuilder {
	builder := &QueryMetricFieldReqBodyBuilder{}
	return builder
}

// 指标的字段 ID，不传则默认获取全部字段信息
//
//示例值：
func (builder *QueryMetricFieldReqBodyBuilder) FieldIds(fieldIds []string) *QueryMetricFieldReqBodyBuilder {
	builder.fieldIds = fieldIds
	builder.fieldIdsFlag = true
	return builder
}

func (builder *QueryMetricFieldReqBodyBuilder) Build() *QueryMetricFieldReqBody {
	req := &QueryMetricFieldReqBody{}
	if builder.fieldIdsFlag {
		req.FieldIds = builder.fieldIds
	}
	return req
}

type QueryMetricFieldPathReqBodyBuilder struct {
	fieldIds     []string
	fieldIdsFlag bool
}

func NewQueryMetricFieldPathReqBodyBuilder() *QueryMetricFieldPathReqBodyBuilder {
	builder := &QueryMetricFieldPathReqBodyBuilder{}
	return builder
}

// 指标的字段 ID，不传则默认获取全部字段信息
//
// 示例值：
func (builder *QueryMetricFieldPathReqBodyBuilder) FieldIds(fieldIds []string) *QueryMetricFieldPathReqBodyBuilder {
	builder.fieldIds = fieldIds
	builder.fieldIdsFlag = true
	return builder
}

func (builder *QueryMetricFieldPathReqBodyBuilder) Build() (*QueryMetricFieldReqBody, error) {
	req := &QueryMetricFieldReqBody{}
	if builder.fieldIdsFlag {
		req.FieldIds = builder.fieldIds
	}
	return req, nil
}

type QueryMetricFieldReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryMetricFieldReqBody
}

func NewQueryMetricFieldReqBuilder() *QueryMetricFieldReqBuilder {
	builder := &QueryMetricFieldReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 获取指标的字段基础信息
func (builder *QueryMetricFieldReqBuilder) Body(body *QueryMetricFieldReqBody) *QueryMetricFieldReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryMetricFieldReqBuilder) Build() *QueryMetricFieldReq {
	req := &QueryMetricFieldReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.Body = builder.body
	return req
}

type QueryMetricFieldReqBody struct {
	FieldIds []string `json:"field_ids,omitempty"` // 指标的字段 ID，不传则默认获取全部字段信息
}

type QueryMetricFieldReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryMetricFieldReqBody `body:""`
}

type QueryMetricFieldRespData struct {
	Items []*MetricField `json:"items,omitempty"` // 指标字段信息
}

type QueryMetricFieldResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryMetricFieldRespData `json:"data"` // 业务数据
}

func (resp *QueryMetricFieldResp) Success() bool {
	return resp.Code == 0
}

type QueryMetricLibReqBodyBuilder struct {
	isActive     bool // 状态是否为启用
	isActiveFlag bool

	tagIds     []string // 指标所属的标签 ID
	tagIdsFlag bool

	typeIds     []string // 所属的指标类型 ID
	typeIdsFlag bool

	rangeOfAvailability     string // 可用范围
	rangeOfAvailabilityFlag bool

	scoringSettingType     string // 评分设置类型
	scoringSettingTypeFlag bool
}

func NewQueryMetricLibReqBodyBuilder() *QueryMetricLibReqBodyBuilder {
	builder := &QueryMetricLibReqBodyBuilder{}
	return builder
}

// 状态是否为启用
//
//示例值：
func (builder *QueryMetricLibReqBodyBuilder) IsActive(isActive bool) *QueryMetricLibReqBodyBuilder {
	builder.isActive = isActive
	builder.isActiveFlag = true
	return builder
}

// 指标所属的标签 ID
//
//示例值：
func (builder *QueryMetricLibReqBodyBuilder) TagIds(tagIds []string) *QueryMetricLibReqBodyBuilder {
	builder.tagIds = tagIds
	builder.tagIdsFlag = true
	return builder
}

// 所属的指标类型 ID
//
//示例值：
func (builder *QueryMetricLibReqBodyBuilder) TypeIds(typeIds []string) *QueryMetricLibReqBodyBuilder {
	builder.typeIds = typeIds
	builder.typeIdsFlag = true
	return builder
}

// 可用范围
//
//示例值：admins_and_reviewees
func (builder *QueryMetricLibReqBodyBuilder) RangeOfAvailability(rangeOfAvailability string) *QueryMetricLibReqBodyBuilder {
	builder.rangeOfAvailability = rangeOfAvailability
	builder.rangeOfAvailabilityFlag = true
	return builder
}

// 评分设置类型
//
//示例值：score_manually
func (builder *QueryMetricLibReqBodyBuilder) ScoringSettingType(scoringSettingType string) *QueryMetricLibReqBodyBuilder {
	builder.scoringSettingType = scoringSettingType
	builder.scoringSettingTypeFlag = true
	return builder
}

func (builder *QueryMetricLibReqBodyBuilder) Build() *QueryMetricLibReqBody {
	req := &QueryMetricLibReqBody{}
	if builder.isActiveFlag {
		req.IsActive = &builder.isActive
	}
	if builder.tagIdsFlag {
		req.TagIds = builder.tagIds
	}
	if builder.typeIdsFlag {
		req.TypeIds = builder.typeIds
	}
	if builder.rangeOfAvailabilityFlag {
		req.RangeOfAvailability = &builder.rangeOfAvailability
	}
	if builder.scoringSettingTypeFlag {
		req.ScoringSettingType = &builder.scoringSettingType
	}
	return req
}

type QueryMetricLibPathReqBodyBuilder struct {
	isActive                bool
	isActiveFlag            bool
	tagIds                  []string
	tagIdsFlag              bool
	typeIds                 []string
	typeIdsFlag             bool
	rangeOfAvailability     string
	rangeOfAvailabilityFlag bool
	scoringSettingType      string
	scoringSettingTypeFlag  bool
}

func NewQueryMetricLibPathReqBodyBuilder() *QueryMetricLibPathReqBodyBuilder {
	builder := &QueryMetricLibPathReqBodyBuilder{}
	return builder
}

// 状态是否为启用
//
// 示例值：
func (builder *QueryMetricLibPathReqBodyBuilder) IsActive(isActive bool) *QueryMetricLibPathReqBodyBuilder {
	builder.isActive = isActive
	builder.isActiveFlag = true
	return builder
}

// 指标所属的标签 ID
//
// 示例值：
func (builder *QueryMetricLibPathReqBodyBuilder) TagIds(tagIds []string) *QueryMetricLibPathReqBodyBuilder {
	builder.tagIds = tagIds
	builder.tagIdsFlag = true
	return builder
}

// 所属的指标类型 ID
//
// 示例值：
func (builder *QueryMetricLibPathReqBodyBuilder) TypeIds(typeIds []string) *QueryMetricLibPathReqBodyBuilder {
	builder.typeIds = typeIds
	builder.typeIdsFlag = true
	return builder
}

// 可用范围
//
// 示例值：admins_and_reviewees
func (builder *QueryMetricLibPathReqBodyBuilder) RangeOfAvailability(rangeOfAvailability string) *QueryMetricLibPathReqBodyBuilder {
	builder.rangeOfAvailability = rangeOfAvailability
	builder.rangeOfAvailabilityFlag = true
	return builder
}

// 评分设置类型
//
// 示例值：score_manually
func (builder *QueryMetricLibPathReqBodyBuilder) ScoringSettingType(scoringSettingType string) *QueryMetricLibPathReqBodyBuilder {
	builder.scoringSettingType = scoringSettingType
	builder.scoringSettingTypeFlag = true
	return builder
}

func (builder *QueryMetricLibPathReqBodyBuilder) Build() (*QueryMetricLibReqBody, error) {
	req := &QueryMetricLibReqBody{}
	if builder.isActiveFlag {
		req.IsActive = &builder.isActive
	}
	if builder.tagIdsFlag {
		req.TagIds = builder.tagIds
	}
	if builder.typeIdsFlag {
		req.TypeIds = builder.typeIds
	}
	if builder.rangeOfAvailabilityFlag {
		req.RangeOfAvailability = &builder.rangeOfAvailability
	}
	if builder.scoringSettingTypeFlag {
		req.ScoringSettingType = &builder.scoringSettingType
	}
	return req, nil
}

type QueryMetricLibReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryMetricLibReqBody
}

func NewQueryMetricLibReqBuilder() *QueryMetricLibReqBuilder {
	builder := &QueryMetricLibReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryMetricLibReqBuilder) UserIdType(userIdType string) *QueryMetricLibReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取
//
// 示例值：
func (builder *QueryMetricLibReqBuilder) PageToken(pageToken string) *QueryMetricLibReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryMetricLibReqBuilder) PageSize(pageSize int) *QueryMetricLibReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取指标库的信息
func (builder *QueryMetricLibReqBuilder) Body(body *QueryMetricLibReqBody) *QueryMetricLibReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryMetricLibReqBuilder) Build() *QueryMetricLibReq {
	req := &QueryMetricLibReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryMetricLibReqBody struct {
	IsActive *bool `json:"is_active,omitempty"` // 状态是否为启用

	TagIds []string `json:"tag_ids,omitempty"` // 指标所属的标签 ID

	TypeIds []string `json:"type_ids,omitempty"` // 所属的指标类型 ID

	RangeOfAvailability *string `json:"range_of_availability,omitempty"` // 可用范围

	ScoringSettingType *string `json:"scoring_setting_type,omitempty"` // 评分设置类型
}

type QueryMetricLibReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryMetricLibReqBody `body:""`
}

type QueryMetricLibRespData struct {
	Items []*MetricInLibrary `json:"items,omitempty"` // 指标信息

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryMetricLibResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryMetricLibRespData `json:"data"` // 业务数据
}

func (resp *QueryMetricLibResp) Success() bool {
	return resp.Code == 0
}

type ListMetricTagReqBuilder struct {
	apiReq *larkcore.ApiReq
	limit  int // 最大返回多少记录，当使用迭代器访问时才有效
}

func NewListMetricTagReqBuilder() *ListMetricTagReqBuilder {
	builder := &ListMetricTagReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 最大返回多少记录，当使用迭代器访问时才有效
func (builder *ListMetricTagReqBuilder) Limit(limit int) *ListMetricTagReqBuilder {
	builder.limit = limit
	return builder
}

// 分页大小
//
// 示例值：
func (builder *ListMetricTagReqBuilder) PageSize(pageSize int) *ListMetricTagReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 分页 Token
//
// 示例值：
func (builder *ListMetricTagReqBuilder) PageToken(pageToken string) *ListMetricTagReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 指标标签 ID 列表
//
// 示例值：
func (builder *ListMetricTagReqBuilder) TagIds(tagIds []string) *ListMetricTagReqBuilder {
	for _, v := range tagIds {
		builder.apiReq.QueryParams.Add("tag_ids", fmt.Sprint(v))
	}
	return builder
}

func (builder *ListMetricTagReqBuilder) Build() *ListMetricTagReq {
	req := &ListMetricTagReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.Limit = builder.limit
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	return req
}

type ListMetricTagReq struct {
	apiReq *larkcore.ApiReq
	Limit  int // 最多返回多少记录，只有在使用迭代器访问时，才有效

}

type ListMetricTagRespData struct {
	Items []*MetricTag `json:"items,omitempty"` // 指标标签列表

	PageToken *string `json:"page_token,omitempty"` // 分页 Token

	HasMore *bool `json:"has_more,omitempty"` // 是否有更多数据
}

type ListMetricTagResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *ListMetricTagRespData `json:"data"` // 业务数据
}

func (resp *ListMetricTagResp) Success() bool {
	return resp.Code == 0
}

type QueryMetricTemplateReqBodyBuilder struct {
	metricsTemplateIds     []string // 指标模板 ID 列表，metrics_template_id 可以通过指标模板的后台配置详情页的 url 获取，也可通过本接口的返回值获取。不填写则默认返回所有指标模板
	metricsTemplateIdsFlag bool

	status     string // 状态
	statusFlag bool
}

func NewQueryMetricTemplateReqBodyBuilder() *QueryMetricTemplateReqBodyBuilder {
	builder := &QueryMetricTemplateReqBodyBuilder{}
	return builder
}

// 指标模板 ID 列表，metrics_template_id 可以通过指标模板的后台配置详情页的 url 获取，也可通过本接口的返回值获取。不填写则默认返回所有指标模板
//
//示例值：
func (builder *QueryMetricTemplateReqBodyBuilder) MetricsTemplateIds(metricsTemplateIds []string) *QueryMetricTemplateReqBodyBuilder {
	builder.metricsTemplateIds = metricsTemplateIds
	builder.metricsTemplateIdsFlag = true
	return builder
}

// 状态
//
//示例值：to_be_configured
func (builder *QueryMetricTemplateReqBodyBuilder) Status(status string) *QueryMetricTemplateReqBodyBuilder {
	builder.status = status
	builder.statusFlag = true
	return builder
}

func (builder *QueryMetricTemplateReqBodyBuilder) Build() *QueryMetricTemplateReqBody {
	req := &QueryMetricTemplateReqBody{}
	if builder.metricsTemplateIdsFlag {
		req.MetricsTemplateIds = builder.metricsTemplateIds
	}
	if builder.statusFlag {
		req.Status = &builder.status
	}
	return req
}

type QueryMetricTemplatePathReqBodyBuilder struct {
	metricsTemplateIds     []string
	metricsTemplateIdsFlag bool
	status                 string
	statusFlag             bool
}

func NewQueryMetricTemplatePathReqBodyBuilder() *QueryMetricTemplatePathReqBodyBuilder {
	builder := &QueryMetricTemplatePathReqBodyBuilder{}
	return builder
}

// 指标模板 ID 列表，metrics_template_id 可以通过指标模板的后台配置详情页的 url 获取，也可通过本接口的返回值获取。不填写则默认返回所有指标模板
//
// 示例值：
func (builder *QueryMetricTemplatePathReqBodyBuilder) MetricsTemplateIds(metricsTemplateIds []string) *QueryMetricTemplatePathReqBodyBuilder {
	builder.metricsTemplateIds = metricsTemplateIds
	builder.metricsTemplateIdsFlag = true
	return builder
}

// 状态
//
// 示例值：to_be_configured
func (builder *QueryMetricTemplatePathReqBodyBuilder) Status(status string) *QueryMetricTemplatePathReqBodyBuilder {
	builder.status = status
	builder.statusFlag = true
	return builder
}

func (builder *QueryMetricTemplatePathReqBodyBuilder) Build() (*QueryMetricTemplateReqBody, error) {
	req := &QueryMetricTemplateReqBody{}
	if builder.metricsTemplateIdsFlag {
		req.MetricsTemplateIds = builder.metricsTemplateIds
	}
	if builder.statusFlag {
		req.Status = &builder.status
	}
	return req, nil
}

type QueryMetricTemplateReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryMetricTemplateReqBody
}

func NewQueryMetricTemplateReqBuilder() *QueryMetricTemplateReqBuilder {
	builder := &QueryMetricTemplateReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryMetricTemplateReqBuilder) UserIdType(userIdType string) *QueryMetricTemplateReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取
//
// 示例值：
func (builder *QueryMetricTemplateReqBuilder) PageToken(pageToken string) *QueryMetricTemplateReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryMetricTemplateReqBuilder) PageSize(pageSize int) *QueryMetricTemplateReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取指标模板的信息
func (builder *QueryMetricTemplateReqBuilder) Body(body *QueryMetricTemplateReqBody) *QueryMetricTemplateReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryMetricTemplateReqBuilder) Build() *QueryMetricTemplateReq {
	req := &QueryMetricTemplateReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryMetricTemplateReqBody struct {
	MetricsTemplateIds []string `json:"metrics_template_ids,omitempty"` // 指标模板 ID 列表，metrics_template_id 可以通过指标模板的后台配置详情页的 url 获取，也可通过本接口的返回值获取。不填写则默认返回所有指标模板

	Status *string `json:"status,omitempty"` // 状态
}

type QueryMetricTemplateReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryMetricTemplateReqBody `body:""`
}

type QueryMetricTemplateRespData struct {
	Items []*MetricTemplate `json:"items,omitempty"` // 指标模板信息

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryMetricTemplateResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryMetricTemplateRespData `json:"data"` // 业务数据
}

func (resp *QueryMetricTemplateResp) Success() bool {
	return resp.Code == 0
}

type QueryQuestionReqBodyBuilder struct {
	tagBasedQuestionIds     []string // 标签填写题 ID 列表，获取指定标签填写题的配置数据。如果不传则返回所有
	tagBasedQuestionIdsFlag bool
}

func NewQueryQuestionReqBodyBuilder() *QueryQuestionReqBodyBuilder {
	builder := &QueryQuestionReqBodyBuilder{}
	return builder
}

// 标签填写题 ID 列表，获取指定标签填写题的配置数据。如果不传则返回所有
//
//示例值：
func (builder *QueryQuestionReqBodyBuilder) TagBasedQuestionIds(tagBasedQuestionIds []string) *QueryQuestionReqBodyBuilder {
	builder.tagBasedQuestionIds = tagBasedQuestionIds
	builder.tagBasedQuestionIdsFlag = true
	return builder
}

func (builder *QueryQuestionReqBodyBuilder) Build() *QueryQuestionReqBody {
	req := &QueryQuestionReqBody{}
	if builder.tagBasedQuestionIdsFlag {
		req.TagBasedQuestionIds = builder.tagBasedQuestionIds
	}
	return req
}

type QueryQuestionPathReqBodyBuilder struct {
	tagBasedQuestionIds     []string
	tagBasedQuestionIdsFlag bool
}

func NewQueryQuestionPathReqBodyBuilder() *QueryQuestionPathReqBodyBuilder {
	builder := &QueryQuestionPathReqBodyBuilder{}
	return builder
}

// 标签填写题 ID 列表，获取指定标签填写题的配置数据。如果不传则返回所有
//
// 示例值：
func (builder *QueryQuestionPathReqBodyBuilder) TagBasedQuestionIds(tagBasedQuestionIds []string) *QueryQuestionPathReqBodyBuilder {
	builder.tagBasedQuestionIds = tagBasedQuestionIds
	builder.tagBasedQuestionIdsFlag = true
	return builder
}

func (builder *QueryQuestionPathReqBodyBuilder) Build() (*QueryQuestionReqBody, error) {
	req := &QueryQuestionReqBody{}
	if builder.tagBasedQuestionIdsFlag {
		req.TagBasedQuestionIds = builder.tagBasedQuestionIds
	}
	return req, nil
}

type QueryQuestionReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryQuestionReqBody
	limit  int // 最大返回多少记录，当使用迭代器访问时才有效
}

func NewQueryQuestionReqBuilder() *QueryQuestionReqBuilder {
	builder := &QueryQuestionReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 最大返回多少记录，当使用迭代器访问时才有效
func (builder *QueryQuestionReqBuilder) Limit(limit int) *QueryQuestionReqBuilder {
	builder.limit = limit
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取查询结果
//
// 示例值：
func (builder *QueryQuestionReqBuilder) PageToken(pageToken string) *QueryQuestionReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryQuestionReqBuilder) PageSize(pageSize int) *QueryQuestionReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取标签填写题配置
func (builder *QueryQuestionReqBuilder) Body(body *QueryQuestionReqBody) *QueryQuestionReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryQuestionReqBuilder) Build() *QueryQuestionReq {
	req := &QueryQuestionReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.Limit = builder.limit
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryQuestionReqBody struct {
	TagBasedQuestionIds []string `json:"tag_based_question_ids,omitempty"` // 标签填写题 ID 列表，获取指定标签填写题的配置数据。如果不传则返回所有
}

type QueryQuestionReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryQuestionReqBody `body:""`
	Limit  int                   // 最多返回多少记录，只有在使用迭代器访问时，才有效

}

type QueryQuestionRespData struct {
	TagBasedQuestions []*Question `json:"tag_based_questions,omitempty"` // 标签填写题

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryQuestionResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryQuestionRespData `json:"data"` // 业务数据
}

func (resp *QueryQuestionResp) Success() bool {
	return resp.Code == 0
}

type QueryReviewDataReqBodyBuilder struct {
	semesterIds     []string // 评估周期 ID 列表，semester_id 可通过【获取周期】
	semesterIdsFlag bool

	revieweeUserIds     []string // 被评估人 ID 列表
	revieweeUserIdsFlag bool

	stageTypes     []string // 环节类型
	stageTypesFlag bool

	reviewStageRoles     []string // 评估型环节的执行人角色，不传默认包含所有的执行人角色。当传入的环节类型中有评估型环节时，返回指定执行人角色的评估型环节数据
	reviewStageRolesFlag bool

	stageIds     []string // 环节 ID，如果同时传了环节 ID 和环节类型，优先返回环节 ID 对应的绩效数据
	stageIdsFlag bool

	needLeaderReviewDataSource     bool // 当要获取的绩效数据的环节类型包含终评环节时，可指定是否需要返回绩效终评数据的具体环节来源。不填则默认不返回 返回的来源枚举值为： 枚举值： review 产生终评结果的评估型环节 calibaration 校准环节 reconsideration 结果复议环节
	needLeaderReviewDataSourceFlag bool

	updatedLaterThan     string // 环节更新时间晚于，可筛选出在此时间之后，有内容提交的环节数据
	updatedLaterThanFlag bool

	stageProgresses     []int // 环节状态，不传默认包含所有状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
	stageProgressesFlag bool
}

func NewQueryReviewDataReqBodyBuilder() *QueryReviewDataReqBodyBuilder {
	builder := &QueryReviewDataReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) SemesterIds(semesterIds []string) *QueryReviewDataReqBodyBuilder {
	builder.semesterIds = semesterIds
	builder.semesterIdsFlag = true
	return builder
}

// 被评估人 ID 列表
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryReviewDataReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

// 环节类型
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) StageTypes(stageTypes []string) *QueryReviewDataReqBodyBuilder {
	builder.stageTypes = stageTypes
	builder.stageTypesFlag = true
	return builder
}

// 评估型环节的执行人角色，不传默认包含所有的执行人角色。当传入的环节类型中有评估型环节时，返回指定执行人角色的评估型环节数据
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) ReviewStageRoles(reviewStageRoles []string) *QueryReviewDataReqBodyBuilder {
	builder.reviewStageRoles = reviewStageRoles
	builder.reviewStageRolesFlag = true
	return builder
}

// 环节 ID，如果同时传了环节 ID 和环节类型，优先返回环节 ID 对应的绩效数据
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) StageIds(stageIds []string) *QueryReviewDataReqBodyBuilder {
	builder.stageIds = stageIds
	builder.stageIdsFlag = true
	return builder
}

// 当要获取的绩效数据的环节类型包含终评环节时，可指定是否需要返回绩效终评数据的具体环节来源。不填则默认不返回 返回的来源枚举值为： 枚举值： review 产生终评结果的评估型环节 calibaration 校准环节 reconsideration 结果复议环节
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) NeedLeaderReviewDataSource(needLeaderReviewDataSource bool) *QueryReviewDataReqBodyBuilder {
	builder.needLeaderReviewDataSource = needLeaderReviewDataSource
	builder.needLeaderReviewDataSourceFlag = true
	return builder
}

// 环节更新时间晚于，可筛选出在此时间之后，有内容提交的环节数据
//
//示例值：1630425599999
func (builder *QueryReviewDataReqBodyBuilder) UpdatedLaterThan(updatedLaterThan string) *QueryReviewDataReqBodyBuilder {
	builder.updatedLaterThan = updatedLaterThan
	builder.updatedLaterThanFlag = true
	return builder
}

// 环节状态，不传默认包含所有状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
//
//示例值：
func (builder *QueryReviewDataReqBodyBuilder) StageProgresses(stageProgresses []int) *QueryReviewDataReqBodyBuilder {
	builder.stageProgresses = stageProgresses
	builder.stageProgressesFlag = true
	return builder
}

func (builder *QueryReviewDataReqBodyBuilder) Build() *QueryReviewDataReqBody {
	req := &QueryReviewDataReqBody{}
	if builder.semesterIdsFlag {
		req.SemesterIds = builder.semesterIds
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	if builder.stageTypesFlag {
		req.StageTypes = builder.stageTypes
	}
	if builder.reviewStageRolesFlag {
		req.ReviewStageRoles = builder.reviewStageRoles
	}
	if builder.stageIdsFlag {
		req.StageIds = builder.stageIds
	}
	if builder.needLeaderReviewDataSourceFlag {
		req.NeedLeaderReviewDataSource = &builder.needLeaderReviewDataSource
	}
	if builder.updatedLaterThanFlag {
		req.UpdatedLaterThan = &builder.updatedLaterThan
	}
	if builder.stageProgressesFlag {
		req.StageProgresses = builder.stageProgresses
	}
	return req
}

type QueryReviewDataPathReqBodyBuilder struct {
	semesterIds                    []string
	semesterIdsFlag                bool
	revieweeUserIds                []string
	revieweeUserIdsFlag            bool
	stageTypes                     []string
	stageTypesFlag                 bool
	reviewStageRoles               []string
	reviewStageRolesFlag           bool
	stageIds                       []string
	stageIdsFlag                   bool
	needLeaderReviewDataSource     bool
	needLeaderReviewDataSourceFlag bool
	updatedLaterThan               string
	updatedLaterThanFlag           bool
	stageProgresses                []int
	stageProgressesFlag            bool
}

func NewQueryReviewDataPathReqBodyBuilder() *QueryReviewDataPathReqBodyBuilder {
	builder := &QueryReviewDataPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) SemesterIds(semesterIds []string) *QueryReviewDataPathReqBodyBuilder {
	builder.semesterIds = semesterIds
	builder.semesterIdsFlag = true
	return builder
}

// 被评估人 ID 列表
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) RevieweeUserIds(revieweeUserIds []string) *QueryReviewDataPathReqBodyBuilder {
	builder.revieweeUserIds = revieweeUserIds
	builder.revieweeUserIdsFlag = true
	return builder
}

// 环节类型
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) StageTypes(stageTypes []string) *QueryReviewDataPathReqBodyBuilder {
	builder.stageTypes = stageTypes
	builder.stageTypesFlag = true
	return builder
}

// 评估型环节的执行人角色，不传默认包含所有的执行人角色。当传入的环节类型中有评估型环节时，返回指定执行人角色的评估型环节数据
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) ReviewStageRoles(reviewStageRoles []string) *QueryReviewDataPathReqBodyBuilder {
	builder.reviewStageRoles = reviewStageRoles
	builder.reviewStageRolesFlag = true
	return builder
}

// 环节 ID，如果同时传了环节 ID 和环节类型，优先返回环节 ID 对应的绩效数据
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) StageIds(stageIds []string) *QueryReviewDataPathReqBodyBuilder {
	builder.stageIds = stageIds
	builder.stageIdsFlag = true
	return builder
}

// 当要获取的绩效数据的环节类型包含终评环节时，可指定是否需要返回绩效终评数据的具体环节来源。不填则默认不返回 返回的来源枚举值为： 枚举值： review 产生终评结果的评估型环节 calibaration 校准环节 reconsideration 结果复议环节
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) NeedLeaderReviewDataSource(needLeaderReviewDataSource bool) *QueryReviewDataPathReqBodyBuilder {
	builder.needLeaderReviewDataSource = needLeaderReviewDataSource
	builder.needLeaderReviewDataSourceFlag = true
	return builder
}

// 环节更新时间晚于，可筛选出在此时间之后，有内容提交的环节数据
//
// 示例值：1630425599999
func (builder *QueryReviewDataPathReqBodyBuilder) UpdatedLaterThan(updatedLaterThan string) *QueryReviewDataPathReqBodyBuilder {
	builder.updatedLaterThan = updatedLaterThan
	builder.updatedLaterThanFlag = true
	return builder
}

// 环节状态，不传默认包含所有状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
//
// 示例值：
func (builder *QueryReviewDataPathReqBodyBuilder) StageProgresses(stageProgresses []int) *QueryReviewDataPathReqBodyBuilder {
	builder.stageProgresses = stageProgresses
	builder.stageProgressesFlag = true
	return builder
}

func (builder *QueryReviewDataPathReqBodyBuilder) Build() (*QueryReviewDataReqBody, error) {
	req := &QueryReviewDataReqBody{}
	if builder.semesterIdsFlag {
		req.SemesterIds = builder.semesterIds
	}
	if builder.revieweeUserIdsFlag {
		req.RevieweeUserIds = builder.revieweeUserIds
	}
	if builder.stageTypesFlag {
		req.StageTypes = builder.stageTypes
	}
	if builder.reviewStageRolesFlag {
		req.ReviewStageRoles = builder.reviewStageRoles
	}
	if builder.stageIdsFlag {
		req.StageIds = builder.stageIds
	}
	if builder.needLeaderReviewDataSourceFlag {
		req.NeedLeaderReviewDataSource = &builder.needLeaderReviewDataSource
	}
	if builder.updatedLaterThanFlag {
		req.UpdatedLaterThan = &builder.updatedLaterThan
	}
	if builder.stageProgressesFlag {
		req.StageProgresses = builder.stageProgresses
	}
	return req, nil
}

type QueryReviewDataReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryReviewDataReqBody
}

func NewQueryReviewDataReqBuilder() *QueryReviewDataReqBuilder {
	builder := &QueryReviewDataReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryReviewDataReqBuilder) UserIdType(userIdType string) *QueryReviewDataReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 获取绩效详情V2
func (builder *QueryReviewDataReqBuilder) Body(body *QueryReviewDataReqBody) *QueryReviewDataReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryReviewDataReqBuilder) Build() *QueryReviewDataReq {
	req := &QueryReviewDataReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryReviewDataReqBody struct {
	SemesterIds []string `json:"semester_ids,omitempty"` // 评估周期 ID 列表，semester_id 可通过【获取周期】

	RevieweeUserIds []string `json:"reviewee_user_ids,omitempty"` // 被评估人 ID 列表

	StageTypes []string `json:"stage_types,omitempty"` // 环节类型

	ReviewStageRoles []string `json:"review_stage_roles,omitempty"` // 评估型环节的执行人角色，不传默认包含所有的执行人角色。当传入的环节类型中有评估型环节时，返回指定执行人角色的评估型环节数据

	StageIds []string `json:"stage_ids,omitempty"` // 环节 ID，如果同时传了环节 ID 和环节类型，优先返回环节 ID 对应的绩效数据

	NeedLeaderReviewDataSource *bool `json:"need_leader_review_data_source,omitempty"` // 当要获取的绩效数据的环节类型包含终评环节时，可指定是否需要返回绩效终评数据的具体环节来源。不填则默认不返回 返回的来源枚举值为： 枚举值： review 产生终评结果的评估型环节 calibaration 校准环节 reconsideration 结果复议环节

	UpdatedLaterThan *string `json:"updated_later_than,omitempty"` // 环节更新时间晚于，可筛选出在此时间之后，有内容提交的环节数据

	StageProgresses []int `json:"stage_progresses,omitempty"` // 环节状态，不传默认包含所有状态。各类型的环节分别有以下环节状态：  绩效结果查看环节状态 可选值： 0：已开通，绩效结果已开通，未发起复议也无需确认结果 1：待确认，绩效结果已开通但被评估人还未确认结果，确认的截止时间还未到达 2：已截止，绩效结果已开通但被评估人还未确认结果，确认的截止时间已到达 3：已确认，绩效结果已开通，被评估人已确认结果 4：已复议，绩效结果已开通，且被评估人已发起  绩效结果复议环节状态 可选值： 1：待完成，任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成  除上述类型外的其他环节类型状态 可选值： 0：未开始，任务的开始时间未到达 1：待完成，任务的开始时间到达而截止时间未到达，且任务未完成 2：已截止，任务的截止时间已到达，且任务未完成 3：已完成，任务已完成
}

type QueryReviewDataReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryReviewDataReqBody `body:""`
}

type QueryReviewDataRespData struct {
	Datas []*ReviewProfile `json:"datas,omitempty"` // 评估数据列表
}

type QueryReviewDataResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryReviewDataRespData `json:"data"` // 业务数据
}

func (resp *QueryReviewDataResp) Success() bool {
	return resp.Code == 0
}

type QueryReviewTemplateReqBodyBuilder struct {
	reviewTemplateIds     []string // 评估模板 ID 列表，获取指定评估模板的配置数据。如果不传则返回所有
	reviewTemplateIdsFlag bool
}

func NewQueryReviewTemplateReqBodyBuilder() *QueryReviewTemplateReqBodyBuilder {
	builder := &QueryReviewTemplateReqBodyBuilder{}
	return builder
}

// 评估模板 ID 列表，获取指定评估模板的配置数据。如果不传则返回所有
//
//示例值：
func (builder *QueryReviewTemplateReqBodyBuilder) ReviewTemplateIds(reviewTemplateIds []string) *QueryReviewTemplateReqBodyBuilder {
	builder.reviewTemplateIds = reviewTemplateIds
	builder.reviewTemplateIdsFlag = true
	return builder
}

func (builder *QueryReviewTemplateReqBodyBuilder) Build() *QueryReviewTemplateReqBody {
	req := &QueryReviewTemplateReqBody{}
	if builder.reviewTemplateIdsFlag {
		req.ReviewTemplateIds = builder.reviewTemplateIds
	}
	return req
}

type QueryReviewTemplatePathReqBodyBuilder struct {
	reviewTemplateIds     []string
	reviewTemplateIdsFlag bool
}

func NewQueryReviewTemplatePathReqBodyBuilder() *QueryReviewTemplatePathReqBodyBuilder {
	builder := &QueryReviewTemplatePathReqBodyBuilder{}
	return builder
}

// 评估模板 ID 列表，获取指定评估模板的配置数据。如果不传则返回所有
//
// 示例值：
func (builder *QueryReviewTemplatePathReqBodyBuilder) ReviewTemplateIds(reviewTemplateIds []string) *QueryReviewTemplatePathReqBodyBuilder {
	builder.reviewTemplateIds = reviewTemplateIds
	builder.reviewTemplateIdsFlag = true
	return builder
}

func (builder *QueryReviewTemplatePathReqBodyBuilder) Build() (*QueryReviewTemplateReqBody, error) {
	req := &QueryReviewTemplateReqBody{}
	if builder.reviewTemplateIdsFlag {
		req.ReviewTemplateIds = builder.reviewTemplateIds
	}
	return req, nil
}

type QueryReviewTemplateReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryReviewTemplateReqBody
	limit  int // 最大返回多少记录，当使用迭代器访问时才有效
}

func NewQueryReviewTemplateReqBuilder() *QueryReviewTemplateReqBuilder {
	builder := &QueryReviewTemplateReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 最大返回多少记录，当使用迭代器访问时才有效
func (builder *QueryReviewTemplateReqBuilder) Limit(limit int) *QueryReviewTemplateReqBuilder {
	builder.limit = limit
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取查询结果
//
// 示例值：
func (builder *QueryReviewTemplateReqBuilder) PageToken(pageToken string) *QueryReviewTemplateReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryReviewTemplateReqBuilder) PageSize(pageSize int) *QueryReviewTemplateReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取评估模板配置
func (builder *QueryReviewTemplateReqBuilder) Body(body *QueryReviewTemplateReqBody) *QueryReviewTemplateReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryReviewTemplateReqBuilder) Build() *QueryReviewTemplateReq {
	req := &QueryReviewTemplateReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.Limit = builder.limit
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryReviewTemplateReqBody struct {
	ReviewTemplateIds []string `json:"review_template_ids,omitempty"` // 评估模板 ID 列表，获取指定评估模板的配置数据。如果不传则返回所有
}

type QueryReviewTemplateReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryReviewTemplateReqBody `body:""`
	Limit  int                         // 最多返回多少记录，只有在使用迭代器访问时，才有效

}

type QueryReviewTemplateRespData struct {
	ReviewTemplates []*ReviewTemplate `json:"review_templates,omitempty"` // 评估模板信息

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryReviewTemplateResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryReviewTemplateRespData `json:"data"` // 业务数据
}

func (resp *QueryReviewTemplateResp) Success() bool {
	return resp.Code == 0
}

type QueryRevieweeReqBodyBuilder struct {
	semesterId     string // 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
	semesterIdFlag bool

	userIds     []string // 用户 ID，类型需要与查询参数中的user_id_type保持一致。不传则默认返回该周期所有被评估人的信息。
	userIdsFlag bool

	activityIds     []string // 项目 ID 列表，查询指定的项目下的被评估人数据
	activityIdsFlag bool
}

func NewQueryRevieweeReqBodyBuilder() *QueryRevieweeReqBodyBuilder {
	builder := &QueryRevieweeReqBodyBuilder{}
	return builder
}

// 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
//
//示例值：6992035450862224940
func (builder *QueryRevieweeReqBodyBuilder) SemesterId(semesterId string) *QueryRevieweeReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 用户 ID，类型需要与查询参数中的user_id_type保持一致。不传则默认返回该周期所有被评估人的信息。
//
//示例值：
func (builder *QueryRevieweeReqBodyBuilder) UserIds(userIds []string) *QueryRevieweeReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

// 项目 ID 列表，查询指定的项目下的被评估人数据
//
//示例值：
func (builder *QueryRevieweeReqBodyBuilder) ActivityIds(activityIds []string) *QueryRevieweeReqBodyBuilder {
	builder.activityIds = activityIds
	builder.activityIdsFlag = true
	return builder
}

func (builder *QueryRevieweeReqBodyBuilder) Build() *QueryRevieweeReqBody {
	req := &QueryRevieweeReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	if builder.activityIdsFlag {
		req.ActivityIds = builder.activityIds
	}
	return req
}

type QueryRevieweePathReqBodyBuilder struct {
	semesterId      string
	semesterIdFlag  bool
	userIds         []string
	userIdsFlag     bool
	activityIds     []string
	activityIdsFlag bool
}

func NewQueryRevieweePathReqBodyBuilder() *QueryRevieweePathReqBodyBuilder {
	builder := &QueryRevieweePathReqBodyBuilder{}
	return builder
}

// 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得
//
// 示例值：6992035450862224940
func (builder *QueryRevieweePathReqBodyBuilder) SemesterId(semesterId string) *QueryRevieweePathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 用户 ID，类型需要与查询参数中的user_id_type保持一致。不传则默认返回该周期所有被评估人的信息。
//
// 示例值：
func (builder *QueryRevieweePathReqBodyBuilder) UserIds(userIds []string) *QueryRevieweePathReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

// 项目 ID 列表，查询指定的项目下的被评估人数据
//
// 示例值：
func (builder *QueryRevieweePathReqBodyBuilder) ActivityIds(activityIds []string) *QueryRevieweePathReqBodyBuilder {
	builder.activityIds = activityIds
	builder.activityIdsFlag = true
	return builder
}

func (builder *QueryRevieweePathReqBodyBuilder) Build() (*QueryRevieweeReqBody, error) {
	req := &QueryRevieweeReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	if builder.activityIdsFlag {
		req.ActivityIds = builder.activityIds
	}
	return req, nil
}

type QueryRevieweeReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryRevieweeReqBody
}

func NewQueryRevieweeReqBuilder() *QueryRevieweeReqBuilder {
	builder := &QueryRevieweeReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：open_id
func (builder *QueryRevieweeReqBuilder) UserIdType(userIdType string) *QueryRevieweeReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 分页标记，第一次请求不填，表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token，下次遍历可采用该 page_token 获取
//
// 示例值：
func (builder *QueryRevieweeReqBuilder) PageToken(pageToken string) *QueryRevieweeReqBuilder {
	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
	return builder
}

// 分页大小
//
// 示例值：30
func (builder *QueryRevieweeReqBuilder) PageSize(pageSize int) *QueryRevieweeReqBuilder {
	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
	return builder
}

// 获取指定周期参与了的被评估人
func (builder *QueryRevieweeReqBuilder) Body(body *QueryRevieweeReqBody) *QueryRevieweeReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryRevieweeReqBuilder) Build() *QueryRevieweeReq {
	req := &QueryRevieweeReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryRevieweeReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 周期 ID，1 次只允许查询 1 个周期，semester_id 可通过【获取周期】接口获得

	UserIds []string `json:"user_ids,omitempty"` // 用户 ID，类型需要与查询参数中的user_id_type保持一致。不传则默认返回该周期所有被评估人的信息。

	ActivityIds []string `json:"activity_ids,omitempty"` // 项目 ID 列表，查询指定的项目下的被评估人数据
}

type QueryRevieweeReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryRevieweeReqBody `body:""`
}

type QueryRevieweeRespData struct {
	SemesterId *string `json:"semester_id,omitempty"` // 周期ID

	Reviewees []*Reviewee `json:"reviewees,omitempty"` // 被评估人列表

	HasMore *bool `json:"has_more,omitempty"` // 是否还有更多项

	PageToken *string `json:"page_token,omitempty"` // 分页标记，当 has_more 为 true 时，会同时返回新的 page_token，否则不返回 page_token
}

type QueryRevieweeResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryRevieweeRespData `json:"data"` // 业务数据
}

func (resp *QueryRevieweeResp) Success() bool {
	return resp.Code == 0
}

type WriteUserGroupUserRelReqBodyBuilder struct {
	groupId     string // 分组id key
	groupIdFlag bool

	scopeVisibleSetting     int // 人员组查看人员名单可见性配置
	scopeVisibleSettingFlag bool

	userIds     []string // 人员列表
	userIdsFlag bool
}

func NewWriteUserGroupUserRelReqBodyBuilder() *WriteUserGroupUserRelReqBodyBuilder {
	builder := &WriteUserGroupUserRelReqBodyBuilder{}
	return builder
}

// 分组id key
//
//示例值：ABCDEFG
func (builder *WriteUserGroupUserRelReqBodyBuilder) GroupId(groupId string) *WriteUserGroupUserRelReqBodyBuilder {
	builder.groupId = groupId
	builder.groupIdFlag = true
	return builder
}

// 人员组查看人员名单可见性配置
//
//示例值：1
func (builder *WriteUserGroupUserRelReqBodyBuilder) ScopeVisibleSetting(scopeVisibleSetting int) *WriteUserGroupUserRelReqBodyBuilder {
	builder.scopeVisibleSetting = scopeVisibleSetting
	builder.scopeVisibleSettingFlag = true
	return builder
}

// 人员列表
//
//示例值：
func (builder *WriteUserGroupUserRelReqBodyBuilder) UserIds(userIds []string) *WriteUserGroupUserRelReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

func (builder *WriteUserGroupUserRelReqBodyBuilder) Build() *WriteUserGroupUserRelReqBody {
	req := &WriteUserGroupUserRelReqBody{}
	if builder.groupIdFlag {
		req.GroupId = &builder.groupId
	}
	if builder.scopeVisibleSettingFlag {
		req.ScopeVisibleSetting = &builder.scopeVisibleSetting
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	return req
}

type WriteUserGroupUserRelPathReqBodyBuilder struct {
	groupId                 string
	groupIdFlag             bool
	scopeVisibleSetting     int
	scopeVisibleSettingFlag bool
	userIds                 []string
	userIdsFlag             bool
}

func NewWriteUserGroupUserRelPathReqBodyBuilder() *WriteUserGroupUserRelPathReqBodyBuilder {
	builder := &WriteUserGroupUserRelPathReqBodyBuilder{}
	return builder
}

// 分组id key
//
// 示例值：ABCDEFG
func (builder *WriteUserGroupUserRelPathReqBodyBuilder) GroupId(groupId string) *WriteUserGroupUserRelPathReqBodyBuilder {
	builder.groupId = groupId
	builder.groupIdFlag = true
	return builder
}

// 人员组查看人员名单可见性配置
//
// 示例值：1
func (builder *WriteUserGroupUserRelPathReqBodyBuilder) ScopeVisibleSetting(scopeVisibleSetting int) *WriteUserGroupUserRelPathReqBodyBuilder {
	builder.scopeVisibleSetting = scopeVisibleSetting
	builder.scopeVisibleSettingFlag = true
	return builder
}

// 人员列表
//
// 示例值：
func (builder *WriteUserGroupUserRelPathReqBodyBuilder) UserIds(userIds []string) *WriteUserGroupUserRelPathReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

func (builder *WriteUserGroupUserRelPathReqBodyBuilder) Build() (*WriteUserGroupUserRelReqBody, error) {
	req := &WriteUserGroupUserRelReqBody{}
	if builder.groupIdFlag {
		req.GroupId = &builder.groupId
	}
	if builder.scopeVisibleSettingFlag {
		req.ScopeVisibleSetting = &builder.scopeVisibleSetting
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	return req, nil
}

type WriteUserGroupUserRelReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *WriteUserGroupUserRelReqBody
}

func NewWriteUserGroupUserRelReqBuilder() *WriteUserGroupUserRelReqBuilder {
	builder := &WriteUserGroupUserRelReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

// 根据 client_token 是否一致来判断是否为同一请求
//
// 示例值：123456
func (builder *WriteUserGroupUserRelReqBuilder) ClientToken(clientToken string) *WriteUserGroupUserRelReqBuilder {
	builder.apiReq.QueryParams.Set("client_token", fmt.Sprint(clientToken))
	return builder
}

// 用户ID类型
//
// 示例值：open_id
func (builder *WriteUserGroupUserRelReqBuilder) UserIdType(userIdType string) *WriteUserGroupUserRelReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 写入人员组成员范围
func (builder *WriteUserGroupUserRelReqBuilder) Body(body *WriteUserGroupUserRelReqBody) *WriteUserGroupUserRelReqBuilder {
	builder.body = body
	return builder
}

func (builder *WriteUserGroupUserRelReqBuilder) Build() *WriteUserGroupUserRelReq {
	req := &WriteUserGroupUserRelReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type WriteUserGroupUserRelReqBody struct {
	GroupId *string `json:"group_id,omitempty"` // 分组id key

	ScopeVisibleSetting *int `json:"scope_visible_setting,omitempty"` // 人员组查看人员名单可见性配置

	UserIds []string `json:"user_ids,omitempty"` // 人员列表
}

type WriteUserGroupUserRelReq struct {
	apiReq *larkcore.ApiReq
	Body   *WriteUserGroupUserRelReqBody `body:""`
}

type WriteUserGroupUserRelRespData struct {
	Data *WriteUserGroupScopeData `json:"data,omitempty"` // 写入员工范围响应
}

type WriteUserGroupUserRelResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *WriteUserGroupUserRelRespData `json:"data"` // 业务数据
}

func (resp *WriteUserGroupUserRelResp) Success() bool {
	return resp.Code == 0
}

type QueryUserInfoReqBodyBuilder struct {
	semesterId     string // 评估周期 ID 列表，semester_id 可通过【获取周期】获得
	semesterIdFlag bool

	userIds     []string // 人员 ID 列表，ID 类型与user_id_type 的取值一致
	userIdsFlag bool
}

func NewQueryUserInfoReqBodyBuilder() *QueryUserInfoReqBodyBuilder {
	builder := &QueryUserInfoReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】获得
//
//示例值：6992035450862224940
func (builder *QueryUserInfoReqBodyBuilder) SemesterId(semesterId string) *QueryUserInfoReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 人员 ID 列表，ID 类型与user_id_type 的取值一致
//
//示例值：
func (builder *QueryUserInfoReqBodyBuilder) UserIds(userIds []string) *QueryUserInfoReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

func (builder *QueryUserInfoReqBodyBuilder) Build() *QueryUserInfoReqBody {
	req := &QueryUserInfoReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	return req
}

type QueryUserInfoPathReqBodyBuilder struct {
	semesterId     string
	semesterIdFlag bool
	userIds        []string
	userIdsFlag    bool
}

func NewQueryUserInfoPathReqBodyBuilder() *QueryUserInfoPathReqBodyBuilder {
	builder := &QueryUserInfoPathReqBodyBuilder{}
	return builder
}

// 评估周期 ID 列表，semester_id 可通过【获取周期】获得
//
// 示例值：6992035450862224940
func (builder *QueryUserInfoPathReqBodyBuilder) SemesterId(semesterId string) *QueryUserInfoPathReqBodyBuilder {
	builder.semesterId = semesterId
	builder.semesterIdFlag = true
	return builder
}

// 人员 ID 列表，ID 类型与user_id_type 的取值一致
//
// 示例值：
func (builder *QueryUserInfoPathReqBodyBuilder) UserIds(userIds []string) *QueryUserInfoPathReqBodyBuilder {
	builder.userIds = userIds
	builder.userIdsFlag = true
	return builder
}

func (builder *QueryUserInfoPathReqBodyBuilder) Build() (*QueryUserInfoReqBody, error) {
	req := &QueryUserInfoReqBody{}
	if builder.semesterIdFlag {
		req.SemesterId = &builder.semesterId
	}
	if builder.userIdsFlag {
		req.UserIds = builder.userIds
	}
	return req, nil
}

type QueryUserInfoReqBuilder struct {
	apiReq *larkcore.ApiReq
	body   *QueryUserInfoReqBody
}

func NewQueryUserInfoReqBuilder() *QueryUserInfoReqBuilder {
	builder := &QueryUserInfoReqBuilder{}
	builder.apiReq = &larkcore.ApiReq{
		PathParams:  larkcore.PathParams{},
		QueryParams: larkcore.QueryParams{},
	}
	return builder
}

//
//
// 示例值：
func (builder *QueryUserInfoReqBuilder) UserIdType(userIdType string) *QueryUserInfoReqBuilder {
	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
	return builder
}

// 指定查询结果中的部门 ID 类型。关于部门 ID 的详细介绍，可参见部门 ID 说明。
//
// 示例值：open_department_id
func (builder *QueryUserInfoReqBuilder) DepartmentIdType(departmentIdType string) *QueryUserInfoReqBuilder {
	builder.apiReq.QueryParams.Set("department_id_type", fmt.Sprint(departmentIdType))
	return builder
}

//
func (builder *QueryUserInfoReqBuilder) Body(body *QueryUserInfoReqBody) *QueryUserInfoReqBuilder {
	builder.body = body
	return builder
}

func (builder *QueryUserInfoReqBuilder) Build() *QueryUserInfoReq {
	req := &QueryUserInfoReq{}
	req.apiReq = &larkcore.ApiReq{}
	req.apiReq.QueryParams = builder.apiReq.QueryParams
	req.apiReq.Body = builder.body
	return req
}

type QueryUserInfoReqBody struct {
	SemesterId *string `json:"semester_id,omitempty"` // 评估周期 ID 列表，semester_id 可通过【获取周期】获得

	UserIds []string `json:"user_ids,omitempty"` // 人员 ID 列表，ID 类型与user_id_type 的取值一致
}

type QueryUserInfoReq struct {
	apiReq *larkcore.ApiReq
	Body   *QueryUserInfoReqBody `body:""`
}

type QueryUserInfoRespData struct {
	SemesterId *string `json:"semester_id,omitempty"` // 评估周期 ID

	UserInfos []*UserInfo `json:"user_infos,omitempty"` // 人员的快照信息列表
}

type QueryUserInfoResp struct {
	*larkcore.ApiResp `json:"-"`
	larkcore.CodeError
	Data *QueryUserInfoRespData `json:"data"` // 业务数据
}

func (resp *QueryUserInfoResp) Success() bool {
	return resp.Code == 0
}

type P2ReviewDataChangedV2Data struct {
	Items []*ReviewDataChange `json:"items,omitempty"` // 评估数据列表
}

type P2ReviewDataChangedV2 struct {
	*larkevent.EventV2Base                            // 事件基础数据
	*larkevent.EventReq                               // 请求原生数据
	Event                  *P2ReviewDataChangedV2Data `json:"event"` // 事件内容
}

func (m *P2ReviewDataChangedV2) RawReq(req *larkevent.EventReq) {
	m.EventReq = req
}

type P2StageTaskOpenResultV2Data struct {
	Items []*OpenResult `json:"items,omitempty"` // 新开通绩效结果的被评估人列表
}

type P2StageTaskOpenResultV2 struct {
	*larkevent.EventV2Base                              // 事件基础数据
	*larkevent.EventReq                                 // 请求原生数据
	Event                  *P2StageTaskOpenResultV2Data `json:"event"` // 事件内容
}

func (m *P2StageTaskOpenResultV2) RawReq(req *larkevent.EventReq) {
	m.EventReq = req
}

type QueryAdditionalInformationIterator struct {
	nextPageToken *string
	items         []*AdditionalInformation
	index         int
	limit         int
	ctx           context.Context
	req           *QueryAdditionalInformationReq
	listFunc      func(ctx context.Context, req *QueryAdditionalInformationReq, options ...larkcore.RequestOptionFunc) (*QueryAdditionalInformationResp, error)
	options       []larkcore.RequestOptionFunc
	curlNum       int
}

func (iterator *QueryAdditionalInformationIterator) Next() (bool, *AdditionalInformation, error) {
	// 达到最大量，则返回
	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
		return false, nil, nil
	}

	// 为0则拉取数据
	if iterator.index == 0 || iterator.index >= len(iterator.items) {
		if iterator.index != 0 && iterator.nextPageToken == nil {
			return false, nil, nil
		}
		if iterator.nextPageToken != nil {
			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
		}
		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
		if err != nil {
			return false, nil, err
		}

		if resp.Code != 0 {
			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
		}

		if len(resp.Data.AdditionalInformations) == 0 {
			return false, nil, nil
		}

		iterator.nextPageToken = resp.Data.PageToken
		iterator.items = resp.Data.AdditionalInformations
		iterator.index = 0
	}

	block := iterator.items[iterator.index]
	iterator.index++
	iterator.curlNum++
	return true, block, nil
}

func (iterator *QueryAdditionalInformationIterator) NextPageToken() *string {
	return iterator.nextPageToken
}

type QueryIndicatorIterator struct {
	nextPageToken *string
	items         []*Indicator
	index         int
	limit         int
	ctx           context.Context
	req           *QueryIndicatorReq
	listFunc      func(ctx context.Context, req *QueryIndicatorReq, options ...larkcore.RequestOptionFunc) (*QueryIndicatorResp, error)
	options       []larkcore.RequestOptionFunc
	curlNum       int
}

func (iterator *QueryIndicatorIterator) Next() (bool, *Indicator, error) {
	// 达到最大量，则返回
	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
		return false, nil, nil
	}

	// 为0则拉取数据
	if iterator.index == 0 || iterator.index >= len(iterator.items) {
		if iterator.index != 0 && iterator.nextPageToken == nil {
			return false, nil, nil
		}
		if iterator.nextPageToken != nil {
			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
		}
		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
		if err != nil {
			return false, nil, err
		}

		if resp.Code != 0 {
			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
		}

		if len(resp.Data.Indicators) == 0 {
			return false, nil, nil
		}

		iterator.nextPageToken = resp.Data.PageToken
		iterator.items = resp.Data.Indicators
		iterator.index = 0
	}

	block := iterator.items[iterator.index]
	iterator.index++
	iterator.curlNum++
	return true, block, nil
}

func (iterator *QueryIndicatorIterator) NextPageToken() *string {
	return iterator.nextPageToken
}

type ListMetricTagIterator struct {
	nextPageToken *string
	items         []*MetricTag
	index         int
	limit         int
	ctx           context.Context
	req           *ListMetricTagReq
	listFunc      func(ctx context.Context, req *ListMetricTagReq, options ...larkcore.RequestOptionFunc) (*ListMetricTagResp, error)
	options       []larkcore.RequestOptionFunc
	curlNum       int
}

func (iterator *ListMetricTagIterator) Next() (bool, *MetricTag, error) {
	// 达到最大量，则返回
	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
		return false, nil, nil
	}

	// 为0则拉取数据
	if iterator.index == 0 || iterator.index >= len(iterator.items) {
		if iterator.index != 0 && iterator.nextPageToken == nil {
			return false, nil, nil
		}
		if iterator.nextPageToken != nil {
			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
		}
		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
		if err != nil {
			return false, nil, err
		}

		if resp.Code != 0 {
			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
		}

		if len(resp.Data.Items) == 0 {
			return false, nil, nil
		}

		iterator.nextPageToken = resp.Data.PageToken
		iterator.items = resp.Data.Items
		iterator.index = 0
	}

	block := iterator.items[iterator.index]
	iterator.index++
	iterator.curlNum++
	return true, block, nil
}

func (iterator *ListMetricTagIterator) NextPageToken() *string {
	return iterator.nextPageToken
}

type QueryQuestionIterator struct {
	nextPageToken *string
	items         []*Question
	index         int
	limit         int
	ctx           context.Context
	req           *QueryQuestionReq
	listFunc      func(ctx context.Context, req *QueryQuestionReq, options ...larkcore.RequestOptionFunc) (*QueryQuestionResp, error)
	options       []larkcore.RequestOptionFunc
	curlNum       int
}

func (iterator *QueryQuestionIterator) Next() (bool, *Question, error) {
	// 达到最大量，则返回
	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
		return false, nil, nil
	}

	// 为0则拉取数据
	if iterator.index == 0 || iterator.index >= len(iterator.items) {
		if iterator.index != 0 && iterator.nextPageToken == nil {
			return false, nil, nil
		}
		if iterator.nextPageToken != nil {
			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
		}
		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
		if err != nil {
			return false, nil, err
		}

		if resp.Code != 0 {
			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
		}

		if len(resp.Data.TagBasedQuestions) == 0 {
			return false, nil, nil
		}

		iterator.nextPageToken = resp.Data.PageToken
		iterator.items = resp.Data.TagBasedQuestions
		iterator.index = 0
	}

	block := iterator.items[iterator.index]
	iterator.index++
	iterator.curlNum++
	return true, block, nil
}

func (iterator *QueryQuestionIterator) NextPageToken() *string {
	return iterator.nextPageToken
}

type QueryReviewTemplateIterator struct {
	nextPageToken *string
	items         []*ReviewTemplate
	index         int
	limit         int
	ctx           context.Context
	req           *QueryReviewTemplateReq
	listFunc      func(ctx context.Context, req *QueryReviewTemplateReq, options ...larkcore.RequestOptionFunc) (*QueryReviewTemplateResp, error)
	options       []larkcore.RequestOptionFunc
	curlNum       int
}

func (iterator *QueryReviewTemplateIterator) Next() (bool, *ReviewTemplate, error) {
	// 达到最大量，则返回
	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
		return false, nil, nil
	}

	// 为0则拉取数据
	if iterator.index == 0 || iterator.index >= len(iterator.items) {
		if iterator.index != 0 && iterator.nextPageToken == nil {
			return false, nil, nil
		}
		if iterator.nextPageToken != nil {
			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
		}
		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
		if err != nil {
			return false, nil, err
		}

		if resp.Code != 0 {
			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
		}

		if len(resp.Data.ReviewTemplates) == 0 {
			return false, nil, nil
		}

		iterator.nextPageToken = resp.Data.PageToken
		iterator.items = resp.Data.ReviewTemplates
		iterator.index = 0
	}

	block := iterator.items[iterator.index]
	iterator.index++
	iterator.curlNum++
	return true, block, nil
}

func (iterator *QueryReviewTemplateIterator) NextPageToken() *string {
	return iterator.nextPageToken
}
