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 }