gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/acs/v1/model.go (about)

     1  // Package acs code generated by oapi sdk gen
     2  /*
     3   * MIT License
     4   *
     5   * Copyright (c) 2022 Lark Technologies Pte. Ltd.
     6   *
     7   * 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:
     8   *
     9   * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
    10   *
    11   * 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.
    12   */
    13  
    14  package larkacs
    15  
    16  import (
    17  	"io"
    18  
    19  	"io/ioutil"
    20  
    21  	"fmt"
    22  
    23  	"context"
    24  	"errors"
    25  
    26  	"gitee.com/larksuite/oapi-sdk-go/v3/event"
    27  
    28  	"gitee.com/larksuite/oapi-sdk-go/v3/core"
    29  )
    30  
    31  const (
    32  	UserIdTypeUserId  = "user_id"  // 以user_id来识别用户
    33  	UserIdTypeUnionId = "union_id" // 以union_id来识别用户
    34  	UserIdTypeOpenId  = "open_id"  // 以open_id来识别用户
    35  )
    36  
    37  const (
    38  	UserIdTypeGetUserUserId  = "user_id"  // 以user_id来识别用户
    39  	UserIdTypeGetUserUnionId = "union_id" // 以union_id来识别用户
    40  	UserIdTypeGetUserOpenId  = "open_id"  // 以open_id来识别用户
    41  )
    42  
    43  const (
    44  	UserIdTypeListUserUserId  = "user_id"  // 以user_id来识别用户
    45  	UserIdTypeListUserUnionId = "union_id" // 以union_id来识别用户
    46  	UserIdTypeListUserOpenId  = "open_id"  // 以open_id来识别用户
    47  )
    48  
    49  const (
    50  	UserIdTypePatchUserUserId  = "user_id"  // 以user_id来识别用户
    51  	UserIdTypePatchUserUnionId = "union_id" // 以union_id来识别用户
    52  	UserIdTypePatchUserOpenId  = "open_id"  // 以open_id来识别用户
    53  )
    54  
    55  const (
    56  	UserIdTypeGetUserFaceUserId  = "user_id"  // 以user_id来识别用户
    57  	UserIdTypeGetUserFaceUnionId = "union_id" // 以union_id来识别用户
    58  	UserIdTypeGetUserFaceOpenId  = "open_id"  // 以open_id来识别用户
    59  )
    60  
    61  const (
    62  	UserIdTypeUpdateUserFaceUserId  = "user_id"  // 以user_id来识别用户
    63  	UserIdTypeUpdateUserFaceUnionId = "union_id" // 以union_id来识别用户
    64  	UserIdTypeUpdateUserFaceOpenId  = "open_id"  // 以open_id来识别用户
    65  )
    66  
    67  type AccessRecord struct {
    68  	AccessRecordId *string `json:"access_record_id,omitempty"` // 门禁记录 ID
    69  	UserId         *string `json:"user_id,omitempty"`          // 门禁记录所属用户 ID
    70  	DeviceId       *string `json:"device_id,omitempty"`        // 门禁设备 ID
    71  	IsClockIn      *bool   `json:"is_clock_in,omitempty"`      // 是否是打卡
    72  	AccessTime     *string `json:"access_time,omitempty"`      // 访问时间,单位秒
    73  	AccessType     *string `json:"access_type,omitempty"`      // 识别方式
    74  	AccessData     *string `json:"access_data,omitempty"`      // 识别相关数据,根据 access_type 不同,取值不同
    75  	IsDoorOpen     *bool   `json:"is_door_open,omitempty"`     // 是否开门
    76  }
    77  
    78  type AccessRecordBuilder struct {
    79  	accessRecordId     string // 门禁记录 ID
    80  	accessRecordIdFlag bool
    81  	userId             string // 门禁记录所属用户 ID
    82  	userIdFlag         bool
    83  	deviceId           string // 门禁设备 ID
    84  	deviceIdFlag       bool
    85  	isClockIn          bool // 是否是打卡
    86  	isClockInFlag      bool
    87  	accessTime         string // 访问时间,单位秒
    88  	accessTimeFlag     bool
    89  	accessType         string // 识别方式
    90  	accessTypeFlag     bool
    91  	accessData         string // 识别相关数据,根据 access_type 不同,取值不同
    92  	accessDataFlag     bool
    93  	isDoorOpen         bool // 是否开门
    94  	isDoorOpenFlag     bool
    95  }
    96  
    97  func NewAccessRecordBuilder() *AccessRecordBuilder {
    98  	builder := &AccessRecordBuilder{}
    99  	return builder
   100  }
   101  
   102  // 门禁记录 ID
   103  //
   104  // 示例值:6939433228970082591
   105  func (builder *AccessRecordBuilder) AccessRecordId(accessRecordId string) *AccessRecordBuilder {
   106  	builder.accessRecordId = accessRecordId
   107  	builder.accessRecordIdFlag = true
   108  	return builder
   109  }
   110  
   111  // 门禁记录所属用户 ID
   112  //
   113  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   114  func (builder *AccessRecordBuilder) UserId(userId string) *AccessRecordBuilder {
   115  	builder.userId = userId
   116  	builder.userIdFlag = true
   117  	return builder
   118  }
   119  
   120  // 门禁设备 ID
   121  //
   122  // 示例值:6939433228970082593
   123  func (builder *AccessRecordBuilder) DeviceId(deviceId string) *AccessRecordBuilder {
   124  	builder.deviceId = deviceId
   125  	builder.deviceIdFlag = true
   126  	return builder
   127  }
   128  
   129  // 是否是打卡
   130  //
   131  // 示例值:true
   132  func (builder *AccessRecordBuilder) IsClockIn(isClockIn bool) *AccessRecordBuilder {
   133  	builder.isClockIn = isClockIn
   134  	builder.isClockInFlag = true
   135  	return builder
   136  }
   137  
   138  // 访问时间,单位秒
   139  //
   140  // 示例值:1624520221
   141  func (builder *AccessRecordBuilder) AccessTime(accessTime string) *AccessRecordBuilder {
   142  	builder.accessTime = accessTime
   143  	builder.accessTimeFlag = true
   144  	return builder
   145  }
   146  
   147  // 识别方式
   148  //
   149  // 示例值:FA
   150  func (builder *AccessRecordBuilder) AccessType(accessType string) *AccessRecordBuilder {
   151  	builder.accessType = accessType
   152  	builder.accessTypeFlag = true
   153  	return builder
   154  }
   155  
   156  // 识别相关数据,根据 access_type 不同,取值不同
   157  //
   158  // 示例值:{\"has_access_photo\":true}
   159  func (builder *AccessRecordBuilder) AccessData(accessData string) *AccessRecordBuilder {
   160  	builder.accessData = accessData
   161  	builder.accessDataFlag = true
   162  	return builder
   163  }
   164  
   165  // 是否开门
   166  //
   167  // 示例值:true
   168  func (builder *AccessRecordBuilder) IsDoorOpen(isDoorOpen bool) *AccessRecordBuilder {
   169  	builder.isDoorOpen = isDoorOpen
   170  	builder.isDoorOpenFlag = true
   171  	return builder
   172  }
   173  
   174  func (builder *AccessRecordBuilder) Build() *AccessRecord {
   175  	req := &AccessRecord{}
   176  	if builder.accessRecordIdFlag {
   177  		req.AccessRecordId = &builder.accessRecordId
   178  
   179  	}
   180  	if builder.userIdFlag {
   181  		req.UserId = &builder.userId
   182  
   183  	}
   184  	if builder.deviceIdFlag {
   185  		req.DeviceId = &builder.deviceId
   186  
   187  	}
   188  	if builder.isClockInFlag {
   189  		req.IsClockIn = &builder.isClockIn
   190  
   191  	}
   192  	if builder.accessTimeFlag {
   193  		req.AccessTime = &builder.accessTime
   194  
   195  	}
   196  	if builder.accessTypeFlag {
   197  		req.AccessType = &builder.accessType
   198  
   199  	}
   200  	if builder.accessDataFlag {
   201  		req.AccessData = &builder.accessData
   202  
   203  	}
   204  	if builder.isDoorOpenFlag {
   205  		req.IsDoorOpen = &builder.isDoorOpen
   206  
   207  	}
   208  	return req
   209  }
   210  
   211  type Device struct {
   212  	DeviceId   *string `json:"device_id,omitempty"`   // 门禁设备 ID
   213  	DeviceName *string `json:"device_name,omitempty"` // 设备名称
   214  	DeviceSn   *string `json:"device_sn,omitempty"`   // 设备 SN 码
   215  }
   216  
   217  type DeviceBuilder struct {
   218  	deviceId       string // 门禁设备 ID
   219  	deviceIdFlag   bool
   220  	deviceName     string // 设备名称
   221  	deviceNameFlag bool
   222  	deviceSn       string // 设备 SN 码
   223  	deviceSnFlag   bool
   224  }
   225  
   226  func NewDeviceBuilder() *DeviceBuilder {
   227  	builder := &DeviceBuilder{}
   228  	return builder
   229  }
   230  
   231  // 门禁设备 ID
   232  //
   233  // 示例值:6939433228970082593
   234  func (builder *DeviceBuilder) DeviceId(deviceId string) *DeviceBuilder {
   235  	builder.deviceId = deviceId
   236  	builder.deviceIdFlag = true
   237  	return builder
   238  }
   239  
   240  // 设备名称
   241  //
   242  // 示例值:东门
   243  func (builder *DeviceBuilder) DeviceName(deviceName string) *DeviceBuilder {
   244  	builder.deviceName = deviceName
   245  	builder.deviceNameFlag = true
   246  	return builder
   247  }
   248  
   249  // 设备 SN 码
   250  //
   251  // 示例值:3X811621174000240
   252  func (builder *DeviceBuilder) DeviceSn(deviceSn string) *DeviceBuilder {
   253  	builder.deviceSn = deviceSn
   254  	builder.deviceSnFlag = true
   255  	return builder
   256  }
   257  
   258  func (builder *DeviceBuilder) Build() *Device {
   259  	req := &Device{}
   260  	if builder.deviceIdFlag {
   261  		req.DeviceId = &builder.deviceId
   262  
   263  	}
   264  	if builder.deviceNameFlag {
   265  		req.DeviceName = &builder.deviceName
   266  
   267  	}
   268  	if builder.deviceSnFlag {
   269  		req.DeviceSn = &builder.deviceSn
   270  
   271  	}
   272  	return req
   273  }
   274  
   275  type Feature struct {
   276  	Card         *int  `json:"card,omitempty"`          // 卡号
   277  	FaceUploaded *bool `json:"face_uploaded,omitempty"` // 是否已上传人脸图片
   278  }
   279  
   280  type FeatureBuilder struct {
   281  	card             int // 卡号
   282  	cardFlag         bool
   283  	faceUploaded     bool // 是否已上传人脸图片
   284  	faceUploadedFlag bool
   285  }
   286  
   287  func NewFeatureBuilder() *FeatureBuilder {
   288  	builder := &FeatureBuilder{}
   289  	return builder
   290  }
   291  
   292  // 卡号
   293  //
   294  // 示例值:123456
   295  func (builder *FeatureBuilder) Card(card int) *FeatureBuilder {
   296  	builder.card = card
   297  	builder.cardFlag = true
   298  	return builder
   299  }
   300  
   301  // 是否已上传人脸图片
   302  //
   303  // 示例值:true
   304  func (builder *FeatureBuilder) FaceUploaded(faceUploaded bool) *FeatureBuilder {
   305  	builder.faceUploaded = faceUploaded
   306  	builder.faceUploadedFlag = true
   307  	return builder
   308  }
   309  
   310  func (builder *FeatureBuilder) Build() *Feature {
   311  	req := &Feature{}
   312  	if builder.cardFlag {
   313  		req.Card = &builder.card
   314  
   315  	}
   316  	if builder.faceUploadedFlag {
   317  		req.FaceUploaded = &builder.faceUploaded
   318  
   319  	}
   320  	return req
   321  }
   322  
   323  type File struct {
   324  	Files    io.Reader `json:"files,omitempty"`     // 人脸图片内容
   325  	FileType *string   `json:"file_type,omitempty"` // 文件类型,可选的类型有jpg,png
   326  	FileName *string   `json:"file_name,omitempty"` // 带后缀的文件名
   327  }
   328  
   329  type FileBuilder struct {
   330  	files        io.Reader // 人脸图片内容
   331  	filesFlag    bool
   332  	fileType     string // 文件类型,可选的类型有jpg,png
   333  	fileTypeFlag bool
   334  	fileName     string // 带后缀的文件名
   335  	fileNameFlag bool
   336  }
   337  
   338  func NewFileBuilder() *FileBuilder {
   339  	builder := &FileBuilder{}
   340  	return builder
   341  }
   342  
   343  // 人脸图片内容
   344  //
   345  // 示例值:jpg图片
   346  func (builder *FileBuilder) Files(files io.Reader) *FileBuilder {
   347  	builder.files = files
   348  	builder.filesFlag = true
   349  	return builder
   350  }
   351  
   352  // 文件类型,可选的类型有jpg,png
   353  //
   354  // 示例值:jpg
   355  func (builder *FileBuilder) FileType(fileType string) *FileBuilder {
   356  	builder.fileType = fileType
   357  	builder.fileTypeFlag = true
   358  	return builder
   359  }
   360  
   361  // 带后缀的文件名
   362  //
   363  // 示例值:efeqz12f.jpg
   364  func (builder *FileBuilder) FileName(fileName string) *FileBuilder {
   365  	builder.fileName = fileName
   366  	builder.fileNameFlag = true
   367  	return builder
   368  }
   369  
   370  func (builder *FileBuilder) Build() *File {
   371  	req := &File{}
   372  	if builder.filesFlag {
   373  		req.Files = builder.files
   374  	}
   375  	if builder.fileTypeFlag {
   376  		req.FileType = &builder.fileType
   377  
   378  	}
   379  	if builder.fileNameFlag {
   380  		req.FileName = &builder.fileName
   381  
   382  	}
   383  	return req
   384  }
   385  
   386  type User struct {
   387  	Feature *Feature `json:"feature,omitempty"` // 用户特征
   388  	UserId  *string  `json:"user_id,omitempty"` // 用户 ID
   389  }
   390  
   391  type UserBuilder struct {
   392  	feature     *Feature // 用户特征
   393  	featureFlag bool
   394  	userId      string // 用户 ID
   395  	userIdFlag  bool
   396  }
   397  
   398  func NewUserBuilder() *UserBuilder {
   399  	builder := &UserBuilder{}
   400  	return builder
   401  }
   402  
   403  // 用户特征
   404  //
   405  // 示例值:
   406  func (builder *UserBuilder) Feature(feature *Feature) *UserBuilder {
   407  	builder.feature = feature
   408  	builder.featureFlag = true
   409  	return builder
   410  }
   411  
   412  // 用户 ID
   413  //
   414  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   415  func (builder *UserBuilder) UserId(userId string) *UserBuilder {
   416  	builder.userId = userId
   417  	builder.userIdFlag = true
   418  	return builder
   419  }
   420  
   421  func (builder *UserBuilder) Build() *User {
   422  	req := &User{}
   423  	if builder.featureFlag {
   424  		req.Feature = builder.feature
   425  	}
   426  	if builder.userIdFlag {
   427  		req.UserId = &builder.userId
   428  
   429  	}
   430  	return req
   431  }
   432  
   433  type UserId struct {
   434  	UserId  *string `json:"user_id,omitempty"`  //
   435  	OpenId  *string `json:"open_id,omitempty"`  //
   436  	UnionId *string `json:"union_id,omitempty"` //
   437  }
   438  
   439  type UserIdBuilder struct {
   440  	userId      string //
   441  	userIdFlag  bool
   442  	openId      string //
   443  	openIdFlag  bool
   444  	unionId     string //
   445  	unionIdFlag bool
   446  }
   447  
   448  func NewUserIdBuilder() *UserIdBuilder {
   449  	builder := &UserIdBuilder{}
   450  	return builder
   451  }
   452  
   453  //
   454  //
   455  // 示例值:
   456  func (builder *UserIdBuilder) UserId(userId string) *UserIdBuilder {
   457  	builder.userId = userId
   458  	builder.userIdFlag = true
   459  	return builder
   460  }
   461  
   462  //
   463  //
   464  // 示例值:
   465  func (builder *UserIdBuilder) OpenId(openId string) *UserIdBuilder {
   466  	builder.openId = openId
   467  	builder.openIdFlag = true
   468  	return builder
   469  }
   470  
   471  //
   472  //
   473  // 示例值:
   474  func (builder *UserIdBuilder) UnionId(unionId string) *UserIdBuilder {
   475  	builder.unionId = unionId
   476  	builder.unionIdFlag = true
   477  	return builder
   478  }
   479  
   480  func (builder *UserIdBuilder) Build() *UserId {
   481  	req := &UserId{}
   482  	if builder.userIdFlag {
   483  		req.UserId = &builder.userId
   484  
   485  	}
   486  	if builder.openIdFlag {
   487  		req.OpenId = &builder.openId
   488  
   489  	}
   490  	if builder.unionIdFlag {
   491  		req.UnionId = &builder.unionId
   492  
   493  	}
   494  	return req
   495  }
   496  
   497  type ListAccessRecordReqBuilder struct {
   498  	apiReq *larkcore.ApiReq
   499  	limit  int // 最大返回多少记录,当使用迭代器访问时才有效
   500  }
   501  
   502  func NewListAccessRecordReqBuilder() *ListAccessRecordReqBuilder {
   503  	builder := &ListAccessRecordReqBuilder{}
   504  	builder.apiReq = &larkcore.ApiReq{
   505  		PathParams:  larkcore.PathParams{},
   506  		QueryParams: larkcore.QueryParams{},
   507  	}
   508  	return builder
   509  }
   510  
   511  // 最大返回多少记录,当使用迭代器访问时才有效
   512  func (builder *ListAccessRecordReqBuilder) Limit(limit int) *ListAccessRecordReqBuilder {
   513  	builder.limit = limit
   514  	return builder
   515  }
   516  
   517  // 分页大小
   518  //
   519  // 示例值:100
   520  func (builder *ListAccessRecordReqBuilder) PageSize(pageSize int) *ListAccessRecordReqBuilder {
   521  	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
   522  	return builder
   523  }
   524  
   525  // 分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果
   526  //
   527  // 示例值:AQD9/Rn9eij9Pm39ED40/dk53s4Ebp882DYfFaPFbz00L4CMZJrqGdzNyc8BcZtDbwVUvRmQTvyMYicnGWrde9X56TgdBuS+JKiSIkdexPw=
   528  func (builder *ListAccessRecordReqBuilder) PageToken(pageToken string) *ListAccessRecordReqBuilder {
   529  	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
   530  	return builder
   531  }
   532  
   533  // 记录开始时间,单位秒
   534  //
   535  // 示例值:1624520521
   536  func (builder *ListAccessRecordReqBuilder) From(from int) *ListAccessRecordReqBuilder {
   537  	builder.apiReq.QueryParams.Set("from", fmt.Sprint(from))
   538  	return builder
   539  }
   540  
   541  // 记录结束时间,单位秒,;时间跨度不能超过30天
   542  //
   543  // 示例值:1624520521
   544  func (builder *ListAccessRecordReqBuilder) To(to int) *ListAccessRecordReqBuilder {
   545  	builder.apiReq.QueryParams.Set("to", fmt.Sprint(to))
   546  	return builder
   547  }
   548  
   549  // 门禁设备 ID
   550  //
   551  // 示例值:7091146989218002577
   552  func (builder *ListAccessRecordReqBuilder) DeviceId(deviceId string) *ListAccessRecordReqBuilder {
   553  	builder.apiReq.QueryParams.Set("device_id", fmt.Sprint(deviceId))
   554  	return builder
   555  }
   556  
   557  // 此次调用中使用的用户ID的类型
   558  //
   559  // 示例值:
   560  func (builder *ListAccessRecordReqBuilder) UserIdType(userIdType string) *ListAccessRecordReqBuilder {
   561  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   562  	return builder
   563  }
   564  
   565  func (builder *ListAccessRecordReqBuilder) Build() *ListAccessRecordReq {
   566  	req := &ListAccessRecordReq{}
   567  	req.apiReq = &larkcore.ApiReq{}
   568  	req.Limit = builder.limit
   569  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   570  	return req
   571  }
   572  
   573  type ListAccessRecordReq struct {
   574  	apiReq *larkcore.ApiReq
   575  	Limit  int // 最多返回多少记录,只有在使用迭代器访问时,才有效
   576  
   577  }
   578  
   579  type ListAccessRecordRespData struct {
   580  	Items     []*AccessRecord `json:"items,omitempty"`      // -
   581  	PageToken *string         `json:"page_token,omitempty"` // 分页标记,当 has_more 为 true 时,会同时返回新的 page_token,否则不返回 page_token
   582  	HasMore   *bool           `json:"has_more,omitempty"`   // 是否还有更多项
   583  }
   584  
   585  type ListAccessRecordResp struct {
   586  	*larkcore.ApiResp `json:"-"`
   587  	larkcore.CodeError
   588  	Data *ListAccessRecordRespData `json:"data"` // 业务数据
   589  }
   590  
   591  func (resp *ListAccessRecordResp) Success() bool {
   592  	return resp.Code == 0
   593  }
   594  
   595  type GetAccessRecordAccessPhotoReqBuilder struct {
   596  	apiReq *larkcore.ApiReq
   597  }
   598  
   599  func NewGetAccessRecordAccessPhotoReqBuilder() *GetAccessRecordAccessPhotoReqBuilder {
   600  	builder := &GetAccessRecordAccessPhotoReqBuilder{}
   601  	builder.apiReq = &larkcore.ApiReq{
   602  		PathParams:  larkcore.PathParams{},
   603  		QueryParams: larkcore.QueryParams{},
   604  	}
   605  	return builder
   606  }
   607  
   608  // 门禁访问记录 ID
   609  //
   610  // 示例值:6939433228970082591
   611  func (builder *GetAccessRecordAccessPhotoReqBuilder) AccessRecordId(accessRecordId string) *GetAccessRecordAccessPhotoReqBuilder {
   612  	builder.apiReq.PathParams.Set("access_record_id", fmt.Sprint(accessRecordId))
   613  	return builder
   614  }
   615  
   616  func (builder *GetAccessRecordAccessPhotoReqBuilder) Build() *GetAccessRecordAccessPhotoReq {
   617  	req := &GetAccessRecordAccessPhotoReq{}
   618  	req.apiReq = &larkcore.ApiReq{}
   619  	req.apiReq.PathParams = builder.apiReq.PathParams
   620  	return req
   621  }
   622  
   623  type GetAccessRecordAccessPhotoReq struct {
   624  	apiReq *larkcore.ApiReq
   625  }
   626  
   627  type GetAccessRecordAccessPhotoResp struct {
   628  	*larkcore.ApiResp `json:"-"`
   629  	larkcore.CodeError
   630  	File     io.Reader `json:"-"`
   631  	FileName string    `json:"-"`
   632  }
   633  
   634  func (resp *GetAccessRecordAccessPhotoResp) Success() bool {
   635  	return resp.Code == 0
   636  }
   637  
   638  func (resp *GetAccessRecordAccessPhotoResp) WriteFile(fileName string) error {
   639  	bs, err := ioutil.ReadAll(resp.File)
   640  	if err != nil {
   641  		return err
   642  	}
   643  
   644  	err = ioutil.WriteFile(fileName, bs, 0666)
   645  	if err != nil {
   646  		return err
   647  	}
   648  	return nil
   649  }
   650  
   651  type ListDeviceRespData struct {
   652  	Items []*Device `json:"items,omitempty"` // -
   653  }
   654  
   655  type ListDeviceResp struct {
   656  	*larkcore.ApiResp `json:"-"`
   657  	larkcore.CodeError
   658  	Data *ListDeviceRespData `json:"data"` // 业务数据
   659  }
   660  
   661  func (resp *ListDeviceResp) Success() bool {
   662  	return resp.Code == 0
   663  }
   664  
   665  type GetUserReqBuilder struct {
   666  	apiReq *larkcore.ApiReq
   667  }
   668  
   669  func NewGetUserReqBuilder() *GetUserReqBuilder {
   670  	builder := &GetUserReqBuilder{}
   671  	builder.apiReq = &larkcore.ApiReq{
   672  		PathParams:  larkcore.PathParams{},
   673  		QueryParams: larkcore.QueryParams{},
   674  	}
   675  	return builder
   676  }
   677  
   678  // 用户 ID
   679  //
   680  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   681  func (builder *GetUserReqBuilder) UserId(userId string) *GetUserReqBuilder {
   682  	builder.apiReq.PathParams.Set("user_id", fmt.Sprint(userId))
   683  	return builder
   684  }
   685  
   686  // 此次调用中使用的用户ID的类型
   687  //
   688  // 示例值:
   689  func (builder *GetUserReqBuilder) UserIdType(userIdType string) *GetUserReqBuilder {
   690  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   691  	return builder
   692  }
   693  
   694  func (builder *GetUserReqBuilder) Build() *GetUserReq {
   695  	req := &GetUserReq{}
   696  	req.apiReq = &larkcore.ApiReq{}
   697  	req.apiReq.PathParams = builder.apiReq.PathParams
   698  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   699  	return req
   700  }
   701  
   702  type GetUserReq struct {
   703  	apiReq *larkcore.ApiReq
   704  }
   705  
   706  type GetUserRespData struct {
   707  	User *User `json:"user,omitempty"` // 门禁用户信息
   708  }
   709  
   710  type GetUserResp struct {
   711  	*larkcore.ApiResp `json:"-"`
   712  	larkcore.CodeError
   713  	Data *GetUserRespData `json:"data"` // 业务数据
   714  }
   715  
   716  func (resp *GetUserResp) Success() bool {
   717  	return resp.Code == 0
   718  }
   719  
   720  type ListUserReqBuilder struct {
   721  	apiReq *larkcore.ApiReq
   722  	limit  int // 最大返回多少记录,当使用迭代器访问时才有效
   723  }
   724  
   725  func NewListUserReqBuilder() *ListUserReqBuilder {
   726  	builder := &ListUserReqBuilder{}
   727  	builder.apiReq = &larkcore.ApiReq{
   728  		PathParams:  larkcore.PathParams{},
   729  		QueryParams: larkcore.QueryParams{},
   730  	}
   731  	return builder
   732  }
   733  
   734  // 最大返回多少记录,当使用迭代器访问时才有效
   735  func (builder *ListUserReqBuilder) Limit(limit int) *ListUserReqBuilder {
   736  	builder.limit = limit
   737  	return builder
   738  }
   739  
   740  // 分页大小
   741  //
   742  // 示例值:10
   743  func (builder *ListUserReqBuilder) PageSize(pageSize int) *ListUserReqBuilder {
   744  	builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize))
   745  	return builder
   746  }
   747  
   748  // 分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果
   749  //
   750  // 示例值:10
   751  func (builder *ListUserReqBuilder) PageToken(pageToken string) *ListUserReqBuilder {
   752  	builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken))
   753  	return builder
   754  }
   755  
   756  // 此次调用中使用的用户ID的类型
   757  //
   758  // 示例值:
   759  func (builder *ListUserReqBuilder) UserIdType(userIdType string) *ListUserReqBuilder {
   760  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   761  	return builder
   762  }
   763  
   764  func (builder *ListUserReqBuilder) Build() *ListUserReq {
   765  	req := &ListUserReq{}
   766  	req.apiReq = &larkcore.ApiReq{}
   767  	req.Limit = builder.limit
   768  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   769  	return req
   770  }
   771  
   772  type ListUserReq struct {
   773  	apiReq *larkcore.ApiReq
   774  	Limit  int // 最多返回多少记录,只有在使用迭代器访问时,才有效
   775  
   776  }
   777  
   778  type ListUserRespData struct {
   779  	Items     []*User `json:"items,omitempty"`      // -
   780  	PageToken *string `json:"page_token,omitempty"` // 分页标记,当 has_more 为 true 时,会同时返回新的 page_token,否则不返回 page_token
   781  	HasMore   *bool   `json:"has_more,omitempty"`   // 是否还有更多项
   782  }
   783  
   784  type ListUserResp struct {
   785  	*larkcore.ApiResp `json:"-"`
   786  	larkcore.CodeError
   787  	Data *ListUserRespData `json:"data"` // 业务数据
   788  }
   789  
   790  func (resp *ListUserResp) Success() bool {
   791  	return resp.Code == 0
   792  }
   793  
   794  type PatchUserReqBuilder struct {
   795  	apiReq *larkcore.ApiReq
   796  	user   *User
   797  }
   798  
   799  func NewPatchUserReqBuilder() *PatchUserReqBuilder {
   800  	builder := &PatchUserReqBuilder{}
   801  	builder.apiReq = &larkcore.ApiReq{
   802  		PathParams:  larkcore.PathParams{},
   803  		QueryParams: larkcore.QueryParams{},
   804  	}
   805  	return builder
   806  }
   807  
   808  // 用户 ID
   809  //
   810  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   811  func (builder *PatchUserReqBuilder) UserId(userId string) *PatchUserReqBuilder {
   812  	builder.apiReq.PathParams.Set("user_id", fmt.Sprint(userId))
   813  	return builder
   814  }
   815  
   816  // 此次调用中使用的用户ID的类型
   817  //
   818  // 示例值:
   819  func (builder *PatchUserReqBuilder) UserIdType(userIdType string) *PatchUserReqBuilder {
   820  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   821  	return builder
   822  }
   823  
   824  // 飞书智能门禁在人脸识别成功后会有韦根信号输出,输出用户的卡号。;对于使用韦根协议的门禁系统,企业可使用该接口录入用户卡号。
   825  func (builder *PatchUserReqBuilder) User(user *User) *PatchUserReqBuilder {
   826  	builder.user = user
   827  	return builder
   828  }
   829  
   830  func (builder *PatchUserReqBuilder) Build() *PatchUserReq {
   831  	req := &PatchUserReq{}
   832  	req.apiReq = &larkcore.ApiReq{}
   833  	req.apiReq.PathParams = builder.apiReq.PathParams
   834  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   835  	req.apiReq.Body = builder.user
   836  	return req
   837  }
   838  
   839  type PatchUserReq struct {
   840  	apiReq *larkcore.ApiReq
   841  	User   *User `body:""`
   842  }
   843  
   844  type PatchUserResp struct {
   845  	*larkcore.ApiResp `json:"-"`
   846  	larkcore.CodeError
   847  }
   848  
   849  func (resp *PatchUserResp) Success() bool {
   850  	return resp.Code == 0
   851  }
   852  
   853  type GetUserFaceReqBuilder struct {
   854  	apiReq *larkcore.ApiReq
   855  }
   856  
   857  func NewGetUserFaceReqBuilder() *GetUserFaceReqBuilder {
   858  	builder := &GetUserFaceReqBuilder{}
   859  	builder.apiReq = &larkcore.ApiReq{
   860  		PathParams:  larkcore.PathParams{},
   861  		QueryParams: larkcore.QueryParams{},
   862  	}
   863  	return builder
   864  }
   865  
   866  // 用户 ID
   867  //
   868  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   869  func (builder *GetUserFaceReqBuilder) UserId(userId string) *GetUserFaceReqBuilder {
   870  	builder.apiReq.PathParams.Set("user_id", fmt.Sprint(userId))
   871  	return builder
   872  }
   873  
   874  // 裁剪图
   875  //
   876  // 示例值:true
   877  func (builder *GetUserFaceReqBuilder) IsCropped(isCropped bool) *GetUserFaceReqBuilder {
   878  	builder.apiReq.QueryParams.Set("is_cropped", fmt.Sprint(isCropped))
   879  	return builder
   880  }
   881  
   882  // 此次调用中使用的用户ID的类型
   883  //
   884  // 示例值:
   885  func (builder *GetUserFaceReqBuilder) UserIdType(userIdType string) *GetUserFaceReqBuilder {
   886  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   887  	return builder
   888  }
   889  
   890  func (builder *GetUserFaceReqBuilder) Build() *GetUserFaceReq {
   891  	req := &GetUserFaceReq{}
   892  	req.apiReq = &larkcore.ApiReq{}
   893  	req.apiReq.PathParams = builder.apiReq.PathParams
   894  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   895  	return req
   896  }
   897  
   898  type GetUserFaceReq struct {
   899  	apiReq *larkcore.ApiReq
   900  }
   901  
   902  type GetUserFaceResp struct {
   903  	*larkcore.ApiResp `json:"-"`
   904  	larkcore.CodeError
   905  	File     io.Reader `json:"-"`
   906  	FileName string    `json:"-"`
   907  }
   908  
   909  func (resp *GetUserFaceResp) Success() bool {
   910  	return resp.Code == 0
   911  }
   912  
   913  func (resp *GetUserFaceResp) WriteFile(fileName string) error {
   914  	bs, err := ioutil.ReadAll(resp.File)
   915  	if err != nil {
   916  		return err
   917  	}
   918  
   919  	err = ioutil.WriteFile(fileName, bs, 0666)
   920  	if err != nil {
   921  		return err
   922  	}
   923  	return nil
   924  }
   925  
   926  type UpdateUserFaceReqBuilder struct {
   927  	apiReq *larkcore.ApiReq
   928  	file   *File
   929  }
   930  
   931  func NewUpdateUserFaceReqBuilder() *UpdateUserFaceReqBuilder {
   932  	builder := &UpdateUserFaceReqBuilder{}
   933  	builder.apiReq = &larkcore.ApiReq{
   934  		PathParams:  larkcore.PathParams{},
   935  		QueryParams: larkcore.QueryParams{},
   936  	}
   937  	return builder
   938  }
   939  
   940  // 用户 ID
   941  //
   942  // 示例值:ou_7dab8a3d3cdcc9da365777c7ad535d62
   943  func (builder *UpdateUserFaceReqBuilder) UserId(userId string) *UpdateUserFaceReqBuilder {
   944  	builder.apiReq.PathParams.Set("user_id", fmt.Sprint(userId))
   945  	return builder
   946  }
   947  
   948  // 此次调用中使用的用户ID的类型
   949  //
   950  // 示例值:
   951  func (builder *UpdateUserFaceReqBuilder) UserIdType(userIdType string) *UpdateUserFaceReqBuilder {
   952  	builder.apiReq.QueryParams.Set("user_id_type", fmt.Sprint(userIdType))
   953  	return builder
   954  }
   955  
   956  // 用户需要录入人脸图片才可以使用门禁考勤机。使用该 API 上传门禁用户的人脸图片。
   957  func (builder *UpdateUserFaceReqBuilder) File(file *File) *UpdateUserFaceReqBuilder {
   958  	builder.file = file
   959  	return builder
   960  }
   961  
   962  func (builder *UpdateUserFaceReqBuilder) Build() *UpdateUserFaceReq {
   963  	req := &UpdateUserFaceReq{}
   964  	req.apiReq = &larkcore.ApiReq{}
   965  	req.apiReq.PathParams = builder.apiReq.PathParams
   966  	req.apiReq.QueryParams = builder.apiReq.QueryParams
   967  	req.apiReq.Body = builder.file
   968  	return req
   969  }
   970  
   971  type UpdateUserFaceReq struct {
   972  	apiReq *larkcore.ApiReq
   973  	File   *File `body:""`
   974  }
   975  
   976  type UpdateUserFaceResp struct {
   977  	*larkcore.ApiResp `json:"-"`
   978  	larkcore.CodeError
   979  }
   980  
   981  func (resp *UpdateUserFaceResp) Success() bool {
   982  	return resp.Code == 0
   983  }
   984  
   985  type P2AccessRecordCreatedV1Data struct {
   986  	AccessRecordId *string `json:"access_record_id,omitempty"` // 门禁记录 ID
   987  	UserId         *UserId `json:"user_id,omitempty"`          // 用户 ID
   988  	DeviceId       *string `json:"device_id,omitempty"`        // 设备 ID
   989  	IsClockIn      *bool   `json:"is_clock_in,omitempty"`      // 是否打卡
   990  	IsDoorOpen     *bool   `json:"is_door_open,omitempty"`     // 是否开门
   991  	AccessTime     *string `json:"access_time,omitempty"`      // 识别时间 (单位:秒)
   992  }
   993  
   994  type P2AccessRecordCreatedV1 struct {
   995  	*larkevent.EventV2Base                              // 事件基础数据
   996  	*larkevent.EventReq                                 // 请求原生数据
   997  	Event                  *P2AccessRecordCreatedV1Data `json:"event"` // 事件内容
   998  }
   999  
  1000  func (m *P2AccessRecordCreatedV1) RawReq(req *larkevent.EventReq) {
  1001  	m.EventReq = req
  1002  }
  1003  
  1004  type P2UserUpdatedV1Data struct {
  1005  	UserId       *UserId `json:"user_id,omitempty"`       // 用户 ID
  1006  	Card         *int    `json:"card,omitempty"`          // 卡号
  1007  	FaceUploaded *bool   `json:"face_uploaded,omitempty"` // 是否上传人脸图片
  1008  }
  1009  
  1010  type P2UserUpdatedV1 struct {
  1011  	*larkevent.EventV2Base                      // 事件基础数据
  1012  	*larkevent.EventReq                         // 请求原生数据
  1013  	Event                  *P2UserUpdatedV1Data `json:"event"` // 事件内容
  1014  }
  1015  
  1016  func (m *P2UserUpdatedV1) RawReq(req *larkevent.EventReq) {
  1017  	m.EventReq = req
  1018  }
  1019  
  1020  type ListAccessRecordIterator struct {
  1021  	nextPageToken *string
  1022  	items         []*AccessRecord
  1023  	index         int
  1024  	limit         int
  1025  	ctx           context.Context
  1026  	req           *ListAccessRecordReq
  1027  	listFunc      func(ctx context.Context, req *ListAccessRecordReq, options ...larkcore.RequestOptionFunc) (*ListAccessRecordResp, error)
  1028  	options       []larkcore.RequestOptionFunc
  1029  	curlNum       int
  1030  }
  1031  
  1032  func (iterator *ListAccessRecordIterator) Next() (bool, *AccessRecord, error) {
  1033  	// 达到最大量,则返回
  1034  	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
  1035  		return false, nil, nil
  1036  	}
  1037  
  1038  	// 为0则拉取数据
  1039  	if iterator.index == 0 || iterator.index >= len(iterator.items) {
  1040  		if iterator.index != 0 && iterator.nextPageToken == nil {
  1041  			return false, nil, nil
  1042  		}
  1043  		if iterator.nextPageToken != nil {
  1044  			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
  1045  		}
  1046  		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
  1047  		if err != nil {
  1048  			return false, nil, err
  1049  		}
  1050  
  1051  		if resp.Code != 0 {
  1052  			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
  1053  		}
  1054  
  1055  		if len(resp.Data.Items) == 0 {
  1056  			return false, nil, nil
  1057  		}
  1058  
  1059  		iterator.nextPageToken = resp.Data.PageToken
  1060  		iterator.items = resp.Data.Items
  1061  		iterator.index = 0
  1062  	}
  1063  
  1064  	block := iterator.items[iterator.index]
  1065  	iterator.index++
  1066  	iterator.curlNum++
  1067  	return true, block, nil
  1068  }
  1069  
  1070  func (iterator *ListAccessRecordIterator) NextPageToken() *string {
  1071  	return iterator.nextPageToken
  1072  }
  1073  
  1074  type ListUserIterator struct {
  1075  	nextPageToken *string
  1076  	items         []*User
  1077  	index         int
  1078  	limit         int
  1079  	ctx           context.Context
  1080  	req           *ListUserReq
  1081  	listFunc      func(ctx context.Context, req *ListUserReq, options ...larkcore.RequestOptionFunc) (*ListUserResp, error)
  1082  	options       []larkcore.RequestOptionFunc
  1083  	curlNum       int
  1084  }
  1085  
  1086  func (iterator *ListUserIterator) Next() (bool, *User, error) {
  1087  	// 达到最大量,则返回
  1088  	if iterator.limit > 0 && iterator.curlNum >= iterator.limit {
  1089  		return false, nil, nil
  1090  	}
  1091  
  1092  	// 为0则拉取数据
  1093  	if iterator.index == 0 || iterator.index >= len(iterator.items) {
  1094  		if iterator.index != 0 && iterator.nextPageToken == nil {
  1095  			return false, nil, nil
  1096  		}
  1097  		if iterator.nextPageToken != nil {
  1098  			iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken)
  1099  		}
  1100  		resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...)
  1101  		if err != nil {
  1102  			return false, nil, err
  1103  		}
  1104  
  1105  		if resp.Code != 0 {
  1106  			return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg))
  1107  		}
  1108  
  1109  		if len(resp.Data.Items) == 0 {
  1110  			return false, nil, nil
  1111  		}
  1112  
  1113  		iterator.nextPageToken = resp.Data.PageToken
  1114  		iterator.items = resp.Data.Items
  1115  		iterator.index = 0
  1116  	}
  1117  
  1118  	block := iterator.items[iterator.index]
  1119  	iterator.index++
  1120  	iterator.curlNum++
  1121  	return true, block, nil
  1122  }
  1123  
  1124  func (iterator *ListUserIterator) NextPageToken() *string {
  1125  	return iterator.nextPageToken
  1126  }