gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/attendance/v1/model.go (about) 1 // Package attendance 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 larkattendance 15 16 import ( 17 "io" 18 19 "bytes" 20 21 "io/ioutil" 22 23 "fmt" 24 25 "context" 26 "errors" 27 28 "gitee.com/larksuite/oapi-sdk-go/v3/core" 29 ) 30 31 const ( 32 EmployeeTypeEmployeeId = "employee_id" // 员工employeeId 33 EmployeeTypeEmployeeNo = "employee_no" // 员工工号 34 ) 35 36 const ( 37 DeptTypeOpenId = "open_id" // 开放openID 38 ) 39 40 const ( 41 EmployeeTypeGetGroupEmployeeId = "employee_id" // 员工employeeId 42 EmployeeTypeGetGroupEmployeeNo = "employee_no" // 员工工号 43 ) 44 45 const ( 46 DeptTypeGetGroupOpenId = "open_id" // 开放openID 47 ) 48 49 const ( 50 EmployeeTypeCreateUserApprovalEmployeeId = "employee_id" // 员工employeeId 51 EmployeeTypeCreateUserApprovalEmployeeNo = "employee_no" // 员工工号 52 ) 53 54 const ( 55 CheckDateTypePeriodTime = "PeriodTime" // 单据作用时间(即写入的end_time) 56 CheckDateTypeCreateTime = "CreateTime" // 单据创建时间 57 ) 58 59 const ( 60 ApprovalStatusTodo = 0 // 待审批 61 ApprovalStatusRejected = 1 // 审批未通过 62 ApprovalStatusApproved = 2 // 审批通过 63 ApprovalStatusCanceled = 3 // 审批已取消 64 ApprovalStatusReverted = 4 // 已撤回 65 66 ) 67 68 const ( 69 EmployeeTypeQueryUserApprovalEmployeeId = "employee_id" // 员工employeeId 70 EmployeeTypeQueryUserApprovalEmployeeNo = "employee_no" // 员工工号 71 ) 72 73 const ( 74 EmployeeTypeBatchCreateUserDailyShiftEmployeeId = "employee_id" // 员工employeeId 75 EmployeeTypeBatchCreateUserDailyShiftEmployeeNo = "employee_no" // 员工工号 76 ) 77 78 const ( 79 EmployeeTypeQueryUserDailyShiftEmployeeId = "employee_id" // 员工employeeId 80 EmployeeTypeQueryUserDailyShiftEmployeeNo = "employee_no" // 员工工号 81 ) 82 83 const ( 84 EmployeeTypeBatchCreateUserFlowEmployeeId = "employee_id" // 员工employeeId 85 EmployeeTypeBatchCreateUserFlowEmployeeNo = "employee_no" // 员工工号 86 ) 87 88 const ( 89 EmployeeTypeGetUserFlowOpenId = "open_id" // 开放openID 90 EmployeeTypeGetUserFlowEmployeeId = "employee_id" // 员工employeeId 91 EmployeeTypeGetUserFlowEmployeeNo = "employee_no" // 员工工号 92 ) 93 94 const ( 95 EmployeeTypeQueryUserFlowEmployeeId = "employee_id" // 员工employeeId 96 EmployeeTypeQueryUserFlowEmployeeNo = "employee_no" // 员工工号 97 ) 98 99 const ( 100 EmployeeTypeModifyUserSettingEmployeeId = "employee_id" // 员工employeeId 101 EmployeeTypeModifyUserSettingEmployeeNo = "employee_no" // 员工工号 102 ) 103 104 const ( 105 EmployeeTypeQueryUserSettingEmployeeId = "employee_id" // 员工employeeId 106 EmployeeTypeQueryUserSettingEmployeeNo = "employee_no" // 员工工号 107 ) 108 109 const ( 110 LocaleEn = "en" // 英文 111 LocaleJa = "ja" // 日文 112 LocaleZh = "zh" // 中文 113 ) 114 115 const ( 116 StatsTypeDaily = "daily" // 日度统计 117 StatsTypeMonth = "month" // 月度统计 118 ) 119 120 const ( 121 EmployeeTypeQueryUserStatsDataEmployeeId = "employee_id" // 员工employeeId 122 EmployeeTypeQueryUserStatsDataEmployeeNo = "employee_no" // 员工工号 123 ) 124 125 const ( 126 LocaleQueryUserStatsFieldEn = "en" // 英文 127 LocaleQueryUserStatsFieldJa = "ja" // 日文 128 LocaleQueryUserStatsFieldZh = "zh" // 中文 129 ) 130 131 const ( 132 StatsTypeQueryUserStatsFieldDaily = "daily" // 日度统计 133 StatsTypeQueryUserStatsFieldMonth = "month" // 月度统计 134 ) 135 136 const ( 137 EmployeeTypeQueryUserStatsFieldEmployeeId = "employee_id" // 员工employeeId 138 EmployeeTypeQueryUserStatsFieldEmployeeNo = "employee_no" // 员工工号 139 ) 140 141 const ( 142 LocaleQueryUserStatsViewEn = "en" // 英文 143 LocaleQueryUserStatsViewJa = "ja" // 日文 144 LocaleQueryUserStatsViewZh = "zh" // 中文 145 ) 146 147 const ( 148 StatsTypeQueryUserStatsViewDaily = "daily" // 日度统计 149 StatsTypeQueryUserStatsViewMonth = "month" // 月度统计 150 ) 151 152 const ( 153 EmployeeTypeQueryUserStatsViewEmployeeId = "employee_id" // 员工employeeId 154 EmployeeTypeQueryUserStatsViewEmployeeNo = "employee_no" // 员工工号 155 ) 156 157 const ( 158 EmployeeTypeUpdateUserStatsViewEmployeeId = "employee_id" // 员工employeeId 159 EmployeeTypeUpdateUserStatsViewEmployeeNo = "employee_no" // 员工工号 160 ) 161 162 const ( 163 EmployeeTypeQueryUserTaskEmployeeId = "employee_id" // 员工employeeId 164 EmployeeTypeQueryUserTaskEmployeeNo = "employee_no" // 员工工号 165 ) 166 167 const ( 168 EmployeeTypeCreateUserTaskRemedyEmployeeId = "employee_id" // 员工employeeId 169 EmployeeTypeCreateUserTaskRemedyEmployeeNo = "employee_no" // 员工工号 170 ) 171 172 const ( 173 CheckDateTypeQueryUserTaskRemedyPeriodTime = "PeriodTime" // 单据作用时间(即remedy_time) 174 CheckDateTypeQueryUserTaskRemedyCreateTime = "CreateTime" // 单据创建时间 175 ) 176 177 const ( 178 RemedyStatusPending = 0 // 待审批 179 RemedyStatusRejected = 1 // 未通过 180 RemedyStatusPass = 2 // 已通过 181 RemedyStatusCancel = 3 // 已取消 182 RemedyStatusWithdraw = 4 // 已撤回 183 184 ) 185 186 const ( 187 EmployeeTypeQueryUserTaskRemedyEmployeeId = "employee_id" // 员工employeeId 188 EmployeeTypeQueryUserTaskRemedyEmployeeNo = "employee_no" // 员工工号 189 ) 190 191 const ( 192 EmployeeTypeQueryUserAllowedRemedysUserTaskRemedyEmployeeId = "employee_id" // 员工employeeId 193 EmployeeTypeQueryUserAllowedRemedysUserTaskRemedyEmployeeNo = "employee_no" // 员工工号 194 ) 195 196 type ApprovalInfo struct { 197 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID 198 ApprovalType *string `json:"approval_type,omitempty"` // 审批类型 199 Status *int `json:"status,omitempty"` // 审批状态 200 } 201 202 type ApprovalInfoBuilder struct { 203 approvalId string // 审批实例 ID 204 approvalIdFlag bool 205 approvalType string // 审批类型 206 approvalTypeFlag bool 207 status int // 审批状态 208 statusFlag bool 209 } 210 211 func NewApprovalInfoBuilder() *ApprovalInfoBuilder { 212 builder := &ApprovalInfoBuilder{} 213 return builder 214 } 215 216 // 审批实例 ID 217 // 218 // 示例值:6737202939523236113 219 func (builder *ApprovalInfoBuilder) ApprovalId(approvalId string) *ApprovalInfoBuilder { 220 builder.approvalId = approvalId 221 builder.approvalIdFlag = true 222 return builder 223 } 224 225 // 审批类型 226 // 227 // 示例值:remedy 228 func (builder *ApprovalInfoBuilder) ApprovalType(approvalType string) *ApprovalInfoBuilder { 229 builder.approvalType = approvalType 230 builder.approvalTypeFlag = true 231 return builder 232 } 233 234 // 审批状态 235 // 236 // 示例值:0 237 func (builder *ApprovalInfoBuilder) Status(status int) *ApprovalInfoBuilder { 238 builder.status = status 239 builder.statusFlag = true 240 return builder 241 } 242 243 func (builder *ApprovalInfoBuilder) Build() *ApprovalInfo { 244 req := &ApprovalInfo{} 245 if builder.approvalIdFlag { 246 req.ApprovalId = &builder.approvalId 247 248 } 249 if builder.approvalTypeFlag { 250 req.ApprovalType = &builder.approvalType 251 252 } 253 if builder.statusFlag { 254 req.Status = &builder.status 255 256 } 257 return req 258 } 259 260 type Area struct { 261 Type *string `json:"type,omitempty"` // 区域类型 262 Center *Coordinate `json:"center,omitempty"` // 中心点 263 Radius *string `json:"radius,omitempty"` // 半径 264 Coords []*Coordinate `json:"coords,omitempty"` // 265 } 266 267 type AreaBuilder struct { 268 type_ string // 区域类型 269 typeFlag bool 270 center *Coordinate // 中心点 271 centerFlag bool 272 radius string // 半径 273 radiusFlag bool 274 coords []*Coordinate // 275 coordsFlag bool 276 } 277 278 func NewAreaBuilder() *AreaBuilder { 279 builder := &AreaBuilder{} 280 return builder 281 } 282 283 // 区域类型 284 // 285 // 示例值: 286 func (builder *AreaBuilder) Type(type_ string) *AreaBuilder { 287 builder.type_ = type_ 288 builder.typeFlag = true 289 return builder 290 } 291 292 // 中心点 293 // 294 // 示例值: 295 func (builder *AreaBuilder) Center(center *Coordinate) *AreaBuilder { 296 builder.center = center 297 builder.centerFlag = true 298 return builder 299 } 300 301 // 半径 302 // 303 // 示例值: 304 func (builder *AreaBuilder) Radius(radius string) *AreaBuilder { 305 builder.radius = radius 306 builder.radiusFlag = true 307 return builder 308 } 309 310 // 311 // 312 // 示例值: 313 func (builder *AreaBuilder) Coords(coords []*Coordinate) *AreaBuilder { 314 builder.coords = coords 315 builder.coordsFlag = true 316 return builder 317 } 318 319 func (builder *AreaBuilder) Build() *Area { 320 req := &Area{} 321 if builder.typeFlag { 322 req.Type = &builder.type_ 323 324 } 325 if builder.centerFlag { 326 req.Center = builder.center 327 } 328 if builder.radiusFlag { 329 req.Radius = &builder.radius 330 331 } 332 if builder.coordsFlag { 333 req.Coords = builder.coords 334 } 335 return req 336 } 337 338 type ChildField struct { 339 Code *string `json:"code,omitempty"` // 子字段编号 340 Title *string `json:"title,omitempty"` // 子字段名称 341 TimeUnit *string `json:"time_unit,omitempty"` // 时间单位 342 } 343 344 type ChildFieldBuilder struct { 345 code string // 子字段编号 346 codeFlag bool 347 title string // 子字段名称 348 titleFlag bool 349 timeUnit string // 时间单位 350 timeUnitFlag bool 351 } 352 353 func NewChildFieldBuilder() *ChildFieldBuilder { 354 builder := &ChildFieldBuilder{} 355 return builder 356 } 357 358 // 子字段编号 359 // 360 // 示例值:50121 361 func (builder *ChildFieldBuilder) Code(code string) *ChildFieldBuilder { 362 builder.code = code 363 builder.codeFlag = true 364 return builder 365 } 366 367 // 子字段名称 368 // 369 // 示例值:工号 370 func (builder *ChildFieldBuilder) Title(title string) *ChildFieldBuilder { 371 builder.title = title 372 builder.titleFlag = true 373 return builder 374 } 375 376 // 时间单位 377 // 378 // 示例值: 379 func (builder *ChildFieldBuilder) TimeUnit(timeUnit string) *ChildFieldBuilder { 380 builder.timeUnit = timeUnit 381 builder.timeUnitFlag = true 382 return builder 383 } 384 385 func (builder *ChildFieldBuilder) Build() *ChildField { 386 req := &ChildField{} 387 if builder.codeFlag { 388 req.Code = &builder.code 389 390 } 391 if builder.titleFlag { 392 req.Title = &builder.title 393 394 } 395 if builder.timeUnitFlag { 396 req.TimeUnit = &builder.timeUnit 397 398 } 399 return req 400 } 401 402 type ChildItem struct { 403 Code *string `json:"code,omitempty"` // 子标题编号 404 Value *string `json:"value,omitempty"` // 开关字段,0:关闭,1:开启(非开关字段场景:code = 51501 可选值为1-6) 405 Title *string `json:"title,omitempty"` // 子标题名称 406 ColumnType *int `json:"column_type,omitempty"` // 列类型 407 ReadOnly *bool `json:"read_only,omitempty"` // 是否只读 408 MinValue *string `json:"min_value,omitempty"` // 最小值 409 MaxValue *string `json:"max_value,omitempty"` // 最大值 410 } 411 412 type ChildItemBuilder struct { 413 code string // 子标题编号 414 codeFlag bool 415 value string // 开关字段,0:关闭,1:开启(非开关字段场景:code = 51501 可选值为1-6) 416 valueFlag bool 417 title string // 子标题名称 418 titleFlag bool 419 columnType int // 列类型 420 columnTypeFlag bool 421 readOnly bool // 是否只读 422 readOnlyFlag bool 423 minValue string // 最小值 424 minValueFlag bool 425 maxValue string // 最大值 426 maxValueFlag bool 427 } 428 429 func NewChildItemBuilder() *ChildItemBuilder { 430 builder := &ChildItemBuilder{} 431 return builder 432 } 433 434 // 子标题编号 435 // 436 // 示例值:50101 437 func (builder *ChildItemBuilder) Code(code string) *ChildItemBuilder { 438 builder.code = code 439 builder.codeFlag = true 440 return builder 441 } 442 443 // 开关字段,0:关闭,1:开启(非开关字段场景:code = 51501 可选值为1-6) 444 // 445 // 示例值:0 446 func (builder *ChildItemBuilder) Value(value string) *ChildItemBuilder { 447 builder.value = value 448 builder.valueFlag = true 449 return builder 450 } 451 452 // 子标题名称 453 // 454 // 示例值:工号 455 func (builder *ChildItemBuilder) Title(title string) *ChildItemBuilder { 456 builder.title = title 457 builder.titleFlag = true 458 return builder 459 } 460 461 // 列类型 462 // 463 // 示例值: 464 func (builder *ChildItemBuilder) ColumnType(columnType int) *ChildItemBuilder { 465 builder.columnType = columnType 466 builder.columnTypeFlag = true 467 return builder 468 } 469 470 // 是否只读 471 // 472 // 示例值: 473 func (builder *ChildItemBuilder) ReadOnly(readOnly bool) *ChildItemBuilder { 474 builder.readOnly = readOnly 475 builder.readOnlyFlag = true 476 return builder 477 } 478 479 // 最小值 480 // 481 // 示例值: 482 func (builder *ChildItemBuilder) MinValue(minValue string) *ChildItemBuilder { 483 builder.minValue = minValue 484 builder.minValueFlag = true 485 return builder 486 } 487 488 // 最大值 489 // 490 // 示例值: 491 func (builder *ChildItemBuilder) MaxValue(maxValue string) *ChildItemBuilder { 492 builder.maxValue = maxValue 493 builder.maxValueFlag = true 494 return builder 495 } 496 497 func (builder *ChildItemBuilder) Build() *ChildItem { 498 req := &ChildItem{} 499 if builder.codeFlag { 500 req.Code = &builder.code 501 502 } 503 if builder.valueFlag { 504 req.Value = &builder.value 505 506 } 507 if builder.titleFlag { 508 req.Title = &builder.title 509 510 } 511 if builder.columnTypeFlag { 512 req.ColumnType = &builder.columnType 513 514 } 515 if builder.readOnlyFlag { 516 req.ReadOnly = &builder.readOnly 517 518 } 519 if builder.minValueFlag { 520 req.MinValue = &builder.minValue 521 522 } 523 if builder.maxValueFlag { 524 req.MaxValue = &builder.maxValue 525 526 } 527 return req 528 } 529 530 type Coordinate struct { 531 Longitude *float64 `json:"longitude,omitempty"` // 经度 532 Latitude *float64 `json:"latitude,omitempty"` // 纬度 533 Accuracy *float64 `json:"accuracy,omitempty"` // 精度 534 } 535 536 type CoordinateBuilder struct { 537 longitude float64 // 经度 538 longitudeFlag bool 539 latitude float64 // 纬度 540 latitudeFlag bool 541 accuracy float64 // 精度 542 accuracyFlag bool 543 } 544 545 func NewCoordinateBuilder() *CoordinateBuilder { 546 builder := &CoordinateBuilder{} 547 return builder 548 } 549 550 // 经度 551 // 552 // 示例值: 553 func (builder *CoordinateBuilder) Longitude(longitude float64) *CoordinateBuilder { 554 builder.longitude = longitude 555 builder.longitudeFlag = true 556 return builder 557 } 558 559 // 纬度 560 // 561 // 示例值: 562 func (builder *CoordinateBuilder) Latitude(latitude float64) *CoordinateBuilder { 563 builder.latitude = latitude 564 builder.latitudeFlag = true 565 return builder 566 } 567 568 // 精度 569 // 570 // 示例值: 571 func (builder *CoordinateBuilder) Accuracy(accuracy float64) *CoordinateBuilder { 572 builder.accuracy = accuracy 573 builder.accuracyFlag = true 574 return builder 575 } 576 577 func (builder *CoordinateBuilder) Build() *Coordinate { 578 req := &Coordinate{} 579 if builder.longitudeFlag { 580 req.Longitude = &builder.longitude 581 582 } 583 if builder.latitudeFlag { 584 req.Latitude = &builder.latitude 585 586 } 587 if builder.accuracyFlag { 588 req.Accuracy = &builder.accuracy 589 590 } 591 return req 592 } 593 594 type Field struct { 595 Code *string `json:"code,omitempty"` // 字段编号 596 Title *string `json:"title,omitempty"` // 字段名称 597 ChildFields []*ChildField `json:"child_fields,omitempty"` // 子字段列表 598 } 599 600 type FieldBuilder struct { 601 code string // 字段编号 602 codeFlag bool 603 title string // 字段名称 604 titleFlag bool 605 childFields []*ChildField // 子字段列表 606 childFieldsFlag bool 607 } 608 609 func NewFieldBuilder() *FieldBuilder { 610 builder := &FieldBuilder{} 611 return builder 612 } 613 614 // 字段编号 615 // 616 // 示例值:50121 617 func (builder *FieldBuilder) Code(code string) *FieldBuilder { 618 builder.code = code 619 builder.codeFlag = true 620 return builder 621 } 622 623 // 字段名称 624 // 625 // 示例值:工号 626 func (builder *FieldBuilder) Title(title string) *FieldBuilder { 627 builder.title = title 628 builder.titleFlag = true 629 return builder 630 } 631 632 // 子字段列表 633 // 634 // 示例值: 635 func (builder *FieldBuilder) ChildFields(childFields []*ChildField) *FieldBuilder { 636 builder.childFields = childFields 637 builder.childFieldsFlag = true 638 return builder 639 } 640 641 func (builder *FieldBuilder) Build() *Field { 642 req := &Field{} 643 if builder.codeFlag { 644 req.Code = &builder.code 645 646 } 647 if builder.titleFlag { 648 req.Title = &builder.title 649 650 } 651 if builder.childFieldsFlag { 652 req.ChildFields = builder.childFields 653 } 654 return req 655 } 656 657 type File struct { 658 FileId *string `json:"file_id,omitempty"` // 文件 ID 659 } 660 661 type FileBuilder struct { 662 fileId string // 文件 ID 663 fileIdFlag bool 664 } 665 666 func NewFileBuilder() *FileBuilder { 667 builder := &FileBuilder{} 668 return builder 669 } 670 671 // 文件 ID 672 // 673 // 示例值:6b30e7636a38861bbe02869c726a4612 674 func (builder *FileBuilder) FileId(fileId string) *FileBuilder { 675 builder.fileId = fileId 676 builder.fileIdFlag = true 677 return builder 678 } 679 680 func (builder *FileBuilder) Build() *File { 681 req := &File{} 682 if builder.fileIdFlag { 683 req.FileId = &builder.fileId 684 685 } 686 return req 687 } 688 689 type FlexibleRule struct { 690 FlexibleEarlyMinutes *int `json:"flexible_early_minutes,omitempty"` // 下班最多可早走(上班早到几分钟,下班可早走几分钟) 691 FlexibleLateMinutes *int `json:"flexible_late_minutes,omitempty"` // 上班最多可晚到(上班晚到几分钟,下班须晚走几分钟) 692 } 693 694 type FlexibleRuleBuilder struct { 695 flexibleEarlyMinutes int // 下班最多可早走(上班早到几分钟,下班可早走几分钟) 696 flexibleEarlyMinutesFlag bool 697 flexibleLateMinutes int // 上班最多可晚到(上班晚到几分钟,下班须晚走几分钟) 698 flexibleLateMinutesFlag bool 699 } 700 701 func NewFlexibleRuleBuilder() *FlexibleRuleBuilder { 702 builder := &FlexibleRuleBuilder{} 703 return builder 704 } 705 706 // 下班最多可早走(上班早到几分钟,下班可早走几分钟) 707 // 708 // 示例值:60 709 func (builder *FlexibleRuleBuilder) FlexibleEarlyMinutes(flexibleEarlyMinutes int) *FlexibleRuleBuilder { 710 builder.flexibleEarlyMinutes = flexibleEarlyMinutes 711 builder.flexibleEarlyMinutesFlag = true 712 return builder 713 } 714 715 // 上班最多可晚到(上班晚到几分钟,下班须晚走几分钟) 716 // 717 // 示例值:60 718 func (builder *FlexibleRuleBuilder) FlexibleLateMinutes(flexibleLateMinutes int) *FlexibleRuleBuilder { 719 builder.flexibleLateMinutes = flexibleLateMinutes 720 builder.flexibleLateMinutesFlag = true 721 return builder 722 } 723 724 func (builder *FlexibleRuleBuilder) Build() *FlexibleRule { 725 req := &FlexibleRule{} 726 if builder.flexibleEarlyMinutesFlag { 727 req.FlexibleEarlyMinutes = &builder.flexibleEarlyMinutes 728 729 } 730 if builder.flexibleLateMinutesFlag { 731 req.FlexibleLateMinutes = &builder.flexibleLateMinutes 732 733 } 734 return req 735 } 736 737 type FreePunchCfg struct { 738 FreeStartTime *string `json:"free_start_time,omitempty"` // 自由班制打卡开始时间 739 FreeEndTime *string `json:"free_end_time,omitempty"` // 自由班制打卡结束时间 740 PunchDay *int `json:"punch_day,omitempty"` // 打卡的时间,为 7 位数字,每一位依次代表周一到周日,0 为不上班,1 为上班 741 WorkDayNoPunchAsLack *bool `json:"work_day_no_punch_as_lack,omitempty"` // 工作日不打卡是否记为缺卡 742 } 743 744 type FreePunchCfgBuilder struct { 745 freeStartTime string // 自由班制打卡开始时间 746 freeStartTimeFlag bool 747 freeEndTime string // 自由班制打卡结束时间 748 freeEndTimeFlag bool 749 punchDay int // 打卡的时间,为 7 位数字,每一位依次代表周一到周日,0 为不上班,1 为上班 750 punchDayFlag bool 751 workDayNoPunchAsLack bool // 工作日不打卡是否记为缺卡 752 workDayNoPunchAsLackFlag bool 753 } 754 755 func NewFreePunchCfgBuilder() *FreePunchCfgBuilder { 756 builder := &FreePunchCfgBuilder{} 757 return builder 758 } 759 760 // 自由班制打卡开始时间 761 // 762 // 示例值:7:00 763 func (builder *FreePunchCfgBuilder) FreeStartTime(freeStartTime string) *FreePunchCfgBuilder { 764 builder.freeStartTime = freeStartTime 765 builder.freeStartTimeFlag = true 766 return builder 767 } 768 769 // 自由班制打卡结束时间 770 // 771 // 示例值:18:00 772 func (builder *FreePunchCfgBuilder) FreeEndTime(freeEndTime string) *FreePunchCfgBuilder { 773 builder.freeEndTime = freeEndTime 774 builder.freeEndTimeFlag = true 775 return builder 776 } 777 778 // 打卡的时间,为 7 位数字,每一位依次代表周一到周日,0 为不上班,1 为上班 779 // 780 // 示例值:1111100 781 func (builder *FreePunchCfgBuilder) PunchDay(punchDay int) *FreePunchCfgBuilder { 782 builder.punchDay = punchDay 783 builder.punchDayFlag = true 784 return builder 785 } 786 787 // 工作日不打卡是否记为缺卡 788 // 789 // 示例值:true 790 func (builder *FreePunchCfgBuilder) WorkDayNoPunchAsLack(workDayNoPunchAsLack bool) *FreePunchCfgBuilder { 791 builder.workDayNoPunchAsLack = workDayNoPunchAsLack 792 builder.workDayNoPunchAsLackFlag = true 793 return builder 794 } 795 796 func (builder *FreePunchCfgBuilder) Build() *FreePunchCfg { 797 req := &FreePunchCfg{} 798 if builder.freeStartTimeFlag { 799 req.FreeStartTime = &builder.freeStartTime 800 801 } 802 if builder.freeEndTimeFlag { 803 req.FreeEndTime = &builder.freeEndTime 804 805 } 806 if builder.punchDayFlag { 807 req.PunchDay = &builder.punchDay 808 809 } 810 if builder.workDayNoPunchAsLackFlag { 811 req.WorkDayNoPunchAsLack = &builder.workDayNoPunchAsLack 812 813 } 814 return req 815 } 816 817 type Group struct { 818 GroupId *string `json:"group_id,omitempty"` // 考勤组 ID(仅修改时提供), 需要从“获取打卡结果”的接口中获取 groupId 819 GroupName *string `json:"group_name,omitempty"` // 考勤组名称 820 TimeZone *string `json:"time_zone,omitempty"` // 时区 821 BindDeptIds []string `json:"bind_dept_ids,omitempty"` // 绑定的部门 ID 822 ExceptDeptIds []string `json:"except_dept_ids,omitempty"` // 排除的部门 ID 823 BindUserIds []string `json:"bind_user_ids,omitempty"` // 绑定的用户 ID 824 ExceptUserIds []string `json:"except_user_ids,omitempty"` // 排除的用户 ID 825 GroupLeaderIds []string `json:"group_leader_ids,omitempty"` // 考勤主负责人 ID 列表,必选字段 826 SubGroupLeaderIds []string `json:"sub_group_leader_ids,omitempty"` // 考勤子负责人 ID 列表 827 AllowOutPunch *bool `json:"allow_out_punch,omitempty"` // 是否允许外勤打卡 828 OutPunchNeedApproval *bool `json:"out_punch_need_approval,omitempty"` // 外勤打卡需审批(需要允许外勤打卡才能设置生效) 829 OutPunchNeedRemark *bool `json:"out_punch_need_remark,omitempty"` // 外勤打卡需填写备注(需要允许外勤打卡才能设置生效) 830 OutPunchNeedPhoto *bool `json:"out_punch_need_photo,omitempty"` // 外勤打卡需拍照(需要允许外勤打卡才能设置生效) 831 OutPunchAllowedHideAddr *bool `json:"out_punch_allowed_hide_addr,omitempty"` // 外勤打卡允许员工隐藏详细地址(需要允许外勤打卡才能设置生效) 832 AllowPcPunch *bool `json:"allow_pc_punch,omitempty"` // 是否允许 PC 端打卡 833 AllowRemedy *bool `json:"allow_remedy,omitempty"` // 是否限制补卡 834 RemedyLimit *bool `json:"remedy_limit,omitempty"` // 是否限制补卡次数 835 RemedyLimitCount *int `json:"remedy_limit_count,omitempty"` // 补卡次数 836 RemedyDateLimit *bool `json:"remedy_date_limit,omitempty"` // 是否限制补卡时间 837 RemedyDateNum *int `json:"remedy_date_num,omitempty"` // 补卡时间,几天内补卡 838 AllowRemedyTypeLack *bool `json:"allow_remedy_type_lack,omitempty"` // 允许缺卡补卡(需要允许补卡才能设置生效) 839 AllowRemedyTypeLate *bool `json:"allow_remedy_type_late,omitempty"` // 允许迟到补卡(需要允许补卡才能设置生效) 840 AllowRemedyTypeEarly *bool `json:"allow_remedy_type_early,omitempty"` // 允许早退补卡(需要允许补卡才能设置生效) 841 AllowRemedyTypeNormal *bool `json:"allow_remedy_type_normal,omitempty"` // 允许正常补卡(需要允许补卡才能设置生效) 842 ShowCumulativeTime *bool `json:"show_cumulative_time,omitempty"` // 是否展示累计时长 843 ShowOverTime *bool `json:"show_over_time,omitempty"` // 是否展示加班时长 844 HideStaffPunchTime *bool `json:"hide_staff_punch_time,omitempty"` // 是否隐藏员工打卡详情 845 FacePunch *bool `json:"face_punch,omitempty"` // 是否开启人脸识别打卡 846 FacePunchCfg *int `json:"face_punch_cfg,omitempty"` // 人脸识别打卡规则,1:每次打卡均需人脸识别,2:疑似作弊打卡时需要人脸识别 847 FaceDowngrade *bool `json:"face_downgrade,omitempty"` // 人脸识别失败时是否允许普通拍照打卡 848 ReplaceBasicPic *bool `json:"replace_basic_pic,omitempty"` // 人脸识别失败时是否允许替换基准图片 849 Machines []*Machine `json:"machines,omitempty"` // 考勤机列表 850 GpsRange *int `json:"gps_range,omitempty"` // GPS 打卡的有效范围(不建议使用) 851 Locations []*Location `json:"locations,omitempty"` // 地址列表 852 GroupType *int `json:"group_type,omitempty"` // 考勤类型,0:固定班制,2:排班制, 3:自由班制 853 PunchDayShiftIds []string `json:"punch_day_shift_ids,omitempty"` // 固定班制必须填 854 FreePunchCfg *FreePunchCfg `json:"free_punch_cfg,omitempty"` // 配置自由班制 855 CalendarId *int `json:"calendar_id,omitempty"` // 国家日历 ID,0:不根据国家日历排休,1:中国大陆,2:美国,3:日本,4:印度,5:新加坡,默认 1 856 NeedPunchSpecialDays []*PunchSpecialDateShift `json:"need_punch_special_days,omitempty"` // 必须打卡的特殊日期 857 NoNeedPunchSpecialDays []*PunchSpecialDateShift `json:"no_need_punch_special_days,omitempty"` // 无需打卡的特殊日期 858 WorkDayNoPunchAsLack *bool `json:"work_day_no_punch_as_lack,omitempty"` // 自由班制下工作日不打卡是否记为缺卡 859 EffectNow *bool `json:"effect_now,omitempty"` // 是否立即生效,默认 false 860 RemedyPeriodType *int `json:"remedy_period_type,omitempty"` // 补卡周期类型 861 RemedyPeriodCustomDate *int `json:"remedy_period_custom_date,omitempty"` // 补卡自定义周期起始日期 862 PunchType *int `json:"punch_type,omitempty"` // 打卡类型,位运算。1:GPS 打卡,2:Wi-Fi 打卡,4:考勤机打卡,8:IP 打卡 863 EffectTime *string `json:"effect_time,omitempty"` // 生效时间,精确到秒的时间戳 864 RestClockInNeedApproval *bool `json:"rest_clockIn_need_approval,omitempty"` // 休息日打卡需审批 865 ClockInNeedPhoto *bool `json:"clockIn_need_photo,omitempty"` // 每次打卡均需拍照 866 } 867 868 type GroupBuilder struct { 869 groupId string // 考勤组 ID(仅修改时提供), 需要从“获取打卡结果”的接口中获取 groupId 870 groupIdFlag bool 871 groupName string // 考勤组名称 872 groupNameFlag bool 873 timeZone string // 时区 874 timeZoneFlag bool 875 bindDeptIds []string // 绑定的部门 ID 876 bindDeptIdsFlag bool 877 exceptDeptIds []string // 排除的部门 ID 878 exceptDeptIdsFlag bool 879 bindUserIds []string // 绑定的用户 ID 880 bindUserIdsFlag bool 881 exceptUserIds []string // 排除的用户 ID 882 exceptUserIdsFlag bool 883 groupLeaderIds []string // 考勤主负责人 ID 列表,必选字段 884 groupLeaderIdsFlag bool 885 subGroupLeaderIds []string // 考勤子负责人 ID 列表 886 subGroupLeaderIdsFlag bool 887 allowOutPunch bool // 是否允许外勤打卡 888 allowOutPunchFlag bool 889 outPunchNeedApproval bool // 外勤打卡需审批(需要允许外勤打卡才能设置生效) 890 outPunchNeedApprovalFlag bool 891 outPunchNeedRemark bool // 外勤打卡需填写备注(需要允许外勤打卡才能设置生效) 892 outPunchNeedRemarkFlag bool 893 outPunchNeedPhoto bool // 外勤打卡需拍照(需要允许外勤打卡才能设置生效) 894 outPunchNeedPhotoFlag bool 895 outPunchAllowedHideAddr bool // 外勤打卡允许员工隐藏详细地址(需要允许外勤打卡才能设置生效) 896 outPunchAllowedHideAddrFlag bool 897 allowPcPunch bool // 是否允许 PC 端打卡 898 allowPcPunchFlag bool 899 allowRemedy bool // 是否限制补卡 900 allowRemedyFlag bool 901 remedyLimit bool // 是否限制补卡次数 902 remedyLimitFlag bool 903 remedyLimitCount int // 补卡次数 904 remedyLimitCountFlag bool 905 remedyDateLimit bool // 是否限制补卡时间 906 remedyDateLimitFlag bool 907 remedyDateNum int // 补卡时间,几天内补卡 908 remedyDateNumFlag bool 909 allowRemedyTypeLack bool // 允许缺卡补卡(需要允许补卡才能设置生效) 910 allowRemedyTypeLackFlag bool 911 allowRemedyTypeLate bool // 允许迟到补卡(需要允许补卡才能设置生效) 912 allowRemedyTypeLateFlag bool 913 allowRemedyTypeEarly bool // 允许早退补卡(需要允许补卡才能设置生效) 914 allowRemedyTypeEarlyFlag bool 915 allowRemedyTypeNormal bool // 允许正常补卡(需要允许补卡才能设置生效) 916 allowRemedyTypeNormalFlag bool 917 showCumulativeTime bool // 是否展示累计时长 918 showCumulativeTimeFlag bool 919 showOverTime bool // 是否展示加班时长 920 showOverTimeFlag bool 921 hideStaffPunchTime bool // 是否隐藏员工打卡详情 922 hideStaffPunchTimeFlag bool 923 facePunch bool // 是否开启人脸识别打卡 924 facePunchFlag bool 925 facePunchCfg int // 人脸识别打卡规则,1:每次打卡均需人脸识别,2:疑似作弊打卡时需要人脸识别 926 facePunchCfgFlag bool 927 faceDowngrade bool // 人脸识别失败时是否允许普通拍照打卡 928 faceDowngradeFlag bool 929 replaceBasicPic bool // 人脸识别失败时是否允许替换基准图片 930 replaceBasicPicFlag bool 931 machines []*Machine // 考勤机列表 932 machinesFlag bool 933 gpsRange int // GPS 打卡的有效范围(不建议使用) 934 gpsRangeFlag bool 935 locations []*Location // 地址列表 936 locationsFlag bool 937 groupType int // 考勤类型,0:固定班制,2:排班制, 3:自由班制 938 groupTypeFlag bool 939 punchDayShiftIds []string // 固定班制必须填 940 punchDayShiftIdsFlag bool 941 freePunchCfg *FreePunchCfg // 配置自由班制 942 freePunchCfgFlag bool 943 calendarId int // 国家日历 ID,0:不根据国家日历排休,1:中国大陆,2:美国,3:日本,4:印度,5:新加坡,默认 1 944 calendarIdFlag bool 945 needPunchSpecialDays []*PunchSpecialDateShift // 必须打卡的特殊日期 946 needPunchSpecialDaysFlag bool 947 noNeedPunchSpecialDays []*PunchSpecialDateShift // 无需打卡的特殊日期 948 noNeedPunchSpecialDaysFlag bool 949 workDayNoPunchAsLack bool // 自由班制下工作日不打卡是否记为缺卡 950 workDayNoPunchAsLackFlag bool 951 effectNow bool // 是否立即生效,默认 false 952 effectNowFlag bool 953 remedyPeriodType int // 补卡周期类型 954 remedyPeriodTypeFlag bool 955 remedyPeriodCustomDate int // 补卡自定义周期起始日期 956 remedyPeriodCustomDateFlag bool 957 punchType int // 打卡类型,位运算。1:GPS 打卡,2:Wi-Fi 打卡,4:考勤机打卡,8:IP 打卡 958 punchTypeFlag bool 959 effectTime string // 生效时间,精确到秒的时间戳 960 effectTimeFlag bool 961 restClockInNeedApproval bool // 休息日打卡需审批 962 restClockInNeedApprovalFlag bool 963 clockInNeedPhoto bool // 每次打卡均需拍照 964 clockInNeedPhotoFlag bool 965 } 966 967 func NewGroupBuilder() *GroupBuilder { 968 builder := &GroupBuilder{} 969 return builder 970 } 971 972 // 考勤组 ID(仅修改时提供), 需要从“获取打卡结果”的接口中获取 groupId 973 // 974 // 示例值:6919358128597097404 975 func (builder *GroupBuilder) GroupId(groupId string) *GroupBuilder { 976 builder.groupId = groupId 977 builder.groupIdFlag = true 978 return builder 979 } 980 981 // 考勤组名称 982 // 983 // 示例值:开心考勤 984 func (builder *GroupBuilder) GroupName(groupName string) *GroupBuilder { 985 builder.groupName = groupName 986 builder.groupNameFlag = true 987 return builder 988 } 989 990 // 时区 991 // 992 // 示例值:Asia/Shanghai 993 func (builder *GroupBuilder) TimeZone(timeZone string) *GroupBuilder { 994 builder.timeZone = timeZone 995 builder.timeZoneFlag = true 996 return builder 997 } 998 999 // 绑定的部门 ID 1000 // 1001 // 示例值:od-fcb45c28a45311afd440b7869541fce8 1002 func (builder *GroupBuilder) BindDeptIds(bindDeptIds []string) *GroupBuilder { 1003 builder.bindDeptIds = bindDeptIds 1004 builder.bindDeptIdsFlag = true 1005 return builder 1006 } 1007 1008 // 排除的部门 ID 1009 // 1010 // 示例值:od-fcb45c28a45311afd440b7869541fce8 1011 func (builder *GroupBuilder) ExceptDeptIds(exceptDeptIds []string) *GroupBuilder { 1012 builder.exceptDeptIds = exceptDeptIds 1013 builder.exceptDeptIdsFlag = true 1014 return builder 1015 } 1016 1017 // 绑定的用户 ID 1018 // 1019 // 示例值:52aa1fa1 1020 func (builder *GroupBuilder) BindUserIds(bindUserIds []string) *GroupBuilder { 1021 builder.bindUserIds = bindUserIds 1022 builder.bindUserIdsFlag = true 1023 return builder 1024 } 1025 1026 // 排除的用户 ID 1027 // 1028 // 示例值:52aa1fa1 1029 func (builder *GroupBuilder) ExceptUserIds(exceptUserIds []string) *GroupBuilder { 1030 builder.exceptUserIds = exceptUserIds 1031 builder.exceptUserIdsFlag = true 1032 return builder 1033 } 1034 1035 // 考勤主负责人 ID 列表,必选字段 1036 // 1037 // 示例值:2bg4a9be 1038 func (builder *GroupBuilder) GroupLeaderIds(groupLeaderIds []string) *GroupBuilder { 1039 builder.groupLeaderIds = groupLeaderIds 1040 builder.groupLeaderIdsFlag = true 1041 return builder 1042 } 1043 1044 // 考勤子负责人 ID 列表 1045 // 1046 // 示例值:52aa1fa1 1047 func (builder *GroupBuilder) SubGroupLeaderIds(subGroupLeaderIds []string) *GroupBuilder { 1048 builder.subGroupLeaderIds = subGroupLeaderIds 1049 builder.subGroupLeaderIdsFlag = true 1050 return builder 1051 } 1052 1053 // 是否允许外勤打卡 1054 // 1055 // 示例值:true 1056 func (builder *GroupBuilder) AllowOutPunch(allowOutPunch bool) *GroupBuilder { 1057 builder.allowOutPunch = allowOutPunch 1058 builder.allowOutPunchFlag = true 1059 return builder 1060 } 1061 1062 // 外勤打卡需审批(需要允许外勤打卡才能设置生效) 1063 // 1064 // 示例值:true 1065 func (builder *GroupBuilder) OutPunchNeedApproval(outPunchNeedApproval bool) *GroupBuilder { 1066 builder.outPunchNeedApproval = outPunchNeedApproval 1067 builder.outPunchNeedApprovalFlag = true 1068 return builder 1069 } 1070 1071 // 外勤打卡需填写备注(需要允许外勤打卡才能设置生效) 1072 // 1073 // 示例值:true 1074 func (builder *GroupBuilder) OutPunchNeedRemark(outPunchNeedRemark bool) *GroupBuilder { 1075 builder.outPunchNeedRemark = outPunchNeedRemark 1076 builder.outPunchNeedRemarkFlag = true 1077 return builder 1078 } 1079 1080 // 外勤打卡需拍照(需要允许外勤打卡才能设置生效) 1081 // 1082 // 示例值:true 1083 func (builder *GroupBuilder) OutPunchNeedPhoto(outPunchNeedPhoto bool) *GroupBuilder { 1084 builder.outPunchNeedPhoto = outPunchNeedPhoto 1085 builder.outPunchNeedPhotoFlag = true 1086 return builder 1087 } 1088 1089 // 外勤打卡允许员工隐藏详细地址(需要允许外勤打卡才能设置生效) 1090 // 1091 // 示例值:true 1092 func (builder *GroupBuilder) OutPunchAllowedHideAddr(outPunchAllowedHideAddr bool) *GroupBuilder { 1093 builder.outPunchAllowedHideAddr = outPunchAllowedHideAddr 1094 builder.outPunchAllowedHideAddrFlag = true 1095 return builder 1096 } 1097 1098 // 是否允许 PC 端打卡 1099 // 1100 // 示例值:true 1101 func (builder *GroupBuilder) AllowPcPunch(allowPcPunch bool) *GroupBuilder { 1102 builder.allowPcPunch = allowPcPunch 1103 builder.allowPcPunchFlag = true 1104 return builder 1105 } 1106 1107 // 是否限制补卡 1108 // 1109 // 示例值:true 1110 func (builder *GroupBuilder) AllowRemedy(allowRemedy bool) *GroupBuilder { 1111 builder.allowRemedy = allowRemedy 1112 builder.allowRemedyFlag = true 1113 return builder 1114 } 1115 1116 // 是否限制补卡次数 1117 // 1118 // 示例值:true 1119 func (builder *GroupBuilder) RemedyLimit(remedyLimit bool) *GroupBuilder { 1120 builder.remedyLimit = remedyLimit 1121 builder.remedyLimitFlag = true 1122 return builder 1123 } 1124 1125 // 补卡次数 1126 // 1127 // 示例值:3 1128 func (builder *GroupBuilder) RemedyLimitCount(remedyLimitCount int) *GroupBuilder { 1129 builder.remedyLimitCount = remedyLimitCount 1130 builder.remedyLimitCountFlag = true 1131 return builder 1132 } 1133 1134 // 是否限制补卡时间 1135 // 1136 // 示例值:true 1137 func (builder *GroupBuilder) RemedyDateLimit(remedyDateLimit bool) *GroupBuilder { 1138 builder.remedyDateLimit = remedyDateLimit 1139 builder.remedyDateLimitFlag = true 1140 return builder 1141 } 1142 1143 // 补卡时间,几天内补卡 1144 // 1145 // 示例值:3 1146 func (builder *GroupBuilder) RemedyDateNum(remedyDateNum int) *GroupBuilder { 1147 builder.remedyDateNum = remedyDateNum 1148 builder.remedyDateNumFlag = true 1149 return builder 1150 } 1151 1152 // 允许缺卡补卡(需要允许补卡才能设置生效) 1153 // 1154 // 示例值:true 1155 func (builder *GroupBuilder) AllowRemedyTypeLack(allowRemedyTypeLack bool) *GroupBuilder { 1156 builder.allowRemedyTypeLack = allowRemedyTypeLack 1157 builder.allowRemedyTypeLackFlag = true 1158 return builder 1159 } 1160 1161 // 允许迟到补卡(需要允许补卡才能设置生效) 1162 // 1163 // 示例值:true 1164 func (builder *GroupBuilder) AllowRemedyTypeLate(allowRemedyTypeLate bool) *GroupBuilder { 1165 builder.allowRemedyTypeLate = allowRemedyTypeLate 1166 builder.allowRemedyTypeLateFlag = true 1167 return builder 1168 } 1169 1170 // 允许早退补卡(需要允许补卡才能设置生效) 1171 // 1172 // 示例值:true 1173 func (builder *GroupBuilder) AllowRemedyTypeEarly(allowRemedyTypeEarly bool) *GroupBuilder { 1174 builder.allowRemedyTypeEarly = allowRemedyTypeEarly 1175 builder.allowRemedyTypeEarlyFlag = true 1176 return builder 1177 } 1178 1179 // 允许正常补卡(需要允许补卡才能设置生效) 1180 // 1181 // 示例值:true 1182 func (builder *GroupBuilder) AllowRemedyTypeNormal(allowRemedyTypeNormal bool) *GroupBuilder { 1183 builder.allowRemedyTypeNormal = allowRemedyTypeNormal 1184 builder.allowRemedyTypeNormalFlag = true 1185 return builder 1186 } 1187 1188 // 是否展示累计时长 1189 // 1190 // 示例值:true 1191 func (builder *GroupBuilder) ShowCumulativeTime(showCumulativeTime bool) *GroupBuilder { 1192 builder.showCumulativeTime = showCumulativeTime 1193 builder.showCumulativeTimeFlag = true 1194 return builder 1195 } 1196 1197 // 是否展示加班时长 1198 // 1199 // 示例值:true 1200 func (builder *GroupBuilder) ShowOverTime(showOverTime bool) *GroupBuilder { 1201 builder.showOverTime = showOverTime 1202 builder.showOverTimeFlag = true 1203 return builder 1204 } 1205 1206 // 是否隐藏员工打卡详情 1207 // 1208 // 示例值:true 1209 func (builder *GroupBuilder) HideStaffPunchTime(hideStaffPunchTime bool) *GroupBuilder { 1210 builder.hideStaffPunchTime = hideStaffPunchTime 1211 builder.hideStaffPunchTimeFlag = true 1212 return builder 1213 } 1214 1215 // 是否开启人脸识别打卡 1216 // 1217 // 示例值:true 1218 func (builder *GroupBuilder) FacePunch(facePunch bool) *GroupBuilder { 1219 builder.facePunch = facePunch 1220 builder.facePunchFlag = true 1221 return builder 1222 } 1223 1224 // 人脸识别打卡规则,1:每次打卡均需人脸识别,2:疑似作弊打卡时需要人脸识别 1225 // 1226 // 示例值:1 1227 func (builder *GroupBuilder) FacePunchCfg(facePunchCfg int) *GroupBuilder { 1228 builder.facePunchCfg = facePunchCfg 1229 builder.facePunchCfgFlag = true 1230 return builder 1231 } 1232 1233 // 人脸识别失败时是否允许普通拍照打卡 1234 // 1235 // 示例值:true 1236 func (builder *GroupBuilder) FaceDowngrade(faceDowngrade bool) *GroupBuilder { 1237 builder.faceDowngrade = faceDowngrade 1238 builder.faceDowngradeFlag = true 1239 return builder 1240 } 1241 1242 // 人脸识别失败时是否允许替换基准图片 1243 // 1244 // 示例值:true 1245 func (builder *GroupBuilder) ReplaceBasicPic(replaceBasicPic bool) *GroupBuilder { 1246 builder.replaceBasicPic = replaceBasicPic 1247 builder.replaceBasicPicFlag = true 1248 return builder 1249 } 1250 1251 // 考勤机列表 1252 // 1253 // 示例值: 1254 func (builder *GroupBuilder) Machines(machines []*Machine) *GroupBuilder { 1255 builder.machines = machines 1256 builder.machinesFlag = true 1257 return builder 1258 } 1259 1260 // GPS 打卡的有效范围(不建议使用) 1261 // 1262 // 示例值:300 1263 func (builder *GroupBuilder) GpsRange(gpsRange int) *GroupBuilder { 1264 builder.gpsRange = gpsRange 1265 builder.gpsRangeFlag = true 1266 return builder 1267 } 1268 1269 // 地址列表 1270 // 1271 // 示例值: 1272 func (builder *GroupBuilder) Locations(locations []*Location) *GroupBuilder { 1273 builder.locations = locations 1274 builder.locationsFlag = true 1275 return builder 1276 } 1277 1278 // 考勤类型,0:固定班制,2:排班制, 3:自由班制 1279 // 1280 // 示例值:0 1281 func (builder *GroupBuilder) GroupType(groupType int) *GroupBuilder { 1282 builder.groupType = groupType 1283 builder.groupTypeFlag = true 1284 return builder 1285 } 1286 1287 // 固定班制必须填 1288 // 1289 // 示例值:6921319402260496386 1290 func (builder *GroupBuilder) PunchDayShiftIds(punchDayShiftIds []string) *GroupBuilder { 1291 builder.punchDayShiftIds = punchDayShiftIds 1292 builder.punchDayShiftIdsFlag = true 1293 return builder 1294 } 1295 1296 // 配置自由班制 1297 // 1298 // 示例值: 1299 func (builder *GroupBuilder) FreePunchCfg(freePunchCfg *FreePunchCfg) *GroupBuilder { 1300 builder.freePunchCfg = freePunchCfg 1301 builder.freePunchCfgFlag = true 1302 return builder 1303 } 1304 1305 // 国家日历 ID,0:不根据国家日历排休,1:中国大陆,2:美国,3:日本,4:印度,5:新加坡,默认 1 1306 // 1307 // 示例值:1 1308 func (builder *GroupBuilder) CalendarId(calendarId int) *GroupBuilder { 1309 builder.calendarId = calendarId 1310 builder.calendarIdFlag = true 1311 return builder 1312 } 1313 1314 // 必须打卡的特殊日期 1315 // 1316 // 示例值: 1317 func (builder *GroupBuilder) NeedPunchSpecialDays(needPunchSpecialDays []*PunchSpecialDateShift) *GroupBuilder { 1318 builder.needPunchSpecialDays = needPunchSpecialDays 1319 builder.needPunchSpecialDaysFlag = true 1320 return builder 1321 } 1322 1323 // 无需打卡的特殊日期 1324 // 1325 // 示例值: 1326 func (builder *GroupBuilder) NoNeedPunchSpecialDays(noNeedPunchSpecialDays []*PunchSpecialDateShift) *GroupBuilder { 1327 builder.noNeedPunchSpecialDays = noNeedPunchSpecialDays 1328 builder.noNeedPunchSpecialDaysFlag = true 1329 return builder 1330 } 1331 1332 // 自由班制下工作日不打卡是否记为缺卡 1333 // 1334 // 示例值:true 1335 func (builder *GroupBuilder) WorkDayNoPunchAsLack(workDayNoPunchAsLack bool) *GroupBuilder { 1336 builder.workDayNoPunchAsLack = workDayNoPunchAsLack 1337 builder.workDayNoPunchAsLackFlag = true 1338 return builder 1339 } 1340 1341 // 是否立即生效,默认 false 1342 // 1343 // 示例值:true 1344 func (builder *GroupBuilder) EffectNow(effectNow bool) *GroupBuilder { 1345 builder.effectNow = effectNow 1346 builder.effectNowFlag = true 1347 return builder 1348 } 1349 1350 // 补卡周期类型 1351 // 1352 // 示例值:0 1353 func (builder *GroupBuilder) RemedyPeriodType(remedyPeriodType int) *GroupBuilder { 1354 builder.remedyPeriodType = remedyPeriodType 1355 builder.remedyPeriodTypeFlag = true 1356 return builder 1357 } 1358 1359 // 补卡自定义周期起始日期 1360 // 1361 // 示例值:1 1362 func (builder *GroupBuilder) RemedyPeriodCustomDate(remedyPeriodCustomDate int) *GroupBuilder { 1363 builder.remedyPeriodCustomDate = remedyPeriodCustomDate 1364 builder.remedyPeriodCustomDateFlag = true 1365 return builder 1366 } 1367 1368 // 打卡类型,位运算。1:GPS 打卡,2:Wi-Fi 打卡,4:考勤机打卡,8:IP 打卡 1369 // 1370 // 示例值:1 1371 func (builder *GroupBuilder) PunchType(punchType int) *GroupBuilder { 1372 builder.punchType = punchType 1373 builder.punchTypeFlag = true 1374 return builder 1375 } 1376 1377 // 生效时间,精确到秒的时间戳 1378 // 1379 // 示例值:1611476284 1380 func (builder *GroupBuilder) EffectTime(effectTime string) *GroupBuilder { 1381 builder.effectTime = effectTime 1382 builder.effectTimeFlag = true 1383 return builder 1384 } 1385 1386 // 休息日打卡需审批 1387 // 1388 // 示例值:true 1389 func (builder *GroupBuilder) RestClockInNeedApproval(restClockInNeedApproval bool) *GroupBuilder { 1390 builder.restClockInNeedApproval = restClockInNeedApproval 1391 builder.restClockInNeedApprovalFlag = true 1392 return builder 1393 } 1394 1395 // 每次打卡均需拍照 1396 // 1397 // 示例值:true 1398 func (builder *GroupBuilder) ClockInNeedPhoto(clockInNeedPhoto bool) *GroupBuilder { 1399 builder.clockInNeedPhoto = clockInNeedPhoto 1400 builder.clockInNeedPhotoFlag = true 1401 return builder 1402 } 1403 1404 func (builder *GroupBuilder) Build() *Group { 1405 req := &Group{} 1406 if builder.groupIdFlag { 1407 req.GroupId = &builder.groupId 1408 1409 } 1410 if builder.groupNameFlag { 1411 req.GroupName = &builder.groupName 1412 1413 } 1414 if builder.timeZoneFlag { 1415 req.TimeZone = &builder.timeZone 1416 1417 } 1418 if builder.bindDeptIdsFlag { 1419 req.BindDeptIds = builder.bindDeptIds 1420 } 1421 if builder.exceptDeptIdsFlag { 1422 req.ExceptDeptIds = builder.exceptDeptIds 1423 } 1424 if builder.bindUserIdsFlag { 1425 req.BindUserIds = builder.bindUserIds 1426 } 1427 if builder.exceptUserIdsFlag { 1428 req.ExceptUserIds = builder.exceptUserIds 1429 } 1430 if builder.groupLeaderIdsFlag { 1431 req.GroupLeaderIds = builder.groupLeaderIds 1432 } 1433 if builder.subGroupLeaderIdsFlag { 1434 req.SubGroupLeaderIds = builder.subGroupLeaderIds 1435 } 1436 if builder.allowOutPunchFlag { 1437 req.AllowOutPunch = &builder.allowOutPunch 1438 1439 } 1440 if builder.outPunchNeedApprovalFlag { 1441 req.OutPunchNeedApproval = &builder.outPunchNeedApproval 1442 1443 } 1444 if builder.outPunchNeedRemarkFlag { 1445 req.OutPunchNeedRemark = &builder.outPunchNeedRemark 1446 1447 } 1448 if builder.outPunchNeedPhotoFlag { 1449 req.OutPunchNeedPhoto = &builder.outPunchNeedPhoto 1450 1451 } 1452 if builder.outPunchAllowedHideAddrFlag { 1453 req.OutPunchAllowedHideAddr = &builder.outPunchAllowedHideAddr 1454 1455 } 1456 if builder.allowPcPunchFlag { 1457 req.AllowPcPunch = &builder.allowPcPunch 1458 1459 } 1460 if builder.allowRemedyFlag { 1461 req.AllowRemedy = &builder.allowRemedy 1462 1463 } 1464 if builder.remedyLimitFlag { 1465 req.RemedyLimit = &builder.remedyLimit 1466 1467 } 1468 if builder.remedyLimitCountFlag { 1469 req.RemedyLimitCount = &builder.remedyLimitCount 1470 1471 } 1472 if builder.remedyDateLimitFlag { 1473 req.RemedyDateLimit = &builder.remedyDateLimit 1474 1475 } 1476 if builder.remedyDateNumFlag { 1477 req.RemedyDateNum = &builder.remedyDateNum 1478 1479 } 1480 if builder.allowRemedyTypeLackFlag { 1481 req.AllowRemedyTypeLack = &builder.allowRemedyTypeLack 1482 1483 } 1484 if builder.allowRemedyTypeLateFlag { 1485 req.AllowRemedyTypeLate = &builder.allowRemedyTypeLate 1486 1487 } 1488 if builder.allowRemedyTypeEarlyFlag { 1489 req.AllowRemedyTypeEarly = &builder.allowRemedyTypeEarly 1490 1491 } 1492 if builder.allowRemedyTypeNormalFlag { 1493 req.AllowRemedyTypeNormal = &builder.allowRemedyTypeNormal 1494 1495 } 1496 if builder.showCumulativeTimeFlag { 1497 req.ShowCumulativeTime = &builder.showCumulativeTime 1498 1499 } 1500 if builder.showOverTimeFlag { 1501 req.ShowOverTime = &builder.showOverTime 1502 1503 } 1504 if builder.hideStaffPunchTimeFlag { 1505 req.HideStaffPunchTime = &builder.hideStaffPunchTime 1506 1507 } 1508 if builder.facePunchFlag { 1509 req.FacePunch = &builder.facePunch 1510 1511 } 1512 if builder.facePunchCfgFlag { 1513 req.FacePunchCfg = &builder.facePunchCfg 1514 1515 } 1516 if builder.faceDowngradeFlag { 1517 req.FaceDowngrade = &builder.faceDowngrade 1518 1519 } 1520 if builder.replaceBasicPicFlag { 1521 req.ReplaceBasicPic = &builder.replaceBasicPic 1522 1523 } 1524 if builder.machinesFlag { 1525 req.Machines = builder.machines 1526 } 1527 if builder.gpsRangeFlag { 1528 req.GpsRange = &builder.gpsRange 1529 1530 } 1531 if builder.locationsFlag { 1532 req.Locations = builder.locations 1533 } 1534 if builder.groupTypeFlag { 1535 req.GroupType = &builder.groupType 1536 1537 } 1538 if builder.punchDayShiftIdsFlag { 1539 req.PunchDayShiftIds = builder.punchDayShiftIds 1540 } 1541 if builder.freePunchCfgFlag { 1542 req.FreePunchCfg = builder.freePunchCfg 1543 } 1544 if builder.calendarIdFlag { 1545 req.CalendarId = &builder.calendarId 1546 1547 } 1548 if builder.needPunchSpecialDaysFlag { 1549 req.NeedPunchSpecialDays = builder.needPunchSpecialDays 1550 } 1551 if builder.noNeedPunchSpecialDaysFlag { 1552 req.NoNeedPunchSpecialDays = builder.noNeedPunchSpecialDays 1553 } 1554 if builder.workDayNoPunchAsLackFlag { 1555 req.WorkDayNoPunchAsLack = &builder.workDayNoPunchAsLack 1556 1557 } 1558 if builder.effectNowFlag { 1559 req.EffectNow = &builder.effectNow 1560 1561 } 1562 if builder.remedyPeriodTypeFlag { 1563 req.RemedyPeriodType = &builder.remedyPeriodType 1564 1565 } 1566 if builder.remedyPeriodCustomDateFlag { 1567 req.RemedyPeriodCustomDate = &builder.remedyPeriodCustomDate 1568 1569 } 1570 if builder.punchTypeFlag { 1571 req.PunchType = &builder.punchType 1572 1573 } 1574 if builder.effectTimeFlag { 1575 req.EffectTime = &builder.effectTime 1576 1577 } 1578 if builder.restClockInNeedApprovalFlag { 1579 req.RestClockInNeedApproval = &builder.restClockInNeedApproval 1580 1581 } 1582 if builder.clockInNeedPhotoFlag { 1583 req.ClockInNeedPhoto = &builder.clockInNeedPhoto 1584 1585 } 1586 return req 1587 } 1588 1589 type GroupMeta struct { 1590 GroupId *string `json:"group_id,omitempty"` // 考勤组 ID 1591 GroupName *string `json:"group_name,omitempty"` // 考勤组名称 1592 } 1593 1594 type GroupMetaBuilder struct { 1595 groupId string // 考勤组 ID 1596 groupIdFlag bool 1597 groupName string // 考勤组名称 1598 groupNameFlag bool 1599 } 1600 1601 func NewGroupMetaBuilder() *GroupMetaBuilder { 1602 builder := &GroupMetaBuilder{} 1603 return builder 1604 } 1605 1606 // 考勤组 ID 1607 // 1608 // 示例值:6919358128597097404 1609 func (builder *GroupMetaBuilder) GroupId(groupId string) *GroupMetaBuilder { 1610 builder.groupId = groupId 1611 builder.groupIdFlag = true 1612 return builder 1613 } 1614 1615 // 考勤组名称 1616 // 1617 // 示例值:考勤组1 1618 func (builder *GroupMetaBuilder) GroupName(groupName string) *GroupMetaBuilder { 1619 builder.groupName = groupName 1620 builder.groupNameFlag = true 1621 return builder 1622 } 1623 1624 func (builder *GroupMetaBuilder) Build() *GroupMeta { 1625 req := &GroupMeta{} 1626 if builder.groupIdFlag { 1627 req.GroupId = &builder.groupId 1628 1629 } 1630 if builder.groupNameFlag { 1631 req.GroupName = &builder.groupName 1632 1633 } 1634 return req 1635 } 1636 1637 type I18nNames struct { 1638 Ch *string `json:"ch,omitempty"` // 中文描述 1639 En *string `json:"en,omitempty"` // 英语描述 1640 Ja *string `json:"ja,omitempty"` // 日语描述 1641 } 1642 1643 type I18nNamesBuilder struct { 1644 ch string // 中文描述 1645 chFlag bool 1646 en string // 英语描述 1647 enFlag bool 1648 ja string // 日语描述 1649 jaFlag bool 1650 } 1651 1652 func NewI18nNamesBuilder() *I18nNamesBuilder { 1653 builder := &I18nNamesBuilder{} 1654 return builder 1655 } 1656 1657 // 中文描述 1658 // 1659 // 示例值:中文描述 1660 func (builder *I18nNamesBuilder) Ch(ch string) *I18nNamesBuilder { 1661 builder.ch = ch 1662 builder.chFlag = true 1663 return builder 1664 } 1665 1666 // 英语描述 1667 // 1668 // 示例值:English description 1669 func (builder *I18nNamesBuilder) En(en string) *I18nNamesBuilder { 1670 builder.en = en 1671 builder.enFlag = true 1672 return builder 1673 } 1674 1675 // 日语描述 1676 // 1677 // 示例值:日本語の説明 1678 func (builder *I18nNamesBuilder) Ja(ja string) *I18nNamesBuilder { 1679 builder.ja = ja 1680 builder.jaFlag = true 1681 return builder 1682 } 1683 1684 func (builder *I18nNamesBuilder) Build() *I18nNames { 1685 req := &I18nNames{} 1686 if builder.chFlag { 1687 req.Ch = &builder.ch 1688 1689 } 1690 if builder.enFlag { 1691 req.En = &builder.en 1692 1693 } 1694 if builder.jaFlag { 1695 req.Ja = &builder.ja 1696 1697 } 1698 return req 1699 } 1700 1701 type Item struct { 1702 Code *string `json:"code,omitempty"` // 标题编号 1703 Title *string `json:"title,omitempty"` // 标题名称 1704 ChildItems []*ChildItem `json:"child_items,omitempty"` // 子标题 1705 } 1706 1707 type ItemBuilder struct { 1708 code string // 标题编号 1709 codeFlag bool 1710 title string // 标题名称 1711 titleFlag bool 1712 childItems []*ChildItem // 子标题 1713 childItemsFlag bool 1714 } 1715 1716 func NewItemBuilder() *ItemBuilder { 1717 builder := &ItemBuilder{} 1718 return builder 1719 } 1720 1721 // 标题编号 1722 // 1723 // 示例值:522 1724 func (builder *ItemBuilder) Code(code string) *ItemBuilder { 1725 builder.code = code 1726 builder.codeFlag = true 1727 return builder 1728 } 1729 1730 // 标题名称 1731 // 1732 // 示例值:基本信息 1733 func (builder *ItemBuilder) Title(title string) *ItemBuilder { 1734 builder.title = title 1735 builder.titleFlag = true 1736 return builder 1737 } 1738 1739 // 子标题 1740 // 1741 // 示例值: 1742 func (builder *ItemBuilder) ChildItems(childItems []*ChildItem) *ItemBuilder { 1743 builder.childItems = childItems 1744 builder.childItemsFlag = true 1745 return builder 1746 } 1747 1748 func (builder *ItemBuilder) Build() *Item { 1749 req := &Item{} 1750 if builder.codeFlag { 1751 req.Code = &builder.code 1752 1753 } 1754 if builder.titleFlag { 1755 req.Title = &builder.title 1756 1757 } 1758 if builder.childItemsFlag { 1759 req.ChildItems = builder.childItems 1760 } 1761 return req 1762 } 1763 1764 type LateOffLateOnRule struct { 1765 LateOffMinutes *int `json:"late_off_minutes,omitempty"` // 晚走多久 1766 LateOnMinutes *int `json:"late_on_minutes,omitempty"` // 晚到多久 1767 } 1768 1769 type LateOffLateOnRuleBuilder struct { 1770 lateOffMinutes int // 晚走多久 1771 lateOffMinutesFlag bool 1772 lateOnMinutes int // 晚到多久 1773 lateOnMinutesFlag bool 1774 } 1775 1776 func NewLateOffLateOnRuleBuilder() *LateOffLateOnRuleBuilder { 1777 builder := &LateOffLateOnRuleBuilder{} 1778 return builder 1779 } 1780 1781 // 晚走多久 1782 // 1783 // 示例值:60 1784 func (builder *LateOffLateOnRuleBuilder) LateOffMinutes(lateOffMinutes int) *LateOffLateOnRuleBuilder { 1785 builder.lateOffMinutes = lateOffMinutes 1786 builder.lateOffMinutesFlag = true 1787 return builder 1788 } 1789 1790 // 晚到多久 1791 // 1792 // 示例值:30 1793 func (builder *LateOffLateOnRuleBuilder) LateOnMinutes(lateOnMinutes int) *LateOffLateOnRuleBuilder { 1794 builder.lateOnMinutes = lateOnMinutes 1795 builder.lateOnMinutesFlag = true 1796 return builder 1797 } 1798 1799 func (builder *LateOffLateOnRuleBuilder) Build() *LateOffLateOnRule { 1800 req := &LateOffLateOnRule{} 1801 if builder.lateOffMinutesFlag { 1802 req.LateOffMinutes = &builder.lateOffMinutes 1803 1804 } 1805 if builder.lateOnMinutesFlag { 1806 req.LateOnMinutes = &builder.lateOnMinutes 1807 1808 } 1809 return req 1810 } 1811 1812 type Location struct { 1813 LocationId *string `json:"location_id,omitempty"` // 地址 ID 1814 LocationName *string `json:"location_name,omitempty"` // 地址名称 1815 LocationType *int `json:"location_type,omitempty"` // 地址类型,1:GPS,2:Wi-Fi,8:IP 1816 Latitude *float64 `json:"latitude,omitempty"` // 地址纬度 1817 Longitude *float64 `json:"longitude,omitempty"` // 地址经度 1818 Ssid *string `json:"ssid,omitempty"` // Wi-Fi 名称 1819 Bssid *string `json:"bssid,omitempty"` // Wi-Fi 的 MAC 地址 1820 MapType *int `json:"map_type,omitempty"` // 地图类型,1:高德, 2:谷歌 1821 Address *string `json:"address,omitempty"` // 地址名称 1822 Ip *string `json:"ip,omitempty"` // IP 地址 1823 Feature *string `json:"feature,omitempty"` // 额外信息,例如:运营商信息 1824 GpsRange *int `json:"gps_range,omitempty"` // GPS 打卡的有效范围 1825 } 1826 1827 type LocationBuilder struct { 1828 locationId string // 地址 ID 1829 locationIdFlag bool 1830 locationName string // 地址名称 1831 locationNameFlag bool 1832 locationType int // 地址类型,1:GPS,2:Wi-Fi,8:IP 1833 locationTypeFlag bool 1834 latitude float64 // 地址纬度 1835 latitudeFlag bool 1836 longitude float64 // 地址经度 1837 longitudeFlag bool 1838 ssid string // Wi-Fi 名称 1839 ssidFlag bool 1840 bssid string // Wi-Fi 的 MAC 地址 1841 bssidFlag bool 1842 mapType int // 地图类型,1:高德, 2:谷歌 1843 mapTypeFlag bool 1844 address string // 地址名称 1845 addressFlag bool 1846 ip string // IP 地址 1847 ipFlag bool 1848 feature string // 额外信息,例如:运营商信息 1849 featureFlag bool 1850 gpsRange int // GPS 打卡的有效范围 1851 gpsRangeFlag bool 1852 } 1853 1854 func NewLocationBuilder() *LocationBuilder { 1855 builder := &LocationBuilder{} 1856 return builder 1857 } 1858 1859 // 地址 ID 1860 // 1861 // 示例值:6921213751454744578 1862 func (builder *LocationBuilder) LocationId(locationId string) *LocationBuilder { 1863 builder.locationId = locationId 1864 builder.locationIdFlag = true 1865 return builder 1866 } 1867 1868 // 地址名称 1869 // 1870 // 示例值:浙江省杭州市余杭区五常街道木桥头西溪八方城 1871 func (builder *LocationBuilder) LocationName(locationName string) *LocationBuilder { 1872 builder.locationName = locationName 1873 builder.locationNameFlag = true 1874 return builder 1875 } 1876 1877 // 地址类型,1:GPS,2:Wi-Fi,8:IP 1878 // 1879 // 示例值:1 1880 func (builder *LocationBuilder) LocationType(locationType int) *LocationBuilder { 1881 builder.locationType = locationType 1882 builder.locationTypeFlag = true 1883 return builder 1884 } 1885 1886 // 地址纬度 1887 // 1888 // 示例值:30.28994 1889 func (builder *LocationBuilder) Latitude(latitude float64) *LocationBuilder { 1890 builder.latitude = latitude 1891 builder.latitudeFlag = true 1892 return builder 1893 } 1894 1895 // 地址经度 1896 // 1897 // 示例值:120.04509 1898 func (builder *LocationBuilder) Longitude(longitude float64) *LocationBuilder { 1899 builder.longitude = longitude 1900 builder.longitudeFlag = true 1901 return builder 1902 } 1903 1904 // Wi-Fi 名称 1905 // 1906 // 示例值:TP-Link-af12ca 1907 func (builder *LocationBuilder) Ssid(ssid string) *LocationBuilder { 1908 builder.ssid = ssid 1909 builder.ssidFlag = true 1910 return builder 1911 } 1912 1913 // Wi-Fi 的 MAC 地址 1914 // 1915 // 示例值:08:00:20:0A:8C:6D 1916 func (builder *LocationBuilder) Bssid(bssid string) *LocationBuilder { 1917 builder.bssid = bssid 1918 builder.bssidFlag = true 1919 return builder 1920 } 1921 1922 // 地图类型,1:高德, 2:谷歌 1923 // 1924 // 示例值:1 1925 func (builder *LocationBuilder) MapType(mapType int) *LocationBuilder { 1926 builder.mapType = mapType 1927 builder.mapTypeFlag = true 1928 return builder 1929 } 1930 1931 // 地址名称 1932 // 1933 // 示例值:北京市海淀区中航广场 1934 func (builder *LocationBuilder) Address(address string) *LocationBuilder { 1935 builder.address = address 1936 builder.addressFlag = true 1937 return builder 1938 } 1939 1940 // IP 地址 1941 // 1942 // 示例值:122.224.123.146 1943 func (builder *LocationBuilder) Ip(ip string) *LocationBuilder { 1944 builder.ip = ip 1945 builder.ipFlag = true 1946 return builder 1947 } 1948 1949 // 额外信息,例如:运营商信息 1950 // 1951 // 示例值:中国电信 1952 func (builder *LocationBuilder) Feature(feature string) *LocationBuilder { 1953 builder.feature = feature 1954 builder.featureFlag = true 1955 return builder 1956 } 1957 1958 // GPS 打卡的有效范围 1959 // 1960 // 示例值:300 1961 func (builder *LocationBuilder) GpsRange(gpsRange int) *LocationBuilder { 1962 builder.gpsRange = gpsRange 1963 builder.gpsRangeFlag = true 1964 return builder 1965 } 1966 1967 func (builder *LocationBuilder) Build() *Location { 1968 req := &Location{} 1969 if builder.locationIdFlag { 1970 req.LocationId = &builder.locationId 1971 1972 } 1973 if builder.locationNameFlag { 1974 req.LocationName = &builder.locationName 1975 1976 } 1977 if builder.locationTypeFlag { 1978 req.LocationType = &builder.locationType 1979 1980 } 1981 if builder.latitudeFlag { 1982 req.Latitude = &builder.latitude 1983 1984 } 1985 if builder.longitudeFlag { 1986 req.Longitude = &builder.longitude 1987 1988 } 1989 if builder.ssidFlag { 1990 req.Ssid = &builder.ssid 1991 1992 } 1993 if builder.bssidFlag { 1994 req.Bssid = &builder.bssid 1995 1996 } 1997 if builder.mapTypeFlag { 1998 req.MapType = &builder.mapType 1999 2000 } 2001 if builder.addressFlag { 2002 req.Address = &builder.address 2003 2004 } 2005 if builder.ipFlag { 2006 req.Ip = &builder.ip 2007 2008 } 2009 if builder.featureFlag { 2010 req.Feature = &builder.feature 2011 2012 } 2013 if builder.gpsRangeFlag { 2014 req.GpsRange = &builder.gpsRange 2015 2016 } 2017 return req 2018 } 2019 2020 type LocationInfo struct { 2021 Status *int `json:"status,omitempty"` // 开关状态 2022 Geofences []*Area `json:"geofences,omitempty"` // 2023 } 2024 2025 type LocationInfoBuilder struct { 2026 status int // 开关状态 2027 statusFlag bool 2028 geofences []*Area // 2029 geofencesFlag bool 2030 } 2031 2032 func NewLocationInfoBuilder() *LocationInfoBuilder { 2033 builder := &LocationInfoBuilder{} 2034 return builder 2035 } 2036 2037 // 开关状态 2038 // 2039 // 示例值: 2040 func (builder *LocationInfoBuilder) Status(status int) *LocationInfoBuilder { 2041 builder.status = status 2042 builder.statusFlag = true 2043 return builder 2044 } 2045 2046 // 2047 // 2048 // 示例值: 2049 func (builder *LocationInfoBuilder) Geofences(geofences []*Area) *LocationInfoBuilder { 2050 builder.geofences = geofences 2051 builder.geofencesFlag = true 2052 return builder 2053 } 2054 2055 func (builder *LocationInfoBuilder) Build() *LocationInfo { 2056 req := &LocationInfo{} 2057 if builder.statusFlag { 2058 req.Status = &builder.status 2059 2060 } 2061 if builder.geofencesFlag { 2062 req.Geofences = builder.geofences 2063 } 2064 return req 2065 } 2066 2067 type LocationInfoEvent struct { 2068 Coord *Coordinate `json:"coord,omitempty"` // 2069 } 2070 2071 type LocationInfoEventBuilder struct { 2072 coord *Coordinate // 2073 coordFlag bool 2074 } 2075 2076 func NewLocationInfoEventBuilder() *LocationInfoEventBuilder { 2077 builder := &LocationInfoEventBuilder{} 2078 return builder 2079 } 2080 2081 // 2082 // 2083 // 示例值: 2084 func (builder *LocationInfoEventBuilder) Coord(coord *Coordinate) *LocationInfoEventBuilder { 2085 builder.coord = coord 2086 builder.coordFlag = true 2087 return builder 2088 } 2089 2090 func (builder *LocationInfoEventBuilder) Build() *LocationInfoEvent { 2091 req := &LocationInfoEvent{} 2092 if builder.coordFlag { 2093 req.Coord = builder.coord 2094 } 2095 return req 2096 } 2097 2098 type LocationRecord struct { 2099 UserId *UserId `json:"user_id,omitempty"` // 用户id 2100 Timestamp *string `json:"timestamp,omitempty"` // 时间点 2101 Location *LocationInfoEvent `json:"location,omitempty"` // 位置信息 2102 Wifi *WifiInfoEvent `json:"wifi,omitempty"` // wifi信息 2103 RuleSnapshotId *string `json:"rule_snapshot_id,omitempty"` // 规则快照id 2104 Type *string `json:"type,omitempty"` // 事件类型 2105 ScanWifiList []*ScanWifiInfo `json:"scan_wifi_list,omitempty"` // 附近的wifi设备列表 2106 DeviceId *string `json:"device_id,omitempty"` // 上报事件的设备ID 2107 ClientInfo *string `json:"client_info,omitempty"` // 2108 } 2109 2110 type LocationRecordBuilder struct { 2111 userId *UserId // 用户id 2112 userIdFlag bool 2113 timestamp string // 时间点 2114 timestampFlag bool 2115 location *LocationInfoEvent // 位置信息 2116 locationFlag bool 2117 wifi *WifiInfoEvent // wifi信息 2118 wifiFlag bool 2119 ruleSnapshotId string // 规则快照id 2120 ruleSnapshotIdFlag bool 2121 type_ string // 事件类型 2122 typeFlag bool 2123 scanWifiList []*ScanWifiInfo // 附近的wifi设备列表 2124 scanWifiListFlag bool 2125 deviceId string // 上报事件的设备ID 2126 deviceIdFlag bool 2127 clientInfo string // 2128 clientInfoFlag bool 2129 } 2130 2131 func NewLocationRecordBuilder() *LocationRecordBuilder { 2132 builder := &LocationRecordBuilder{} 2133 return builder 2134 } 2135 2136 // 用户id 2137 // 2138 // 示例值: 2139 func (builder *LocationRecordBuilder) UserId(userId *UserId) *LocationRecordBuilder { 2140 builder.userId = userId 2141 builder.userIdFlag = true 2142 return builder 2143 } 2144 2145 // 时间点 2146 // 2147 // 示例值: 2148 func (builder *LocationRecordBuilder) Timestamp(timestamp string) *LocationRecordBuilder { 2149 builder.timestamp = timestamp 2150 builder.timestampFlag = true 2151 return builder 2152 } 2153 2154 // 位置信息 2155 // 2156 // 示例值: 2157 func (builder *LocationRecordBuilder) Location(location *LocationInfoEvent) *LocationRecordBuilder { 2158 builder.location = location 2159 builder.locationFlag = true 2160 return builder 2161 } 2162 2163 // wifi信息 2164 // 2165 // 示例值: 2166 func (builder *LocationRecordBuilder) Wifi(wifi *WifiInfoEvent) *LocationRecordBuilder { 2167 builder.wifi = wifi 2168 builder.wifiFlag = true 2169 return builder 2170 } 2171 2172 // 规则快照id 2173 // 2174 // 示例值: 2175 func (builder *LocationRecordBuilder) RuleSnapshotId(ruleSnapshotId string) *LocationRecordBuilder { 2176 builder.ruleSnapshotId = ruleSnapshotId 2177 builder.ruleSnapshotIdFlag = true 2178 return builder 2179 } 2180 2181 // 事件类型 2182 // 2183 // 示例值: 2184 func (builder *LocationRecordBuilder) Type(type_ string) *LocationRecordBuilder { 2185 builder.type_ = type_ 2186 builder.typeFlag = true 2187 return builder 2188 } 2189 2190 // 附近的wifi设备列表 2191 // 2192 // 示例值: 2193 func (builder *LocationRecordBuilder) ScanWifiList(scanWifiList []*ScanWifiInfo) *LocationRecordBuilder { 2194 builder.scanWifiList = scanWifiList 2195 builder.scanWifiListFlag = true 2196 return builder 2197 } 2198 2199 // 上报事件的设备ID 2200 // 2201 // 示例值: 2202 func (builder *LocationRecordBuilder) DeviceId(deviceId string) *LocationRecordBuilder { 2203 builder.deviceId = deviceId 2204 builder.deviceIdFlag = true 2205 return builder 2206 } 2207 2208 // 2209 // 2210 // 示例值: 2211 func (builder *LocationRecordBuilder) ClientInfo(clientInfo string) *LocationRecordBuilder { 2212 builder.clientInfo = clientInfo 2213 builder.clientInfoFlag = true 2214 return builder 2215 } 2216 2217 func (builder *LocationRecordBuilder) Build() *LocationRecord { 2218 req := &LocationRecord{} 2219 if builder.userIdFlag { 2220 req.UserId = builder.userId 2221 } 2222 if builder.timestampFlag { 2223 req.Timestamp = &builder.timestamp 2224 2225 } 2226 if builder.locationFlag { 2227 req.Location = builder.location 2228 } 2229 if builder.wifiFlag { 2230 req.Wifi = builder.wifi 2231 } 2232 if builder.ruleSnapshotIdFlag { 2233 req.RuleSnapshotId = &builder.ruleSnapshotId 2234 2235 } 2236 if builder.typeFlag { 2237 req.Type = &builder.type_ 2238 2239 } 2240 if builder.scanWifiListFlag { 2241 req.ScanWifiList = builder.scanWifiList 2242 } 2243 if builder.deviceIdFlag { 2244 req.DeviceId = &builder.deviceId 2245 2246 } 2247 if builder.clientInfoFlag { 2248 req.ClientInfo = &builder.clientInfo 2249 2250 } 2251 return req 2252 } 2253 2254 type LocationSetting struct { 2255 Location *LocationInfo `json:"location,omitempty"` // 位置配置 2256 Wifi *WifiInfo `json:"wifi,omitempty"` // wifi配置 2257 UserId *string `json:"user_id,omitempty"` // 2258 } 2259 2260 type LocationSettingBuilder struct { 2261 location *LocationInfo // 位置配置 2262 locationFlag bool 2263 wifi *WifiInfo // wifi配置 2264 wifiFlag bool 2265 userId string // 2266 userIdFlag bool 2267 } 2268 2269 func NewLocationSettingBuilder() *LocationSettingBuilder { 2270 builder := &LocationSettingBuilder{} 2271 return builder 2272 } 2273 2274 // 位置配置 2275 // 2276 // 示例值: 2277 func (builder *LocationSettingBuilder) Location(location *LocationInfo) *LocationSettingBuilder { 2278 builder.location = location 2279 builder.locationFlag = true 2280 return builder 2281 } 2282 2283 // wifi配置 2284 // 2285 // 示例值: 2286 func (builder *LocationSettingBuilder) Wifi(wifi *WifiInfo) *LocationSettingBuilder { 2287 builder.wifi = wifi 2288 builder.wifiFlag = true 2289 return builder 2290 } 2291 2292 // 2293 // 2294 // 示例值: 2295 func (builder *LocationSettingBuilder) UserId(userId string) *LocationSettingBuilder { 2296 builder.userId = userId 2297 builder.userIdFlag = true 2298 return builder 2299 } 2300 2301 func (builder *LocationSettingBuilder) Build() *LocationSetting { 2302 req := &LocationSetting{} 2303 if builder.locationFlag { 2304 req.Location = builder.location 2305 } 2306 if builder.wifiFlag { 2307 req.Wifi = builder.wifi 2308 } 2309 if builder.userIdFlag { 2310 req.UserId = &builder.userId 2311 2312 } 2313 return req 2314 } 2315 2316 type Machine struct { 2317 MachineSn *string `json:"machine_sn,omitempty"` // 考勤机序列号 2318 MachineName *string `json:"machine_name,omitempty"` // 考勤机名称 2319 } 2320 2321 type MachineBuilder struct { 2322 machineSn string // 考勤机序列号 2323 machineSnFlag bool 2324 machineName string // 考勤机名称 2325 machineNameFlag bool 2326 } 2327 2328 func NewMachineBuilder() *MachineBuilder { 2329 builder := &MachineBuilder{} 2330 return builder 2331 } 2332 2333 // 考勤机序列号 2334 // 2335 // 示例值:FS0701 2336 func (builder *MachineBuilder) MachineSn(machineSn string) *MachineBuilder { 2337 builder.machineSn = machineSn 2338 builder.machineSnFlag = true 2339 return builder 2340 } 2341 2342 // 考勤机名称 2343 // 2344 // 示例值:创实 9 楼 2345 func (builder *MachineBuilder) MachineName(machineName string) *MachineBuilder { 2346 builder.machineName = machineName 2347 builder.machineNameFlag = true 2348 return builder 2349 } 2350 2351 func (builder *MachineBuilder) Build() *Machine { 2352 req := &Machine{} 2353 if builder.machineSnFlag { 2354 req.MachineSn = &builder.machineSn 2355 2356 } 2357 if builder.machineNameFlag { 2358 req.MachineName = &builder.machineName 2359 2360 } 2361 return req 2362 } 2363 2364 type PunchSpecialDateShift struct { 2365 PunchDay *int `json:"punch_day,omitempty"` // 打卡日期 2366 ShiftId *string `json:"shift_id,omitempty"` // 班次 ID 2367 } 2368 2369 type PunchSpecialDateShiftBuilder struct { 2370 punchDay int // 打卡日期 2371 punchDayFlag bool 2372 shiftId string // 班次 ID 2373 shiftIdFlag bool 2374 } 2375 2376 func NewPunchSpecialDateShiftBuilder() *PunchSpecialDateShiftBuilder { 2377 builder := &PunchSpecialDateShiftBuilder{} 2378 return builder 2379 } 2380 2381 // 打卡日期 2382 // 2383 // 示例值:20190101 2384 func (builder *PunchSpecialDateShiftBuilder) PunchDay(punchDay int) *PunchSpecialDateShiftBuilder { 2385 builder.punchDay = punchDay 2386 builder.punchDayFlag = true 2387 return builder 2388 } 2389 2390 // 班次 ID 2391 // 2392 // 示例值:6919668827865513935 2393 func (builder *PunchSpecialDateShiftBuilder) ShiftId(shiftId string) *PunchSpecialDateShiftBuilder { 2394 builder.shiftId = shiftId 2395 builder.shiftIdFlag = true 2396 return builder 2397 } 2398 2399 func (builder *PunchSpecialDateShiftBuilder) Build() *PunchSpecialDateShift { 2400 req := &PunchSpecialDateShift{} 2401 if builder.punchDayFlag { 2402 req.PunchDay = &builder.punchDay 2403 2404 } 2405 if builder.shiftIdFlag { 2406 req.ShiftId = &builder.shiftId 2407 2408 } 2409 return req 2410 } 2411 2412 type PunchTimeRule struct { 2413 OnTime *string `json:"on_time,omitempty"` // 上班时间 2414 OffTime *string `json:"off_time,omitempty"` // 下班时间 2415 LateMinutesAsLate *int `json:"late_minutes_as_late,omitempty"` // 晚到多久记为迟到 2416 LateMinutesAsLack *int `json:"late_minutes_as_lack,omitempty"` // 晚到多久记为缺卡 2417 OnAdvanceMinutes *int `json:"on_advance_minutes,omitempty"` // 最早多久可打上班卡 2418 EarlyMinutesAsEarly *int `json:"early_minutes_as_early,omitempty"` // 早退多久记为早退 2419 EarlyMinutesAsLack *int `json:"early_minutes_as_lack,omitempty"` // 早退多久记为缺卡 2420 OffDelayMinutes *int `json:"off_delay_minutes,omitempty"` // 最晚多久可打下班卡 2421 LateMinutesAsSeriousLate *int `json:"late_minutes_as_serious_late,omitempty"` // 晚到多久记为严重迟到 2422 } 2423 2424 type PunchTimeRuleBuilder struct { 2425 onTime string // 上班时间 2426 onTimeFlag bool 2427 offTime string // 下班时间 2428 offTimeFlag bool 2429 lateMinutesAsLate int // 晚到多久记为迟到 2430 lateMinutesAsLateFlag bool 2431 lateMinutesAsLack int // 晚到多久记为缺卡 2432 lateMinutesAsLackFlag bool 2433 onAdvanceMinutes int // 最早多久可打上班卡 2434 onAdvanceMinutesFlag bool 2435 earlyMinutesAsEarly int // 早退多久记为早退 2436 earlyMinutesAsEarlyFlag bool 2437 earlyMinutesAsLack int // 早退多久记为缺卡 2438 earlyMinutesAsLackFlag bool 2439 offDelayMinutes int // 最晚多久可打下班卡 2440 offDelayMinutesFlag bool 2441 lateMinutesAsSeriousLate int // 晚到多久记为严重迟到 2442 lateMinutesAsSeriousLateFlag bool 2443 } 2444 2445 func NewPunchTimeRuleBuilder() *PunchTimeRuleBuilder { 2446 builder := &PunchTimeRuleBuilder{} 2447 return builder 2448 } 2449 2450 // 上班时间 2451 // 2452 // 示例值:9:00 2453 func (builder *PunchTimeRuleBuilder) OnTime(onTime string) *PunchTimeRuleBuilder { 2454 builder.onTime = onTime 2455 builder.onTimeFlag = true 2456 return builder 2457 } 2458 2459 // 下班时间 2460 // 2461 // 示例值:18:00, 第二天凌晨2点, 26:00 2462 func (builder *PunchTimeRuleBuilder) OffTime(offTime string) *PunchTimeRuleBuilder { 2463 builder.offTime = offTime 2464 builder.offTimeFlag = true 2465 return builder 2466 } 2467 2468 // 晚到多久记为迟到 2469 // 2470 // 示例值:30 2471 func (builder *PunchTimeRuleBuilder) LateMinutesAsLate(lateMinutesAsLate int) *PunchTimeRuleBuilder { 2472 builder.lateMinutesAsLate = lateMinutesAsLate 2473 builder.lateMinutesAsLateFlag = true 2474 return builder 2475 } 2476 2477 // 晚到多久记为缺卡 2478 // 2479 // 示例值:60 2480 func (builder *PunchTimeRuleBuilder) LateMinutesAsLack(lateMinutesAsLack int) *PunchTimeRuleBuilder { 2481 builder.lateMinutesAsLack = lateMinutesAsLack 2482 builder.lateMinutesAsLackFlag = true 2483 return builder 2484 } 2485 2486 // 最早多久可打上班卡 2487 // 2488 // 示例值:60 2489 func (builder *PunchTimeRuleBuilder) OnAdvanceMinutes(onAdvanceMinutes int) *PunchTimeRuleBuilder { 2490 builder.onAdvanceMinutes = onAdvanceMinutes 2491 builder.onAdvanceMinutesFlag = true 2492 return builder 2493 } 2494 2495 // 早退多久记为早退 2496 // 2497 // 示例值:30 2498 func (builder *PunchTimeRuleBuilder) EarlyMinutesAsEarly(earlyMinutesAsEarly int) *PunchTimeRuleBuilder { 2499 builder.earlyMinutesAsEarly = earlyMinutesAsEarly 2500 builder.earlyMinutesAsEarlyFlag = true 2501 return builder 2502 } 2503 2504 // 早退多久记为缺卡 2505 // 2506 // 示例值:60 2507 func (builder *PunchTimeRuleBuilder) EarlyMinutesAsLack(earlyMinutesAsLack int) *PunchTimeRuleBuilder { 2508 builder.earlyMinutesAsLack = earlyMinutesAsLack 2509 builder.earlyMinutesAsLackFlag = true 2510 return builder 2511 } 2512 2513 // 最晚多久可打下班卡 2514 // 2515 // 示例值:60 2516 func (builder *PunchTimeRuleBuilder) OffDelayMinutes(offDelayMinutes int) *PunchTimeRuleBuilder { 2517 builder.offDelayMinutes = offDelayMinutes 2518 builder.offDelayMinutesFlag = true 2519 return builder 2520 } 2521 2522 // 晚到多久记为严重迟到 2523 // 2524 // 示例值:40 2525 func (builder *PunchTimeRuleBuilder) LateMinutesAsSeriousLate(lateMinutesAsSeriousLate int) *PunchTimeRuleBuilder { 2526 builder.lateMinutesAsSeriousLate = lateMinutesAsSeriousLate 2527 builder.lateMinutesAsSeriousLateFlag = true 2528 return builder 2529 } 2530 2531 func (builder *PunchTimeRuleBuilder) Build() *PunchTimeRule { 2532 req := &PunchTimeRule{} 2533 if builder.onTimeFlag { 2534 req.OnTime = &builder.onTime 2535 2536 } 2537 if builder.offTimeFlag { 2538 req.OffTime = &builder.offTime 2539 2540 } 2541 if builder.lateMinutesAsLateFlag { 2542 req.LateMinutesAsLate = &builder.lateMinutesAsLate 2543 2544 } 2545 if builder.lateMinutesAsLackFlag { 2546 req.LateMinutesAsLack = &builder.lateMinutesAsLack 2547 2548 } 2549 if builder.onAdvanceMinutesFlag { 2550 req.OnAdvanceMinutes = &builder.onAdvanceMinutes 2551 2552 } 2553 if builder.earlyMinutesAsEarlyFlag { 2554 req.EarlyMinutesAsEarly = &builder.earlyMinutesAsEarly 2555 2556 } 2557 if builder.earlyMinutesAsLackFlag { 2558 req.EarlyMinutesAsLack = &builder.earlyMinutesAsLack 2559 2560 } 2561 if builder.offDelayMinutesFlag { 2562 req.OffDelayMinutes = &builder.offDelayMinutes 2563 2564 } 2565 if builder.lateMinutesAsSeriousLateFlag { 2566 req.LateMinutesAsSeriousLate = &builder.lateMinutesAsSeriousLate 2567 2568 } 2569 return req 2570 } 2571 2572 type RestRule struct { 2573 RestBeginTime *string `json:"rest_begin_time,omitempty"` // 休息开始 2574 RestEndTime *string `json:"rest_end_time,omitempty"` // 休息结束 2575 } 2576 2577 type RestRuleBuilder struct { 2578 restBeginTime string // 休息开始 2579 restBeginTimeFlag bool 2580 restEndTime string // 休息结束 2581 restEndTimeFlag bool 2582 } 2583 2584 func NewRestRuleBuilder() *RestRuleBuilder { 2585 builder := &RestRuleBuilder{} 2586 return builder 2587 } 2588 2589 // 休息开始 2590 // 2591 // 示例值:13:00 2592 func (builder *RestRuleBuilder) RestBeginTime(restBeginTime string) *RestRuleBuilder { 2593 builder.restBeginTime = restBeginTime 2594 builder.restBeginTimeFlag = true 2595 return builder 2596 } 2597 2598 // 休息结束 2599 // 2600 // 示例值:14:00 2601 func (builder *RestRuleBuilder) RestEndTime(restEndTime string) *RestRuleBuilder { 2602 builder.restEndTime = restEndTime 2603 builder.restEndTimeFlag = true 2604 return builder 2605 } 2606 2607 func (builder *RestRuleBuilder) Build() *RestRule { 2608 req := &RestRule{} 2609 if builder.restBeginTimeFlag { 2610 req.RestBeginTime = &builder.restBeginTime 2611 2612 } 2613 if builder.restEndTimeFlag { 2614 req.RestEndTime = &builder.restEndTime 2615 2616 } 2617 return req 2618 } 2619 2620 type ScanWifiInfo struct { 2621 Ssid *string `json:"ssid,omitempty"` // 2622 Bssid *string `json:"bssid,omitempty"` // 2623 } 2624 2625 type ScanWifiInfoBuilder struct { 2626 ssid string // 2627 ssidFlag bool 2628 bssid string // 2629 bssidFlag bool 2630 } 2631 2632 func NewScanWifiInfoBuilder() *ScanWifiInfoBuilder { 2633 builder := &ScanWifiInfoBuilder{} 2634 return builder 2635 } 2636 2637 // 2638 // 2639 // 示例值: 2640 func (builder *ScanWifiInfoBuilder) Ssid(ssid string) *ScanWifiInfoBuilder { 2641 builder.ssid = ssid 2642 builder.ssidFlag = true 2643 return builder 2644 } 2645 2646 // 2647 // 2648 // 示例值: 2649 func (builder *ScanWifiInfoBuilder) Bssid(bssid string) *ScanWifiInfoBuilder { 2650 builder.bssid = bssid 2651 builder.bssidFlag = true 2652 return builder 2653 } 2654 2655 func (builder *ScanWifiInfoBuilder) Build() *ScanWifiInfo { 2656 req := &ScanWifiInfo{} 2657 if builder.ssidFlag { 2658 req.Ssid = &builder.ssid 2659 2660 } 2661 if builder.bssidFlag { 2662 req.Bssid = &builder.bssid 2663 2664 } 2665 return req 2666 } 2667 2668 type Schedule struct { 2669 GroupId *string `json:"group_id,omitempty"` // 考勤组名称 2670 Shifts []string `json:"shifts,omitempty"` // 班次列表 2671 } 2672 2673 type ScheduleBuilder struct { 2674 groupId string // 考勤组名称 2675 groupIdFlag bool 2676 shifts []string // 班次列表 2677 shiftsFlag bool 2678 } 2679 2680 func NewScheduleBuilder() *ScheduleBuilder { 2681 builder := &ScheduleBuilder{} 2682 return builder 2683 } 2684 2685 // 考勤组名称 2686 // 2687 // 示例值:6919358778597097404 2688 func (builder *ScheduleBuilder) GroupId(groupId string) *ScheduleBuilder { 2689 builder.groupId = groupId 2690 builder.groupIdFlag = true 2691 return builder 2692 } 2693 2694 // 班次列表 2695 // 2696 // 示例值: 2697 func (builder *ScheduleBuilder) Shifts(shifts []string) *ScheduleBuilder { 2698 builder.shifts = shifts 2699 builder.shiftsFlag = true 2700 return builder 2701 } 2702 2703 func (builder *ScheduleBuilder) Build() *Schedule { 2704 req := &Schedule{} 2705 if builder.groupIdFlag { 2706 req.GroupId = &builder.groupId 2707 2708 } 2709 if builder.shiftsFlag { 2710 req.Shifts = builder.shifts 2711 } 2712 return req 2713 } 2714 2715 type Shift struct { 2716 ShiftId *string `json:"shift_id,omitempty"` // 班次 ID 2717 ShiftName *string `json:"shift_name,omitempty"` // 班次名称 2718 PunchTimes *int `json:"punch_times,omitempty"` // 打卡次数 2719 IsFlexible *bool `json:"is_flexible,omitempty"` // 是否弹性打卡 2720 FlexibleMinutes *int `json:"flexible_minutes,omitempty"` // 弹性打卡时间,设置【上班最多可晚到】与【下班最多可早走】时间,如果不设置flexible_rule则生效 2721 FlexibleRule []*FlexibleRule `json:"flexible_rule,omitempty"` // 弹性打卡时间设置 2722 NoNeedOff *bool `json:"no_need_off,omitempty"` // 不需要打下班卡 2723 PunchTimeRule []*PunchTimeRule `json:"punch_time_rule,omitempty"` // 打卡规则 2724 LateOffLateOnRule []*LateOffLateOnRule `json:"late_off_late_on_rule,omitempty"` // 晚走晚到规则 2725 RestTimeRule []*RestRule `json:"rest_time_rule,omitempty"` // 休息规则 2726 } 2727 2728 type ShiftBuilder struct { 2729 shiftId string // 班次 ID 2730 shiftIdFlag bool 2731 shiftName string // 班次名称 2732 shiftNameFlag bool 2733 punchTimes int // 打卡次数 2734 punchTimesFlag bool 2735 isFlexible bool // 是否弹性打卡 2736 isFlexibleFlag bool 2737 flexibleMinutes int // 弹性打卡时间,设置【上班最多可晚到】与【下班最多可早走】时间,如果不设置flexible_rule则生效 2738 flexibleMinutesFlag bool 2739 flexibleRule []*FlexibleRule // 弹性打卡时间设置 2740 flexibleRuleFlag bool 2741 noNeedOff bool // 不需要打下班卡 2742 noNeedOffFlag bool 2743 punchTimeRule []*PunchTimeRule // 打卡规则 2744 punchTimeRuleFlag bool 2745 lateOffLateOnRule []*LateOffLateOnRule // 晚走晚到规则 2746 lateOffLateOnRuleFlag bool 2747 restTimeRule []*RestRule // 休息规则 2748 restTimeRuleFlag bool 2749 } 2750 2751 func NewShiftBuilder() *ShiftBuilder { 2752 builder := &ShiftBuilder{} 2753 return builder 2754 } 2755 2756 // 班次 ID 2757 // 2758 // 示例值:6919358778597097404 2759 func (builder *ShiftBuilder) ShiftId(shiftId string) *ShiftBuilder { 2760 builder.shiftId = shiftId 2761 builder.shiftIdFlag = true 2762 return builder 2763 } 2764 2765 // 班次名称 2766 // 2767 // 示例值:早班 2768 func (builder *ShiftBuilder) ShiftName(shiftName string) *ShiftBuilder { 2769 builder.shiftName = shiftName 2770 builder.shiftNameFlag = true 2771 return builder 2772 } 2773 2774 // 打卡次数 2775 // 2776 // 示例值:1 2777 func (builder *ShiftBuilder) PunchTimes(punchTimes int) *ShiftBuilder { 2778 builder.punchTimes = punchTimes 2779 builder.punchTimesFlag = true 2780 return builder 2781 } 2782 2783 // 是否弹性打卡 2784 // 2785 // 示例值:false 2786 func (builder *ShiftBuilder) IsFlexible(isFlexible bool) *ShiftBuilder { 2787 builder.isFlexible = isFlexible 2788 builder.isFlexibleFlag = true 2789 return builder 2790 } 2791 2792 // 弹性打卡时间,设置【上班最多可晚到】与【下班最多可早走】时间,如果不设置flexible_rule则生效 2793 // 2794 // 示例值:60 2795 func (builder *ShiftBuilder) FlexibleMinutes(flexibleMinutes int) *ShiftBuilder { 2796 builder.flexibleMinutes = flexibleMinutes 2797 builder.flexibleMinutesFlag = true 2798 return builder 2799 } 2800 2801 // 弹性打卡时间设置 2802 // 2803 // 示例值: 2804 func (builder *ShiftBuilder) FlexibleRule(flexibleRule []*FlexibleRule) *ShiftBuilder { 2805 builder.flexibleRule = flexibleRule 2806 builder.flexibleRuleFlag = true 2807 return builder 2808 } 2809 2810 // 不需要打下班卡 2811 // 2812 // 示例值:true 2813 func (builder *ShiftBuilder) NoNeedOff(noNeedOff bool) *ShiftBuilder { 2814 builder.noNeedOff = noNeedOff 2815 builder.noNeedOffFlag = true 2816 return builder 2817 } 2818 2819 // 打卡规则 2820 // 2821 // 示例值: 2822 func (builder *ShiftBuilder) PunchTimeRule(punchTimeRule []*PunchTimeRule) *ShiftBuilder { 2823 builder.punchTimeRule = punchTimeRule 2824 builder.punchTimeRuleFlag = true 2825 return builder 2826 } 2827 2828 // 晚走晚到规则 2829 // 2830 // 示例值: 2831 func (builder *ShiftBuilder) LateOffLateOnRule(lateOffLateOnRule []*LateOffLateOnRule) *ShiftBuilder { 2832 builder.lateOffLateOnRule = lateOffLateOnRule 2833 builder.lateOffLateOnRuleFlag = true 2834 return builder 2835 } 2836 2837 // 休息规则 2838 // 2839 // 示例值: 2840 func (builder *ShiftBuilder) RestTimeRule(restTimeRule []*RestRule) *ShiftBuilder { 2841 builder.restTimeRule = restTimeRule 2842 builder.restTimeRuleFlag = true 2843 return builder 2844 } 2845 2846 func (builder *ShiftBuilder) Build() *Shift { 2847 req := &Shift{} 2848 if builder.shiftIdFlag { 2849 req.ShiftId = &builder.shiftId 2850 2851 } 2852 if builder.shiftNameFlag { 2853 req.ShiftName = &builder.shiftName 2854 2855 } 2856 if builder.punchTimesFlag { 2857 req.PunchTimes = &builder.punchTimes 2858 2859 } 2860 if builder.isFlexibleFlag { 2861 req.IsFlexible = &builder.isFlexible 2862 2863 } 2864 if builder.flexibleMinutesFlag { 2865 req.FlexibleMinutes = &builder.flexibleMinutes 2866 2867 } 2868 if builder.flexibleRuleFlag { 2869 req.FlexibleRule = builder.flexibleRule 2870 } 2871 if builder.noNeedOffFlag { 2872 req.NoNeedOff = &builder.noNeedOff 2873 2874 } 2875 if builder.punchTimeRuleFlag { 2876 req.PunchTimeRule = builder.punchTimeRule 2877 } 2878 if builder.lateOffLateOnRuleFlag { 2879 req.LateOffLateOnRule = builder.lateOffLateOnRule 2880 } 2881 if builder.restTimeRuleFlag { 2882 req.RestTimeRule = builder.restTimeRule 2883 } 2884 return req 2885 } 2886 2887 type StatusChange struct { 2888 Index *int `json:"index,omitempty"` // 2889 BeforeStatus *string `json:"before_status,omitempty"` // 2890 CurrentStatus *string `json:"current_status,omitempty"` // 2891 BeforeSupplement *string `json:"before_supplement,omitempty"` // 2892 CurrentSupplement *string `json:"current_supplement,omitempty"` // 2893 WorkType *string `json:"work_type,omitempty"` // 2894 } 2895 2896 type StatusChangeBuilder struct { 2897 index int // 2898 indexFlag bool 2899 beforeStatus string // 2900 beforeStatusFlag bool 2901 currentStatus string // 2902 currentStatusFlag bool 2903 beforeSupplement string // 2904 beforeSupplementFlag bool 2905 currentSupplement string // 2906 currentSupplementFlag bool 2907 workType string // 2908 workTypeFlag bool 2909 } 2910 2911 func NewStatusChangeBuilder() *StatusChangeBuilder { 2912 builder := &StatusChangeBuilder{} 2913 return builder 2914 } 2915 2916 // 2917 // 2918 // 示例值: 2919 func (builder *StatusChangeBuilder) Index(index int) *StatusChangeBuilder { 2920 builder.index = index 2921 builder.indexFlag = true 2922 return builder 2923 } 2924 2925 // 2926 // 2927 // 示例值: 2928 func (builder *StatusChangeBuilder) BeforeStatus(beforeStatus string) *StatusChangeBuilder { 2929 builder.beforeStatus = beforeStatus 2930 builder.beforeStatusFlag = true 2931 return builder 2932 } 2933 2934 // 2935 // 2936 // 示例值: 2937 func (builder *StatusChangeBuilder) CurrentStatus(currentStatus string) *StatusChangeBuilder { 2938 builder.currentStatus = currentStatus 2939 builder.currentStatusFlag = true 2940 return builder 2941 } 2942 2943 // 2944 // 2945 // 示例值: 2946 func (builder *StatusChangeBuilder) BeforeSupplement(beforeSupplement string) *StatusChangeBuilder { 2947 builder.beforeSupplement = beforeSupplement 2948 builder.beforeSupplementFlag = true 2949 return builder 2950 } 2951 2952 // 2953 // 2954 // 示例值: 2955 func (builder *StatusChangeBuilder) CurrentSupplement(currentSupplement string) *StatusChangeBuilder { 2956 builder.currentSupplement = currentSupplement 2957 builder.currentSupplementFlag = true 2958 return builder 2959 } 2960 2961 // 2962 // 2963 // 示例值: 2964 func (builder *StatusChangeBuilder) WorkType(workType string) *StatusChangeBuilder { 2965 builder.workType = workType 2966 builder.workTypeFlag = true 2967 return builder 2968 } 2969 2970 func (builder *StatusChangeBuilder) Build() *StatusChange { 2971 req := &StatusChange{} 2972 if builder.indexFlag { 2973 req.Index = &builder.index 2974 2975 } 2976 if builder.beforeStatusFlag { 2977 req.BeforeStatus = &builder.beforeStatus 2978 2979 } 2980 if builder.currentStatusFlag { 2981 req.CurrentStatus = &builder.currentStatus 2982 2983 } 2984 if builder.beforeSupplementFlag { 2985 req.BeforeSupplement = &builder.beforeSupplement 2986 2987 } 2988 if builder.currentSupplementFlag { 2989 req.CurrentSupplement = &builder.currentSupplement 2990 2991 } 2992 if builder.workTypeFlag { 2993 req.WorkType = &builder.workType 2994 2995 } 2996 return req 2997 } 2998 2999 type TaskResult struct { 3000 CheckInRecordId *string `json:"check_in_record_id,omitempty"` // 上班打卡记录 ID 3001 CheckInRecord *UserFlow `json:"check_in_record,omitempty"` // 上班打卡记录 3002 CheckOutRecordId *string `json:"check_out_record_id,omitempty"` // 下班打卡记录 ID 3003 CheckOutRecord *UserFlow `json:"check_out_record,omitempty"` // 下班打卡记录 3004 CheckInResult *string `json:"check_in_result,omitempty"` // 上班打卡结果 3005 CheckOutResult *string `json:"check_out_result,omitempty"` // 下班打卡结果 3006 CheckInResultSupplement *string `json:"check_in_result_supplement,omitempty"` // 上班打卡结果补充 3007 CheckOutResultSupplement *string `json:"check_out_result_supplement,omitempty"` // 下班打卡结果补充 3008 CheckInShiftTime *string `json:"check_in_shift_time,omitempty"` // 上班打卡时间 3009 CheckOutShiftTime *string `json:"check_out_shift_time,omitempty"` // 下班打卡时间 3010 } 3011 3012 type TaskResultBuilder struct { 3013 checkInRecordId string // 上班打卡记录 ID 3014 checkInRecordIdFlag bool 3015 checkInRecord *UserFlow // 上班打卡记录 3016 checkInRecordFlag bool 3017 checkOutRecordId string // 下班打卡记录 ID 3018 checkOutRecordIdFlag bool 3019 checkOutRecord *UserFlow // 下班打卡记录 3020 checkOutRecordFlag bool 3021 checkInResult string // 上班打卡结果 3022 checkInResultFlag bool 3023 checkOutResult string // 下班打卡结果 3024 checkOutResultFlag bool 3025 checkInResultSupplement string // 上班打卡结果补充 3026 checkInResultSupplementFlag bool 3027 checkOutResultSupplement string // 下班打卡结果补充 3028 checkOutResultSupplementFlag bool 3029 checkInShiftTime string // 上班打卡时间 3030 checkInShiftTimeFlag bool 3031 checkOutShiftTime string // 下班打卡时间 3032 checkOutShiftTimeFlag bool 3033 } 3034 3035 func NewTaskResultBuilder() *TaskResultBuilder { 3036 builder := &TaskResultBuilder{} 3037 return builder 3038 } 3039 3040 // 上班打卡记录 ID 3041 // 3042 // 示例值:6709359313699356941 3043 func (builder *TaskResultBuilder) CheckInRecordId(checkInRecordId string) *TaskResultBuilder { 3044 builder.checkInRecordId = checkInRecordId 3045 builder.checkInRecordIdFlag = true 3046 return builder 3047 } 3048 3049 // 上班打卡记录 3050 // 3051 // 示例值: 3052 func (builder *TaskResultBuilder) CheckInRecord(checkInRecord *UserFlow) *TaskResultBuilder { 3053 builder.checkInRecord = checkInRecord 3054 builder.checkInRecordFlag = true 3055 return builder 3056 } 3057 3058 // 下班打卡记录 ID 3059 // 3060 // 示例值:6709359313699356942 3061 func (builder *TaskResultBuilder) CheckOutRecordId(checkOutRecordId string) *TaskResultBuilder { 3062 builder.checkOutRecordId = checkOutRecordId 3063 builder.checkOutRecordIdFlag = true 3064 return builder 3065 } 3066 3067 // 下班打卡记录 3068 // 3069 // 示例值: 3070 func (builder *TaskResultBuilder) CheckOutRecord(checkOutRecord *UserFlow) *TaskResultBuilder { 3071 builder.checkOutRecord = checkOutRecord 3072 builder.checkOutRecordFlag = true 3073 return builder 3074 } 3075 3076 // 上班打卡结果 3077 // 3078 // 示例值:SystemCheck 3079 func (builder *TaskResultBuilder) CheckInResult(checkInResult string) *TaskResultBuilder { 3080 builder.checkInResult = checkInResult 3081 builder.checkInResultFlag = true 3082 return builder 3083 } 3084 3085 // 下班打卡结果 3086 // 3087 // 示例值:SystemCheck 3088 func (builder *TaskResultBuilder) CheckOutResult(checkOutResult string) *TaskResultBuilder { 3089 builder.checkOutResult = checkOutResult 3090 builder.checkOutResultFlag = true 3091 return builder 3092 } 3093 3094 // 上班打卡结果补充 3095 // 3096 // 示例值:None 3097 func (builder *TaskResultBuilder) CheckInResultSupplement(checkInResultSupplement string) *TaskResultBuilder { 3098 builder.checkInResultSupplement = checkInResultSupplement 3099 builder.checkInResultSupplementFlag = true 3100 return builder 3101 } 3102 3103 // 下班打卡结果补充 3104 // 3105 // 示例值:None 3106 func (builder *TaskResultBuilder) CheckOutResultSupplement(checkOutResultSupplement string) *TaskResultBuilder { 3107 builder.checkOutResultSupplement = checkOutResultSupplement 3108 builder.checkOutResultSupplementFlag = true 3109 return builder 3110 } 3111 3112 // 上班打卡时间 3113 // 3114 // 示例值:1609722000 3115 func (builder *TaskResultBuilder) CheckInShiftTime(checkInShiftTime string) *TaskResultBuilder { 3116 builder.checkInShiftTime = checkInShiftTime 3117 builder.checkInShiftTimeFlag = true 3118 return builder 3119 } 3120 3121 // 下班打卡时间 3122 // 3123 // 示例值:1609754400 3124 func (builder *TaskResultBuilder) CheckOutShiftTime(checkOutShiftTime string) *TaskResultBuilder { 3125 builder.checkOutShiftTime = checkOutShiftTime 3126 builder.checkOutShiftTimeFlag = true 3127 return builder 3128 } 3129 3130 func (builder *TaskResultBuilder) Build() *TaskResult { 3131 req := &TaskResult{} 3132 if builder.checkInRecordIdFlag { 3133 req.CheckInRecordId = &builder.checkInRecordId 3134 3135 } 3136 if builder.checkInRecordFlag { 3137 req.CheckInRecord = builder.checkInRecord 3138 } 3139 if builder.checkOutRecordIdFlag { 3140 req.CheckOutRecordId = &builder.checkOutRecordId 3141 3142 } 3143 if builder.checkOutRecordFlag { 3144 req.CheckOutRecord = builder.checkOutRecord 3145 } 3146 if builder.checkInResultFlag { 3147 req.CheckInResult = &builder.checkInResult 3148 3149 } 3150 if builder.checkOutResultFlag { 3151 req.CheckOutResult = &builder.checkOutResult 3152 3153 } 3154 if builder.checkInResultSupplementFlag { 3155 req.CheckInResultSupplement = &builder.checkInResultSupplement 3156 3157 } 3158 if builder.checkOutResultSupplementFlag { 3159 req.CheckOutResultSupplement = &builder.checkOutResultSupplement 3160 3161 } 3162 if builder.checkInShiftTimeFlag { 3163 req.CheckInShiftTime = &builder.checkInShiftTime 3164 3165 } 3166 if builder.checkOutShiftTimeFlag { 3167 req.CheckOutShiftTime = &builder.checkOutShiftTime 3168 3169 } 3170 return req 3171 } 3172 3173 type UserAllowedRemedy struct { 3174 UserId *string `json:"user_id,omitempty"` // 用户 ID 3175 RemedyDate *int `json:"remedy_date,omitempty"` // 补卡日期 3176 IsFreePunch *bool `json:"is_free_punch,omitempty"` // 是否为自由班次,若为自由班次,则不用选择考虑第几次上下班,直接选择补卡时间即可 3177 PunchNo *int `json:"punch_no,omitempty"` // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班 3178 WorkType *int `json:"work_type,omitempty"` // 上班 / 下班,1:上班,2:下班 3179 PunchStatus *string `json:"punch_status,omitempty"` // 打卡状态,Early:早退,Late:迟到,Lack:缺卡 3180 NormalPunchTime *string `json:"normal_punch_time,omitempty"` // 正常的应打卡时间,时间格式为 yyyy-MM-dd HH:mm 3181 RemedyStartTime *string `json:"remedy_start_time,omitempty"` // 可选的补卡时间的最小值,时间格式为 yyyy-MM-dd HH:mm 3182 RemedyEndTime *string `json:"remedy_end_time,omitempty"` // 可选的补卡时间的最大值,时间格式为 yyyy-MM-dd HH:mm 3183 } 3184 3185 type UserAllowedRemedyBuilder struct { 3186 userId string // 用户 ID 3187 userIdFlag bool 3188 remedyDate int // 补卡日期 3189 remedyDateFlag bool 3190 isFreePunch bool // 是否为自由班次,若为自由班次,则不用选择考虑第几次上下班,直接选择补卡时间即可 3191 isFreePunchFlag bool 3192 punchNo int // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班 3193 punchNoFlag bool 3194 workType int // 上班 / 下班,1:上班,2:下班 3195 workTypeFlag bool 3196 punchStatus string // 打卡状态,Early:早退,Late:迟到,Lack:缺卡 3197 punchStatusFlag bool 3198 normalPunchTime string // 正常的应打卡时间,时间格式为 yyyy-MM-dd HH:mm 3199 normalPunchTimeFlag bool 3200 remedyStartTime string // 可选的补卡时间的最小值,时间格式为 yyyy-MM-dd HH:mm 3201 remedyStartTimeFlag bool 3202 remedyEndTime string // 可选的补卡时间的最大值,时间格式为 yyyy-MM-dd HH:mm 3203 remedyEndTimeFlag bool 3204 } 3205 3206 func NewUserAllowedRemedyBuilder() *UserAllowedRemedyBuilder { 3207 builder := &UserAllowedRemedyBuilder{} 3208 return builder 3209 } 3210 3211 // 用户 ID 3212 // 3213 // 示例值:abd754f7 3214 func (builder *UserAllowedRemedyBuilder) UserId(userId string) *UserAllowedRemedyBuilder { 3215 builder.userId = userId 3216 builder.userIdFlag = true 3217 return builder 3218 } 3219 3220 // 补卡日期 3221 // 3222 // 示例值:20210104 3223 func (builder *UserAllowedRemedyBuilder) RemedyDate(remedyDate int) *UserAllowedRemedyBuilder { 3224 builder.remedyDate = remedyDate 3225 builder.remedyDateFlag = true 3226 return builder 3227 } 3228 3229 // 是否为自由班次,若为自由班次,则不用选择考虑第几次上下班,直接选择补卡时间即可 3230 // 3231 // 示例值:false 3232 func (builder *UserAllowedRemedyBuilder) IsFreePunch(isFreePunch bool) *UserAllowedRemedyBuilder { 3233 builder.isFreePunch = isFreePunch 3234 builder.isFreePunchFlag = true 3235 return builder 3236 } 3237 3238 // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班 3239 // 3240 // 示例值:0 3241 func (builder *UserAllowedRemedyBuilder) PunchNo(punchNo int) *UserAllowedRemedyBuilder { 3242 builder.punchNo = punchNo 3243 builder.punchNoFlag = true 3244 return builder 3245 } 3246 3247 // 上班 / 下班,1:上班,2:下班 3248 // 3249 // 示例值:1 3250 func (builder *UserAllowedRemedyBuilder) WorkType(workType int) *UserAllowedRemedyBuilder { 3251 builder.workType = workType 3252 builder.workTypeFlag = true 3253 return builder 3254 } 3255 3256 // 打卡状态,Early:早退,Late:迟到,Lack:缺卡 3257 // 3258 // 示例值:Lack 3259 func (builder *UserAllowedRemedyBuilder) PunchStatus(punchStatus string) *UserAllowedRemedyBuilder { 3260 builder.punchStatus = punchStatus 3261 builder.punchStatusFlag = true 3262 return builder 3263 } 3264 3265 // 正常的应打卡时间,时间格式为 yyyy-MM-dd HH:mm 3266 // 3267 // 示例值:2021-07-01 09:00 3268 func (builder *UserAllowedRemedyBuilder) NormalPunchTime(normalPunchTime string) *UserAllowedRemedyBuilder { 3269 builder.normalPunchTime = normalPunchTime 3270 builder.normalPunchTimeFlag = true 3271 return builder 3272 } 3273 3274 // 可选的补卡时间的最小值,时间格式为 yyyy-MM-dd HH:mm 3275 // 3276 // 示例值:2021-07-01 08:00 3277 func (builder *UserAllowedRemedyBuilder) RemedyStartTime(remedyStartTime string) *UserAllowedRemedyBuilder { 3278 builder.remedyStartTime = remedyStartTime 3279 builder.remedyStartTimeFlag = true 3280 return builder 3281 } 3282 3283 // 可选的补卡时间的最大值,时间格式为 yyyy-MM-dd HH:mm 3284 // 3285 // 示例值:2021-07-01 10:00 3286 func (builder *UserAllowedRemedyBuilder) RemedyEndTime(remedyEndTime string) *UserAllowedRemedyBuilder { 3287 builder.remedyEndTime = remedyEndTime 3288 builder.remedyEndTimeFlag = true 3289 return builder 3290 } 3291 3292 func (builder *UserAllowedRemedyBuilder) Build() *UserAllowedRemedy { 3293 req := &UserAllowedRemedy{} 3294 if builder.userIdFlag { 3295 req.UserId = &builder.userId 3296 3297 } 3298 if builder.remedyDateFlag { 3299 req.RemedyDate = &builder.remedyDate 3300 3301 } 3302 if builder.isFreePunchFlag { 3303 req.IsFreePunch = &builder.isFreePunch 3304 3305 } 3306 if builder.punchNoFlag { 3307 req.PunchNo = &builder.punchNo 3308 3309 } 3310 if builder.workTypeFlag { 3311 req.WorkType = &builder.workType 3312 3313 } 3314 if builder.punchStatusFlag { 3315 req.PunchStatus = &builder.punchStatus 3316 3317 } 3318 if builder.normalPunchTimeFlag { 3319 req.NormalPunchTime = &builder.normalPunchTime 3320 3321 } 3322 if builder.remedyStartTimeFlag { 3323 req.RemedyStartTime = &builder.remedyStartTime 3324 3325 } 3326 if builder.remedyEndTimeFlag { 3327 req.RemedyEndTime = &builder.remedyEndTime 3328 3329 } 3330 return req 3331 } 3332 3333 type UserApproval struct { 3334 UserId *string `json:"user_id,omitempty"` // 审批用户 ID 3335 Date *string `json:"date,omitempty"` // 审批作用日期 3336 Outs []*UserOut `json:"outs,omitempty"` // 外出信息 3337 Leaves []*UserLeave `json:"leaves,omitempty"` // 请假信息 3338 OvertimeWorks []*UserOvertimeWork `json:"overtime_works,omitempty"` // 加班信息 3339 Trips []*UserTrip `json:"trips,omitempty"` // 出差信息 3340 } 3341 3342 type UserApprovalBuilder struct { 3343 userId string // 审批用户 ID 3344 userIdFlag bool 3345 date string // 审批作用日期 3346 dateFlag bool 3347 outs []*UserOut // 外出信息 3348 outsFlag bool 3349 leaves []*UserLeave // 请假信息 3350 leavesFlag bool 3351 overtimeWorks []*UserOvertimeWork // 加班信息 3352 overtimeWorksFlag bool 3353 trips []*UserTrip // 出差信息 3354 tripsFlag bool 3355 } 3356 3357 func NewUserApprovalBuilder() *UserApprovalBuilder { 3358 builder := &UserApprovalBuilder{} 3359 return builder 3360 } 3361 3362 // 审批用户 ID 3363 // 3364 // 示例值:abd754f7 3365 func (builder *UserApprovalBuilder) UserId(userId string) *UserApprovalBuilder { 3366 builder.userId = userId 3367 builder.userIdFlag = true 3368 return builder 3369 } 3370 3371 // 审批作用日期 3372 // 3373 // 示例值:20210104 3374 func (builder *UserApprovalBuilder) Date(date string) *UserApprovalBuilder { 3375 builder.date = date 3376 builder.dateFlag = true 3377 return builder 3378 } 3379 3380 // 外出信息 3381 // 3382 // 示例值: 3383 func (builder *UserApprovalBuilder) Outs(outs []*UserOut) *UserApprovalBuilder { 3384 builder.outs = outs 3385 builder.outsFlag = true 3386 return builder 3387 } 3388 3389 // 请假信息 3390 // 3391 // 示例值: 3392 func (builder *UserApprovalBuilder) Leaves(leaves []*UserLeave) *UserApprovalBuilder { 3393 builder.leaves = leaves 3394 builder.leavesFlag = true 3395 return builder 3396 } 3397 3398 // 加班信息 3399 // 3400 // 示例值: 3401 func (builder *UserApprovalBuilder) OvertimeWorks(overtimeWorks []*UserOvertimeWork) *UserApprovalBuilder { 3402 builder.overtimeWorks = overtimeWorks 3403 builder.overtimeWorksFlag = true 3404 return builder 3405 } 3406 3407 // 出差信息 3408 // 3409 // 示例值: 3410 func (builder *UserApprovalBuilder) Trips(trips []*UserTrip) *UserApprovalBuilder { 3411 builder.trips = trips 3412 builder.tripsFlag = true 3413 return builder 3414 } 3415 3416 func (builder *UserApprovalBuilder) Build() *UserApproval { 3417 req := &UserApproval{} 3418 if builder.userIdFlag { 3419 req.UserId = &builder.userId 3420 3421 } 3422 if builder.dateFlag { 3423 req.Date = &builder.date 3424 3425 } 3426 if builder.outsFlag { 3427 req.Outs = builder.outs 3428 } 3429 if builder.leavesFlag { 3430 req.Leaves = builder.leaves 3431 } 3432 if builder.overtimeWorksFlag { 3433 req.OvertimeWorks = builder.overtimeWorks 3434 } 3435 if builder.tripsFlag { 3436 req.Trips = builder.trips 3437 } 3438 return req 3439 } 3440 3441 type UserDailyShift struct { 3442 GroupId *string `json:"group_id,omitempty"` // 考勤组 ID,获取方式:1)[创建或修改考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/create) 2)[按名称查询考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/search) 3)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 3443 ShiftId *string `json:"shift_id,omitempty"` // 班次 ID,获取方式:1)[按名称查询班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/query) 2)[创建班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/create) 3444 Month *int `json:"month,omitempty"` // 月份 3445 UserId *string `json:"user_id,omitempty"` // 用户 ID 3446 DayNo *int `json:"day_no,omitempty"` // 日期 3447 } 3448 3449 type UserDailyShiftBuilder struct { 3450 groupId string // 考勤组 ID,获取方式:1)[创建或修改考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/create) 2)[按名称查询考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/search) 3)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 3451 groupIdFlag bool 3452 shiftId string // 班次 ID,获取方式:1)[按名称查询班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/query) 2)[创建班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/create) 3453 shiftIdFlag bool 3454 month int // 月份 3455 monthFlag bool 3456 userId string // 用户 ID 3457 userIdFlag bool 3458 dayNo int // 日期 3459 dayNoFlag bool 3460 } 3461 3462 func NewUserDailyShiftBuilder() *UserDailyShiftBuilder { 3463 builder := &UserDailyShiftBuilder{} 3464 return builder 3465 } 3466 3467 // 考勤组 ID,获取方式:1)[创建或修改考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/create) 2)[按名称查询考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/search) 3)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 3468 // 3469 // 示例值:6737202939523236110 3470 func (builder *UserDailyShiftBuilder) GroupId(groupId string) *UserDailyShiftBuilder { 3471 builder.groupId = groupId 3472 builder.groupIdFlag = true 3473 return builder 3474 } 3475 3476 // 班次 ID,获取方式:1)[按名称查询班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/query) 2)[创建班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/create) 3477 // 3478 // 示例值:6753520403404030215 3479 func (builder *UserDailyShiftBuilder) ShiftId(shiftId string) *UserDailyShiftBuilder { 3480 builder.shiftId = shiftId 3481 builder.shiftIdFlag = true 3482 return builder 3483 } 3484 3485 // 月份 3486 // 3487 // 示例值:202101 3488 func (builder *UserDailyShiftBuilder) Month(month int) *UserDailyShiftBuilder { 3489 builder.month = month 3490 builder.monthFlag = true 3491 return builder 3492 } 3493 3494 // 用户 ID 3495 // 3496 // 示例值:abd754f7 3497 func (builder *UserDailyShiftBuilder) UserId(userId string) *UserDailyShiftBuilder { 3498 builder.userId = userId 3499 builder.userIdFlag = true 3500 return builder 3501 } 3502 3503 // 日期 3504 // 3505 // 示例值:21 3506 func (builder *UserDailyShiftBuilder) DayNo(dayNo int) *UserDailyShiftBuilder { 3507 builder.dayNo = dayNo 3508 builder.dayNoFlag = true 3509 return builder 3510 } 3511 3512 func (builder *UserDailyShiftBuilder) Build() *UserDailyShift { 3513 req := &UserDailyShift{} 3514 if builder.groupIdFlag { 3515 req.GroupId = &builder.groupId 3516 3517 } 3518 if builder.shiftIdFlag { 3519 req.ShiftId = &builder.shiftId 3520 3521 } 3522 if builder.monthFlag { 3523 req.Month = &builder.month 3524 3525 } 3526 if builder.userIdFlag { 3527 req.UserId = &builder.userId 3528 3529 } 3530 if builder.dayNoFlag { 3531 req.DayNo = &builder.dayNo 3532 3533 } 3534 return req 3535 } 3536 3537 type UserFlow struct { 3538 UserId *string `json:"user_id,omitempty"` // 用户 ID 3539 CreatorId *string `json:"creator_id,omitempty"` // 记录创建者 ID 3540 LocationName *string `json:"location_name,omitempty"` // 打卡位置名称信息 3541 CheckTime *string `json:"check_time,omitempty"` // 打卡时间,精确到秒的时间戳 3542 Comment *string `json:"comment,omitempty"` // 打卡备注 3543 RecordId *string `json:"record_id,omitempty"` // 打卡记录 ID 3544 3545 Ssid *string `json:"ssid,omitempty"` // 打卡 Wi-Fi 的 SSID 3546 Bssid *string `json:"bssid,omitempty"` // 打卡 Wi-Fi 的 MAC 地址 3547 IsField *bool `json:"is_field,omitempty"` // 是否为外勤打卡 3548 IsWifi *bool `json:"is_wifi,omitempty"` // 是否为 Wi-Fi 打卡 3549 Type *int `json:"type,omitempty"` // 记录生成方式 3550 PhotoUrls []string `json:"photo_urls,omitempty"` // 打卡照片列表 3551 3552 CheckResult *string `json:"check_result,omitempty"` // 打卡结果 3553 } 3554 3555 type UserFlowBuilder struct { 3556 userId string // 用户 ID 3557 userIdFlag bool 3558 creatorId string // 记录创建者 ID 3559 creatorIdFlag bool 3560 locationName string // 打卡位置名称信息 3561 locationNameFlag bool 3562 checkTime string // 打卡时间,精确到秒的时间戳 3563 checkTimeFlag bool 3564 comment string // 打卡备注 3565 commentFlag bool 3566 recordId string // 打卡记录 ID 3567 recordIdFlag bool 3568 3569 ssid string // 打卡 Wi-Fi 的 SSID 3570 ssidFlag bool 3571 bssid string // 打卡 Wi-Fi 的 MAC 地址 3572 bssidFlag bool 3573 isField bool // 是否为外勤打卡 3574 isFieldFlag bool 3575 isWifi bool // 是否为 Wi-Fi 打卡 3576 isWifiFlag bool 3577 type_ int // 记录生成方式 3578 typeFlag bool 3579 photoUrls []string // 打卡照片列表 3580 photoUrlsFlag bool 3581 3582 checkResult string // 打卡结果 3583 checkResultFlag bool 3584 } 3585 3586 func NewUserFlowBuilder() *UserFlowBuilder { 3587 builder := &UserFlowBuilder{} 3588 return builder 3589 } 3590 3591 // 用户 ID 3592 // 3593 // 示例值:abd754f7 3594 func (builder *UserFlowBuilder) UserId(userId string) *UserFlowBuilder { 3595 builder.userId = userId 3596 builder.userIdFlag = true 3597 return builder 3598 } 3599 3600 // 记录创建者 ID 3601 // 3602 // 示例值:abd754f7 3603 func (builder *UserFlowBuilder) CreatorId(creatorId string) *UserFlowBuilder { 3604 builder.creatorId = creatorId 3605 builder.creatorIdFlag = true 3606 return builder 3607 } 3608 3609 // 打卡位置名称信息 3610 // 3611 // 示例值:西溪八方城 3612 func (builder *UserFlowBuilder) LocationName(locationName string) *UserFlowBuilder { 3613 builder.locationName = locationName 3614 builder.locationNameFlag = true 3615 return builder 3616 } 3617 3618 // 打卡时间,精确到秒的时间戳 3619 // 3620 // 示例值:1611476284 3621 func (builder *UserFlowBuilder) CheckTime(checkTime string) *UserFlowBuilder { 3622 builder.checkTime = checkTime 3623 builder.checkTimeFlag = true 3624 return builder 3625 } 3626 3627 // 打卡备注 3628 // 3629 // 示例值:上班打卡 3630 func (builder *UserFlowBuilder) Comment(comment string) *UserFlowBuilder { 3631 builder.comment = comment 3632 builder.commentFlag = true 3633 return builder 3634 } 3635 3636 // 打卡记录 ID 3637 // 3638 // 示例值:6709359313699356941 3639 func (builder *UserFlowBuilder) RecordId(recordId string) *UserFlowBuilder { 3640 builder.recordId = recordId 3641 builder.recordIdFlag = true 3642 return builder 3643 } 3644 3645 // 打卡 Wi-Fi 的 SSID 3646 // 3647 // 示例值:b0:b8:67:5c:1d:72 3648 func (builder *UserFlowBuilder) Ssid(ssid string) *UserFlowBuilder { 3649 builder.ssid = ssid 3650 builder.ssidFlag = true 3651 return builder 3652 } 3653 3654 // 打卡 Wi-Fi 的 MAC 地址 3655 // 3656 // 示例值:b0:b8:67:5c:1d:72 3657 func (builder *UserFlowBuilder) Bssid(bssid string) *UserFlowBuilder { 3658 builder.bssid = bssid 3659 builder.bssidFlag = true 3660 return builder 3661 } 3662 3663 // 是否为外勤打卡 3664 // 3665 // 示例值:true 3666 func (builder *UserFlowBuilder) IsField(isField bool) *UserFlowBuilder { 3667 builder.isField = isField 3668 builder.isFieldFlag = true 3669 return builder 3670 } 3671 3672 // 是否为 Wi-Fi 打卡 3673 // 3674 // 示例值:true 3675 func (builder *UserFlowBuilder) IsWifi(isWifi bool) *UserFlowBuilder { 3676 builder.isWifi = isWifi 3677 builder.isWifiFlag = true 3678 return builder 3679 } 3680 3681 // 记录生成方式 3682 // 3683 // 示例值:0 3684 func (builder *UserFlowBuilder) Type(type_ int) *UserFlowBuilder { 3685 builder.type_ = type_ 3686 builder.typeFlag = true 3687 return builder 3688 } 3689 3690 // 打卡照片列表 3691 // 3692 // 示例值:https://time.clockin.biz/manage/download/6840389754748502021 3693 func (builder *UserFlowBuilder) PhotoUrls(photoUrls []string) *UserFlowBuilder { 3694 builder.photoUrls = photoUrls 3695 builder.photoUrlsFlag = true 3696 return builder 3697 } 3698 3699 // 打卡结果 3700 // 3701 // 示例值:Invalid 3702 func (builder *UserFlowBuilder) CheckResult(checkResult string) *UserFlowBuilder { 3703 builder.checkResult = checkResult 3704 builder.checkResultFlag = true 3705 return builder 3706 } 3707 3708 func (builder *UserFlowBuilder) Build() *UserFlow { 3709 req := &UserFlow{} 3710 if builder.userIdFlag { 3711 req.UserId = &builder.userId 3712 3713 } 3714 if builder.creatorIdFlag { 3715 req.CreatorId = &builder.creatorId 3716 3717 } 3718 if builder.locationNameFlag { 3719 req.LocationName = &builder.locationName 3720 3721 } 3722 if builder.checkTimeFlag { 3723 req.CheckTime = &builder.checkTime 3724 3725 } 3726 if builder.commentFlag { 3727 req.Comment = &builder.comment 3728 3729 } 3730 if builder.recordIdFlag { 3731 req.RecordId = &builder.recordId 3732 3733 } 3734 3735 if builder.ssidFlag { 3736 req.Ssid = &builder.ssid 3737 3738 } 3739 if builder.bssidFlag { 3740 req.Bssid = &builder.bssid 3741 3742 } 3743 if builder.isFieldFlag { 3744 req.IsField = &builder.isField 3745 3746 } 3747 if builder.isWifiFlag { 3748 req.IsWifi = &builder.isWifi 3749 3750 } 3751 if builder.typeFlag { 3752 req.Type = &builder.type_ 3753 3754 } 3755 if builder.photoUrlsFlag { 3756 req.PhotoUrls = builder.photoUrls 3757 } 3758 3759 if builder.checkResultFlag { 3760 req.CheckResult = &builder.checkResult 3761 3762 } 3763 return req 3764 } 3765 3766 type UserId struct { 3767 UserId *string `json:"user_id,omitempty"` // 3768 OpenId *string `json:"open_id,omitempty"` // 3769 UnionId *string `json:"union_id,omitempty"` // 3770 } 3771 3772 type UserIdBuilder struct { 3773 userId string // 3774 userIdFlag bool 3775 openId string // 3776 openIdFlag bool 3777 unionId string // 3778 unionIdFlag bool 3779 } 3780 3781 func NewUserIdBuilder() *UserIdBuilder { 3782 builder := &UserIdBuilder{} 3783 return builder 3784 } 3785 3786 // 3787 // 3788 // 示例值: 3789 func (builder *UserIdBuilder) UserId(userId string) *UserIdBuilder { 3790 builder.userId = userId 3791 builder.userIdFlag = true 3792 return builder 3793 } 3794 3795 // 3796 // 3797 // 示例值: 3798 func (builder *UserIdBuilder) OpenId(openId string) *UserIdBuilder { 3799 builder.openId = openId 3800 builder.openIdFlag = true 3801 return builder 3802 } 3803 3804 // 3805 // 3806 // 示例值: 3807 func (builder *UserIdBuilder) UnionId(unionId string) *UserIdBuilder { 3808 builder.unionId = unionId 3809 builder.unionIdFlag = true 3810 return builder 3811 } 3812 3813 func (builder *UserIdBuilder) Build() *UserId { 3814 req := &UserId{} 3815 if builder.userIdFlag { 3816 req.UserId = &builder.userId 3817 3818 } 3819 if builder.openIdFlag { 3820 req.OpenId = &builder.openId 3821 3822 } 3823 if builder.unionIdFlag { 3824 req.UnionId = &builder.unionId 3825 3826 } 3827 return req 3828 } 3829 3830 type UserLeave struct { 3831 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID 3832 UniqId *string `json:"uniq_id,omitempty"` // 假期类型唯一 ID,代表一种假期类型,长度小于 14 3833 Unit *int `json:"unit,omitempty"` // 假期时长单位 3834 Interval *int `json:"interval,omitempty"` // 假期时长(单位:秒),暂未开放提供,待后续提供 3835 StartTime *string `json:"start_time,omitempty"` // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 3836 EndTime *string `json:"end_time,omitempty"` // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 3837 I18nNames *I18nNames `json:"i18n_names,omitempty"` // 假期多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 3838 DefaultLocale *string `json:"default_locale,omitempty"` // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 3839 Reason *string `json:"reason,omitempty"` // 请假理由,必选字段 3840 ApprovePassTime *string `json:"approve_pass_time,omitempty"` // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 3841 ApproveApplyTime *string `json:"approve_apply_time,omitempty"` // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 3842 } 3843 3844 type UserLeaveBuilder struct { 3845 approvalId string // 审批实例 ID 3846 approvalIdFlag bool 3847 uniqId string // 假期类型唯一 ID,代表一种假期类型,长度小于 14 3848 uniqIdFlag bool 3849 unit int // 假期时长单位 3850 unitFlag bool 3851 interval int // 假期时长(单位:秒),暂未开放提供,待后续提供 3852 intervalFlag bool 3853 startTime string // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 3854 startTimeFlag bool 3855 endTime string // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 3856 endTimeFlag bool 3857 i18nNames *I18nNames // 假期多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 3858 i18nNamesFlag bool 3859 defaultLocale string // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 3860 defaultLocaleFlag bool 3861 reason string // 请假理由,必选字段 3862 reasonFlag bool 3863 approvePassTime string // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 3864 approvePassTimeFlag bool 3865 approveApplyTime string // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 3866 approveApplyTimeFlag bool 3867 } 3868 3869 func NewUserLeaveBuilder() *UserLeaveBuilder { 3870 builder := &UserLeaveBuilder{} 3871 return builder 3872 } 3873 3874 // 审批实例 ID 3875 // 3876 // 示例值:6737202939523236113 3877 func (builder *UserLeaveBuilder) ApprovalId(approvalId string) *UserLeaveBuilder { 3878 builder.approvalId = approvalId 3879 builder.approvalIdFlag = true 3880 return builder 3881 } 3882 3883 // 假期类型唯一 ID,代表一种假期类型,长度小于 14 3884 // 3885 // 示例值:6852582717813440527 3886 func (builder *UserLeaveBuilder) UniqId(uniqId string) *UserLeaveBuilder { 3887 builder.uniqId = uniqId 3888 builder.uniqIdFlag = true 3889 return builder 3890 } 3891 3892 // 假期时长单位 3893 // 3894 // 示例值:1 3895 func (builder *UserLeaveBuilder) Unit(unit int) *UserLeaveBuilder { 3896 builder.unit = unit 3897 builder.unitFlag = true 3898 return builder 3899 } 3900 3901 // 假期时长(单位:秒),暂未开放提供,待后续提供 3902 // 3903 // 示例值:28800 3904 func (builder *UserLeaveBuilder) Interval(interval int) *UserLeaveBuilder { 3905 builder.interval = interval 3906 builder.intervalFlag = true 3907 return builder 3908 } 3909 3910 // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 3911 // 3912 // 示例值:2021-01-04 09:00:00 3913 func (builder *UserLeaveBuilder) StartTime(startTime string) *UserLeaveBuilder { 3914 builder.startTime = startTime 3915 builder.startTimeFlag = true 3916 return builder 3917 } 3918 3919 // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 3920 // 3921 // 示例值:2021-01-04 19:00:00 3922 func (builder *UserLeaveBuilder) EndTime(endTime string) *UserLeaveBuilder { 3923 builder.endTime = endTime 3924 builder.endTimeFlag = true 3925 return builder 3926 } 3927 3928 // 假期多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 3929 // 3930 // 示例值: 3931 func (builder *UserLeaveBuilder) I18nNames(i18nNames *I18nNames) *UserLeaveBuilder { 3932 builder.i18nNames = i18nNames 3933 builder.i18nNamesFlag = true 3934 return builder 3935 } 3936 3937 // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 3938 // 3939 // 示例值:ch 3940 func (builder *UserLeaveBuilder) DefaultLocale(defaultLocale string) *UserLeaveBuilder { 3941 builder.defaultLocale = defaultLocale 3942 builder.defaultLocaleFlag = true 3943 return builder 3944 } 3945 3946 // 请假理由,必选字段 3947 // 3948 // 示例值:家里有事 3949 func (builder *UserLeaveBuilder) Reason(reason string) *UserLeaveBuilder { 3950 builder.reason = reason 3951 builder.reasonFlag = true 3952 return builder 3953 } 3954 3955 // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 3956 // 3957 // 示例值:2021-01-04 12:00:00 3958 func (builder *UserLeaveBuilder) ApprovePassTime(approvePassTime string) *UserLeaveBuilder { 3959 builder.approvePassTime = approvePassTime 3960 builder.approvePassTimeFlag = true 3961 return builder 3962 } 3963 3964 // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 3965 // 3966 // 示例值:2021-01-04 11:00:00 3967 func (builder *UserLeaveBuilder) ApproveApplyTime(approveApplyTime string) *UserLeaveBuilder { 3968 builder.approveApplyTime = approveApplyTime 3969 builder.approveApplyTimeFlag = true 3970 return builder 3971 } 3972 3973 func (builder *UserLeaveBuilder) Build() *UserLeave { 3974 req := &UserLeave{} 3975 if builder.approvalIdFlag { 3976 req.ApprovalId = &builder.approvalId 3977 3978 } 3979 if builder.uniqIdFlag { 3980 req.UniqId = &builder.uniqId 3981 3982 } 3983 if builder.unitFlag { 3984 req.Unit = &builder.unit 3985 3986 } 3987 if builder.intervalFlag { 3988 req.Interval = &builder.interval 3989 3990 } 3991 if builder.startTimeFlag { 3992 req.StartTime = &builder.startTime 3993 3994 } 3995 if builder.endTimeFlag { 3996 req.EndTime = &builder.endTime 3997 3998 } 3999 if builder.i18nNamesFlag { 4000 req.I18nNames = builder.i18nNames 4001 } 4002 if builder.defaultLocaleFlag { 4003 req.DefaultLocale = &builder.defaultLocale 4004 4005 } 4006 if builder.reasonFlag { 4007 req.Reason = &builder.reason 4008 4009 } 4010 if builder.approvePassTimeFlag { 4011 req.ApprovePassTime = &builder.approvePassTime 4012 4013 } 4014 if builder.approveApplyTimeFlag { 4015 req.ApproveApplyTime = &builder.approveApplyTime 4016 4017 } 4018 return req 4019 } 4020 4021 type UserOut struct { 4022 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID 4023 UniqId *string `json:"uniq_id,omitempty"` // 外出类型唯一 ID,代表一种假期类型,长度小于 14 4024 Unit *int `json:"unit,omitempty"` // 外出时长单位 4025 Interval *int `json:"interval,omitempty"` // 外出时长(单位:秒) 4026 StartTime *string `json:"start_time,omitempty"` // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4027 EndTime *string `json:"end_time,omitempty"` // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4028 I18nNames *I18nNames `json:"i18n_names,omitempty"` // 外出多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 4029 DefaultLocale *string `json:"default_locale,omitempty"` // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 4030 Reason *string `json:"reason,omitempty"` // 外出理由 4031 ApprovePassTime *string `json:"approve_pass_time,omitempty"` // 审批通过时间 4032 ApproveApplyTime *string `json:"approve_apply_time,omitempty"` // 审批申请时间 4033 } 4034 4035 type UserOutBuilder struct { 4036 approvalId string // 审批实例 ID 4037 approvalIdFlag bool 4038 uniqId string // 外出类型唯一 ID,代表一种假期类型,长度小于 14 4039 uniqIdFlag bool 4040 unit int // 外出时长单位 4041 unitFlag bool 4042 interval int // 外出时长(单位:秒) 4043 intervalFlag bool 4044 startTime string // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4045 startTimeFlag bool 4046 endTime string // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4047 endTimeFlag bool 4048 i18nNames *I18nNames // 外出多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 4049 i18nNamesFlag bool 4050 defaultLocale string // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 4051 defaultLocaleFlag bool 4052 reason string // 外出理由 4053 reasonFlag bool 4054 approvePassTime string // 审批通过时间 4055 approvePassTimeFlag bool 4056 approveApplyTime string // 审批申请时间 4057 approveApplyTimeFlag bool 4058 } 4059 4060 func NewUserOutBuilder() *UserOutBuilder { 4061 builder := &UserOutBuilder{} 4062 return builder 4063 } 4064 4065 // 审批实例 ID 4066 // 4067 // 示例值:6737202939523236113 4068 func (builder *UserOutBuilder) ApprovalId(approvalId string) *UserOutBuilder { 4069 builder.approvalId = approvalId 4070 builder.approvalIdFlag = true 4071 return builder 4072 } 4073 4074 // 外出类型唯一 ID,代表一种假期类型,长度小于 14 4075 // 4076 // 示例值:9496E43696967658A512969523E89870 4077 func (builder *UserOutBuilder) UniqId(uniqId string) *UserOutBuilder { 4078 builder.uniqId = uniqId 4079 builder.uniqIdFlag = true 4080 return builder 4081 } 4082 4083 // 外出时长单位 4084 // 4085 // 示例值:1 4086 func (builder *UserOutBuilder) Unit(unit int) *UserOutBuilder { 4087 builder.unit = unit 4088 builder.unitFlag = true 4089 return builder 4090 } 4091 4092 // 外出时长(单位:秒) 4093 // 4094 // 示例值:28800 4095 func (builder *UserOutBuilder) Interval(interval int) *UserOutBuilder { 4096 builder.interval = interval 4097 builder.intervalFlag = true 4098 return builder 4099 } 4100 4101 // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4102 // 4103 // 示例值:2021-01-04 09:00:00 4104 func (builder *UserOutBuilder) StartTime(startTime string) *UserOutBuilder { 4105 builder.startTime = startTime 4106 builder.startTimeFlag = true 4107 return builder 4108 } 4109 4110 // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4111 // 4112 // 示例值:2021-01-04 19:00:00 4113 func (builder *UserOutBuilder) EndTime(endTime string) *UserOutBuilder { 4114 builder.endTime = endTime 4115 builder.endTimeFlag = true 4116 return builder 4117 } 4118 4119 // 外出多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语 4120 // 4121 // 示例值: 4122 func (builder *UserOutBuilder) I18nNames(i18nNames *I18nNames) *UserOutBuilder { 4123 builder.i18nNames = i18nNames 4124 builder.i18nNamesFlag = true 4125 return builder 4126 } 4127 4128 // 默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 4129 // 4130 // 示例值:ch 4131 func (builder *UserOutBuilder) DefaultLocale(defaultLocale string) *UserOutBuilder { 4132 builder.defaultLocale = defaultLocale 4133 builder.defaultLocaleFlag = true 4134 return builder 4135 } 4136 4137 // 外出理由 4138 // 4139 // 示例值:外出办事 4140 func (builder *UserOutBuilder) Reason(reason string) *UserOutBuilder { 4141 builder.reason = reason 4142 builder.reasonFlag = true 4143 return builder 4144 } 4145 4146 // 审批通过时间 4147 // 4148 // 示例值:2021-01-04 12:00:00 4149 func (builder *UserOutBuilder) ApprovePassTime(approvePassTime string) *UserOutBuilder { 4150 builder.approvePassTime = approvePassTime 4151 builder.approvePassTimeFlag = true 4152 return builder 4153 } 4154 4155 // 审批申请时间 4156 // 4157 // 示例值:2021-01-04 11:00:00 4158 func (builder *UserOutBuilder) ApproveApplyTime(approveApplyTime string) *UserOutBuilder { 4159 builder.approveApplyTime = approveApplyTime 4160 builder.approveApplyTimeFlag = true 4161 return builder 4162 } 4163 4164 func (builder *UserOutBuilder) Build() *UserOut { 4165 req := &UserOut{} 4166 if builder.approvalIdFlag { 4167 req.ApprovalId = &builder.approvalId 4168 4169 } 4170 if builder.uniqIdFlag { 4171 req.UniqId = &builder.uniqId 4172 4173 } 4174 if builder.unitFlag { 4175 req.Unit = &builder.unit 4176 4177 } 4178 if builder.intervalFlag { 4179 req.Interval = &builder.interval 4180 4181 } 4182 if builder.startTimeFlag { 4183 req.StartTime = &builder.startTime 4184 4185 } 4186 if builder.endTimeFlag { 4187 req.EndTime = &builder.endTime 4188 4189 } 4190 if builder.i18nNamesFlag { 4191 req.I18nNames = builder.i18nNames 4192 } 4193 if builder.defaultLocaleFlag { 4194 req.DefaultLocale = &builder.defaultLocale 4195 4196 } 4197 if builder.reasonFlag { 4198 req.Reason = &builder.reason 4199 4200 } 4201 if builder.approvePassTimeFlag { 4202 req.ApprovePassTime = &builder.approvePassTime 4203 4204 } 4205 if builder.approveApplyTimeFlag { 4206 req.ApproveApplyTime = &builder.approveApplyTime 4207 4208 } 4209 return req 4210 } 4211 4212 type UserOvertimeWork struct { 4213 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID 4214 Duration *float64 `json:"duration,omitempty"` // 加班时长 4215 Unit *int `json:"unit,omitempty"` // 加班时长单位 4216 Category *int `json:"category,omitempty"` // 加班日期类型 4217 Type *int `json:"type,omitempty"` // 加班规则类型 4218 StartTime *string `json:"start_time,omitempty"` // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4219 EndTime *string `json:"end_time,omitempty"` // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4220 } 4221 4222 type UserOvertimeWorkBuilder struct { 4223 approvalId string // 审批实例 ID 4224 approvalIdFlag bool 4225 duration float64 // 加班时长 4226 durationFlag bool 4227 unit int // 加班时长单位 4228 unitFlag bool 4229 category int // 加班日期类型 4230 categoryFlag bool 4231 type_ int // 加班规则类型 4232 typeFlag bool 4233 startTime string // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4234 startTimeFlag bool 4235 endTime string // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4236 endTimeFlag bool 4237 } 4238 4239 func NewUserOvertimeWorkBuilder() *UserOvertimeWorkBuilder { 4240 builder := &UserOvertimeWorkBuilder{} 4241 return builder 4242 } 4243 4244 // 审批实例 ID 4245 // 4246 // 示例值:6737202939523236113 4247 func (builder *UserOvertimeWorkBuilder) ApprovalId(approvalId string) *UserOvertimeWorkBuilder { 4248 builder.approvalId = approvalId 4249 builder.approvalIdFlag = true 4250 return builder 4251 } 4252 4253 // 加班时长 4254 // 4255 // 示例值:1.5 4256 func (builder *UserOvertimeWorkBuilder) Duration(duration float64) *UserOvertimeWorkBuilder { 4257 builder.duration = duration 4258 builder.durationFlag = true 4259 return builder 4260 } 4261 4262 // 加班时长单位 4263 // 4264 // 示例值:1 4265 func (builder *UserOvertimeWorkBuilder) Unit(unit int) *UserOvertimeWorkBuilder { 4266 builder.unit = unit 4267 builder.unitFlag = true 4268 return builder 4269 } 4270 4271 // 加班日期类型 4272 // 4273 // 示例值:2 4274 func (builder *UserOvertimeWorkBuilder) Category(category int) *UserOvertimeWorkBuilder { 4275 builder.category = category 4276 builder.categoryFlag = true 4277 return builder 4278 } 4279 4280 // 加班规则类型 4281 // 4282 // 示例值:1 4283 func (builder *UserOvertimeWorkBuilder) Type(type_ int) *UserOvertimeWorkBuilder { 4284 builder.type_ = type_ 4285 builder.typeFlag = true 4286 return builder 4287 } 4288 4289 // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 4290 // 4291 // 示例值:2021-01-09 09:00:00 4292 func (builder *UserOvertimeWorkBuilder) StartTime(startTime string) *UserOvertimeWorkBuilder { 4293 builder.startTime = startTime 4294 builder.startTimeFlag = true 4295 return builder 4296 } 4297 4298 // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 4299 // 4300 // 示例值:2021-01-10 13:00:00 4301 func (builder *UserOvertimeWorkBuilder) EndTime(endTime string) *UserOvertimeWorkBuilder { 4302 builder.endTime = endTime 4303 builder.endTimeFlag = true 4304 return builder 4305 } 4306 4307 func (builder *UserOvertimeWorkBuilder) Build() *UserOvertimeWork { 4308 req := &UserOvertimeWork{} 4309 if builder.approvalIdFlag { 4310 req.ApprovalId = &builder.approvalId 4311 4312 } 4313 if builder.durationFlag { 4314 req.Duration = &builder.duration 4315 4316 } 4317 if builder.unitFlag { 4318 req.Unit = &builder.unit 4319 4320 } 4321 if builder.categoryFlag { 4322 req.Category = &builder.category 4323 4324 } 4325 if builder.typeFlag { 4326 req.Type = &builder.type_ 4327 4328 } 4329 if builder.startTimeFlag { 4330 req.StartTime = &builder.startTime 4331 4332 } 4333 if builder.endTimeFlag { 4334 req.EndTime = &builder.endTime 4335 4336 } 4337 return req 4338 } 4339 4340 type UserSetting struct { 4341 UserId *string `json:"user_id,omitempty"` // 用户 ID 4342 FaceKey *string `json:"face_key,omitempty"` // 人脸照片文件 ID,获取方式:[文件上传](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/file/upload) 4343 FaceKeyUpdateTime *string `json:"face_key_update_time,omitempty"` // 人脸照片更新时间,精确到秒的时间戳 4344 } 4345 4346 type UserSettingBuilder struct { 4347 userId string // 用户 ID 4348 userIdFlag bool 4349 faceKey string // 人脸照片文件 ID,获取方式:[文件上传](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/file/upload) 4350 faceKeyFlag bool 4351 faceKeyUpdateTime string // 人脸照片更新时间,精确到秒的时间戳 4352 faceKeyUpdateTimeFlag bool 4353 } 4354 4355 func NewUserSettingBuilder() *UserSettingBuilder { 4356 builder := &UserSettingBuilder{} 4357 return builder 4358 } 4359 4360 // 用户 ID 4361 // 4362 // 示例值:abd754f7 4363 func (builder *UserSettingBuilder) UserId(userId string) *UserSettingBuilder { 4364 builder.userId = userId 4365 builder.userIdFlag = true 4366 return builder 4367 } 4368 4369 // 人脸照片文件 ID,获取方式:[文件上传](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/file/upload) 4370 // 4371 // 示例值:xxxxxb306842b1c189bc5212eefxxxxx 4372 func (builder *UserSettingBuilder) FaceKey(faceKey string) *UserSettingBuilder { 4373 builder.faceKey = faceKey 4374 builder.faceKeyFlag = true 4375 return builder 4376 } 4377 4378 // 人脸照片更新时间,精确到秒的时间戳 4379 // 4380 // 示例值:1625681917 4381 func (builder *UserSettingBuilder) FaceKeyUpdateTime(faceKeyUpdateTime string) *UserSettingBuilder { 4382 builder.faceKeyUpdateTime = faceKeyUpdateTime 4383 builder.faceKeyUpdateTimeFlag = true 4384 return builder 4385 } 4386 4387 func (builder *UserSettingBuilder) Build() *UserSetting { 4388 req := &UserSetting{} 4389 if builder.userIdFlag { 4390 req.UserId = &builder.userId 4391 4392 } 4393 if builder.faceKeyFlag { 4394 req.FaceKey = &builder.faceKey 4395 4396 } 4397 if builder.faceKeyUpdateTimeFlag { 4398 req.FaceKeyUpdateTime = &builder.faceKeyUpdateTime 4399 4400 } 4401 return req 4402 } 4403 4404 type UserStatsData struct { 4405 Name *string `json:"name,omitempty"` // 用户姓名 4406 UserId *string `json:"user_id,omitempty"` // 用户 ID 4407 Datas []*UserStatsDataCell `json:"datas,omitempty"` // 用户的统计数据 4408 } 4409 4410 type UserStatsDataBuilder struct { 4411 name string // 用户姓名 4412 nameFlag bool 4413 userId string // 用户 ID 4414 userIdFlag bool 4415 datas []*UserStatsDataCell // 用户的统计数据 4416 datasFlag bool 4417 } 4418 4419 func NewUserStatsDataBuilder() *UserStatsDataBuilder { 4420 builder := &UserStatsDataBuilder{} 4421 return builder 4422 } 4423 4424 // 用户姓名 4425 // 4426 // 示例值:小李 4427 func (builder *UserStatsDataBuilder) Name(name string) *UserStatsDataBuilder { 4428 builder.name = name 4429 builder.nameFlag = true 4430 return builder 4431 } 4432 4433 // 用户 ID 4434 // 4435 // 示例值:ec8ddg56 4436 func (builder *UserStatsDataBuilder) UserId(userId string) *UserStatsDataBuilder { 4437 builder.userId = userId 4438 builder.userIdFlag = true 4439 return builder 4440 } 4441 4442 // 用户的统计数据 4443 // 4444 // 示例值: 4445 func (builder *UserStatsDataBuilder) Datas(datas []*UserStatsDataCell) *UserStatsDataBuilder { 4446 builder.datas = datas 4447 builder.datasFlag = true 4448 return builder 4449 } 4450 4451 func (builder *UserStatsDataBuilder) Build() *UserStatsData { 4452 req := &UserStatsData{} 4453 if builder.nameFlag { 4454 req.Name = &builder.name 4455 4456 } 4457 if builder.userIdFlag { 4458 req.UserId = &builder.userId 4459 4460 } 4461 if builder.datasFlag { 4462 req.Datas = builder.datas 4463 } 4464 return req 4465 } 4466 4467 type UserStatsDataCell struct { 4468 Code *string `json:"code,omitempty"` // 字段编号 4469 Value *string `json:"value,omitempty"` // 数据值 4470 Features []*UserStatsDataFeature `json:"features,omitempty"` // 数据属性 4471 Title *string `json:"title,omitempty"` // 字段标题 4472 } 4473 4474 type UserStatsDataCellBuilder struct { 4475 code string // 字段编号 4476 codeFlag bool 4477 value string // 数据值 4478 valueFlag bool 4479 features []*UserStatsDataFeature // 数据属性 4480 featuresFlag bool 4481 title string // 字段标题 4482 titleFlag bool 4483 } 4484 4485 func NewUserStatsDataCellBuilder() *UserStatsDataCellBuilder { 4486 builder := &UserStatsDataCellBuilder{} 4487 return builder 4488 } 4489 4490 // 字段编号 4491 // 4492 // 示例值:50102 4493 func (builder *UserStatsDataCellBuilder) Code(code string) *UserStatsDataCellBuilder { 4494 builder.code = code 4495 builder.codeFlag = true 4496 return builder 4497 } 4498 4499 // 数据值 4500 // 4501 // 示例值:无需打卡(-), 无需打卡(-) 4502 func (builder *UserStatsDataCellBuilder) Value(value string) *UserStatsDataCellBuilder { 4503 builder.value = value 4504 builder.valueFlag = true 4505 return builder 4506 } 4507 4508 // 数据属性 4509 // 4510 // 示例值: 4511 func (builder *UserStatsDataCellBuilder) Features(features []*UserStatsDataFeature) *UserStatsDataCellBuilder { 4512 builder.features = features 4513 builder.featuresFlag = true 4514 return builder 4515 } 4516 4517 // 字段标题 4518 // 4519 // 示例值:姓名 4520 func (builder *UserStatsDataCellBuilder) Title(title string) *UserStatsDataCellBuilder { 4521 builder.title = title 4522 builder.titleFlag = true 4523 return builder 4524 } 4525 4526 func (builder *UserStatsDataCellBuilder) Build() *UserStatsDataCell { 4527 req := &UserStatsDataCell{} 4528 if builder.codeFlag { 4529 req.Code = &builder.code 4530 4531 } 4532 if builder.valueFlag { 4533 req.Value = &builder.value 4534 4535 } 4536 if builder.featuresFlag { 4537 req.Features = builder.features 4538 } 4539 if builder.titleFlag { 4540 req.Title = &builder.title 4541 4542 } 4543 return req 4544 } 4545 4546 type UserStatsDataFeature struct { 4547 Key *string `json:"key,omitempty"` // 统计数据列附加属性的名称 4548 Value *string `json:"value,omitempty"` // 统计数据列附加属性的值 4549 } 4550 4551 type UserStatsDataFeatureBuilder struct { 4552 key string // 统计数据列附加属性的名称 4553 keyFlag bool 4554 value string // 统计数据列附加属性的值 4555 valueFlag bool 4556 } 4557 4558 func NewUserStatsDataFeatureBuilder() *UserStatsDataFeatureBuilder { 4559 builder := &UserStatsDataFeatureBuilder{} 4560 return builder 4561 } 4562 4563 // 统计数据列附加属性的名称 4564 // 4565 // 示例值:Abnormal 4566 func (builder *UserStatsDataFeatureBuilder) Key(key string) *UserStatsDataFeatureBuilder { 4567 builder.key = key 4568 builder.keyFlag = true 4569 return builder 4570 } 4571 4572 // 统计数据列附加属性的值 4573 // 4574 // 示例值:false 4575 func (builder *UserStatsDataFeatureBuilder) Value(value string) *UserStatsDataFeatureBuilder { 4576 builder.value = value 4577 builder.valueFlag = true 4578 return builder 4579 } 4580 4581 func (builder *UserStatsDataFeatureBuilder) Build() *UserStatsDataFeature { 4582 req := &UserStatsDataFeature{} 4583 if builder.keyFlag { 4584 req.Key = &builder.key 4585 4586 } 4587 if builder.valueFlag { 4588 req.Value = &builder.value 4589 4590 } 4591 return req 4592 } 4593 4594 type UserStatsField struct { 4595 StatsType *string `json:"stats_type,omitempty"` // 统计类型 4596 UserId *string `json:"user_id,omitempty"` // 用户 ID 4597 Fields []*Field `json:"fields,omitempty"` // 字段列表 4598 } 4599 4600 type UserStatsFieldBuilder struct { 4601 statsType string // 统计类型 4602 statsTypeFlag bool 4603 userId string // 用户 ID 4604 userIdFlag bool 4605 fields []*Field // 字段列表 4606 fieldsFlag bool 4607 } 4608 4609 func NewUserStatsFieldBuilder() *UserStatsFieldBuilder { 4610 builder := &UserStatsFieldBuilder{} 4611 return builder 4612 } 4613 4614 // 统计类型 4615 // 4616 // 示例值: 4617 func (builder *UserStatsFieldBuilder) StatsType(statsType string) *UserStatsFieldBuilder { 4618 builder.statsType = statsType 4619 builder.statsTypeFlag = true 4620 return builder 4621 } 4622 4623 // 用户 ID 4624 // 4625 // 示例值: 4626 func (builder *UserStatsFieldBuilder) UserId(userId string) *UserStatsFieldBuilder { 4627 builder.userId = userId 4628 builder.userIdFlag = true 4629 return builder 4630 } 4631 4632 // 字段列表 4633 // 4634 // 示例值: 4635 func (builder *UserStatsFieldBuilder) Fields(fields []*Field) *UserStatsFieldBuilder { 4636 builder.fields = fields 4637 builder.fieldsFlag = true 4638 return builder 4639 } 4640 4641 func (builder *UserStatsFieldBuilder) Build() *UserStatsField { 4642 req := &UserStatsField{} 4643 if builder.statsTypeFlag { 4644 req.StatsType = &builder.statsType 4645 4646 } 4647 if builder.userIdFlag { 4648 req.UserId = &builder.userId 4649 4650 } 4651 if builder.fieldsFlag { 4652 req.Fields = builder.fields 4653 } 4654 return req 4655 } 4656 4657 type UserStatsView struct { 4658 ViewId *string `json:"view_id,omitempty"` // 视图 ID 4659 StatsType *string `json:"stats_type,omitempty"` // 视图类型 4660 UserId *string `json:"user_id,omitempty"` // 查询用户id,同【查询统计数据】、【查询统计设置】user_id 4661 Items []*Item `json:"items,omitempty"` // 用户设置字段 4662 } 4663 4664 type UserStatsViewBuilder struct { 4665 viewId string // 视图 ID 4666 viewIdFlag bool 4667 statsType string // 视图类型 4668 statsTypeFlag bool 4669 userId string // 查询用户id,同【查询统计数据】、【查询统计设置】user_id 4670 userIdFlag bool 4671 items []*Item // 用户设置字段 4672 itemsFlag bool 4673 } 4674 4675 func NewUserStatsViewBuilder() *UserStatsViewBuilder { 4676 builder := &UserStatsViewBuilder{} 4677 return builder 4678 } 4679 4680 // 视图 ID 4681 // 4682 // 示例值:TmpZNU5qTTJORFF6T1RnNU5UTTNOakV6TWl0dGIyNTBhQT09 4683 func (builder *UserStatsViewBuilder) ViewId(viewId string) *UserStatsViewBuilder { 4684 builder.viewId = viewId 4685 builder.viewIdFlag = true 4686 return builder 4687 } 4688 4689 // 视图类型 4690 // 4691 // 示例值:month 4692 func (builder *UserStatsViewBuilder) StatsType(statsType string) *UserStatsViewBuilder { 4693 builder.statsType = statsType 4694 builder.statsTypeFlag = true 4695 return builder 4696 } 4697 4698 // 查询用户id,同【查询统计数据】、【查询统计设置】user_id 4699 // 4700 // 示例值:ec8ddg56 4701 func (builder *UserStatsViewBuilder) UserId(userId string) *UserStatsViewBuilder { 4702 builder.userId = userId 4703 builder.userIdFlag = true 4704 return builder 4705 } 4706 4707 // 用户设置字段 4708 // 4709 // 示例值: 4710 func (builder *UserStatsViewBuilder) Items(items []*Item) *UserStatsViewBuilder { 4711 builder.items = items 4712 builder.itemsFlag = true 4713 return builder 4714 } 4715 4716 func (builder *UserStatsViewBuilder) Build() *UserStatsView { 4717 req := &UserStatsView{} 4718 if builder.viewIdFlag { 4719 req.ViewId = &builder.viewId 4720 4721 } 4722 if builder.statsTypeFlag { 4723 req.StatsType = &builder.statsType 4724 4725 } 4726 if builder.userIdFlag { 4727 req.UserId = &builder.userId 4728 4729 } 4730 if builder.itemsFlag { 4731 req.Items = builder.items 4732 } 4733 return req 4734 } 4735 4736 type UserTask struct { 4737 ResultId *string `json:"result_id,omitempty"` // 打卡记录 ID 4738 UserId *string `json:"user_id,omitempty"` // 用户 ID 4739 EmployeeName *string `json:"employee_name,omitempty"` // 用户姓名 4740 Day *int `json:"day,omitempty"` // 日期 4741 GroupId *string `json:"group_id,omitempty"` // 考勤组 ID 4742 ShiftId *string `json:"shift_id,omitempty"` // 班次 ID 4743 Records []*TaskResult `json:"records,omitempty"` // 用户考勤记录 4744 } 4745 4746 type UserTaskBuilder struct { 4747 resultId string // 打卡记录 ID 4748 resultIdFlag bool 4749 userId string // 用户 ID 4750 userIdFlag bool 4751 employeeName string // 用户姓名 4752 employeeNameFlag bool 4753 day int // 日期 4754 dayFlag bool 4755 groupId string // 考勤组 ID 4756 groupIdFlag bool 4757 shiftId string // 班次 ID 4758 shiftIdFlag bool 4759 records []*TaskResult // 用户考勤记录 4760 recordsFlag bool 4761 } 4762 4763 func NewUserTaskBuilder() *UserTaskBuilder { 4764 builder := &UserTaskBuilder{} 4765 return builder 4766 } 4767 4768 // 打卡记录 ID 4769 // 4770 // 示例值:6709359313699356941 4771 func (builder *UserTaskBuilder) ResultId(resultId string) *UserTaskBuilder { 4772 builder.resultId = resultId 4773 builder.resultIdFlag = true 4774 return builder 4775 } 4776 4777 // 用户 ID 4778 // 4779 // 示例值:abd754f7 4780 func (builder *UserTaskBuilder) UserId(userId string) *UserTaskBuilder { 4781 builder.userId = userId 4782 builder.userIdFlag = true 4783 return builder 4784 } 4785 4786 // 用户姓名 4787 // 4788 // 示例值:张三 4789 func (builder *UserTaskBuilder) EmployeeName(employeeName string) *UserTaskBuilder { 4790 builder.employeeName = employeeName 4791 builder.employeeNameFlag = true 4792 return builder 4793 } 4794 4795 // 日期 4796 // 4797 // 示例值:20190819 4798 func (builder *UserTaskBuilder) Day(day int) *UserTaskBuilder { 4799 builder.day = day 4800 builder.dayFlag = true 4801 return builder 4802 } 4803 4804 // 考勤组 ID 4805 // 4806 // 示例值:6737202939523236110 4807 func (builder *UserTaskBuilder) GroupId(groupId string) *UserTaskBuilder { 4808 builder.groupId = groupId 4809 builder.groupIdFlag = true 4810 return builder 4811 } 4812 4813 // 班次 ID 4814 // 4815 // 示例值:6753520403404030215 4816 func (builder *UserTaskBuilder) ShiftId(shiftId string) *UserTaskBuilder { 4817 builder.shiftId = shiftId 4818 builder.shiftIdFlag = true 4819 return builder 4820 } 4821 4822 // 用户考勤记录 4823 // 4824 // 示例值: 4825 func (builder *UserTaskBuilder) Records(records []*TaskResult) *UserTaskBuilder { 4826 builder.records = records 4827 builder.recordsFlag = true 4828 return builder 4829 } 4830 4831 func (builder *UserTaskBuilder) Build() *UserTask { 4832 req := &UserTask{} 4833 if builder.resultIdFlag { 4834 req.ResultId = &builder.resultId 4835 4836 } 4837 if builder.userIdFlag { 4838 req.UserId = &builder.userId 4839 4840 } 4841 if builder.employeeNameFlag { 4842 req.EmployeeName = &builder.employeeName 4843 4844 } 4845 if builder.dayFlag { 4846 req.Day = &builder.day 4847 4848 } 4849 if builder.groupIdFlag { 4850 req.GroupId = &builder.groupId 4851 4852 } 4853 if builder.shiftIdFlag { 4854 req.ShiftId = &builder.shiftId 4855 4856 } 4857 if builder.recordsFlag { 4858 req.Records = builder.records 4859 } 4860 return req 4861 } 4862 4863 type UserTaskRemedy struct { 4864 UserId *string `json:"user_id,omitempty"` // 用户 ID 4865 RemedyDate *int `json:"remedy_date,omitempty"` // 补卡日期 4866 PunchNo *int `json:"punch_no,omitempty"` // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班,自由班制填 0 4867 WorkType *int `json:"work_type,omitempty"` // 上班 / 下班,1:上班,2:下班,自由班制填 0 4868 ApprovalId *string `json:"approval_id,omitempty"` // 审批 ID 4869 RemedyTime *string `json:"remedy_time,omitempty"` // 补卡时间,时间格式为 yyyy-MM-dd HH:mm 4870 Status *int `json:"status,omitempty"` // 补卡状态(默认为审批中) 4871 Reason *string `json:"reason,omitempty"` // 补卡原因 4872 Time *string `json:"time,omitempty"` // 补卡时间,精确到秒的时间戳 4873 TimeZone *string `json:"time_zone,omitempty"` // 补卡时考勤组时区 4874 CreateTime *string `json:"create_time,omitempty"` // 补卡发起时间,精确到秒的时间戳 4875 UpdateTime *string `json:"update_time,omitempty"` // 补卡状态更新时间,精确到秒的时间戳 4876 } 4877 4878 type UserTaskRemedyBuilder struct { 4879 userId string // 用户 ID 4880 userIdFlag bool 4881 remedyDate int // 补卡日期 4882 remedyDateFlag bool 4883 punchNo int // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班,自由班制填 0 4884 punchNoFlag bool 4885 workType int // 上班 / 下班,1:上班,2:下班,自由班制填 0 4886 workTypeFlag bool 4887 approvalId string // 审批 ID 4888 approvalIdFlag bool 4889 remedyTime string // 补卡时间,时间格式为 yyyy-MM-dd HH:mm 4890 remedyTimeFlag bool 4891 status int // 补卡状态(默认为审批中) 4892 statusFlag bool 4893 reason string // 补卡原因 4894 reasonFlag bool 4895 time string // 补卡时间,精确到秒的时间戳 4896 timeFlag bool 4897 timeZone string // 补卡时考勤组时区 4898 timeZoneFlag bool 4899 createTime string // 补卡发起时间,精确到秒的时间戳 4900 createTimeFlag bool 4901 updateTime string // 补卡状态更新时间,精确到秒的时间戳 4902 updateTimeFlag bool 4903 } 4904 4905 func NewUserTaskRemedyBuilder() *UserTaskRemedyBuilder { 4906 builder := &UserTaskRemedyBuilder{} 4907 return builder 4908 } 4909 4910 // 用户 ID 4911 // 4912 // 示例值:abd754f7 4913 func (builder *UserTaskRemedyBuilder) UserId(userId string) *UserTaskRemedyBuilder { 4914 builder.userId = userId 4915 builder.userIdFlag = true 4916 return builder 4917 } 4918 4919 // 补卡日期 4920 // 4921 // 示例值:20210701 4922 func (builder *UserTaskRemedyBuilder) RemedyDate(remedyDate int) *UserTaskRemedyBuilder { 4923 builder.remedyDate = remedyDate 4924 builder.remedyDateFlag = true 4925 return builder 4926 } 4927 4928 // 第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班,自由班制填 0 4929 // 4930 // 示例值:0 4931 func (builder *UserTaskRemedyBuilder) PunchNo(punchNo int) *UserTaskRemedyBuilder { 4932 builder.punchNo = punchNo 4933 builder.punchNoFlag = true 4934 return builder 4935 } 4936 4937 // 上班 / 下班,1:上班,2:下班,自由班制填 0 4938 // 4939 // 示例值:1 4940 func (builder *UserTaskRemedyBuilder) WorkType(workType int) *UserTaskRemedyBuilder { 4941 builder.workType = workType 4942 builder.workTypeFlag = true 4943 return builder 4944 } 4945 4946 // 审批 ID 4947 // 4948 // 示例值:6737202939523236113 4949 func (builder *UserTaskRemedyBuilder) ApprovalId(approvalId string) *UserTaskRemedyBuilder { 4950 builder.approvalId = approvalId 4951 builder.approvalIdFlag = true 4952 return builder 4953 } 4954 4955 // 补卡时间,时间格式为 yyyy-MM-dd HH:mm 4956 // 4957 // 示例值:2021-07-01 08:00 4958 func (builder *UserTaskRemedyBuilder) RemedyTime(remedyTime string) *UserTaskRemedyBuilder { 4959 builder.remedyTime = remedyTime 4960 builder.remedyTimeFlag = true 4961 return builder 4962 } 4963 4964 // 补卡状态(默认为审批中) 4965 // 4966 // 示例值:2 4967 func (builder *UserTaskRemedyBuilder) Status(status int) *UserTaskRemedyBuilder { 4968 builder.status = status 4969 builder.statusFlag = true 4970 return builder 4971 } 4972 4973 // 补卡原因 4974 // 4975 // 示例值:忘记打卡 4976 func (builder *UserTaskRemedyBuilder) Reason(reason string) *UserTaskRemedyBuilder { 4977 builder.reason = reason 4978 builder.reasonFlag = true 4979 return builder 4980 } 4981 4982 // 补卡时间,精确到秒的时间戳 4983 // 4984 // 示例值:1611476284 4985 func (builder *UserTaskRemedyBuilder) Time(time string) *UserTaskRemedyBuilder { 4986 builder.time = time 4987 builder.timeFlag = true 4988 return builder 4989 } 4990 4991 // 补卡时考勤组时区 4992 // 4993 // 示例值:Asia/Shanghai 4994 func (builder *UserTaskRemedyBuilder) TimeZone(timeZone string) *UserTaskRemedyBuilder { 4995 builder.timeZone = timeZone 4996 builder.timeZoneFlag = true 4997 return builder 4998 } 4999 5000 // 补卡发起时间,精确到秒的时间戳 5001 // 5002 // 示例值:1611476284 5003 func (builder *UserTaskRemedyBuilder) CreateTime(createTime string) *UserTaskRemedyBuilder { 5004 builder.createTime = createTime 5005 builder.createTimeFlag = true 5006 return builder 5007 } 5008 5009 // 补卡状态更新时间,精确到秒的时间戳 5010 // 5011 // 示例值:1611476284 5012 func (builder *UserTaskRemedyBuilder) UpdateTime(updateTime string) *UserTaskRemedyBuilder { 5013 builder.updateTime = updateTime 5014 builder.updateTimeFlag = true 5015 return builder 5016 } 5017 5018 func (builder *UserTaskRemedyBuilder) Build() *UserTaskRemedy { 5019 req := &UserTaskRemedy{} 5020 if builder.userIdFlag { 5021 req.UserId = &builder.userId 5022 5023 } 5024 if builder.remedyDateFlag { 5025 req.RemedyDate = &builder.remedyDate 5026 5027 } 5028 if builder.punchNoFlag { 5029 req.PunchNo = &builder.punchNo 5030 5031 } 5032 if builder.workTypeFlag { 5033 req.WorkType = &builder.workType 5034 5035 } 5036 if builder.approvalIdFlag { 5037 req.ApprovalId = &builder.approvalId 5038 5039 } 5040 if builder.remedyTimeFlag { 5041 req.RemedyTime = &builder.remedyTime 5042 5043 } 5044 if builder.statusFlag { 5045 req.Status = &builder.status 5046 5047 } 5048 if builder.reasonFlag { 5049 req.Reason = &builder.reason 5050 5051 } 5052 if builder.timeFlag { 5053 req.Time = &builder.time 5054 5055 } 5056 if builder.timeZoneFlag { 5057 req.TimeZone = &builder.timeZone 5058 5059 } 5060 if builder.createTimeFlag { 5061 req.CreateTime = &builder.createTime 5062 5063 } 5064 if builder.updateTimeFlag { 5065 req.UpdateTime = &builder.updateTime 5066 5067 } 5068 return req 5069 } 5070 5071 type UserTrip struct { 5072 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID 5073 StartTime *string `json:"start_time,omitempty"` // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 5074 EndTime *string `json:"end_time,omitempty"` // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 5075 Reason *string `json:"reason,omitempty"` // 出差理由 5076 ApprovePassTime *string `json:"approve_pass_time,omitempty"` // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 5077 ApproveApplyTime *string `json:"approve_apply_time,omitempty"` // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 5078 } 5079 5080 type UserTripBuilder struct { 5081 approvalId string // 审批实例 ID 5082 approvalIdFlag bool 5083 startTime string // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 5084 startTimeFlag bool 5085 endTime string // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 5086 endTimeFlag bool 5087 reason string // 出差理由 5088 reasonFlag bool 5089 approvePassTime string // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 5090 approvePassTimeFlag bool 5091 approveApplyTime string // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 5092 approveApplyTimeFlag bool 5093 } 5094 5095 func NewUserTripBuilder() *UserTripBuilder { 5096 builder := &UserTripBuilder{} 5097 return builder 5098 } 5099 5100 // 审批实例 ID 5101 // 5102 // 示例值:6737202939523236113 5103 func (builder *UserTripBuilder) ApprovalId(approvalId string) *UserTripBuilder { 5104 builder.approvalId = approvalId 5105 builder.approvalIdFlag = true 5106 return builder 5107 } 5108 5109 // 开始时间,时间格式为 yyyy-MM-dd HH:mm:ss 5110 // 5111 // 示例值:2021-01-04 09:00:00 5112 func (builder *UserTripBuilder) StartTime(startTime string) *UserTripBuilder { 5113 builder.startTime = startTime 5114 builder.startTimeFlag = true 5115 return builder 5116 } 5117 5118 // 结束时间,时间格式为 yyyy-MM-dd HH:mm:ss 5119 // 5120 // 示例值:2021-01-04 19:00:00 5121 func (builder *UserTripBuilder) EndTime(endTime string) *UserTripBuilder { 5122 builder.endTime = endTime 5123 builder.endTimeFlag = true 5124 return builder 5125 } 5126 5127 // 出差理由 5128 // 5129 // 示例值:培训 5130 func (builder *UserTripBuilder) Reason(reason string) *UserTripBuilder { 5131 builder.reason = reason 5132 builder.reasonFlag = true 5133 return builder 5134 } 5135 5136 // 审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss 5137 // 5138 // 示例值:2021-01-04 12:00:00 5139 func (builder *UserTripBuilder) ApprovePassTime(approvePassTime string) *UserTripBuilder { 5140 builder.approvePassTime = approvePassTime 5141 builder.approvePassTimeFlag = true 5142 return builder 5143 } 5144 5145 // 审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss 5146 // 5147 // 示例值:2021-01-04 11:00:00 5148 func (builder *UserTripBuilder) ApproveApplyTime(approveApplyTime string) *UserTripBuilder { 5149 builder.approveApplyTime = approveApplyTime 5150 builder.approveApplyTimeFlag = true 5151 return builder 5152 } 5153 5154 func (builder *UserTripBuilder) Build() *UserTrip { 5155 req := &UserTrip{} 5156 if builder.approvalIdFlag { 5157 req.ApprovalId = &builder.approvalId 5158 5159 } 5160 if builder.startTimeFlag { 5161 req.StartTime = &builder.startTime 5162 5163 } 5164 if builder.endTimeFlag { 5165 req.EndTime = &builder.endTime 5166 5167 } 5168 if builder.reasonFlag { 5169 req.Reason = &builder.reason 5170 5171 } 5172 if builder.approvePassTimeFlag { 5173 req.ApprovePassTime = &builder.approvePassTime 5174 5175 } 5176 if builder.approveApplyTimeFlag { 5177 req.ApproveApplyTime = &builder.approveApplyTime 5178 5179 } 5180 return req 5181 } 5182 5183 type WifiInfo struct { 5184 Status *int `json:"status,omitempty"` // 5185 } 5186 5187 type WifiInfoBuilder struct { 5188 status int // 5189 statusFlag bool 5190 } 5191 5192 func NewWifiInfoBuilder() *WifiInfoBuilder { 5193 builder := &WifiInfoBuilder{} 5194 return builder 5195 } 5196 5197 // 5198 // 5199 // 示例值: 5200 func (builder *WifiInfoBuilder) Status(status int) *WifiInfoBuilder { 5201 builder.status = status 5202 builder.statusFlag = true 5203 return builder 5204 } 5205 5206 func (builder *WifiInfoBuilder) Build() *WifiInfo { 5207 req := &WifiInfo{} 5208 if builder.statusFlag { 5209 req.Status = &builder.status 5210 5211 } 5212 return req 5213 } 5214 5215 type WifiInfoEvent struct { 5216 Ssid *string `json:"ssid,omitempty"` // 5217 Bssid *string `json:"bssid,omitempty"` // 5218 Lastssid *string `json:"lastssid,omitempty"` // 5219 Lastbssid *string `json:"lastbssid,omitempty"` // 5220 } 5221 5222 type WifiInfoEventBuilder struct { 5223 ssid string // 5224 ssidFlag bool 5225 bssid string // 5226 bssidFlag bool 5227 lastssid string // 5228 lastssidFlag bool 5229 lastbssid string // 5230 lastbssidFlag bool 5231 } 5232 5233 func NewWifiInfoEventBuilder() *WifiInfoEventBuilder { 5234 builder := &WifiInfoEventBuilder{} 5235 return builder 5236 } 5237 5238 // 5239 // 5240 // 示例值: 5241 func (builder *WifiInfoEventBuilder) Ssid(ssid string) *WifiInfoEventBuilder { 5242 builder.ssid = ssid 5243 builder.ssidFlag = true 5244 return builder 5245 } 5246 5247 // 5248 // 5249 // 示例值: 5250 func (builder *WifiInfoEventBuilder) Bssid(bssid string) *WifiInfoEventBuilder { 5251 builder.bssid = bssid 5252 builder.bssidFlag = true 5253 return builder 5254 } 5255 5256 // 5257 // 5258 // 示例值: 5259 func (builder *WifiInfoEventBuilder) Lastssid(lastssid string) *WifiInfoEventBuilder { 5260 builder.lastssid = lastssid 5261 builder.lastssidFlag = true 5262 return builder 5263 } 5264 5265 // 5266 // 5267 // 示例值: 5268 func (builder *WifiInfoEventBuilder) Lastbssid(lastbssid string) *WifiInfoEventBuilder { 5269 builder.lastbssid = lastbssid 5270 builder.lastbssidFlag = true 5271 return builder 5272 } 5273 5274 func (builder *WifiInfoEventBuilder) Build() *WifiInfoEvent { 5275 req := &WifiInfoEvent{} 5276 if builder.ssidFlag { 5277 req.Ssid = &builder.ssid 5278 5279 } 5280 if builder.bssidFlag { 5281 req.Bssid = &builder.bssid 5282 5283 } 5284 if builder.lastssidFlag { 5285 req.Lastssid = &builder.lastssid 5286 5287 } 5288 if builder.lastbssidFlag { 5289 req.Lastbssid = &builder.lastbssid 5290 5291 } 5292 return req 5293 } 5294 5295 type ProcessApprovalInfoReqBodyBuilder struct { 5296 approvalId string // 审批实例 ID,获取方式:1)[获取审批通过数据](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/query) 2)[写入审批结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/create) 3)[通知补卡审批发起(补卡情况下)](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task_remedy/create) 5297 approvalIdFlag bool 5298 approvalType string // 审批类型,leave:请假,out:外出,overtime:加班,trip:出差,remedy:补卡 5299 approvalTypeFlag bool 5300 status int // 审批状态,1:不通过,2:通过,4:撤销 5301 statusFlag bool 5302 } 5303 5304 func NewProcessApprovalInfoReqBodyBuilder() *ProcessApprovalInfoReqBodyBuilder { 5305 builder := &ProcessApprovalInfoReqBodyBuilder{} 5306 return builder 5307 } 5308 5309 // 审批实例 ID,获取方式:1)[获取审批通过数据](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/query) 2)[写入审批结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/create) 3)[通知补卡审批发起(补卡情况下)](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task_remedy/create) 5310 // 5311 //示例值:6737202939523236113 5312 func (builder *ProcessApprovalInfoReqBodyBuilder) ApprovalId(approvalId string) *ProcessApprovalInfoReqBodyBuilder { 5313 builder.approvalId = approvalId 5314 builder.approvalIdFlag = true 5315 return builder 5316 } 5317 5318 // 审批类型,leave:请假,out:外出,overtime:加班,trip:出差,remedy:补卡 5319 // 5320 //示例值:remedy 5321 func (builder *ProcessApprovalInfoReqBodyBuilder) ApprovalType(approvalType string) *ProcessApprovalInfoReqBodyBuilder { 5322 builder.approvalType = approvalType 5323 builder.approvalTypeFlag = true 5324 return builder 5325 } 5326 5327 // 审批状态,1:不通过,2:通过,4:撤销 5328 // 5329 //示例值:4 5330 func (builder *ProcessApprovalInfoReqBodyBuilder) Status(status int) *ProcessApprovalInfoReqBodyBuilder { 5331 builder.status = status 5332 builder.statusFlag = true 5333 return builder 5334 } 5335 5336 func (builder *ProcessApprovalInfoReqBodyBuilder) Build() *ProcessApprovalInfoReqBody { 5337 req := &ProcessApprovalInfoReqBody{} 5338 if builder.approvalIdFlag { 5339 req.ApprovalId = &builder.approvalId 5340 } 5341 if builder.approvalTypeFlag { 5342 req.ApprovalType = &builder.approvalType 5343 } 5344 if builder.statusFlag { 5345 req.Status = &builder.status 5346 } 5347 return req 5348 } 5349 5350 type ProcessApprovalInfoPathReqBodyBuilder struct { 5351 approvalId string // 审批实例 ID,获取方式:1)[获取审批通过数据](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/query) 2)[写入审批结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/create) 3)[通知补卡审批发起(补卡情况下)](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task_remedy/create) 5352 approvalIdFlag bool 5353 approvalType string // 审批类型,leave:请假,out:外出,overtime:加班,trip:出差,remedy:补卡 5354 approvalTypeFlag bool 5355 status int // 审批状态,1:不通过,2:通过,4:撤销 5356 statusFlag bool 5357 } 5358 5359 func NewProcessApprovalInfoPathReqBodyBuilder() *ProcessApprovalInfoPathReqBodyBuilder { 5360 builder := &ProcessApprovalInfoPathReqBodyBuilder{} 5361 return builder 5362 } 5363 5364 // 审批实例 ID,获取方式:1)[获取审批通过数据](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/query) 2)[写入审批结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/create) 3)[通知补卡审批发起(补卡情况下)](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task_remedy/create) 5365 // 5366 // 示例值:6737202939523236113 5367 func (builder *ProcessApprovalInfoPathReqBodyBuilder) ApprovalId(approvalId string) *ProcessApprovalInfoPathReqBodyBuilder { 5368 builder.approvalId = approvalId 5369 builder.approvalIdFlag = true 5370 return builder 5371 } 5372 5373 // 审批类型,leave:请假,out:外出,overtime:加班,trip:出差,remedy:补卡 5374 // 5375 // 示例值:remedy 5376 func (builder *ProcessApprovalInfoPathReqBodyBuilder) ApprovalType(approvalType string) *ProcessApprovalInfoPathReqBodyBuilder { 5377 builder.approvalType = approvalType 5378 builder.approvalTypeFlag = true 5379 return builder 5380 } 5381 5382 // 审批状态,1:不通过,2:通过,4:撤销 5383 // 5384 // 示例值:4 5385 func (builder *ProcessApprovalInfoPathReqBodyBuilder) Status(status int) *ProcessApprovalInfoPathReqBodyBuilder { 5386 builder.status = status 5387 builder.statusFlag = true 5388 return builder 5389 } 5390 5391 func (builder *ProcessApprovalInfoPathReqBodyBuilder) Build() (*ProcessApprovalInfoReqBody, error) { 5392 req := &ProcessApprovalInfoReqBody{} 5393 if builder.approvalIdFlag { 5394 req.ApprovalId = &builder.approvalId 5395 } 5396 if builder.approvalTypeFlag { 5397 req.ApprovalType = &builder.approvalType 5398 } 5399 if builder.statusFlag { 5400 req.Status = &builder.status 5401 } 5402 return req, nil 5403 } 5404 5405 type ProcessApprovalInfoReqBuilder struct { 5406 apiReq *larkcore.ApiReq 5407 body *ProcessApprovalInfoReqBody 5408 } 5409 5410 func NewProcessApprovalInfoReqBuilder() *ProcessApprovalInfoReqBuilder { 5411 builder := &ProcessApprovalInfoReqBuilder{} 5412 builder.apiReq = &larkcore.ApiReq{ 5413 PathParams: larkcore.PathParams{}, 5414 QueryParams: larkcore.QueryParams{}, 5415 } 5416 return builder 5417 } 5418 5419 // 对于只使用飞书考勤系统而未使用飞书审批系统的企业,可以通过该接口更新写入飞书考勤系统中的三方系统审批状态,例如请假、加班、外出、出差、补卡等审批,状态包括通过、不通过、撤销等。 5420 func (builder *ProcessApprovalInfoReqBuilder) Body(body *ProcessApprovalInfoReqBody) *ProcessApprovalInfoReqBuilder { 5421 builder.body = body 5422 return builder 5423 } 5424 5425 func (builder *ProcessApprovalInfoReqBuilder) Build() *ProcessApprovalInfoReq { 5426 req := &ProcessApprovalInfoReq{} 5427 req.apiReq = &larkcore.ApiReq{} 5428 req.apiReq.Body = builder.body 5429 return req 5430 } 5431 5432 type ProcessApprovalInfoReqBody struct { 5433 ApprovalId *string `json:"approval_id,omitempty"` // 审批实例 ID,获取方式:1)[获取审批通过数据](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/query) 2)[写入审批结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_approval/create) 3)[通知补卡审批发起(补卡情况下)](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task_remedy/create) 5434 ApprovalType *string `json:"approval_type,omitempty"` // 审批类型,leave:请假,out:外出,overtime:加班,trip:出差,remedy:补卡 5435 Status *int `json:"status,omitempty"` // 审批状态,1:不通过,2:通过,4:撤销 5436 } 5437 5438 type ProcessApprovalInfoReq struct { 5439 apiReq *larkcore.ApiReq 5440 Body *ProcessApprovalInfoReqBody `body:""` 5441 } 5442 5443 type ProcessApprovalInfoRespData struct { 5444 ApprovalInfo *ApprovalInfo `json:"approval_info,omitempty"` // 审批信息 5445 } 5446 5447 type ProcessApprovalInfoResp struct { 5448 *larkcore.ApiResp `json:"-"` 5449 larkcore.CodeError 5450 Data *ProcessApprovalInfoRespData `json:"data"` // 业务数据 5451 } 5452 5453 func (resp *ProcessApprovalInfoResp) Success() bool { 5454 return resp.Code == 0 5455 } 5456 5457 type DownloadFileReqBuilder struct { 5458 apiReq *larkcore.ApiReq 5459 } 5460 5461 func NewDownloadFileReqBuilder() *DownloadFileReqBuilder { 5462 builder := &DownloadFileReqBuilder{} 5463 builder.apiReq = &larkcore.ApiReq{ 5464 PathParams: larkcore.PathParams{}, 5465 QueryParams: larkcore.QueryParams{}, 5466 } 5467 return builder 5468 } 5469 5470 // 文件 ID 5471 // 5472 // 示例值:xxxxxb306842b1c189bc5212eefxxxxx 5473 func (builder *DownloadFileReqBuilder) FileId(fileId string) *DownloadFileReqBuilder { 5474 builder.apiReq.PathParams.Set("file_id", fmt.Sprint(fileId)) 5475 return builder 5476 } 5477 5478 func (builder *DownloadFileReqBuilder) Build() *DownloadFileReq { 5479 req := &DownloadFileReq{} 5480 req.apiReq = &larkcore.ApiReq{} 5481 req.apiReq.PathParams = builder.apiReq.PathParams 5482 return req 5483 } 5484 5485 type DownloadFileReq struct { 5486 apiReq *larkcore.ApiReq 5487 } 5488 5489 type DownloadFileResp struct { 5490 *larkcore.ApiResp `json:"-"` 5491 larkcore.CodeError 5492 File io.Reader `json:"-"` 5493 FileName string `json:"-"` 5494 } 5495 5496 func (resp *DownloadFileResp) Success() bool { 5497 return resp.Code == 0 5498 } 5499 5500 func (resp *DownloadFileResp) WriteFile(fileName string) error { 5501 bs, err := ioutil.ReadAll(resp.File) 5502 if err != nil { 5503 return err 5504 } 5505 5506 err = ioutil.WriteFile(fileName, bs, 0666) 5507 if err != nil { 5508 return err 5509 } 5510 return nil 5511 } 5512 5513 type UploadFileReqBodyBuilder struct { 5514 file io.Reader // 文件内容 5515 fileFlag bool 5516 } 5517 5518 func NewUploadFileReqBodyBuilder() *UploadFileReqBodyBuilder { 5519 builder := &UploadFileReqBodyBuilder{} 5520 return builder 5521 } 5522 5523 // 文件内容 5524 // 5525 //示例值:二进制文件 5526 func (builder *UploadFileReqBodyBuilder) File(file io.Reader) *UploadFileReqBodyBuilder { 5527 builder.file = file 5528 builder.fileFlag = true 5529 return builder 5530 } 5531 5532 func (builder *UploadFileReqBodyBuilder) Build() *UploadFileReqBody { 5533 req := &UploadFileReqBody{} 5534 if builder.fileFlag { 5535 req.File = builder.file 5536 } 5537 return req 5538 } 5539 5540 type UploadFilePathReqBodyBuilder struct { 5541 filePath string // 文件内容 5542 filePathFlag bool 5543 } 5544 5545 func NewUploadFilePathReqBodyBuilder() *UploadFilePathReqBodyBuilder { 5546 builder := &UploadFilePathReqBodyBuilder{} 5547 return builder 5548 } 5549 5550 // 文件内容 5551 // 5552 // 示例值:二进制文件 5553 func (builder *UploadFilePathReqBodyBuilder) FilePath(filePath string) *UploadFilePathReqBodyBuilder { 5554 builder.filePath = filePath 5555 builder.filePathFlag = true 5556 return builder 5557 } 5558 5559 func (builder *UploadFilePathReqBodyBuilder) Build() (*UploadFileReqBody, error) { 5560 req := &UploadFileReqBody{} 5561 if builder.filePathFlag { 5562 data, err := larkcore.File2Bytes(builder.filePath) 5563 if err != nil { 5564 return nil, err 5565 } 5566 req.File = bytes.NewBuffer(data) 5567 } 5568 return req, nil 5569 } 5570 5571 type UploadFileReqBuilder struct { 5572 apiReq *larkcore.ApiReq 5573 body *UploadFileReqBody 5574 } 5575 5576 func NewUploadFileReqBuilder() *UploadFileReqBuilder { 5577 builder := &UploadFileReqBuilder{} 5578 builder.apiReq = &larkcore.ApiReq{ 5579 PathParams: larkcore.PathParams{}, 5580 QueryParams: larkcore.QueryParams{}, 5581 } 5582 return builder 5583 } 5584 5585 // 带后缀的文件名 5586 // 5587 // 示例值:人脸照片.jpg 5588 func (builder *UploadFileReqBuilder) FileName(fileName string) *UploadFileReqBuilder { 5589 builder.apiReq.QueryParams.Set("file_name", fmt.Sprint(fileName)) 5590 return builder 5591 } 5592 5593 // 上传文件并获取文件 ID,可用于“修改用户设置”接口中的 face_key 参数。 5594 func (builder *UploadFileReqBuilder) Body(body *UploadFileReqBody) *UploadFileReqBuilder { 5595 builder.body = body 5596 return builder 5597 } 5598 5599 func (builder *UploadFileReqBuilder) Build() *UploadFileReq { 5600 req := &UploadFileReq{} 5601 req.apiReq = &larkcore.ApiReq{} 5602 req.apiReq.QueryParams = builder.apiReq.QueryParams 5603 req.apiReq.Body = builder.body 5604 return req 5605 } 5606 5607 type UploadFileReqBody struct { 5608 File io.Reader `json:"file,omitempty"` // 文件内容 5609 } 5610 5611 type UploadFileReq struct { 5612 apiReq *larkcore.ApiReq 5613 Body *UploadFileReqBody `body:""` 5614 } 5615 5616 type UploadFileRespData struct { 5617 File *File `json:"file,omitempty"` // 文件 5618 } 5619 5620 type UploadFileResp struct { 5621 *larkcore.ApiResp `json:"-"` 5622 larkcore.CodeError 5623 Data *UploadFileRespData `json:"data"` // 业务数据 5624 } 5625 5626 func (resp *UploadFileResp) Success() bool { 5627 return resp.Code == 0 5628 } 5629 5630 type CreateGroupReqBodyBuilder struct { 5631 group *Group // 6921319402260496386 5632 groupFlag bool 5633 operatorId string // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 5634 operatorIdFlag bool 5635 } 5636 5637 func NewCreateGroupReqBodyBuilder() *CreateGroupReqBodyBuilder { 5638 builder := &CreateGroupReqBodyBuilder{} 5639 return builder 5640 } 5641 5642 // 6921319402260496386 5643 // 5644 //示例值: 5645 func (builder *CreateGroupReqBodyBuilder) Group(group *Group) *CreateGroupReqBodyBuilder { 5646 builder.group = group 5647 builder.groupFlag = true 5648 return builder 5649 } 5650 5651 // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 5652 // 5653 //示例值:dd31248a 5654 func (builder *CreateGroupReqBodyBuilder) OperatorId(operatorId string) *CreateGroupReqBodyBuilder { 5655 builder.operatorId = operatorId 5656 builder.operatorIdFlag = true 5657 return builder 5658 } 5659 5660 func (builder *CreateGroupReqBodyBuilder) Build() *CreateGroupReqBody { 5661 req := &CreateGroupReqBody{} 5662 if builder.groupFlag { 5663 req.Group = builder.group 5664 } 5665 if builder.operatorIdFlag { 5666 req.OperatorId = &builder.operatorId 5667 } 5668 return req 5669 } 5670 5671 type CreateGroupPathReqBodyBuilder struct { 5672 group *Group // 6921319402260496386 5673 groupFlag bool 5674 operatorId string // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 5675 operatorIdFlag bool 5676 } 5677 5678 func NewCreateGroupPathReqBodyBuilder() *CreateGroupPathReqBodyBuilder { 5679 builder := &CreateGroupPathReqBodyBuilder{} 5680 return builder 5681 } 5682 5683 // 6921319402260496386 5684 // 5685 // 示例值: 5686 func (builder *CreateGroupPathReqBodyBuilder) Group(group *Group) *CreateGroupPathReqBodyBuilder { 5687 builder.group = group 5688 builder.groupFlag = true 5689 return builder 5690 } 5691 5692 // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 5693 // 5694 // 示例值:dd31248a 5695 func (builder *CreateGroupPathReqBodyBuilder) OperatorId(operatorId string) *CreateGroupPathReqBodyBuilder { 5696 builder.operatorId = operatorId 5697 builder.operatorIdFlag = true 5698 return builder 5699 } 5700 5701 func (builder *CreateGroupPathReqBodyBuilder) Build() (*CreateGroupReqBody, error) { 5702 req := &CreateGroupReqBody{} 5703 if builder.groupFlag { 5704 req.Group = builder.group 5705 } 5706 if builder.operatorIdFlag { 5707 req.OperatorId = &builder.operatorId 5708 } 5709 return req, nil 5710 } 5711 5712 type CreateGroupReqBuilder struct { 5713 apiReq *larkcore.ApiReq 5714 body *CreateGroupReqBody 5715 } 5716 5717 func NewCreateGroupReqBuilder() *CreateGroupReqBuilder { 5718 builder := &CreateGroupReqBuilder{} 5719 builder.apiReq = &larkcore.ApiReq{ 5720 PathParams: larkcore.PathParams{}, 5721 QueryParams: larkcore.QueryParams{}, 5722 } 5723 return builder 5724 } 5725 5726 // 用户 ID 的类型 5727 // 5728 // 示例值:employee_id 5729 func (builder *CreateGroupReqBuilder) EmployeeType(employeeType string) *CreateGroupReqBuilder { 5730 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 5731 return builder 5732 } 5733 5734 // 部门 ID 的类型 5735 // 5736 // 示例值:od-fcb45c28a45311afd441b8869541ece8 5737 func (builder *CreateGroupReqBuilder) DeptType(deptType string) *CreateGroupReqBuilder { 5738 builder.apiReq.QueryParams.Set("dept_type", fmt.Sprint(deptType)) 5739 return builder 5740 } 5741 5742 // 考勤组,是对部门或者员工在某个特定场所及特定时间段内的出勤情况(包括上下班、迟到、早退、病假、婚假、丧假、公休、工作时间、加班情况等)的一种规则设定。;;通过设置考勤组,可以从部门、员工两个维度,来设定考勤方式、考勤时间、考勤地点等考勤规则。 5743 func (builder *CreateGroupReqBuilder) Body(body *CreateGroupReqBody) *CreateGroupReqBuilder { 5744 builder.body = body 5745 return builder 5746 } 5747 5748 func (builder *CreateGroupReqBuilder) Build() *CreateGroupReq { 5749 req := &CreateGroupReq{} 5750 req.apiReq = &larkcore.ApiReq{} 5751 req.apiReq.QueryParams = builder.apiReq.QueryParams 5752 req.apiReq.Body = builder.body 5753 return req 5754 } 5755 5756 type CreateGroupReqBody struct { 5757 Group *Group `json:"group,omitempty"` // 6921319402260496386 5758 OperatorId *string `json:"operator_id,omitempty"` // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 5759 } 5760 5761 type CreateGroupReq struct { 5762 apiReq *larkcore.ApiReq 5763 Body *CreateGroupReqBody `body:""` 5764 } 5765 5766 type CreateGroupRespData struct { 5767 Group *Group `json:"group,omitempty"` // 6921319402260496386 5768 } 5769 5770 type CreateGroupResp struct { 5771 *larkcore.ApiResp `json:"-"` 5772 larkcore.CodeError 5773 Data *CreateGroupRespData `json:"data"` // 业务数据 5774 } 5775 5776 func (resp *CreateGroupResp) Success() bool { 5777 return resp.Code == 0 5778 } 5779 5780 type DeleteGroupReqBuilder struct { 5781 apiReq *larkcore.ApiReq 5782 } 5783 5784 func NewDeleteGroupReqBuilder() *DeleteGroupReqBuilder { 5785 builder := &DeleteGroupReqBuilder{} 5786 builder.apiReq = &larkcore.ApiReq{ 5787 PathParams: larkcore.PathParams{}, 5788 QueryParams: larkcore.QueryParams{}, 5789 } 5790 return builder 5791 } 5792 5793 // 考勤组 ID,获取方式:1)[创建或修改考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/create) 2)[按名称查询考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/search) 3)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 5794 // 5795 // 示例值:6919358128597097404 5796 func (builder *DeleteGroupReqBuilder) GroupId(groupId string) *DeleteGroupReqBuilder { 5797 builder.apiReq.PathParams.Set("group_id", fmt.Sprint(groupId)) 5798 return builder 5799 } 5800 5801 func (builder *DeleteGroupReqBuilder) Build() *DeleteGroupReq { 5802 req := &DeleteGroupReq{} 5803 req.apiReq = &larkcore.ApiReq{} 5804 req.apiReq.PathParams = builder.apiReq.PathParams 5805 return req 5806 } 5807 5808 type DeleteGroupReq struct { 5809 apiReq *larkcore.ApiReq 5810 } 5811 5812 type DeleteGroupResp struct { 5813 *larkcore.ApiResp `json:"-"` 5814 larkcore.CodeError 5815 } 5816 5817 func (resp *DeleteGroupResp) Success() bool { 5818 return resp.Code == 0 5819 } 5820 5821 type GetGroupReqBuilder struct { 5822 apiReq *larkcore.ApiReq 5823 } 5824 5825 func NewGetGroupReqBuilder() *GetGroupReqBuilder { 5826 builder := &GetGroupReqBuilder{} 5827 builder.apiReq = &larkcore.ApiReq{ 5828 PathParams: larkcore.PathParams{}, 5829 QueryParams: larkcore.QueryParams{}, 5830 } 5831 return builder 5832 } 5833 5834 // 考勤组 ID,获取方式:1)[创建或修改考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/create) 2)[按名称查询考勤组](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/group/search) 3)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 5835 // 5836 // 示例值:6919358128597097404 5837 func (builder *GetGroupReqBuilder) GroupId(groupId string) *GetGroupReqBuilder { 5838 builder.apiReq.PathParams.Set("group_id", fmt.Sprint(groupId)) 5839 return builder 5840 } 5841 5842 // 用户 ID 的类型 5843 // 5844 // 示例值:employee_id 5845 func (builder *GetGroupReqBuilder) EmployeeType(employeeType string) *GetGroupReqBuilder { 5846 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 5847 return builder 5848 } 5849 5850 // 部门 ID 的类型 5851 // 5852 // 示例值:od-fcb45c28a45311afd441b8869541ece8 5853 func (builder *GetGroupReqBuilder) DeptType(deptType string) *GetGroupReqBuilder { 5854 builder.apiReq.QueryParams.Set("dept_type", fmt.Sprint(deptType)) 5855 return builder 5856 } 5857 5858 func (builder *GetGroupReqBuilder) Build() *GetGroupReq { 5859 req := &GetGroupReq{} 5860 req.apiReq = &larkcore.ApiReq{} 5861 req.apiReq.PathParams = builder.apiReq.PathParams 5862 req.apiReq.QueryParams = builder.apiReq.QueryParams 5863 return req 5864 } 5865 5866 type GetGroupReq struct { 5867 apiReq *larkcore.ApiReq 5868 } 5869 5870 type GetGroupRespData struct { 5871 GroupId *string `json:"group_id,omitempty"` // 考勤组的Id, 需要从获取用户打卡结果信息的接口中获取groupId,修改考勤组时必填 5872 GroupName *string `json:"group_name,omitempty"` // 考勤组名称 5873 TimeZone *string `json:"time_zone,omitempty"` // 考勤组时区 5874 BindDeptIds []string `json:"bind_dept_ids,omitempty"` // 5875 ExceptDeptIds []string `json:"except_dept_ids,omitempty"` // 5876 BindUserIds []string `json:"bind_user_ids,omitempty"` // 5877 ExceptUserIds []string `json:"except_user_ids,omitempty"` // 5878 GroupLeaderIds []string `json:"group_leader_ids,omitempty"` // 5879 SubGroupLeaderIds []string `json:"sub_group_leader_ids,omitempty"` // 5880 AllowOutPunch *bool `json:"allow_out_punch,omitempty"` // 是否允许外勤打卡 5881 OutPunchNeedApproval *bool `json:"out_punch_need_approval,omitempty"` // 外勤打卡需审批(需要允许外勤打卡才能设置生效) 5882 OutPunchNeedRemark *bool `json:"out_punch_need_remark,omitempty"` // 外勤打卡需填写备注(需要允许外勤打卡才能设置生效) 5883 OutPunchNeedPhoto *bool `json:"out_punch_need_photo,omitempty"` // 外勤打卡需拍照(需要允许外勤打卡才能设置生效) 5884 OutPunchAllowedHideAddr *bool `json:"out_punch_allowed_hide_addr,omitempty"` // 外勤打卡允许员工隐藏详细地址(需要允许外勤打卡才能设置生效) 5885 AllowPcPunch *bool `json:"allow_pc_punch,omitempty"` // 是否允许pc打卡 5886 AllowRemedy *bool `json:"allow_remedy,omitempty"` // 是否允许补卡 5887 RemedyLimit *bool `json:"remedy_limit,omitempty"` // 补卡次数是否限制(需要允许补卡才能设置生效) 5888 RemedyLimitCount *int `json:"remedy_limit_count,omitempty"` // 补卡次数(需要允许补卡才能设置生效) 5889 RemedyDateLimit *bool `json:"remedy_date_limit,omitempty"` // 补卡时间是否限制(需要允许补卡才能设置生效) 5890 RemedyDateNum *int `json:"remedy_date_num,omitempty"` // 补卡时间,几天内可以发起补卡(需要允许补卡才能设置生效) 5891 AllowRemedyTypeLack *bool `json:"allow_remedy_type_lack,omitempty"` // 允许缺卡补卡(需要允许补卡才能设置生效) 5892 AllowRemedyTypeLate *bool `json:"allow_remedy_type_late,omitempty"` // 允许迟到补卡(需要允许补卡才能设置生效) 5893 AllowRemedyTypeEarly *bool `json:"allow_remedy_type_early,omitempty"` // 允许早退补卡(需要允许补卡才能设置生效) 5894 AllowRemedyTypeNormal *bool `json:"allow_remedy_type_normal,omitempty"` // 允许正常补卡(需要允许补卡才能设置生效) 5895 ShowCumulativeTime *bool `json:"show_cumulative_time,omitempty"` // 是否展示累计时长 5896 ShowOverTime *bool `json:"show_over_time,omitempty"` // 是否展示加班时长 5897 HideStaffPunchTime *bool `json:"hide_staff_punch_time,omitempty"` // 是否隐藏员工打卡详情 5898 FacePunch *bool `json:"face_punch,omitempty"` // 是否开启人脸打卡 5899 FacePunchCfg *int `json:"face_punch_cfg,omitempty"` // 人脸打卡规则, 1:每次打卡均需人脸识别 2:疑似需要 5900 FaceDowngrade *bool `json:"face_downgrade,omitempty"` // 脸识别失败时允许普通拍照打卡 5901 ReplaceBasicPic *bool `json:"replace_basic_pic,omitempty"` // 是否允许替换基准图片 5902 Machines []*Machine `json:"machines,omitempty"` // 5903 GpsRange *int `json:"gps_range,omitempty"` // GPS打卡的地址范围 5904 Locations []*Location `json:"locations,omitempty"` // 5905 GroupType *int `json:"group_type,omitempty"` // 考勤类型 0:固定考勤 2:排班考勤, 3:自由班次 5906 PunchDayShiftIds []string `json:"punch_day_shift_ids,omitempty"` // 固定班次必需填 5907 FreePunchCfg *FreePunchCfg `json:"free_punch_cfg,omitempty"` // 5908 CalendarId *int `json:"calendar_id,omitempty"` // 国家日历 id,(0:不根据国家日历休息, 1:中国,2:美国,3:日本,4:印度,5:新加坡),默认 1 5909 NeedPunchSpecialDays []*PunchSpecialDateShift `json:"need_punch_special_days,omitempty"` // 强制需要打卡的日期 5910 NoNeedPunchSpecialDays []*PunchSpecialDateShift `json:"no_need_punch_special_days,omitempty"` // 强制不需要打卡的日期 5911 WorkDayNoPunchAsLack *bool `json:"work_day_no_punch_as_lack,omitempty"` // 自由班次下工作日不打卡是否记为缺卡 5912 RemedyPeriodType *int `json:"remedy_period_type,omitempty"` // 补卡周期类型 5913 RemedyPeriodCustomDate *int `json:"remedy_period_custom_date,omitempty"` // 补卡自定义周期起始日期 5914 PunchType *int `json:"punch_type,omitempty"` // 打卡类型,位运算。1:GPS打卡;2:wifi打卡;4:考勤机打卡;8:IP打卡 5915 EffectTime *string `json:"effect_time,omitempty"` // 生效时间,精确到秒的时间戳 5916 RestClockInNeedApproval *bool `json:"rest_clockIn_need_approval,omitempty"` // 休息日打卡需审批 5917 ClockInNeedPhoto *bool `json:"clockIn_need_photo,omitempty"` // 每次打卡均需拍照 5918 } 5919 5920 type GetGroupResp struct { 5921 *larkcore.ApiResp `json:"-"` 5922 larkcore.CodeError 5923 Data *GetGroupRespData `json:"data"` // 业务数据 5924 } 5925 5926 func (resp *GetGroupResp) Success() bool { 5927 return resp.Code == 0 5928 } 5929 5930 type ListGroupReqBuilder struct { 5931 apiReq *larkcore.ApiReq 5932 limit int // 最大返回多少记录,当使用迭代器访问时才有效 5933 } 5934 5935 func NewListGroupReqBuilder() *ListGroupReqBuilder { 5936 builder := &ListGroupReqBuilder{} 5937 builder.apiReq = &larkcore.ApiReq{ 5938 PathParams: larkcore.PathParams{}, 5939 QueryParams: larkcore.QueryParams{}, 5940 } 5941 return builder 5942 } 5943 5944 // 最大返回多少记录,当使用迭代器访问时才有效 5945 func (builder *ListGroupReqBuilder) Limit(limit int) *ListGroupReqBuilder { 5946 builder.limit = limit 5947 return builder 5948 } 5949 5950 // 分页大小 5951 // 5952 // 示例值:10 5953 func (builder *ListGroupReqBuilder) PageSize(pageSize int) *ListGroupReqBuilder { 5954 builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize)) 5955 return builder 5956 } 5957 5958 // 分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果 5959 // 5960 // 示例值:wgNOR1rmxogRvAsGl6CXlQ== 5961 func (builder *ListGroupReqBuilder) PageToken(pageToken string) *ListGroupReqBuilder { 5962 builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken)) 5963 return builder 5964 } 5965 5966 func (builder *ListGroupReqBuilder) Build() *ListGroupReq { 5967 req := &ListGroupReq{} 5968 req.apiReq = &larkcore.ApiReq{} 5969 req.Limit = builder.limit 5970 req.apiReq.QueryParams = builder.apiReq.QueryParams 5971 return req 5972 } 5973 5974 type ListGroupReq struct { 5975 apiReq *larkcore.ApiReq 5976 Limit int // 最多返回多少记录,只有在使用迭代器访问时,才有效 5977 5978 } 5979 5980 type ListGroupRespData struct { 5981 GroupList []*GroupMeta `json:"group_list,omitempty"` // 考勤组列表 5982 PageToken *string `json:"page_token,omitempty"` // 5983 HasMore *bool `json:"has_more,omitempty"` // 5984 } 5985 5986 type ListGroupResp struct { 5987 *larkcore.ApiResp `json:"-"` 5988 larkcore.CodeError 5989 Data *ListGroupRespData `json:"data"` // 业务数据 5990 } 5991 5992 func (resp *ListGroupResp) Success() bool { 5993 return resp.Code == 0 5994 } 5995 5996 type SearchGroupReqBodyBuilder struct { 5997 groupName string // 考勤组名称 5998 groupNameFlag bool 5999 exactlyMatched bool // 是否精准匹配,默认为 false:模糊匹配;true:精准匹配 6000 exactlyMatchedFlag bool 6001 } 6002 6003 func NewSearchGroupReqBodyBuilder() *SearchGroupReqBodyBuilder { 6004 builder := &SearchGroupReqBodyBuilder{} 6005 return builder 6006 } 6007 6008 // 考勤组名称 6009 // 6010 //示例值:考勤组1 6011 func (builder *SearchGroupReqBodyBuilder) GroupName(groupName string) *SearchGroupReqBodyBuilder { 6012 builder.groupName = groupName 6013 builder.groupNameFlag = true 6014 return builder 6015 } 6016 6017 // 是否精准匹配,默认为 false:模糊匹配;true:精准匹配 6018 // 6019 //示例值:true 6020 func (builder *SearchGroupReqBodyBuilder) ExactlyMatched(exactlyMatched bool) *SearchGroupReqBodyBuilder { 6021 builder.exactlyMatched = exactlyMatched 6022 builder.exactlyMatchedFlag = true 6023 return builder 6024 } 6025 6026 func (builder *SearchGroupReqBodyBuilder) Build() *SearchGroupReqBody { 6027 req := &SearchGroupReqBody{} 6028 if builder.groupNameFlag { 6029 req.GroupName = &builder.groupName 6030 } 6031 if builder.exactlyMatchedFlag { 6032 req.ExactlyMatched = &builder.exactlyMatched 6033 } 6034 return req 6035 } 6036 6037 type SearchGroupPathReqBodyBuilder struct { 6038 groupName string // 考勤组名称 6039 groupNameFlag bool 6040 exactlyMatched bool // 是否精准匹配,默认为 false:模糊匹配;true:精准匹配 6041 exactlyMatchedFlag bool 6042 } 6043 6044 func NewSearchGroupPathReqBodyBuilder() *SearchGroupPathReqBodyBuilder { 6045 builder := &SearchGroupPathReqBodyBuilder{} 6046 return builder 6047 } 6048 6049 // 考勤组名称 6050 // 6051 // 示例值:考勤组1 6052 func (builder *SearchGroupPathReqBodyBuilder) GroupName(groupName string) *SearchGroupPathReqBodyBuilder { 6053 builder.groupName = groupName 6054 builder.groupNameFlag = true 6055 return builder 6056 } 6057 6058 // 是否精准匹配,默认为 false:模糊匹配;true:精准匹配 6059 // 6060 // 示例值:true 6061 func (builder *SearchGroupPathReqBodyBuilder) ExactlyMatched(exactlyMatched bool) *SearchGroupPathReqBodyBuilder { 6062 builder.exactlyMatched = exactlyMatched 6063 builder.exactlyMatchedFlag = true 6064 return builder 6065 } 6066 6067 func (builder *SearchGroupPathReqBodyBuilder) Build() (*SearchGroupReqBody, error) { 6068 req := &SearchGroupReqBody{} 6069 if builder.groupNameFlag { 6070 req.GroupName = &builder.groupName 6071 } 6072 if builder.exactlyMatchedFlag { 6073 req.ExactlyMatched = &builder.exactlyMatched 6074 } 6075 return req, nil 6076 } 6077 6078 type SearchGroupReqBuilder struct { 6079 apiReq *larkcore.ApiReq 6080 body *SearchGroupReqBody 6081 } 6082 6083 func NewSearchGroupReqBuilder() *SearchGroupReqBuilder { 6084 builder := &SearchGroupReqBuilder{} 6085 builder.apiReq = &larkcore.ApiReq{ 6086 PathParams: larkcore.PathParams{}, 6087 QueryParams: larkcore.QueryParams{}, 6088 } 6089 return builder 6090 } 6091 6092 // 按考勤组名称查询考勤组摘要信息。查询条件支持名称精确匹配和模糊匹配两种方式。查询结果按考勤组修改时间 desc 排序,且最大记录数为 10 条。 6093 func (builder *SearchGroupReqBuilder) Body(body *SearchGroupReqBody) *SearchGroupReqBuilder { 6094 builder.body = body 6095 return builder 6096 } 6097 6098 func (builder *SearchGroupReqBuilder) Build() *SearchGroupReq { 6099 req := &SearchGroupReq{} 6100 req.apiReq = &larkcore.ApiReq{} 6101 req.apiReq.Body = builder.body 6102 return req 6103 } 6104 6105 type SearchGroupReqBody struct { 6106 GroupName *string `json:"group_name,omitempty"` // 考勤组名称 6107 ExactlyMatched *bool `json:"exactly_matched,omitempty"` // 是否精准匹配,默认为 false:模糊匹配;true:精准匹配 6108 } 6109 6110 type SearchGroupReq struct { 6111 apiReq *larkcore.ApiReq 6112 Body *SearchGroupReqBody `body:""` 6113 } 6114 6115 type SearchGroupRespData struct { 6116 GroupList []*GroupMeta `json:"group_list,omitempty"` // 考勤组列表 6117 } 6118 6119 type SearchGroupResp struct { 6120 *larkcore.ApiResp `json:"-"` 6121 larkcore.CodeError 6122 Data *SearchGroupRespData `json:"data"` // 业务数据 6123 } 6124 6125 func (resp *SearchGroupResp) Success() bool { 6126 return resp.Code == 0 6127 } 6128 6129 type CreateShiftReqBuilder struct { 6130 apiReq *larkcore.ApiReq 6131 shift *Shift 6132 } 6133 6134 func NewCreateShiftReqBuilder() *CreateShiftReqBuilder { 6135 builder := &CreateShiftReqBuilder{} 6136 builder.apiReq = &larkcore.ApiReq{ 6137 PathParams: larkcore.PathParams{}, 6138 QueryParams: larkcore.QueryParams{}, 6139 } 6140 return builder 6141 } 6142 6143 // 班次是描述一次考勤任务时间规则的统称,比如一天打多少次卡,每次卡的上下班时间,晚到多长时间算迟到,晚到多长时间算缺卡等。 6144 func (builder *CreateShiftReqBuilder) Shift(shift *Shift) *CreateShiftReqBuilder { 6145 builder.shift = shift 6146 return builder 6147 } 6148 6149 func (builder *CreateShiftReqBuilder) Build() *CreateShiftReq { 6150 req := &CreateShiftReq{} 6151 req.apiReq = &larkcore.ApiReq{} 6152 req.apiReq.Body = builder.shift 6153 return req 6154 } 6155 6156 type CreateShiftReq struct { 6157 apiReq *larkcore.ApiReq 6158 Shift *Shift `body:""` 6159 } 6160 6161 type CreateShiftRespData struct { 6162 Shift *Shift `json:"shift,omitempty"` // 班次 6163 } 6164 6165 type CreateShiftResp struct { 6166 *larkcore.ApiResp `json:"-"` 6167 larkcore.CodeError 6168 Data *CreateShiftRespData `json:"data"` // 业务数据 6169 } 6170 6171 func (resp *CreateShiftResp) Success() bool { 6172 return resp.Code == 0 6173 } 6174 6175 type DeleteShiftReqBuilder struct { 6176 apiReq *larkcore.ApiReq 6177 } 6178 6179 func NewDeleteShiftReqBuilder() *DeleteShiftReqBuilder { 6180 builder := &DeleteShiftReqBuilder{} 6181 builder.apiReq = &larkcore.ApiReq{ 6182 PathParams: larkcore.PathParams{}, 6183 QueryParams: larkcore.QueryParams{}, 6184 } 6185 return builder 6186 } 6187 6188 // 班次 ID,获取方式:1)[按名称查询班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/query) 2)[创建班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/create) 6189 // 6190 // 示例值:6919358778597097404 6191 func (builder *DeleteShiftReqBuilder) ShiftId(shiftId string) *DeleteShiftReqBuilder { 6192 builder.apiReq.PathParams.Set("shift_id", fmt.Sprint(shiftId)) 6193 return builder 6194 } 6195 6196 func (builder *DeleteShiftReqBuilder) Build() *DeleteShiftReq { 6197 req := &DeleteShiftReq{} 6198 req.apiReq = &larkcore.ApiReq{} 6199 req.apiReq.PathParams = builder.apiReq.PathParams 6200 return req 6201 } 6202 6203 type DeleteShiftReq struct { 6204 apiReq *larkcore.ApiReq 6205 } 6206 6207 type DeleteShiftResp struct { 6208 *larkcore.ApiResp `json:"-"` 6209 larkcore.CodeError 6210 } 6211 6212 func (resp *DeleteShiftResp) Success() bool { 6213 return resp.Code == 0 6214 } 6215 6216 type GetShiftReqBuilder struct { 6217 apiReq *larkcore.ApiReq 6218 } 6219 6220 func NewGetShiftReqBuilder() *GetShiftReqBuilder { 6221 builder := &GetShiftReqBuilder{} 6222 builder.apiReq = &larkcore.ApiReq{ 6223 PathParams: larkcore.PathParams{}, 6224 QueryParams: larkcore.QueryParams{}, 6225 } 6226 return builder 6227 } 6228 6229 // 班次 ID,获取方式:1)[按名称查询班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/query) 2)[创建班次](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/shift/create) 6230 // 6231 // 示例值:6919358778597097404 6232 func (builder *GetShiftReqBuilder) ShiftId(shiftId string) *GetShiftReqBuilder { 6233 builder.apiReq.PathParams.Set("shift_id", fmt.Sprint(shiftId)) 6234 return builder 6235 } 6236 6237 func (builder *GetShiftReqBuilder) Build() *GetShiftReq { 6238 req := &GetShiftReq{} 6239 req.apiReq = &larkcore.ApiReq{} 6240 req.apiReq.PathParams = builder.apiReq.PathParams 6241 return req 6242 } 6243 6244 type GetShiftReq struct { 6245 apiReq *larkcore.ApiReq 6246 } 6247 6248 type GetShiftRespData struct { 6249 ShiftId *string `json:"shift_id,omitempty"` // 班次Id 6250 ShiftName *string `json:"shift_name,omitempty"` // 班次名称 6251 PunchTimes *int `json:"punch_times,omitempty"` // 打卡次数 6252 IsFlexible *bool `json:"is_flexible,omitempty"` // 是否弹性打卡 6253 FlexibleMinutes *int `json:"flexible_minutes,omitempty"` // 弹性打卡时间,设置【上班最多可晚到】与【下班最多可早走】时间,如果不设置flexible_rule则生效 6254 FlexibleRule []*FlexibleRule `json:"flexible_rule,omitempty"` // 弹性打卡时间设置 6255 NoNeedOff *bool `json:"no_need_off,omitempty"` // 不需要打下班卡 6256 PunchTimeRule []*PunchTimeRule `json:"punch_time_rule,omitempty"` // 打卡规则 6257 LateOffLateOnRule []*LateOffLateOnRule `json:"late_off_late_on_rule,omitempty"` // 晚走晚到规则 6258 RestTimeRule []*RestRule `json:"rest_time_rule,omitempty"` // 休息规则 6259 } 6260 6261 type GetShiftResp struct { 6262 *larkcore.ApiResp `json:"-"` 6263 larkcore.CodeError 6264 Data *GetShiftRespData `json:"data"` // 业务数据 6265 } 6266 6267 func (resp *GetShiftResp) Success() bool { 6268 return resp.Code == 0 6269 } 6270 6271 type ListShiftReqBuilder struct { 6272 apiReq *larkcore.ApiReq 6273 limit int // 最大返回多少记录,当使用迭代器访问时才有效 6274 } 6275 6276 func NewListShiftReqBuilder() *ListShiftReqBuilder { 6277 builder := &ListShiftReqBuilder{} 6278 builder.apiReq = &larkcore.ApiReq{ 6279 PathParams: larkcore.PathParams{}, 6280 QueryParams: larkcore.QueryParams{}, 6281 } 6282 return builder 6283 } 6284 6285 // 最大返回多少记录,当使用迭代器访问时才有效 6286 func (builder *ListShiftReqBuilder) Limit(limit int) *ListShiftReqBuilder { 6287 builder.limit = limit 6288 return builder 6289 } 6290 6291 // 分页大小 6292 // 6293 // 示例值:10 6294 func (builder *ListShiftReqBuilder) PageSize(pageSize int) *ListShiftReqBuilder { 6295 builder.apiReq.QueryParams.Set("page_size", fmt.Sprint(pageSize)) 6296 return builder 6297 } 6298 6299 // 分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果 6300 // 6301 // 示例值:YrkvQ1wGaPVta45tkxuGiQ== 6302 func (builder *ListShiftReqBuilder) PageToken(pageToken string) *ListShiftReqBuilder { 6303 builder.apiReq.QueryParams.Set("page_token", fmt.Sprint(pageToken)) 6304 return builder 6305 } 6306 6307 func (builder *ListShiftReqBuilder) Build() *ListShiftReq { 6308 req := &ListShiftReq{} 6309 req.apiReq = &larkcore.ApiReq{} 6310 req.Limit = builder.limit 6311 req.apiReq.QueryParams = builder.apiReq.QueryParams 6312 return req 6313 } 6314 6315 type ListShiftReq struct { 6316 apiReq *larkcore.ApiReq 6317 Limit int // 最多返回多少记录,只有在使用迭代器访问时,才有效 6318 6319 } 6320 6321 type ListShiftRespData struct { 6322 ShiftList []*Shift `json:"shift_list,omitempty"` // 班次列表 6323 PageToken *string `json:"page_token,omitempty"` // 6324 HasMore *bool `json:"has_more,omitempty"` // 6325 } 6326 6327 type ListShiftResp struct { 6328 *larkcore.ApiResp `json:"-"` 6329 larkcore.CodeError 6330 Data *ListShiftRespData `json:"data"` // 业务数据 6331 } 6332 6333 func (resp *ListShiftResp) Success() bool { 6334 return resp.Code == 0 6335 } 6336 6337 type QueryShiftReqBuilder struct { 6338 apiReq *larkcore.ApiReq 6339 } 6340 6341 func NewQueryShiftReqBuilder() *QueryShiftReqBuilder { 6342 builder := &QueryShiftReqBuilder{} 6343 builder.apiReq = &larkcore.ApiReq{ 6344 PathParams: larkcore.PathParams{}, 6345 QueryParams: larkcore.QueryParams{}, 6346 } 6347 return builder 6348 } 6349 6350 // 班次名称 6351 // 6352 // 示例值:早班 6353 func (builder *QueryShiftReqBuilder) ShiftName(shiftName string) *QueryShiftReqBuilder { 6354 builder.apiReq.QueryParams.Set("shift_name", fmt.Sprint(shiftName)) 6355 return builder 6356 } 6357 6358 func (builder *QueryShiftReqBuilder) Build() *QueryShiftReq { 6359 req := &QueryShiftReq{} 6360 req.apiReq = &larkcore.ApiReq{} 6361 req.apiReq.QueryParams = builder.apiReq.QueryParams 6362 return req 6363 } 6364 6365 type QueryShiftReq struct { 6366 apiReq *larkcore.ApiReq 6367 } 6368 6369 type QueryShiftRespData struct { 6370 ShiftId *string `json:"shift_id,omitempty"` // 班次Id 6371 ShiftName *string `json:"shift_name,omitempty"` // 班次名称 6372 PunchTimes *int `json:"punch_times,omitempty"` // 打卡次数 6373 IsFlexible *bool `json:"is_flexible,omitempty"` // 是否弹性打卡 6374 FlexibleMinutes *int `json:"flexible_minutes,omitempty"` // 弹性打卡时间,设置【上班最多可晚到】与【下班最多可早走】时间,如果不设置flexible_rule则生效 6375 FlexibleRule []*FlexibleRule `json:"flexible_rule,omitempty"` // 弹性打卡时间设置 6376 NoNeedOff *bool `json:"no_need_off,omitempty"` // 不需要打下班卡 6377 PunchTimeRule []*PunchTimeRule `json:"punch_time_rule,omitempty"` // 打卡规则 6378 LateOffLateOnRule []*LateOffLateOnRule `json:"late_off_late_on_rule,omitempty"` // 晚走晚到规则 6379 RestTimeRule []*RestRule `json:"rest_time_rule,omitempty"` // 休息规则 6380 } 6381 6382 type QueryShiftResp struct { 6383 *larkcore.ApiResp `json:"-"` 6384 larkcore.CodeError 6385 Data *QueryShiftRespData `json:"data"` // 业务数据 6386 } 6387 6388 func (resp *QueryShiftResp) Success() bool { 6389 return resp.Code == 0 6390 } 6391 6392 type CreateUserApprovalReqBodyBuilder struct { 6393 userApproval *UserApproval // 审批信息 6394 userApprovalFlag bool 6395 } 6396 6397 func NewCreateUserApprovalReqBodyBuilder() *CreateUserApprovalReqBodyBuilder { 6398 builder := &CreateUserApprovalReqBodyBuilder{} 6399 return builder 6400 } 6401 6402 // 审批信息 6403 // 6404 //示例值: 6405 func (builder *CreateUserApprovalReqBodyBuilder) UserApproval(userApproval *UserApproval) *CreateUserApprovalReqBodyBuilder { 6406 builder.userApproval = userApproval 6407 builder.userApprovalFlag = true 6408 return builder 6409 } 6410 6411 func (builder *CreateUserApprovalReqBodyBuilder) Build() *CreateUserApprovalReqBody { 6412 req := &CreateUserApprovalReqBody{} 6413 if builder.userApprovalFlag { 6414 req.UserApproval = builder.userApproval 6415 } 6416 return req 6417 } 6418 6419 type CreateUserApprovalPathReqBodyBuilder struct { 6420 userApproval *UserApproval // 审批信息 6421 userApprovalFlag bool 6422 } 6423 6424 func NewCreateUserApprovalPathReqBodyBuilder() *CreateUserApprovalPathReqBodyBuilder { 6425 builder := &CreateUserApprovalPathReqBodyBuilder{} 6426 return builder 6427 } 6428 6429 // 审批信息 6430 // 6431 // 示例值: 6432 func (builder *CreateUserApprovalPathReqBodyBuilder) UserApproval(userApproval *UserApproval) *CreateUserApprovalPathReqBodyBuilder { 6433 builder.userApproval = userApproval 6434 builder.userApprovalFlag = true 6435 return builder 6436 } 6437 6438 func (builder *CreateUserApprovalPathReqBodyBuilder) Build() (*CreateUserApprovalReqBody, error) { 6439 req := &CreateUserApprovalReqBody{} 6440 if builder.userApprovalFlag { 6441 req.UserApproval = builder.userApproval 6442 } 6443 return req, nil 6444 } 6445 6446 type CreateUserApprovalReqBuilder struct { 6447 apiReq *larkcore.ApiReq 6448 body *CreateUserApprovalReqBody 6449 } 6450 6451 func NewCreateUserApprovalReqBuilder() *CreateUserApprovalReqBuilder { 6452 builder := &CreateUserApprovalReqBuilder{} 6453 builder.apiReq = &larkcore.ApiReq{ 6454 PathParams: larkcore.PathParams{}, 6455 QueryParams: larkcore.QueryParams{}, 6456 } 6457 return builder 6458 } 6459 6460 // 请求体和响应体中的 user_id 的员工工号类型 6461 // 6462 // 示例值:employee_id 6463 func (builder *CreateUserApprovalReqBuilder) EmployeeType(employeeType string) *CreateUserApprovalReqBuilder { 6464 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 6465 return builder 6466 } 6467 6468 // 由于部分企业使用的是自己的审批系统,而不是飞书审批系统,因此员工的请假、加班等数据无法流入到飞书考勤系统中,导致员工在请假时间段内依然收到打卡提醒,并且被记为缺卡。;;对于这些只使用飞书考勤系统,而未使用飞书审批系统的企业,可以通过考勤开放接口的形式,将三方审批结果数据回写到飞书考勤系统中。 6469 func (builder *CreateUserApprovalReqBuilder) Body(body *CreateUserApprovalReqBody) *CreateUserApprovalReqBuilder { 6470 builder.body = body 6471 return builder 6472 } 6473 6474 func (builder *CreateUserApprovalReqBuilder) Build() *CreateUserApprovalReq { 6475 req := &CreateUserApprovalReq{} 6476 req.apiReq = &larkcore.ApiReq{} 6477 req.apiReq.QueryParams = builder.apiReq.QueryParams 6478 req.apiReq.Body = builder.body 6479 return req 6480 } 6481 6482 type CreateUserApprovalReqBody struct { 6483 UserApproval *UserApproval `json:"user_approval,omitempty"` // 审批信息 6484 } 6485 6486 type CreateUserApprovalReq struct { 6487 apiReq *larkcore.ApiReq 6488 Body *CreateUserApprovalReqBody `body:""` 6489 } 6490 6491 type CreateUserApprovalRespData struct { 6492 UserApproval *UserApproval `json:"user_approval,omitempty"` // 审批信息 6493 } 6494 6495 type CreateUserApprovalResp struct { 6496 *larkcore.ApiResp `json:"-"` 6497 larkcore.CodeError 6498 Data *CreateUserApprovalRespData `json:"data"` // 业务数据 6499 } 6500 6501 func (resp *CreateUserApprovalResp) Success() bool { 6502 return resp.Code == 0 6503 } 6504 6505 type QueryUserApprovalReqBodyBuilder struct { 6506 userIds []string // employee_no 或 employee_id 列表 6507 userIdsFlag bool 6508 checkDateFrom int // 查询的起始工作日 6509 checkDateFromFlag bool 6510 checkDateTo int // 查询的结束工作日,与 check_date_from 的时间间隔不超过 30 天 6511 checkDateToFlag bool 6512 checkDateType string // 查询依据的时间类型(不填默认依据PeriodTime) 6513 checkDateTypeFlag bool 6514 status int // 查询状态(不填默认查询已通过状态) 6515 statusFlag bool 6516 } 6517 6518 func NewQueryUserApprovalReqBodyBuilder() *QueryUserApprovalReqBodyBuilder { 6519 builder := &QueryUserApprovalReqBodyBuilder{} 6520 return builder 6521 } 6522 6523 // employee_no 或 employee_id 列表 6524 // 6525 //示例值:["abd754f7"] 6526 func (builder *QueryUserApprovalReqBodyBuilder) UserIds(userIds []string) *QueryUserApprovalReqBodyBuilder { 6527 builder.userIds = userIds 6528 builder.userIdsFlag = true 6529 return builder 6530 } 6531 6532 // 查询的起始工作日 6533 // 6534 //示例值:20190817 6535 func (builder *QueryUserApprovalReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserApprovalReqBodyBuilder { 6536 builder.checkDateFrom = checkDateFrom 6537 builder.checkDateFromFlag = true 6538 return builder 6539 } 6540 6541 // 查询的结束工作日,与 check_date_from 的时间间隔不超过 30 天 6542 // 6543 //示例值:20190820 6544 func (builder *QueryUserApprovalReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserApprovalReqBodyBuilder { 6545 builder.checkDateTo = checkDateTo 6546 builder.checkDateToFlag = true 6547 return builder 6548 } 6549 6550 // 查询依据的时间类型(不填默认依据PeriodTime) 6551 // 6552 //示例值:PeriodTime 6553 func (builder *QueryUserApprovalReqBodyBuilder) CheckDateType(checkDateType string) *QueryUserApprovalReqBodyBuilder { 6554 builder.checkDateType = checkDateType 6555 builder.checkDateTypeFlag = true 6556 return builder 6557 } 6558 6559 // 查询状态(不填默认查询已通过状态) 6560 // 6561 //示例值:2 6562 func (builder *QueryUserApprovalReqBodyBuilder) Status(status int) *QueryUserApprovalReqBodyBuilder { 6563 builder.status = status 6564 builder.statusFlag = true 6565 return builder 6566 } 6567 6568 func (builder *QueryUserApprovalReqBodyBuilder) Build() *QueryUserApprovalReqBody { 6569 req := &QueryUserApprovalReqBody{} 6570 if builder.userIdsFlag { 6571 req.UserIds = builder.userIds 6572 } 6573 if builder.checkDateFromFlag { 6574 req.CheckDateFrom = &builder.checkDateFrom 6575 } 6576 if builder.checkDateToFlag { 6577 req.CheckDateTo = &builder.checkDateTo 6578 } 6579 if builder.checkDateTypeFlag { 6580 req.CheckDateType = &builder.checkDateType 6581 } 6582 if builder.statusFlag { 6583 req.Status = &builder.status 6584 } 6585 return req 6586 } 6587 6588 type QueryUserApprovalPathReqBodyBuilder struct { 6589 userIds []string // employee_no 或 employee_id 列表 6590 userIdsFlag bool 6591 checkDateFrom int // 查询的起始工作日 6592 checkDateFromFlag bool 6593 checkDateTo int // 查询的结束工作日,与 check_date_from 的时间间隔不超过 30 天 6594 checkDateToFlag bool 6595 checkDateType string // 查询依据的时间类型(不填默认依据PeriodTime) 6596 checkDateTypeFlag bool 6597 status int // 查询状态(不填默认查询已通过状态) 6598 statusFlag bool 6599 } 6600 6601 func NewQueryUserApprovalPathReqBodyBuilder() *QueryUserApprovalPathReqBodyBuilder { 6602 builder := &QueryUserApprovalPathReqBodyBuilder{} 6603 return builder 6604 } 6605 6606 // employee_no 或 employee_id 列表 6607 // 6608 // 示例值:["abd754f7"] 6609 func (builder *QueryUserApprovalPathReqBodyBuilder) UserIds(userIds []string) *QueryUserApprovalPathReqBodyBuilder { 6610 builder.userIds = userIds 6611 builder.userIdsFlag = true 6612 return builder 6613 } 6614 6615 // 查询的起始工作日 6616 // 6617 // 示例值:20190817 6618 func (builder *QueryUserApprovalPathReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserApprovalPathReqBodyBuilder { 6619 builder.checkDateFrom = checkDateFrom 6620 builder.checkDateFromFlag = true 6621 return builder 6622 } 6623 6624 // 查询的结束工作日,与 check_date_from 的时间间隔不超过 30 天 6625 // 6626 // 示例值:20190820 6627 func (builder *QueryUserApprovalPathReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserApprovalPathReqBodyBuilder { 6628 builder.checkDateTo = checkDateTo 6629 builder.checkDateToFlag = true 6630 return builder 6631 } 6632 6633 // 查询依据的时间类型(不填默认依据PeriodTime) 6634 // 6635 // 示例值:PeriodTime 6636 func (builder *QueryUserApprovalPathReqBodyBuilder) CheckDateType(checkDateType string) *QueryUserApprovalPathReqBodyBuilder { 6637 builder.checkDateType = checkDateType 6638 builder.checkDateTypeFlag = true 6639 return builder 6640 } 6641 6642 // 查询状态(不填默认查询已通过状态) 6643 // 6644 // 示例值:2 6645 func (builder *QueryUserApprovalPathReqBodyBuilder) Status(status int) *QueryUserApprovalPathReqBodyBuilder { 6646 builder.status = status 6647 builder.statusFlag = true 6648 return builder 6649 } 6650 6651 func (builder *QueryUserApprovalPathReqBodyBuilder) Build() (*QueryUserApprovalReqBody, error) { 6652 req := &QueryUserApprovalReqBody{} 6653 if builder.userIdsFlag { 6654 req.UserIds = builder.userIds 6655 } 6656 if builder.checkDateFromFlag { 6657 req.CheckDateFrom = &builder.checkDateFrom 6658 } 6659 if builder.checkDateToFlag { 6660 req.CheckDateTo = &builder.checkDateTo 6661 } 6662 if builder.checkDateTypeFlag { 6663 req.CheckDateType = &builder.checkDateType 6664 } 6665 if builder.statusFlag { 6666 req.Status = &builder.status 6667 } 6668 return req, nil 6669 } 6670 6671 type QueryUserApprovalReqBuilder struct { 6672 apiReq *larkcore.ApiReq 6673 body *QueryUserApprovalReqBody 6674 } 6675 6676 func NewQueryUserApprovalReqBuilder() *QueryUserApprovalReqBuilder { 6677 builder := &QueryUserApprovalReqBuilder{} 6678 builder.apiReq = &larkcore.ApiReq{ 6679 PathParams: larkcore.PathParams{}, 6680 QueryParams: larkcore.QueryParams{}, 6681 } 6682 return builder 6683 } 6684 6685 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 6686 // 6687 // 示例值:employee_id 6688 func (builder *QueryUserApprovalReqBuilder) EmployeeType(employeeType string) *QueryUserApprovalReqBuilder { 6689 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 6690 return builder 6691 } 6692 6693 // 获取员工在某段时间内的请假、加班、外出和出差四种审批的通过数据。 6694 func (builder *QueryUserApprovalReqBuilder) Body(body *QueryUserApprovalReqBody) *QueryUserApprovalReqBuilder { 6695 builder.body = body 6696 return builder 6697 } 6698 6699 func (builder *QueryUserApprovalReqBuilder) Build() *QueryUserApprovalReq { 6700 req := &QueryUserApprovalReq{} 6701 req.apiReq = &larkcore.ApiReq{} 6702 req.apiReq.QueryParams = builder.apiReq.QueryParams 6703 req.apiReq.Body = builder.body 6704 return req 6705 } 6706 6707 type QueryUserApprovalReqBody struct { 6708 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表 6709 CheckDateFrom *int `json:"check_date_from,omitempty"` // 查询的起始工作日 6710 CheckDateTo *int `json:"check_date_to,omitempty"` // 查询的结束工作日,与 check_date_from 的时间间隔不超过 30 天 6711 CheckDateType *string `json:"check_date_type,omitempty"` // 查询依据的时间类型(不填默认依据PeriodTime) 6712 Status *int `json:"status,omitempty"` // 查询状态(不填默认查询已通过状态) 6713 } 6714 6715 type QueryUserApprovalReq struct { 6716 apiReq *larkcore.ApiReq 6717 Body *QueryUserApprovalReqBody `body:""` 6718 } 6719 6720 type QueryUserApprovalRespData struct { 6721 UserApprovals []*UserApproval `json:"user_approvals,omitempty"` // 审批结果列表 6722 } 6723 6724 type QueryUserApprovalResp struct { 6725 *larkcore.ApiResp `json:"-"` 6726 larkcore.CodeError 6727 Data *QueryUserApprovalRespData `json:"data"` // 业务数据 6728 } 6729 6730 func (resp *QueryUserApprovalResp) Success() bool { 6731 return resp.Code == 0 6732 } 6733 6734 type BatchCreateUserDailyShiftReqBodyBuilder struct { 6735 userDailyShifts []*UserDailyShift // 班表信息列表 6736 userDailyShiftsFlag bool 6737 operatorId string // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 6738 operatorIdFlag bool 6739 } 6740 6741 func NewBatchCreateUserDailyShiftReqBodyBuilder() *BatchCreateUserDailyShiftReqBodyBuilder { 6742 builder := &BatchCreateUserDailyShiftReqBodyBuilder{} 6743 return builder 6744 } 6745 6746 // 班表信息列表 6747 // 6748 //示例值: 6749 func (builder *BatchCreateUserDailyShiftReqBodyBuilder) UserDailyShifts(userDailyShifts []*UserDailyShift) *BatchCreateUserDailyShiftReqBodyBuilder { 6750 builder.userDailyShifts = userDailyShifts 6751 builder.userDailyShiftsFlag = true 6752 return builder 6753 } 6754 6755 // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 6756 // 6757 //示例值:dd31248a 6758 func (builder *BatchCreateUserDailyShiftReqBodyBuilder) OperatorId(operatorId string) *BatchCreateUserDailyShiftReqBodyBuilder { 6759 builder.operatorId = operatorId 6760 builder.operatorIdFlag = true 6761 return builder 6762 } 6763 6764 func (builder *BatchCreateUserDailyShiftReqBodyBuilder) Build() *BatchCreateUserDailyShiftReqBody { 6765 req := &BatchCreateUserDailyShiftReqBody{} 6766 if builder.userDailyShiftsFlag { 6767 req.UserDailyShifts = builder.userDailyShifts 6768 } 6769 if builder.operatorIdFlag { 6770 req.OperatorId = &builder.operatorId 6771 } 6772 return req 6773 } 6774 6775 type BatchCreateUserDailyShiftPathReqBodyBuilder struct { 6776 userDailyShifts []*UserDailyShift // 班表信息列表 6777 userDailyShiftsFlag bool 6778 operatorId string // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 6779 operatorIdFlag bool 6780 } 6781 6782 func NewBatchCreateUserDailyShiftPathReqBodyBuilder() *BatchCreateUserDailyShiftPathReqBodyBuilder { 6783 builder := &BatchCreateUserDailyShiftPathReqBodyBuilder{} 6784 return builder 6785 } 6786 6787 // 班表信息列表 6788 // 6789 // 示例值: 6790 func (builder *BatchCreateUserDailyShiftPathReqBodyBuilder) UserDailyShifts(userDailyShifts []*UserDailyShift) *BatchCreateUserDailyShiftPathReqBodyBuilder { 6791 builder.userDailyShifts = userDailyShifts 6792 builder.userDailyShiftsFlag = true 6793 return builder 6794 } 6795 6796 // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 6797 // 6798 // 示例值:dd31248a 6799 func (builder *BatchCreateUserDailyShiftPathReqBodyBuilder) OperatorId(operatorId string) *BatchCreateUserDailyShiftPathReqBodyBuilder { 6800 builder.operatorId = operatorId 6801 builder.operatorIdFlag = true 6802 return builder 6803 } 6804 6805 func (builder *BatchCreateUserDailyShiftPathReqBodyBuilder) Build() (*BatchCreateUserDailyShiftReqBody, error) { 6806 req := &BatchCreateUserDailyShiftReqBody{} 6807 if builder.userDailyShiftsFlag { 6808 req.UserDailyShifts = builder.userDailyShifts 6809 } 6810 if builder.operatorIdFlag { 6811 req.OperatorId = &builder.operatorId 6812 } 6813 return req, nil 6814 } 6815 6816 type BatchCreateUserDailyShiftReqBuilder struct { 6817 apiReq *larkcore.ApiReq 6818 body *BatchCreateUserDailyShiftReqBody 6819 } 6820 6821 func NewBatchCreateUserDailyShiftReqBuilder() *BatchCreateUserDailyShiftReqBuilder { 6822 builder := &BatchCreateUserDailyShiftReqBuilder{} 6823 builder.apiReq = &larkcore.ApiReq{ 6824 PathParams: larkcore.PathParams{}, 6825 QueryParams: larkcore.QueryParams{}, 6826 } 6827 return builder 6828 } 6829 6830 // 请求体和响应体中的 user_id 的员工工号类型 6831 // 6832 // 示例值:employee_id 6833 func (builder *BatchCreateUserDailyShiftReqBuilder) EmployeeType(employeeType string) *BatchCreateUserDailyShiftReqBuilder { 6834 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 6835 return builder 6836 } 6837 6838 // 班表是用来描述考勤组内人员每天按哪个班次进行上班。目前班表支持按一个整月对一位或多位人员进行排班。 6839 func (builder *BatchCreateUserDailyShiftReqBuilder) Body(body *BatchCreateUserDailyShiftReqBody) *BatchCreateUserDailyShiftReqBuilder { 6840 builder.body = body 6841 return builder 6842 } 6843 6844 func (builder *BatchCreateUserDailyShiftReqBuilder) Build() *BatchCreateUserDailyShiftReq { 6845 req := &BatchCreateUserDailyShiftReq{} 6846 req.apiReq = &larkcore.ApiReq{} 6847 req.apiReq.QueryParams = builder.apiReq.QueryParams 6848 req.apiReq.Body = builder.body 6849 return req 6850 } 6851 6852 type BatchCreateUserDailyShiftReqBody struct { 6853 UserDailyShifts []*UserDailyShift `json:"user_daily_shifts,omitempty"` // 班表信息列表 6854 OperatorId *string `json:"operator_id,omitempty"` // 操作人uid,如果您未操作[考勤管理后台“API 接入”流程](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/attendance-development-guidelines),则此字段为必填字段 6855 } 6856 6857 type BatchCreateUserDailyShiftReq struct { 6858 apiReq *larkcore.ApiReq 6859 Body *BatchCreateUserDailyShiftReqBody `body:""` 6860 } 6861 6862 type BatchCreateUserDailyShiftRespData struct { 6863 UserDailyShifts []*UserDailyShift `json:"user_daily_shifts,omitempty"` // 班表信息列表 6864 } 6865 6866 type BatchCreateUserDailyShiftResp struct { 6867 *larkcore.ApiResp `json:"-"` 6868 larkcore.CodeError 6869 Data *BatchCreateUserDailyShiftRespData `json:"data"` // 业务数据 6870 } 6871 6872 func (resp *BatchCreateUserDailyShiftResp) Success() bool { 6873 return resp.Code == 0 6874 } 6875 6876 type QueryUserDailyShiftReqBodyBuilder struct { 6877 userIds []string // employee_no 或 employee_id 列表 6878 userIdsFlag bool 6879 checkDateFrom int // 查询的起始工作日 6880 checkDateFromFlag bool 6881 checkDateTo int // 查询的结束工作日 6882 checkDateToFlag bool 6883 } 6884 6885 func NewQueryUserDailyShiftReqBodyBuilder() *QueryUserDailyShiftReqBodyBuilder { 6886 builder := &QueryUserDailyShiftReqBodyBuilder{} 6887 return builder 6888 } 6889 6890 // employee_no 或 employee_id 列表 6891 // 6892 //示例值:["abd754f7"] 6893 func (builder *QueryUserDailyShiftReqBodyBuilder) UserIds(userIds []string) *QueryUserDailyShiftReqBodyBuilder { 6894 builder.userIds = userIds 6895 builder.userIdsFlag = true 6896 return builder 6897 } 6898 6899 // 查询的起始工作日 6900 // 6901 //示例值:20190817 6902 func (builder *QueryUserDailyShiftReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserDailyShiftReqBodyBuilder { 6903 builder.checkDateFrom = checkDateFrom 6904 builder.checkDateFromFlag = true 6905 return builder 6906 } 6907 6908 // 查询的结束工作日 6909 // 6910 //示例值:20190820 6911 func (builder *QueryUserDailyShiftReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserDailyShiftReqBodyBuilder { 6912 builder.checkDateTo = checkDateTo 6913 builder.checkDateToFlag = true 6914 return builder 6915 } 6916 6917 func (builder *QueryUserDailyShiftReqBodyBuilder) Build() *QueryUserDailyShiftReqBody { 6918 req := &QueryUserDailyShiftReqBody{} 6919 if builder.userIdsFlag { 6920 req.UserIds = builder.userIds 6921 } 6922 if builder.checkDateFromFlag { 6923 req.CheckDateFrom = &builder.checkDateFrom 6924 } 6925 if builder.checkDateToFlag { 6926 req.CheckDateTo = &builder.checkDateTo 6927 } 6928 return req 6929 } 6930 6931 type QueryUserDailyShiftPathReqBodyBuilder struct { 6932 userIds []string // employee_no 或 employee_id 列表 6933 userIdsFlag bool 6934 checkDateFrom int // 查询的起始工作日 6935 checkDateFromFlag bool 6936 checkDateTo int // 查询的结束工作日 6937 checkDateToFlag bool 6938 } 6939 6940 func NewQueryUserDailyShiftPathReqBodyBuilder() *QueryUserDailyShiftPathReqBodyBuilder { 6941 builder := &QueryUserDailyShiftPathReqBodyBuilder{} 6942 return builder 6943 } 6944 6945 // employee_no 或 employee_id 列表 6946 // 6947 // 示例值:["abd754f7"] 6948 func (builder *QueryUserDailyShiftPathReqBodyBuilder) UserIds(userIds []string) *QueryUserDailyShiftPathReqBodyBuilder { 6949 builder.userIds = userIds 6950 builder.userIdsFlag = true 6951 return builder 6952 } 6953 6954 // 查询的起始工作日 6955 // 6956 // 示例值:20190817 6957 func (builder *QueryUserDailyShiftPathReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserDailyShiftPathReqBodyBuilder { 6958 builder.checkDateFrom = checkDateFrom 6959 builder.checkDateFromFlag = true 6960 return builder 6961 } 6962 6963 // 查询的结束工作日 6964 // 6965 // 示例值:20190820 6966 func (builder *QueryUserDailyShiftPathReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserDailyShiftPathReqBodyBuilder { 6967 builder.checkDateTo = checkDateTo 6968 builder.checkDateToFlag = true 6969 return builder 6970 } 6971 6972 func (builder *QueryUserDailyShiftPathReqBodyBuilder) Build() (*QueryUserDailyShiftReqBody, error) { 6973 req := &QueryUserDailyShiftReqBody{} 6974 if builder.userIdsFlag { 6975 req.UserIds = builder.userIds 6976 } 6977 if builder.checkDateFromFlag { 6978 req.CheckDateFrom = &builder.checkDateFrom 6979 } 6980 if builder.checkDateToFlag { 6981 req.CheckDateTo = &builder.checkDateTo 6982 } 6983 return req, nil 6984 } 6985 6986 type QueryUserDailyShiftReqBuilder struct { 6987 apiReq *larkcore.ApiReq 6988 body *QueryUserDailyShiftReqBody 6989 } 6990 6991 func NewQueryUserDailyShiftReqBuilder() *QueryUserDailyShiftReqBuilder { 6992 builder := &QueryUserDailyShiftReqBuilder{} 6993 builder.apiReq = &larkcore.ApiReq{ 6994 PathParams: larkcore.PathParams{}, 6995 QueryParams: larkcore.QueryParams{}, 6996 } 6997 return builder 6998 } 6999 7000 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 7001 // 7002 // 示例值:employee_id 7003 func (builder *QueryUserDailyShiftReqBuilder) EmployeeType(employeeType string) *QueryUserDailyShiftReqBuilder { 7004 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7005 return builder 7006 } 7007 7008 // 支持查询多个用户的排班情况,查询的时间跨度不能超过 30 天。 7009 func (builder *QueryUserDailyShiftReqBuilder) Body(body *QueryUserDailyShiftReqBody) *QueryUserDailyShiftReqBuilder { 7010 builder.body = body 7011 return builder 7012 } 7013 7014 func (builder *QueryUserDailyShiftReqBuilder) Build() *QueryUserDailyShiftReq { 7015 req := &QueryUserDailyShiftReq{} 7016 req.apiReq = &larkcore.ApiReq{} 7017 req.apiReq.QueryParams = builder.apiReq.QueryParams 7018 req.apiReq.Body = builder.body 7019 return req 7020 } 7021 7022 type QueryUserDailyShiftReqBody struct { 7023 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表 7024 CheckDateFrom *int `json:"check_date_from,omitempty"` // 查询的起始工作日 7025 CheckDateTo *int `json:"check_date_to,omitempty"` // 查询的结束工作日 7026 } 7027 7028 type QueryUserDailyShiftReq struct { 7029 apiReq *larkcore.ApiReq 7030 Body *QueryUserDailyShiftReqBody `body:""` 7031 } 7032 7033 type QueryUserDailyShiftRespData struct { 7034 UserDailyShifts []*UserDailyShift `json:"user_daily_shifts,omitempty"` // 班表信息列表 7035 } 7036 7037 type QueryUserDailyShiftResp struct { 7038 *larkcore.ApiResp `json:"-"` 7039 larkcore.CodeError 7040 Data *QueryUserDailyShiftRespData `json:"data"` // 业务数据 7041 } 7042 7043 func (resp *QueryUserDailyShiftResp) Success() bool { 7044 return resp.Code == 0 7045 } 7046 7047 type BatchCreateUserFlowReqBodyBuilder struct { 7048 flowRecords []*UserFlow // 打卡流水记录列表 7049 flowRecordsFlag bool 7050 } 7051 7052 func NewBatchCreateUserFlowReqBodyBuilder() *BatchCreateUserFlowReqBodyBuilder { 7053 builder := &BatchCreateUserFlowReqBodyBuilder{} 7054 return builder 7055 } 7056 7057 // 打卡流水记录列表 7058 // 7059 //示例值: 7060 func (builder *BatchCreateUserFlowReqBodyBuilder) FlowRecords(flowRecords []*UserFlow) *BatchCreateUserFlowReqBodyBuilder { 7061 builder.flowRecords = flowRecords 7062 builder.flowRecordsFlag = true 7063 return builder 7064 } 7065 7066 func (builder *BatchCreateUserFlowReqBodyBuilder) Build() *BatchCreateUserFlowReqBody { 7067 req := &BatchCreateUserFlowReqBody{} 7068 if builder.flowRecordsFlag { 7069 req.FlowRecords = builder.flowRecords 7070 } 7071 return req 7072 } 7073 7074 type BatchCreateUserFlowPathReqBodyBuilder struct { 7075 flowRecords []*UserFlow // 打卡流水记录列表 7076 flowRecordsFlag bool 7077 } 7078 7079 func NewBatchCreateUserFlowPathReqBodyBuilder() *BatchCreateUserFlowPathReqBodyBuilder { 7080 builder := &BatchCreateUserFlowPathReqBodyBuilder{} 7081 return builder 7082 } 7083 7084 // 打卡流水记录列表 7085 // 7086 // 示例值: 7087 func (builder *BatchCreateUserFlowPathReqBodyBuilder) FlowRecords(flowRecords []*UserFlow) *BatchCreateUserFlowPathReqBodyBuilder { 7088 builder.flowRecords = flowRecords 7089 builder.flowRecordsFlag = true 7090 return builder 7091 } 7092 7093 func (builder *BatchCreateUserFlowPathReqBodyBuilder) Build() (*BatchCreateUserFlowReqBody, error) { 7094 req := &BatchCreateUserFlowReqBody{} 7095 if builder.flowRecordsFlag { 7096 req.FlowRecords = builder.flowRecords 7097 } 7098 return req, nil 7099 } 7100 7101 type BatchCreateUserFlowReqBuilder struct { 7102 apiReq *larkcore.ApiReq 7103 body *BatchCreateUserFlowReqBody 7104 } 7105 7106 func NewBatchCreateUserFlowReqBuilder() *BatchCreateUserFlowReqBuilder { 7107 builder := &BatchCreateUserFlowReqBuilder{} 7108 builder.apiReq = &larkcore.ApiReq{ 7109 PathParams: larkcore.PathParams{}, 7110 QueryParams: larkcore.QueryParams{}, 7111 } 7112 return builder 7113 } 7114 7115 // 请求体和响应体中的 user_id 和 creator_id 的员工工号类型 7116 // 7117 // 示例值:employee_id 7118 func (builder *BatchCreateUserFlowReqBuilder) EmployeeType(employeeType string) *BatchCreateUserFlowReqBuilder { 7119 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7120 return builder 7121 } 7122 7123 // 导入授权内员工的打卡流水记录。导入后,会根据员工所在的考勤组班次规则,计算最终的打卡状态与结果。 7124 func (builder *BatchCreateUserFlowReqBuilder) Body(body *BatchCreateUserFlowReqBody) *BatchCreateUserFlowReqBuilder { 7125 builder.body = body 7126 return builder 7127 } 7128 7129 func (builder *BatchCreateUserFlowReqBuilder) Build() *BatchCreateUserFlowReq { 7130 req := &BatchCreateUserFlowReq{} 7131 req.apiReq = &larkcore.ApiReq{} 7132 req.apiReq.QueryParams = builder.apiReq.QueryParams 7133 req.apiReq.Body = builder.body 7134 return req 7135 } 7136 7137 type BatchCreateUserFlowReqBody struct { 7138 FlowRecords []*UserFlow `json:"flow_records,omitempty"` // 打卡流水记录列表 7139 } 7140 7141 type BatchCreateUserFlowReq struct { 7142 apiReq *larkcore.ApiReq 7143 Body *BatchCreateUserFlowReqBody `body:""` 7144 } 7145 7146 type BatchCreateUserFlowRespData struct { 7147 FlowRecords []*UserFlow `json:"flow_records,omitempty"` // 打卡流水记录列表 7148 } 7149 7150 type BatchCreateUserFlowResp struct { 7151 *larkcore.ApiResp `json:"-"` 7152 larkcore.CodeError 7153 Data *BatchCreateUserFlowRespData `json:"data"` // 业务数据 7154 } 7155 7156 func (resp *BatchCreateUserFlowResp) Success() bool { 7157 return resp.Code == 0 7158 } 7159 7160 type GetUserFlowReqBuilder struct { 7161 apiReq *larkcore.ApiReq 7162 } 7163 7164 func NewGetUserFlowReqBuilder() *GetUserFlowReqBuilder { 7165 builder := &GetUserFlowReqBuilder{} 7166 builder.apiReq = &larkcore.ApiReq{ 7167 PathParams: larkcore.PathParams{}, 7168 QueryParams: larkcore.QueryParams{}, 7169 } 7170 return builder 7171 } 7172 7173 // 打卡流水记录 ID,获取方式:1)[批量查询打卡流水记录](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_flow/query) 2)[获取打卡结果](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_task/query) 3)[导入打卡流水记录](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_flow/batch_create) 7174 // 7175 // 示例值:6708236686834352397 7176 func (builder *GetUserFlowReqBuilder) UserFlowId(userFlowId string) *GetUserFlowReqBuilder { 7177 builder.apiReq.PathParams.Set("user_flow_id", fmt.Sprint(userFlowId)) 7178 return builder 7179 } 7180 7181 // 响应体中的 user_id 和 creator_id 的员工工号类型 7182 // 7183 // 示例值:employee_id 7184 func (builder *GetUserFlowReqBuilder) EmployeeType(employeeType string) *GetUserFlowReqBuilder { 7185 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7186 return builder 7187 } 7188 7189 func (builder *GetUserFlowReqBuilder) Build() *GetUserFlowReq { 7190 req := &GetUserFlowReq{} 7191 req.apiReq = &larkcore.ApiReq{} 7192 req.apiReq.PathParams = builder.apiReq.PathParams 7193 req.apiReq.QueryParams = builder.apiReq.QueryParams 7194 return req 7195 } 7196 7197 type GetUserFlowReq struct { 7198 apiReq *larkcore.ApiReq 7199 } 7200 7201 type GetUserFlowRespData struct { 7202 UserId *string `json:"user_id,omitempty"` // 用户工号 7203 CreatorId *string `json:"creator_id,omitempty"` // 记录创建者的工号 7204 LocationName *string `json:"location_name,omitempty"` // 打卡位置名称信息 7205 CheckTime *string `json:"check_time,omitempty"` // 打卡时间,精确到秒的时间戳 7206 Comment *string `json:"comment,omitempty"` // 打卡备注 7207 RecordId *string `json:"record_id,omitempty"` // 打卡记录ID 7208 7209 Ssid *string `json:"ssid,omitempty"` // 打卡wifi ssid 7210 Bssid *string `json:"bssid,omitempty"` // 打卡wifi MAC地址 7211 IsField *bool `json:"is_field,omitempty"` // 是否为外勤打卡 7212 IsWifi *bool `json:"is_wifi,omitempty"` // 是否为wifi打卡 7213 Type *int `json:"type,omitempty"` // 记录生成方式 7214 PhotoUrls []string `json:"photo_urls,omitempty"` // 打卡照片列表 7215 7216 CheckResult *string `json:"check_result,omitempty"` // 打卡结果 7217 } 7218 7219 type GetUserFlowResp struct { 7220 *larkcore.ApiResp `json:"-"` 7221 larkcore.CodeError 7222 Data *GetUserFlowRespData `json:"data"` // 业务数据 7223 } 7224 7225 func (resp *GetUserFlowResp) Success() bool { 7226 return resp.Code == 0 7227 } 7228 7229 type QueryUserFlowReqBodyBuilder struct { 7230 userIds []string // employee_no 或 employee_id 列表,长度不超过 50 7231 userIdsFlag bool 7232 checkTimeFrom string // 查询的起始时间,时间戳 7233 checkTimeFromFlag bool 7234 checkTimeTo string // 查询的结束时间,时间戳 7235 checkTimeToFlag bool 7236 } 7237 7238 func NewQueryUserFlowReqBodyBuilder() *QueryUserFlowReqBodyBuilder { 7239 builder := &QueryUserFlowReqBodyBuilder{} 7240 return builder 7241 } 7242 7243 // employee_no 或 employee_id 列表,长度不超过 50 7244 // 7245 //示例值:[ "abd754f7"] 7246 func (builder *QueryUserFlowReqBodyBuilder) UserIds(userIds []string) *QueryUserFlowReqBodyBuilder { 7247 builder.userIds = userIds 7248 builder.userIdsFlag = true 7249 return builder 7250 } 7251 7252 // 查询的起始时间,时间戳 7253 // 7254 //示例值:1566641088 7255 func (builder *QueryUserFlowReqBodyBuilder) CheckTimeFrom(checkTimeFrom string) *QueryUserFlowReqBodyBuilder { 7256 builder.checkTimeFrom = checkTimeFrom 7257 builder.checkTimeFromFlag = true 7258 return builder 7259 } 7260 7261 // 查询的结束时间,时间戳 7262 // 7263 //示例值:1566641088 7264 func (builder *QueryUserFlowReqBodyBuilder) CheckTimeTo(checkTimeTo string) *QueryUserFlowReqBodyBuilder { 7265 builder.checkTimeTo = checkTimeTo 7266 builder.checkTimeToFlag = true 7267 return builder 7268 } 7269 7270 func (builder *QueryUserFlowReqBodyBuilder) Build() *QueryUserFlowReqBody { 7271 req := &QueryUserFlowReqBody{} 7272 if builder.userIdsFlag { 7273 req.UserIds = builder.userIds 7274 } 7275 if builder.checkTimeFromFlag { 7276 req.CheckTimeFrom = &builder.checkTimeFrom 7277 } 7278 if builder.checkTimeToFlag { 7279 req.CheckTimeTo = &builder.checkTimeTo 7280 } 7281 return req 7282 } 7283 7284 type QueryUserFlowPathReqBodyBuilder struct { 7285 userIds []string // employee_no 或 employee_id 列表,长度不超过 50 7286 userIdsFlag bool 7287 checkTimeFrom string // 查询的起始时间,时间戳 7288 checkTimeFromFlag bool 7289 checkTimeTo string // 查询的结束时间,时间戳 7290 checkTimeToFlag bool 7291 } 7292 7293 func NewQueryUserFlowPathReqBodyBuilder() *QueryUserFlowPathReqBodyBuilder { 7294 builder := &QueryUserFlowPathReqBodyBuilder{} 7295 return builder 7296 } 7297 7298 // employee_no 或 employee_id 列表,长度不超过 50 7299 // 7300 // 示例值:[ "abd754f7"] 7301 func (builder *QueryUserFlowPathReqBodyBuilder) UserIds(userIds []string) *QueryUserFlowPathReqBodyBuilder { 7302 builder.userIds = userIds 7303 builder.userIdsFlag = true 7304 return builder 7305 } 7306 7307 // 查询的起始时间,时间戳 7308 // 7309 // 示例值:1566641088 7310 func (builder *QueryUserFlowPathReqBodyBuilder) CheckTimeFrom(checkTimeFrom string) *QueryUserFlowPathReqBodyBuilder { 7311 builder.checkTimeFrom = checkTimeFrom 7312 builder.checkTimeFromFlag = true 7313 return builder 7314 } 7315 7316 // 查询的结束时间,时间戳 7317 // 7318 // 示例值:1566641088 7319 func (builder *QueryUserFlowPathReqBodyBuilder) CheckTimeTo(checkTimeTo string) *QueryUserFlowPathReqBodyBuilder { 7320 builder.checkTimeTo = checkTimeTo 7321 builder.checkTimeToFlag = true 7322 return builder 7323 } 7324 7325 func (builder *QueryUserFlowPathReqBodyBuilder) Build() (*QueryUserFlowReqBody, error) { 7326 req := &QueryUserFlowReqBody{} 7327 if builder.userIdsFlag { 7328 req.UserIds = builder.userIds 7329 } 7330 if builder.checkTimeFromFlag { 7331 req.CheckTimeFrom = &builder.checkTimeFrom 7332 } 7333 if builder.checkTimeToFlag { 7334 req.CheckTimeTo = &builder.checkTimeTo 7335 } 7336 return req, nil 7337 } 7338 7339 type QueryUserFlowReqBuilder struct { 7340 apiReq *larkcore.ApiReq 7341 body *QueryUserFlowReqBody 7342 } 7343 7344 func NewQueryUserFlowReqBuilder() *QueryUserFlowReqBuilder { 7345 builder := &QueryUserFlowReqBuilder{} 7346 builder.apiReq = &larkcore.ApiReq{ 7347 PathParams: larkcore.PathParams{}, 7348 QueryParams: larkcore.QueryParams{}, 7349 } 7350 return builder 7351 } 7352 7353 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 7354 // 7355 // 示例值:employee_id 7356 func (builder *QueryUserFlowReqBuilder) EmployeeType(employeeType string) *QueryUserFlowReqBuilder { 7357 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7358 return builder 7359 } 7360 7361 // 由于新入职用户可以复用已离职用户的employee_no/employee_id。如果true,返回employee_no/employee_id对应的所有在职+离职用户数据;如果false,只返回employee_no/employee_id对应的在职或最近一个离职用户数据 7362 // 7363 // 示例值:true 7364 func (builder *QueryUserFlowReqBuilder) IncludeTerminatedUser(includeTerminatedUser bool) *QueryUserFlowReqBuilder { 7365 builder.apiReq.QueryParams.Set("include_terminated_user", fmt.Sprint(includeTerminatedUser)) 7366 return builder 7367 } 7368 7369 // 批量查询授权内员工的实际打卡流水记录。例如,企业给一个员工设定的班次是上午 9 点和下午 6 点各打一次上下班卡,但是该员工在这期间打了多次卡,该接口会把所有的打卡记录都返回。 7370 func (builder *QueryUserFlowReqBuilder) Body(body *QueryUserFlowReqBody) *QueryUserFlowReqBuilder { 7371 builder.body = body 7372 return builder 7373 } 7374 7375 func (builder *QueryUserFlowReqBuilder) Build() *QueryUserFlowReq { 7376 req := &QueryUserFlowReq{} 7377 req.apiReq = &larkcore.ApiReq{} 7378 req.apiReq.QueryParams = builder.apiReq.QueryParams 7379 req.apiReq.Body = builder.body 7380 return req 7381 } 7382 7383 type QueryUserFlowReqBody struct { 7384 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表,长度不超过 50 7385 CheckTimeFrom *string `json:"check_time_from,omitempty"` // 查询的起始时间,时间戳 7386 CheckTimeTo *string `json:"check_time_to,omitempty"` // 查询的结束时间,时间戳 7387 } 7388 7389 type QueryUserFlowReq struct { 7390 apiReq *larkcore.ApiReq 7391 Body *QueryUserFlowReqBody `body:""` 7392 } 7393 7394 type QueryUserFlowRespData struct { 7395 UserFlowResults []*UserFlow `json:"user_flow_results,omitempty"` // 打卡记录列表 7396 } 7397 7398 type QueryUserFlowResp struct { 7399 *larkcore.ApiResp `json:"-"` 7400 larkcore.CodeError 7401 Data *QueryUserFlowRespData `json:"data"` // 业务数据 7402 } 7403 7404 func (resp *QueryUserFlowResp) Success() bool { 7405 return resp.Code == 0 7406 } 7407 7408 type ModifyUserSettingReqBodyBuilder struct { 7409 userSetting *UserSetting // 用户设置 7410 userSettingFlag bool 7411 } 7412 7413 func NewModifyUserSettingReqBodyBuilder() *ModifyUserSettingReqBodyBuilder { 7414 builder := &ModifyUserSettingReqBodyBuilder{} 7415 return builder 7416 } 7417 7418 // 用户设置 7419 // 7420 //示例值: 7421 func (builder *ModifyUserSettingReqBodyBuilder) UserSetting(userSetting *UserSetting) *ModifyUserSettingReqBodyBuilder { 7422 builder.userSetting = userSetting 7423 builder.userSettingFlag = true 7424 return builder 7425 } 7426 7427 func (builder *ModifyUserSettingReqBodyBuilder) Build() *ModifyUserSettingReqBody { 7428 req := &ModifyUserSettingReqBody{} 7429 if builder.userSettingFlag { 7430 req.UserSetting = builder.userSetting 7431 } 7432 return req 7433 } 7434 7435 type ModifyUserSettingPathReqBodyBuilder struct { 7436 userSetting *UserSetting // 用户设置 7437 userSettingFlag bool 7438 } 7439 7440 func NewModifyUserSettingPathReqBodyBuilder() *ModifyUserSettingPathReqBodyBuilder { 7441 builder := &ModifyUserSettingPathReqBodyBuilder{} 7442 return builder 7443 } 7444 7445 // 用户设置 7446 // 7447 // 示例值: 7448 func (builder *ModifyUserSettingPathReqBodyBuilder) UserSetting(userSetting *UserSetting) *ModifyUserSettingPathReqBodyBuilder { 7449 builder.userSetting = userSetting 7450 builder.userSettingFlag = true 7451 return builder 7452 } 7453 7454 func (builder *ModifyUserSettingPathReqBodyBuilder) Build() (*ModifyUserSettingReqBody, error) { 7455 req := &ModifyUserSettingReqBody{} 7456 if builder.userSettingFlag { 7457 req.UserSetting = builder.userSetting 7458 } 7459 return req, nil 7460 } 7461 7462 type ModifyUserSettingReqBuilder struct { 7463 apiReq *larkcore.ApiReq 7464 body *ModifyUserSettingReqBody 7465 } 7466 7467 func NewModifyUserSettingReqBuilder() *ModifyUserSettingReqBuilder { 7468 builder := &ModifyUserSettingReqBuilder{} 7469 builder.apiReq = &larkcore.ApiReq{ 7470 PathParams: larkcore.PathParams{}, 7471 QueryParams: larkcore.QueryParams{}, 7472 } 7473 return builder 7474 } 7475 7476 // 请求体和响应体中的 user_id 的员工工号类型 7477 // 7478 // 示例值:employee_id 7479 func (builder *ModifyUserSettingReqBuilder) EmployeeType(employeeType string) *ModifyUserSettingReqBuilder { 7480 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7481 return builder 7482 } 7483 7484 // 修改授权内员工的用户设置信息,包括人脸照片文件 ID。 7485 func (builder *ModifyUserSettingReqBuilder) Body(body *ModifyUserSettingReqBody) *ModifyUserSettingReqBuilder { 7486 builder.body = body 7487 return builder 7488 } 7489 7490 func (builder *ModifyUserSettingReqBuilder) Build() *ModifyUserSettingReq { 7491 req := &ModifyUserSettingReq{} 7492 req.apiReq = &larkcore.ApiReq{} 7493 req.apiReq.QueryParams = builder.apiReq.QueryParams 7494 req.apiReq.Body = builder.body 7495 return req 7496 } 7497 7498 type ModifyUserSettingReqBody struct { 7499 UserSetting *UserSetting `json:"user_setting,omitempty"` // 用户设置 7500 } 7501 7502 type ModifyUserSettingReq struct { 7503 apiReq *larkcore.ApiReq 7504 Body *ModifyUserSettingReqBody `body:""` 7505 } 7506 7507 type ModifyUserSettingRespData struct { 7508 UserSetting *UserSetting `json:"user_setting,omitempty"` // 用户设置 7509 } 7510 7511 type ModifyUserSettingResp struct { 7512 *larkcore.ApiResp `json:"-"` 7513 larkcore.CodeError 7514 Data *ModifyUserSettingRespData `json:"data"` // 业务数据 7515 } 7516 7517 func (resp *ModifyUserSettingResp) Success() bool { 7518 return resp.Code == 0 7519 } 7520 7521 type QueryUserSettingReqBodyBuilder struct { 7522 userIds []string // employee_no 或 employee_id 列表 7523 userIdsFlag bool 7524 } 7525 7526 func NewQueryUserSettingReqBodyBuilder() *QueryUserSettingReqBodyBuilder { 7527 builder := &QueryUserSettingReqBodyBuilder{} 7528 return builder 7529 } 7530 7531 // employee_no 或 employee_id 列表 7532 // 7533 //示例值:["abd754f7"] 7534 func (builder *QueryUserSettingReqBodyBuilder) UserIds(userIds []string) *QueryUserSettingReqBodyBuilder { 7535 builder.userIds = userIds 7536 builder.userIdsFlag = true 7537 return builder 7538 } 7539 7540 func (builder *QueryUserSettingReqBodyBuilder) Build() *QueryUserSettingReqBody { 7541 req := &QueryUserSettingReqBody{} 7542 if builder.userIdsFlag { 7543 req.UserIds = builder.userIds 7544 } 7545 return req 7546 } 7547 7548 type QueryUserSettingPathReqBodyBuilder struct { 7549 userIds []string // employee_no 或 employee_id 列表 7550 userIdsFlag bool 7551 } 7552 7553 func NewQueryUserSettingPathReqBodyBuilder() *QueryUserSettingPathReqBodyBuilder { 7554 builder := &QueryUserSettingPathReqBodyBuilder{} 7555 return builder 7556 } 7557 7558 // employee_no 或 employee_id 列表 7559 // 7560 // 示例值:["abd754f7"] 7561 func (builder *QueryUserSettingPathReqBodyBuilder) UserIds(userIds []string) *QueryUserSettingPathReqBodyBuilder { 7562 builder.userIds = userIds 7563 builder.userIdsFlag = true 7564 return builder 7565 } 7566 7567 func (builder *QueryUserSettingPathReqBodyBuilder) Build() (*QueryUserSettingReqBody, error) { 7568 req := &QueryUserSettingReqBody{} 7569 if builder.userIdsFlag { 7570 req.UserIds = builder.userIds 7571 } 7572 return req, nil 7573 } 7574 7575 type QueryUserSettingReqBuilder struct { 7576 apiReq *larkcore.ApiReq 7577 body *QueryUserSettingReqBody 7578 } 7579 7580 func NewQueryUserSettingReqBuilder() *QueryUserSettingReqBuilder { 7581 builder := &QueryUserSettingReqBuilder{} 7582 builder.apiReq = &larkcore.ApiReq{ 7583 PathParams: larkcore.PathParams{}, 7584 QueryParams: larkcore.QueryParams{}, 7585 } 7586 return builder 7587 } 7588 7589 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 7590 // 7591 // 示例值:employee_id 7592 func (builder *QueryUserSettingReqBuilder) EmployeeType(employeeType string) *QueryUserSettingReqBuilder { 7593 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7594 return builder 7595 } 7596 7597 // 批量查询授权内员工的用户设置信息,包括人脸照片文件 ID、人脸照片更新时间。 7598 func (builder *QueryUserSettingReqBuilder) Body(body *QueryUserSettingReqBody) *QueryUserSettingReqBuilder { 7599 builder.body = body 7600 return builder 7601 } 7602 7603 func (builder *QueryUserSettingReqBuilder) Build() *QueryUserSettingReq { 7604 req := &QueryUserSettingReq{} 7605 req.apiReq = &larkcore.ApiReq{} 7606 req.apiReq.QueryParams = builder.apiReq.QueryParams 7607 req.apiReq.Body = builder.body 7608 return req 7609 } 7610 7611 type QueryUserSettingReqBody struct { 7612 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表 7613 } 7614 7615 type QueryUserSettingReq struct { 7616 apiReq *larkcore.ApiReq 7617 Body *QueryUserSettingReqBody `body:""` 7618 } 7619 7620 type QueryUserSettingRespData struct { 7621 UserSettings []*UserSetting `json:"user_settings,omitempty"` // 用户设置信息列表 7622 } 7623 7624 type QueryUserSettingResp struct { 7625 *larkcore.ApiResp `json:"-"` 7626 larkcore.CodeError 7627 Data *QueryUserSettingRespData `json:"data"` // 业务数据 7628 } 7629 7630 func (resp *QueryUserSettingResp) Success() bool { 7631 return resp.Code == 0 7632 } 7633 7634 type QueryUserStatsDataReqBodyBuilder struct { 7635 locale string // 语言类型 7636 localeFlag bool 7637 statsType string // 统计类型 7638 statsTypeFlag bool 7639 startDate int // 开始时间 7640 startDateFlag bool 7641 endDate int // 结束时间;(时间间隔不超过 40 天) 7642 endDateFlag bool 7643 userIds []string // 查询的用户 ID 列表;(用户数量不超过 200) 7644 userIdsFlag bool 7645 needHistory bool // 是否需要历史数据 7646 needHistoryFlag bool 7647 currentGroupOnly bool // 只展示当前考勤组 7648 currentGroupOnlyFlag bool 7649 userId string // 查询用户id,同【更新统计设置】、【查询统计设置】user_id 7650 userIdFlag bool 7651 } 7652 7653 func NewQueryUserStatsDataReqBodyBuilder() *QueryUserStatsDataReqBodyBuilder { 7654 builder := &QueryUserStatsDataReqBodyBuilder{} 7655 return builder 7656 } 7657 7658 // 语言类型 7659 // 7660 //示例值:zh 7661 func (builder *QueryUserStatsDataReqBodyBuilder) Locale(locale string) *QueryUserStatsDataReqBodyBuilder { 7662 builder.locale = locale 7663 builder.localeFlag = true 7664 return builder 7665 } 7666 7667 // 统计类型 7668 // 7669 //示例值:month 7670 func (builder *QueryUserStatsDataReqBodyBuilder) StatsType(statsType string) *QueryUserStatsDataReqBodyBuilder { 7671 builder.statsType = statsType 7672 builder.statsTypeFlag = true 7673 return builder 7674 } 7675 7676 // 开始时间 7677 // 7678 //示例值:20210316 7679 func (builder *QueryUserStatsDataReqBodyBuilder) StartDate(startDate int) *QueryUserStatsDataReqBodyBuilder { 7680 builder.startDate = startDate 7681 builder.startDateFlag = true 7682 return builder 7683 } 7684 7685 // 结束时间;(时间间隔不超过 40 天) 7686 // 7687 //示例值:20210323 7688 func (builder *QueryUserStatsDataReqBodyBuilder) EndDate(endDate int) *QueryUserStatsDataReqBodyBuilder { 7689 builder.endDate = endDate 7690 builder.endDateFlag = true 7691 return builder 7692 } 7693 7694 // 查询的用户 ID 列表;(用户数量不超过 200) 7695 // 7696 //示例值:[; "ec8ddg56",; "4dbb52f2",; "4167842e"; ] 7697 func (builder *QueryUserStatsDataReqBodyBuilder) UserIds(userIds []string) *QueryUserStatsDataReqBodyBuilder { 7698 builder.userIds = userIds 7699 builder.userIdsFlag = true 7700 return builder 7701 } 7702 7703 // 是否需要历史数据 7704 // 7705 //示例值:true 7706 func (builder *QueryUserStatsDataReqBodyBuilder) NeedHistory(needHistory bool) *QueryUserStatsDataReqBodyBuilder { 7707 builder.needHistory = needHistory 7708 builder.needHistoryFlag = true 7709 return builder 7710 } 7711 7712 // 只展示当前考勤组 7713 // 7714 //示例值:true 7715 func (builder *QueryUserStatsDataReqBodyBuilder) CurrentGroupOnly(currentGroupOnly bool) *QueryUserStatsDataReqBodyBuilder { 7716 builder.currentGroupOnly = currentGroupOnly 7717 builder.currentGroupOnlyFlag = true 7718 return builder 7719 } 7720 7721 // 查询用户id,同【更新统计设置】、【查询统计设置】user_id 7722 // 7723 //示例值:ec8ddg56 7724 func (builder *QueryUserStatsDataReqBodyBuilder) UserId(userId string) *QueryUserStatsDataReqBodyBuilder { 7725 builder.userId = userId 7726 builder.userIdFlag = true 7727 return builder 7728 } 7729 7730 func (builder *QueryUserStatsDataReqBodyBuilder) Build() *QueryUserStatsDataReqBody { 7731 req := &QueryUserStatsDataReqBody{} 7732 if builder.localeFlag { 7733 req.Locale = &builder.locale 7734 } 7735 if builder.statsTypeFlag { 7736 req.StatsType = &builder.statsType 7737 } 7738 if builder.startDateFlag { 7739 req.StartDate = &builder.startDate 7740 } 7741 if builder.endDateFlag { 7742 req.EndDate = &builder.endDate 7743 } 7744 if builder.userIdsFlag { 7745 req.UserIds = builder.userIds 7746 } 7747 if builder.needHistoryFlag { 7748 req.NeedHistory = &builder.needHistory 7749 } 7750 if builder.currentGroupOnlyFlag { 7751 req.CurrentGroupOnly = &builder.currentGroupOnly 7752 } 7753 if builder.userIdFlag { 7754 req.UserId = &builder.userId 7755 } 7756 return req 7757 } 7758 7759 type QueryUserStatsDataPathReqBodyBuilder struct { 7760 locale string // 语言类型 7761 localeFlag bool 7762 statsType string // 统计类型 7763 statsTypeFlag bool 7764 startDate int // 开始时间 7765 startDateFlag bool 7766 endDate int // 结束时间;(时间间隔不超过 40 天) 7767 endDateFlag bool 7768 userIds []string // 查询的用户 ID 列表;(用户数量不超过 200) 7769 userIdsFlag bool 7770 needHistory bool // 是否需要历史数据 7771 needHistoryFlag bool 7772 currentGroupOnly bool // 只展示当前考勤组 7773 currentGroupOnlyFlag bool 7774 userId string // 查询用户id,同【更新统计设置】、【查询统计设置】user_id 7775 userIdFlag bool 7776 } 7777 7778 func NewQueryUserStatsDataPathReqBodyBuilder() *QueryUserStatsDataPathReqBodyBuilder { 7779 builder := &QueryUserStatsDataPathReqBodyBuilder{} 7780 return builder 7781 } 7782 7783 // 语言类型 7784 // 7785 // 示例值:zh 7786 func (builder *QueryUserStatsDataPathReqBodyBuilder) Locale(locale string) *QueryUserStatsDataPathReqBodyBuilder { 7787 builder.locale = locale 7788 builder.localeFlag = true 7789 return builder 7790 } 7791 7792 // 统计类型 7793 // 7794 // 示例值:month 7795 func (builder *QueryUserStatsDataPathReqBodyBuilder) StatsType(statsType string) *QueryUserStatsDataPathReqBodyBuilder { 7796 builder.statsType = statsType 7797 builder.statsTypeFlag = true 7798 return builder 7799 } 7800 7801 // 开始时间 7802 // 7803 // 示例值:20210316 7804 func (builder *QueryUserStatsDataPathReqBodyBuilder) StartDate(startDate int) *QueryUserStatsDataPathReqBodyBuilder { 7805 builder.startDate = startDate 7806 builder.startDateFlag = true 7807 return builder 7808 } 7809 7810 // 结束时间;(时间间隔不超过 40 天) 7811 // 7812 // 示例值:20210323 7813 func (builder *QueryUserStatsDataPathReqBodyBuilder) EndDate(endDate int) *QueryUserStatsDataPathReqBodyBuilder { 7814 builder.endDate = endDate 7815 builder.endDateFlag = true 7816 return builder 7817 } 7818 7819 // 查询的用户 ID 列表;(用户数量不超过 200) 7820 // 7821 // 示例值:[; "ec8ddg56",; "4dbb52f2",; "4167842e"; ] 7822 func (builder *QueryUserStatsDataPathReqBodyBuilder) UserIds(userIds []string) *QueryUserStatsDataPathReqBodyBuilder { 7823 builder.userIds = userIds 7824 builder.userIdsFlag = true 7825 return builder 7826 } 7827 7828 // 是否需要历史数据 7829 // 7830 // 示例值:true 7831 func (builder *QueryUserStatsDataPathReqBodyBuilder) NeedHistory(needHistory bool) *QueryUserStatsDataPathReqBodyBuilder { 7832 builder.needHistory = needHistory 7833 builder.needHistoryFlag = true 7834 return builder 7835 } 7836 7837 // 只展示当前考勤组 7838 // 7839 // 示例值:true 7840 func (builder *QueryUserStatsDataPathReqBodyBuilder) CurrentGroupOnly(currentGroupOnly bool) *QueryUserStatsDataPathReqBodyBuilder { 7841 builder.currentGroupOnly = currentGroupOnly 7842 builder.currentGroupOnlyFlag = true 7843 return builder 7844 } 7845 7846 // 查询用户id,同【更新统计设置】、【查询统计设置】user_id 7847 // 7848 // 示例值:ec8ddg56 7849 func (builder *QueryUserStatsDataPathReqBodyBuilder) UserId(userId string) *QueryUserStatsDataPathReqBodyBuilder { 7850 builder.userId = userId 7851 builder.userIdFlag = true 7852 return builder 7853 } 7854 7855 func (builder *QueryUserStatsDataPathReqBodyBuilder) Build() (*QueryUserStatsDataReqBody, error) { 7856 req := &QueryUserStatsDataReqBody{} 7857 if builder.localeFlag { 7858 req.Locale = &builder.locale 7859 } 7860 if builder.statsTypeFlag { 7861 req.StatsType = &builder.statsType 7862 } 7863 if builder.startDateFlag { 7864 req.StartDate = &builder.startDate 7865 } 7866 if builder.endDateFlag { 7867 req.EndDate = &builder.endDate 7868 } 7869 if builder.userIdsFlag { 7870 req.UserIds = builder.userIds 7871 } 7872 if builder.needHistoryFlag { 7873 req.NeedHistory = &builder.needHistory 7874 } 7875 if builder.currentGroupOnlyFlag { 7876 req.CurrentGroupOnly = &builder.currentGroupOnly 7877 } 7878 if builder.userIdFlag { 7879 req.UserId = &builder.userId 7880 } 7881 return req, nil 7882 } 7883 7884 type QueryUserStatsDataReqBuilder struct { 7885 apiReq *larkcore.ApiReq 7886 body *QueryUserStatsDataReqBody 7887 } 7888 7889 func NewQueryUserStatsDataReqBuilder() *QueryUserStatsDataReqBuilder { 7890 builder := &QueryUserStatsDataReqBuilder{} 7891 builder.apiReq = &larkcore.ApiReq{ 7892 PathParams: larkcore.PathParams{}, 7893 QueryParams: larkcore.QueryParams{}, 7894 } 7895 return builder 7896 } 7897 7898 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 7899 // 7900 // 示例值:employee_id 7901 func (builder *QueryUserStatsDataReqBuilder) EmployeeType(employeeType string) *QueryUserStatsDataReqBuilder { 7902 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 7903 return builder 7904 } 7905 7906 // 查询日度统计或月度统计的统计数据。 7907 func (builder *QueryUserStatsDataReqBuilder) Body(body *QueryUserStatsDataReqBody) *QueryUserStatsDataReqBuilder { 7908 builder.body = body 7909 return builder 7910 } 7911 7912 func (builder *QueryUserStatsDataReqBuilder) Build() *QueryUserStatsDataReq { 7913 req := &QueryUserStatsDataReq{} 7914 req.apiReq = &larkcore.ApiReq{} 7915 req.apiReq.QueryParams = builder.apiReq.QueryParams 7916 req.apiReq.Body = builder.body 7917 return req 7918 } 7919 7920 type QueryUserStatsDataReqBody struct { 7921 Locale *string `json:"locale,omitempty"` // 语言类型 7922 StatsType *string `json:"stats_type,omitempty"` // 统计类型 7923 StartDate *int `json:"start_date,omitempty"` // 开始时间 7924 EndDate *int `json:"end_date,omitempty"` // 结束时间;(时间间隔不超过 40 天) 7925 UserIds []string `json:"user_ids,omitempty"` // 查询的用户 ID 列表;(用户数量不超过 200) 7926 NeedHistory *bool `json:"need_history,omitempty"` // 是否需要历史数据 7927 CurrentGroupOnly *bool `json:"current_group_only,omitempty"` // 只展示当前考勤组 7928 UserId *string `json:"user_id,omitempty"` // 查询用户id,同【更新统计设置】、【查询统计设置】user_id 7929 } 7930 7931 type QueryUserStatsDataReq struct { 7932 apiReq *larkcore.ApiReq 7933 Body *QueryUserStatsDataReqBody `body:""` 7934 } 7935 7936 type QueryUserStatsDataRespData struct { 7937 UserDatas []*UserStatsData `json:"user_datas,omitempty"` // 用户统计数据 7938 } 7939 7940 type QueryUserStatsDataResp struct { 7941 *larkcore.ApiResp `json:"-"` 7942 larkcore.CodeError 7943 Data *QueryUserStatsDataRespData `json:"data"` // 业务数据 7944 } 7945 7946 func (resp *QueryUserStatsDataResp) Success() bool { 7947 return resp.Code == 0 7948 } 7949 7950 type QueryUserStatsFieldReqBodyBuilder struct { 7951 locale string // 语言类型 7952 localeFlag bool 7953 statsType string // 统计类型 7954 statsTypeFlag bool 7955 startDate int // 开始时间 7956 startDateFlag bool 7957 endDate int // 结束时间(时间间隔不超过 40 天) 7958 endDateFlag bool 7959 } 7960 7961 func NewQueryUserStatsFieldReqBodyBuilder() *QueryUserStatsFieldReqBodyBuilder { 7962 builder := &QueryUserStatsFieldReqBodyBuilder{} 7963 return builder 7964 } 7965 7966 // 语言类型 7967 // 7968 //示例值:zh 7969 func (builder *QueryUserStatsFieldReqBodyBuilder) Locale(locale string) *QueryUserStatsFieldReqBodyBuilder { 7970 builder.locale = locale 7971 builder.localeFlag = true 7972 return builder 7973 } 7974 7975 // 统计类型 7976 // 7977 //示例值:daily 7978 func (builder *QueryUserStatsFieldReqBodyBuilder) StatsType(statsType string) *QueryUserStatsFieldReqBodyBuilder { 7979 builder.statsType = statsType 7980 builder.statsTypeFlag = true 7981 return builder 7982 } 7983 7984 // 开始时间 7985 // 7986 //示例值:20210316 7987 func (builder *QueryUserStatsFieldReqBodyBuilder) StartDate(startDate int) *QueryUserStatsFieldReqBodyBuilder { 7988 builder.startDate = startDate 7989 builder.startDateFlag = true 7990 return builder 7991 } 7992 7993 // 结束时间(时间间隔不超过 40 天) 7994 // 7995 //示例值:20210323 7996 func (builder *QueryUserStatsFieldReqBodyBuilder) EndDate(endDate int) *QueryUserStatsFieldReqBodyBuilder { 7997 builder.endDate = endDate 7998 builder.endDateFlag = true 7999 return builder 8000 } 8001 8002 func (builder *QueryUserStatsFieldReqBodyBuilder) Build() *QueryUserStatsFieldReqBody { 8003 req := &QueryUserStatsFieldReqBody{} 8004 if builder.localeFlag { 8005 req.Locale = &builder.locale 8006 } 8007 if builder.statsTypeFlag { 8008 req.StatsType = &builder.statsType 8009 } 8010 if builder.startDateFlag { 8011 req.StartDate = &builder.startDate 8012 } 8013 if builder.endDateFlag { 8014 req.EndDate = &builder.endDate 8015 } 8016 return req 8017 } 8018 8019 type QueryUserStatsFieldPathReqBodyBuilder struct { 8020 locale string // 语言类型 8021 localeFlag bool 8022 statsType string // 统计类型 8023 statsTypeFlag bool 8024 startDate int // 开始时间 8025 startDateFlag bool 8026 endDate int // 结束时间(时间间隔不超过 40 天) 8027 endDateFlag bool 8028 } 8029 8030 func NewQueryUserStatsFieldPathReqBodyBuilder() *QueryUserStatsFieldPathReqBodyBuilder { 8031 builder := &QueryUserStatsFieldPathReqBodyBuilder{} 8032 return builder 8033 } 8034 8035 // 语言类型 8036 // 8037 // 示例值:zh 8038 func (builder *QueryUserStatsFieldPathReqBodyBuilder) Locale(locale string) *QueryUserStatsFieldPathReqBodyBuilder { 8039 builder.locale = locale 8040 builder.localeFlag = true 8041 return builder 8042 } 8043 8044 // 统计类型 8045 // 8046 // 示例值:daily 8047 func (builder *QueryUserStatsFieldPathReqBodyBuilder) StatsType(statsType string) *QueryUserStatsFieldPathReqBodyBuilder { 8048 builder.statsType = statsType 8049 builder.statsTypeFlag = true 8050 return builder 8051 } 8052 8053 // 开始时间 8054 // 8055 // 示例值:20210316 8056 func (builder *QueryUserStatsFieldPathReqBodyBuilder) StartDate(startDate int) *QueryUserStatsFieldPathReqBodyBuilder { 8057 builder.startDate = startDate 8058 builder.startDateFlag = true 8059 return builder 8060 } 8061 8062 // 结束时间(时间间隔不超过 40 天) 8063 // 8064 // 示例值:20210323 8065 func (builder *QueryUserStatsFieldPathReqBodyBuilder) EndDate(endDate int) *QueryUserStatsFieldPathReqBodyBuilder { 8066 builder.endDate = endDate 8067 builder.endDateFlag = true 8068 return builder 8069 } 8070 8071 func (builder *QueryUserStatsFieldPathReqBodyBuilder) Build() (*QueryUserStatsFieldReqBody, error) { 8072 req := &QueryUserStatsFieldReqBody{} 8073 if builder.localeFlag { 8074 req.Locale = &builder.locale 8075 } 8076 if builder.statsTypeFlag { 8077 req.StatsType = &builder.statsType 8078 } 8079 if builder.startDateFlag { 8080 req.StartDate = &builder.startDate 8081 } 8082 if builder.endDateFlag { 8083 req.EndDate = &builder.endDate 8084 } 8085 return req, nil 8086 } 8087 8088 type QueryUserStatsFieldReqBuilder struct { 8089 apiReq *larkcore.ApiReq 8090 body *QueryUserStatsFieldReqBody 8091 } 8092 8093 func NewQueryUserStatsFieldReqBuilder() *QueryUserStatsFieldReqBuilder { 8094 builder := &QueryUserStatsFieldReqBuilder{} 8095 builder.apiReq = &larkcore.ApiReq{ 8096 PathParams: larkcore.PathParams{}, 8097 QueryParams: larkcore.QueryParams{}, 8098 } 8099 return builder 8100 } 8101 8102 // 响应体中的 user_id 的员工工号类型 8103 // 8104 // 示例值:employee_id 8105 func (builder *QueryUserStatsFieldReqBuilder) EmployeeType(employeeType string) *QueryUserStatsFieldReqBuilder { 8106 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8107 return builder 8108 } 8109 8110 // 查询考勤统计支持的日度统计或月度统计的统计表头。 8111 func (builder *QueryUserStatsFieldReqBuilder) Body(body *QueryUserStatsFieldReqBody) *QueryUserStatsFieldReqBuilder { 8112 builder.body = body 8113 return builder 8114 } 8115 8116 func (builder *QueryUserStatsFieldReqBuilder) Build() *QueryUserStatsFieldReq { 8117 req := &QueryUserStatsFieldReq{} 8118 req.apiReq = &larkcore.ApiReq{} 8119 req.apiReq.QueryParams = builder.apiReq.QueryParams 8120 req.apiReq.Body = builder.body 8121 return req 8122 } 8123 8124 type QueryUserStatsFieldReqBody struct { 8125 Locale *string `json:"locale,omitempty"` // 语言类型 8126 StatsType *string `json:"stats_type,omitempty"` // 统计类型 8127 StartDate *int `json:"start_date,omitempty"` // 开始时间 8128 EndDate *int `json:"end_date,omitempty"` // 结束时间(时间间隔不超过 40 天) 8129 } 8130 8131 type QueryUserStatsFieldReq struct { 8132 apiReq *larkcore.ApiReq 8133 Body *QueryUserStatsFieldReqBody `body:""` 8134 } 8135 8136 type QueryUserStatsFieldRespData struct { 8137 UserStatsField *UserStatsField `json:"user_stats_field,omitempty"` // 统计数据表头 8138 } 8139 8140 type QueryUserStatsFieldResp struct { 8141 *larkcore.ApiResp `json:"-"` 8142 larkcore.CodeError 8143 Data *QueryUserStatsFieldRespData `json:"data"` // 业务数据 8144 } 8145 8146 func (resp *QueryUserStatsFieldResp) Success() bool { 8147 return resp.Code == 0 8148 } 8149 8150 type QueryUserStatsViewReqBodyBuilder struct { 8151 locale string // 语言类型 8152 localeFlag bool 8153 statsType string // 统计类型 8154 statsTypeFlag bool 8155 userId string // 查询用户id,同【查询统计数据】、【更新统计设置】user_id 8156 userIdFlag bool 8157 } 8158 8159 func NewQueryUserStatsViewReqBodyBuilder() *QueryUserStatsViewReqBodyBuilder { 8160 builder := &QueryUserStatsViewReqBodyBuilder{} 8161 return builder 8162 } 8163 8164 // 语言类型 8165 // 8166 //示例值:zh 8167 func (builder *QueryUserStatsViewReqBodyBuilder) Locale(locale string) *QueryUserStatsViewReqBodyBuilder { 8168 builder.locale = locale 8169 builder.localeFlag = true 8170 return builder 8171 } 8172 8173 // 统计类型 8174 // 8175 //示例值:daily 8176 func (builder *QueryUserStatsViewReqBodyBuilder) StatsType(statsType string) *QueryUserStatsViewReqBodyBuilder { 8177 builder.statsType = statsType 8178 builder.statsTypeFlag = true 8179 return builder 8180 } 8181 8182 // 查询用户id,同【查询统计数据】、【更新统计设置】user_id 8183 // 8184 //示例值:dd31248a 8185 func (builder *QueryUserStatsViewReqBodyBuilder) UserId(userId string) *QueryUserStatsViewReqBodyBuilder { 8186 builder.userId = userId 8187 builder.userIdFlag = true 8188 return builder 8189 } 8190 8191 func (builder *QueryUserStatsViewReqBodyBuilder) Build() *QueryUserStatsViewReqBody { 8192 req := &QueryUserStatsViewReqBody{} 8193 if builder.localeFlag { 8194 req.Locale = &builder.locale 8195 } 8196 if builder.statsTypeFlag { 8197 req.StatsType = &builder.statsType 8198 } 8199 if builder.userIdFlag { 8200 req.UserId = &builder.userId 8201 } 8202 return req 8203 } 8204 8205 type QueryUserStatsViewPathReqBodyBuilder struct { 8206 locale string // 语言类型 8207 localeFlag bool 8208 statsType string // 统计类型 8209 statsTypeFlag bool 8210 userId string // 查询用户id,同【查询统计数据】、【更新统计设置】user_id 8211 userIdFlag bool 8212 } 8213 8214 func NewQueryUserStatsViewPathReqBodyBuilder() *QueryUserStatsViewPathReqBodyBuilder { 8215 builder := &QueryUserStatsViewPathReqBodyBuilder{} 8216 return builder 8217 } 8218 8219 // 语言类型 8220 // 8221 // 示例值:zh 8222 func (builder *QueryUserStatsViewPathReqBodyBuilder) Locale(locale string) *QueryUserStatsViewPathReqBodyBuilder { 8223 builder.locale = locale 8224 builder.localeFlag = true 8225 return builder 8226 } 8227 8228 // 统计类型 8229 // 8230 // 示例值:daily 8231 func (builder *QueryUserStatsViewPathReqBodyBuilder) StatsType(statsType string) *QueryUserStatsViewPathReqBodyBuilder { 8232 builder.statsType = statsType 8233 builder.statsTypeFlag = true 8234 return builder 8235 } 8236 8237 // 查询用户id,同【查询统计数据】、【更新统计设置】user_id 8238 // 8239 // 示例值:dd31248a 8240 func (builder *QueryUserStatsViewPathReqBodyBuilder) UserId(userId string) *QueryUserStatsViewPathReqBodyBuilder { 8241 builder.userId = userId 8242 builder.userIdFlag = true 8243 return builder 8244 } 8245 8246 func (builder *QueryUserStatsViewPathReqBodyBuilder) Build() (*QueryUserStatsViewReqBody, error) { 8247 req := &QueryUserStatsViewReqBody{} 8248 if builder.localeFlag { 8249 req.Locale = &builder.locale 8250 } 8251 if builder.statsTypeFlag { 8252 req.StatsType = &builder.statsType 8253 } 8254 if builder.userIdFlag { 8255 req.UserId = &builder.userId 8256 } 8257 return req, nil 8258 } 8259 8260 type QueryUserStatsViewReqBuilder struct { 8261 apiReq *larkcore.ApiReq 8262 body *QueryUserStatsViewReqBody 8263 } 8264 8265 func NewQueryUserStatsViewReqBuilder() *QueryUserStatsViewReqBuilder { 8266 builder := &QueryUserStatsViewReqBuilder{} 8267 builder.apiReq = &larkcore.ApiReq{ 8268 PathParams: larkcore.PathParams{}, 8269 QueryParams: larkcore.QueryParams{}, 8270 } 8271 return builder 8272 } 8273 8274 // 响应体中的 user_id 的员工工号类型 8275 // 8276 // 示例值:employee_id 8277 func (builder *QueryUserStatsViewReqBuilder) EmployeeType(employeeType string) *QueryUserStatsViewReqBuilder { 8278 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8279 return builder 8280 } 8281 8282 // 查询开发者定制的日度统计或月度统计的统计报表表头设置信息。 8283 func (builder *QueryUserStatsViewReqBuilder) Body(body *QueryUserStatsViewReqBody) *QueryUserStatsViewReqBuilder { 8284 builder.body = body 8285 return builder 8286 } 8287 8288 func (builder *QueryUserStatsViewReqBuilder) Build() *QueryUserStatsViewReq { 8289 req := &QueryUserStatsViewReq{} 8290 req.apiReq = &larkcore.ApiReq{} 8291 req.apiReq.QueryParams = builder.apiReq.QueryParams 8292 req.apiReq.Body = builder.body 8293 return req 8294 } 8295 8296 type QueryUserStatsViewReqBody struct { 8297 Locale *string `json:"locale,omitempty"` // 语言类型 8298 StatsType *string `json:"stats_type,omitempty"` // 统计类型 8299 UserId *string `json:"user_id,omitempty"` // 查询用户id,同【查询统计数据】、【更新统计设置】user_id 8300 } 8301 8302 type QueryUserStatsViewReq struct { 8303 apiReq *larkcore.ApiReq 8304 Body *QueryUserStatsViewReqBody `body:""` 8305 } 8306 8307 type QueryUserStatsViewRespData struct { 8308 View *UserStatsView `json:"view,omitempty"` // 统计视图 8309 } 8310 8311 type QueryUserStatsViewResp struct { 8312 *larkcore.ApiResp `json:"-"` 8313 larkcore.CodeError 8314 Data *QueryUserStatsViewRespData `json:"data"` // 业务数据 8315 } 8316 8317 func (resp *QueryUserStatsViewResp) Success() bool { 8318 return resp.Code == 0 8319 } 8320 8321 type UpdateUserStatsViewReqBodyBuilder struct { 8322 view *UserStatsView // 统计设置 8323 viewFlag bool 8324 } 8325 8326 func NewUpdateUserStatsViewReqBodyBuilder() *UpdateUserStatsViewReqBodyBuilder { 8327 builder := &UpdateUserStatsViewReqBodyBuilder{} 8328 return builder 8329 } 8330 8331 // 统计设置 8332 // 8333 //示例值: 8334 func (builder *UpdateUserStatsViewReqBodyBuilder) View(view *UserStatsView) *UpdateUserStatsViewReqBodyBuilder { 8335 builder.view = view 8336 builder.viewFlag = true 8337 return builder 8338 } 8339 8340 func (builder *UpdateUserStatsViewReqBodyBuilder) Build() *UpdateUserStatsViewReqBody { 8341 req := &UpdateUserStatsViewReqBody{} 8342 if builder.viewFlag { 8343 req.View = builder.view 8344 } 8345 return req 8346 } 8347 8348 type UpdateUserStatsViewPathReqBodyBuilder struct { 8349 view *UserStatsView // 统计设置 8350 viewFlag bool 8351 } 8352 8353 func NewUpdateUserStatsViewPathReqBodyBuilder() *UpdateUserStatsViewPathReqBodyBuilder { 8354 builder := &UpdateUserStatsViewPathReqBodyBuilder{} 8355 return builder 8356 } 8357 8358 // 统计设置 8359 // 8360 // 示例值: 8361 func (builder *UpdateUserStatsViewPathReqBodyBuilder) View(view *UserStatsView) *UpdateUserStatsViewPathReqBodyBuilder { 8362 builder.view = view 8363 builder.viewFlag = true 8364 return builder 8365 } 8366 8367 func (builder *UpdateUserStatsViewPathReqBodyBuilder) Build() (*UpdateUserStatsViewReqBody, error) { 8368 req := &UpdateUserStatsViewReqBody{} 8369 if builder.viewFlag { 8370 req.View = builder.view 8371 } 8372 return req, nil 8373 } 8374 8375 type UpdateUserStatsViewReqBuilder struct { 8376 apiReq *larkcore.ApiReq 8377 body *UpdateUserStatsViewReqBody 8378 } 8379 8380 func NewUpdateUserStatsViewReqBuilder() *UpdateUserStatsViewReqBuilder { 8381 builder := &UpdateUserStatsViewReqBuilder{} 8382 builder.apiReq = &larkcore.ApiReq{ 8383 PathParams: larkcore.PathParams{}, 8384 QueryParams: larkcore.QueryParams{}, 8385 } 8386 return builder 8387 } 8388 8389 // 用户视图 ID,获取方式:1)[查询统计设置](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/user_stats_view/query) 8390 // 8391 // 示例值:TmpZNU5qTTJORFF6T1RnNU5UTTNOakV6TWl0dGIyNTBhQT09 8392 func (builder *UpdateUserStatsViewReqBuilder) UserStatsViewId(userStatsViewId string) *UpdateUserStatsViewReqBuilder { 8393 builder.apiReq.PathParams.Set("user_stats_view_id", fmt.Sprint(userStatsViewId)) 8394 return builder 8395 } 8396 8397 // 员工工号类型 8398 // 8399 // 示例值:employee_id 8400 func (builder *UpdateUserStatsViewReqBuilder) EmployeeType(employeeType string) *UpdateUserStatsViewReqBuilder { 8401 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8402 return builder 8403 } 8404 8405 // 更新开发者定制的日度统计或月度统计的统计报表表头设置信息。 8406 func (builder *UpdateUserStatsViewReqBuilder) Body(body *UpdateUserStatsViewReqBody) *UpdateUserStatsViewReqBuilder { 8407 builder.body = body 8408 return builder 8409 } 8410 8411 func (builder *UpdateUserStatsViewReqBuilder) Build() *UpdateUserStatsViewReq { 8412 req := &UpdateUserStatsViewReq{} 8413 req.apiReq = &larkcore.ApiReq{} 8414 req.apiReq.PathParams = builder.apiReq.PathParams 8415 req.apiReq.QueryParams = builder.apiReq.QueryParams 8416 req.apiReq.Body = builder.body 8417 return req 8418 } 8419 8420 type UpdateUserStatsViewReqBody struct { 8421 View *UserStatsView `json:"view,omitempty"` // 统计设置 8422 } 8423 8424 type UpdateUserStatsViewReq struct { 8425 apiReq *larkcore.ApiReq 8426 Body *UpdateUserStatsViewReqBody `body:""` 8427 } 8428 8429 type UpdateUserStatsViewRespData struct { 8430 View *UserStatsView `json:"view,omitempty"` // 视图 8431 } 8432 8433 type UpdateUserStatsViewResp struct { 8434 *larkcore.ApiResp `json:"-"` 8435 larkcore.CodeError 8436 Data *UpdateUserStatsViewRespData `json:"data"` // 业务数据 8437 } 8438 8439 func (resp *UpdateUserStatsViewResp) Success() bool { 8440 return resp.Code == 0 8441 } 8442 8443 type QueryUserTaskReqBodyBuilder struct { 8444 userIds []string // employee_no 或 employee_id 列表 8445 userIdsFlag bool 8446 checkDateFrom int // 查询的起始工作日 8447 checkDateFromFlag bool 8448 checkDateTo int // 查询的结束工作日 8449 checkDateToFlag bool 8450 } 8451 8452 func NewQueryUserTaskReqBodyBuilder() *QueryUserTaskReqBodyBuilder { 8453 builder := &QueryUserTaskReqBodyBuilder{} 8454 return builder 8455 } 8456 8457 // employee_no 或 employee_id 列表 8458 // 8459 //示例值:abd754f7 8460 func (builder *QueryUserTaskReqBodyBuilder) UserIds(userIds []string) *QueryUserTaskReqBodyBuilder { 8461 builder.userIds = userIds 8462 builder.userIdsFlag = true 8463 return builder 8464 } 8465 8466 // 查询的起始工作日 8467 // 8468 //示例值:20190817 8469 func (builder *QueryUserTaskReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserTaskReqBodyBuilder { 8470 builder.checkDateFrom = checkDateFrom 8471 builder.checkDateFromFlag = true 8472 return builder 8473 } 8474 8475 // 查询的结束工作日 8476 // 8477 //示例值:20190820 8478 func (builder *QueryUserTaskReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserTaskReqBodyBuilder { 8479 builder.checkDateTo = checkDateTo 8480 builder.checkDateToFlag = true 8481 return builder 8482 } 8483 8484 func (builder *QueryUserTaskReqBodyBuilder) Build() *QueryUserTaskReqBody { 8485 req := &QueryUserTaskReqBody{} 8486 if builder.userIdsFlag { 8487 req.UserIds = builder.userIds 8488 } 8489 if builder.checkDateFromFlag { 8490 req.CheckDateFrom = &builder.checkDateFrom 8491 } 8492 if builder.checkDateToFlag { 8493 req.CheckDateTo = &builder.checkDateTo 8494 } 8495 return req 8496 } 8497 8498 type QueryUserTaskPathReqBodyBuilder struct { 8499 userIds []string // employee_no 或 employee_id 列表 8500 userIdsFlag bool 8501 checkDateFrom int // 查询的起始工作日 8502 checkDateFromFlag bool 8503 checkDateTo int // 查询的结束工作日 8504 checkDateToFlag bool 8505 } 8506 8507 func NewQueryUserTaskPathReqBodyBuilder() *QueryUserTaskPathReqBodyBuilder { 8508 builder := &QueryUserTaskPathReqBodyBuilder{} 8509 return builder 8510 } 8511 8512 // employee_no 或 employee_id 列表 8513 // 8514 // 示例值:abd754f7 8515 func (builder *QueryUserTaskPathReqBodyBuilder) UserIds(userIds []string) *QueryUserTaskPathReqBodyBuilder { 8516 builder.userIds = userIds 8517 builder.userIdsFlag = true 8518 return builder 8519 } 8520 8521 // 查询的起始工作日 8522 // 8523 // 示例值:20190817 8524 func (builder *QueryUserTaskPathReqBodyBuilder) CheckDateFrom(checkDateFrom int) *QueryUserTaskPathReqBodyBuilder { 8525 builder.checkDateFrom = checkDateFrom 8526 builder.checkDateFromFlag = true 8527 return builder 8528 } 8529 8530 // 查询的结束工作日 8531 // 8532 // 示例值:20190820 8533 func (builder *QueryUserTaskPathReqBodyBuilder) CheckDateTo(checkDateTo int) *QueryUserTaskPathReqBodyBuilder { 8534 builder.checkDateTo = checkDateTo 8535 builder.checkDateToFlag = true 8536 return builder 8537 } 8538 8539 func (builder *QueryUserTaskPathReqBodyBuilder) Build() (*QueryUserTaskReqBody, error) { 8540 req := &QueryUserTaskReqBody{} 8541 if builder.userIdsFlag { 8542 req.UserIds = builder.userIds 8543 } 8544 if builder.checkDateFromFlag { 8545 req.CheckDateFrom = &builder.checkDateFrom 8546 } 8547 if builder.checkDateToFlag { 8548 req.CheckDateTo = &builder.checkDateTo 8549 } 8550 return req, nil 8551 } 8552 8553 type QueryUserTaskReqBuilder struct { 8554 apiReq *larkcore.ApiReq 8555 body *QueryUserTaskReqBody 8556 } 8557 8558 func NewQueryUserTaskReqBuilder() *QueryUserTaskReqBuilder { 8559 builder := &QueryUserTaskReqBuilder{} 8560 builder.apiReq = &larkcore.ApiReq{ 8561 PathParams: larkcore.PathParams{}, 8562 QueryParams: larkcore.QueryParams{}, 8563 } 8564 return builder 8565 } 8566 8567 // 员工工号类型 8568 // 8569 // 示例值:employee_id 8570 func (builder *QueryUserTaskReqBuilder) EmployeeType(employeeType string) *QueryUserTaskReqBuilder { 8571 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8572 return builder 8573 } 8574 8575 // 是否忽略无效和没有权限的用户。如果 true,则返回有效用户的信息,并告知无效和没有权限的用户信息;如果 false,且 user_ids 中存在无效或没有权限的用户,则返回错误 8576 // 8577 // 示例值:true 8578 func (builder *QueryUserTaskReqBuilder) IgnoreInvalidUsers(ignoreInvalidUsers bool) *QueryUserTaskReqBuilder { 8579 builder.apiReq.QueryParams.Set("ignore_invalid_users", fmt.Sprint(ignoreInvalidUsers)) 8580 return builder 8581 } 8582 8583 // 由于新入职员工可以复用已离职员工的 employee_no/employee_id,如果 true,则返回 employee_no/employee_id 对应的所有在职 + 离职员工的数据;如果 false,则只返回 employee_no/employee_id 对应的在职或最近一个离职员工的数据 8584 // 8585 // 示例值:true 8586 func (builder *QueryUserTaskReqBuilder) IncludeTerminatedUser(includeTerminatedUser bool) *QueryUserTaskReqBuilder { 8587 builder.apiReq.QueryParams.Set("include_terminated_user", fmt.Sprint(includeTerminatedUser)) 8588 return builder 8589 } 8590 8591 // 获取企业内员工的实际打卡结果,包括上班打卡结果和下班打卡结果。 8592 func (builder *QueryUserTaskReqBuilder) Body(body *QueryUserTaskReqBody) *QueryUserTaskReqBuilder { 8593 builder.body = body 8594 return builder 8595 } 8596 8597 func (builder *QueryUserTaskReqBuilder) Build() *QueryUserTaskReq { 8598 req := &QueryUserTaskReq{} 8599 req.apiReq = &larkcore.ApiReq{} 8600 req.apiReq.QueryParams = builder.apiReq.QueryParams 8601 req.apiReq.Body = builder.body 8602 return req 8603 } 8604 8605 type QueryUserTaskReqBody struct { 8606 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表 8607 CheckDateFrom *int `json:"check_date_from,omitempty"` // 查询的起始工作日 8608 CheckDateTo *int `json:"check_date_to,omitempty"` // 查询的结束工作日 8609 } 8610 8611 type QueryUserTaskReq struct { 8612 apiReq *larkcore.ApiReq 8613 Body *QueryUserTaskReqBody `body:""` 8614 } 8615 8616 type QueryUserTaskRespData struct { 8617 UserTaskResults []*UserTask `json:"user_task_results,omitempty"` // 打卡任务列表 8618 InvalidUserIds []string `json:"invalid_user_ids,omitempty"` // 无效用户 ID 列表 8619 UnauthorizedUserIds []string `json:"unauthorized_user_ids,omitempty"` // 没有权限用户 ID 列表 8620 } 8621 8622 type QueryUserTaskResp struct { 8623 *larkcore.ApiResp `json:"-"` 8624 larkcore.CodeError 8625 Data *QueryUserTaskRespData `json:"data"` // 业务数据 8626 } 8627 8628 func (resp *QueryUserTaskResp) Success() bool { 8629 return resp.Code == 0 8630 } 8631 8632 type CreateUserTaskRemedyReqBuilder struct { 8633 apiReq *larkcore.ApiReq 8634 userTaskRemedy *UserTaskRemedy 8635 } 8636 8637 func NewCreateUserTaskRemedyReqBuilder() *CreateUserTaskRemedyReqBuilder { 8638 builder := &CreateUserTaskRemedyReqBuilder{} 8639 builder.apiReq = &larkcore.ApiReq{ 8640 PathParams: larkcore.PathParams{}, 8641 QueryParams: larkcore.QueryParams{}, 8642 } 8643 return builder 8644 } 8645 8646 // 请求体和响应体中的 user_id 的员工工号类型 8647 // 8648 // 示例值:employee_id 8649 func (builder *CreateUserTaskRemedyReqBuilder) EmployeeType(employeeType string) *CreateUserTaskRemedyReqBuilder { 8650 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8651 return builder 8652 } 8653 8654 // 对于只使用飞书考勤系统而未使用飞书审批系统的企业,可以通过该接口,将在三方审批系统中发起的补卡审批数据,写入到飞书考勤系统中,状态为审批中。写入后可以由[通知审批状态更新](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/attendance-v1/approval_info/process) 进行状态更新 8655 func (builder *CreateUserTaskRemedyReqBuilder) UserTaskRemedy(userTaskRemedy *UserTaskRemedy) *CreateUserTaskRemedyReqBuilder { 8656 builder.userTaskRemedy = userTaskRemedy 8657 return builder 8658 } 8659 8660 func (builder *CreateUserTaskRemedyReqBuilder) Build() *CreateUserTaskRemedyReq { 8661 req := &CreateUserTaskRemedyReq{} 8662 req.apiReq = &larkcore.ApiReq{} 8663 req.apiReq.QueryParams = builder.apiReq.QueryParams 8664 req.apiReq.Body = builder.userTaskRemedy 8665 return req 8666 } 8667 8668 type CreateUserTaskRemedyReq struct { 8669 apiReq *larkcore.ApiReq 8670 UserTaskRemedy *UserTaskRemedy `body:""` 8671 } 8672 8673 type CreateUserTaskRemedyRespData struct { 8674 UserRemedy *UserTaskRemedy `json:"user_remedy,omitempty"` // 补卡审批信息 8675 } 8676 8677 type CreateUserTaskRemedyResp struct { 8678 *larkcore.ApiResp `json:"-"` 8679 larkcore.CodeError 8680 Data *CreateUserTaskRemedyRespData `json:"data"` // 业务数据 8681 } 8682 8683 func (resp *CreateUserTaskRemedyResp) Success() bool { 8684 return resp.Code == 0 8685 } 8686 8687 type QueryUserTaskRemedyReqBodyBuilder struct { 8688 userIds []string // employee_no 或 employee_id 列表 8689 userIdsFlag bool 8690 checkTimeFrom string // 查询的起始时间,精确到秒的时间戳 8691 checkTimeFromFlag bool 8692 checkTimeTo string // 查询的结束时间,精确到秒的时间戳 8693 checkTimeToFlag bool 8694 checkDateType string // 查询依据的时间类型(不填默认依据PeriodTime) 8695 checkDateTypeFlag bool 8696 status int // 查询状态(不填默认查询已通过状态) 8697 statusFlag bool 8698 } 8699 8700 func NewQueryUserTaskRemedyReqBodyBuilder() *QueryUserTaskRemedyReqBodyBuilder { 8701 builder := &QueryUserTaskRemedyReqBodyBuilder{} 8702 return builder 8703 } 8704 8705 // employee_no 或 employee_id 列表 8706 // 8707 //示例值:["abd754f7"] 8708 func (builder *QueryUserTaskRemedyReqBodyBuilder) UserIds(userIds []string) *QueryUserTaskRemedyReqBodyBuilder { 8709 builder.userIds = userIds 8710 builder.userIdsFlag = true 8711 return builder 8712 } 8713 8714 // 查询的起始时间,精确到秒的时间戳 8715 // 8716 //示例值:1566641088 8717 func (builder *QueryUserTaskRemedyReqBodyBuilder) CheckTimeFrom(checkTimeFrom string) *QueryUserTaskRemedyReqBodyBuilder { 8718 builder.checkTimeFrom = checkTimeFrom 8719 builder.checkTimeFromFlag = true 8720 return builder 8721 } 8722 8723 // 查询的结束时间,精确到秒的时间戳 8724 // 8725 //示例值:1592561088 8726 func (builder *QueryUserTaskRemedyReqBodyBuilder) CheckTimeTo(checkTimeTo string) *QueryUserTaskRemedyReqBodyBuilder { 8727 builder.checkTimeTo = checkTimeTo 8728 builder.checkTimeToFlag = true 8729 return builder 8730 } 8731 8732 // 查询依据的时间类型(不填默认依据PeriodTime) 8733 // 8734 //示例值:PeriodTime 8735 func (builder *QueryUserTaskRemedyReqBodyBuilder) CheckDateType(checkDateType string) *QueryUserTaskRemedyReqBodyBuilder { 8736 builder.checkDateType = checkDateType 8737 builder.checkDateTypeFlag = true 8738 return builder 8739 } 8740 8741 // 查询状态(不填默认查询已通过状态) 8742 // 8743 //示例值:2 8744 func (builder *QueryUserTaskRemedyReqBodyBuilder) Status(status int) *QueryUserTaskRemedyReqBodyBuilder { 8745 builder.status = status 8746 builder.statusFlag = true 8747 return builder 8748 } 8749 8750 func (builder *QueryUserTaskRemedyReqBodyBuilder) Build() *QueryUserTaskRemedyReqBody { 8751 req := &QueryUserTaskRemedyReqBody{} 8752 if builder.userIdsFlag { 8753 req.UserIds = builder.userIds 8754 } 8755 if builder.checkTimeFromFlag { 8756 req.CheckTimeFrom = &builder.checkTimeFrom 8757 } 8758 if builder.checkTimeToFlag { 8759 req.CheckTimeTo = &builder.checkTimeTo 8760 } 8761 if builder.checkDateTypeFlag { 8762 req.CheckDateType = &builder.checkDateType 8763 } 8764 if builder.statusFlag { 8765 req.Status = &builder.status 8766 } 8767 return req 8768 } 8769 8770 type QueryUserTaskRemedyPathReqBodyBuilder struct { 8771 userIds []string // employee_no 或 employee_id 列表 8772 userIdsFlag bool 8773 checkTimeFrom string // 查询的起始时间,精确到秒的时间戳 8774 checkTimeFromFlag bool 8775 checkTimeTo string // 查询的结束时间,精确到秒的时间戳 8776 checkTimeToFlag bool 8777 checkDateType string // 查询依据的时间类型(不填默认依据PeriodTime) 8778 checkDateTypeFlag bool 8779 status int // 查询状态(不填默认查询已通过状态) 8780 statusFlag bool 8781 } 8782 8783 func NewQueryUserTaskRemedyPathReqBodyBuilder() *QueryUserTaskRemedyPathReqBodyBuilder { 8784 builder := &QueryUserTaskRemedyPathReqBodyBuilder{} 8785 return builder 8786 } 8787 8788 // employee_no 或 employee_id 列表 8789 // 8790 // 示例值:["abd754f7"] 8791 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) UserIds(userIds []string) *QueryUserTaskRemedyPathReqBodyBuilder { 8792 builder.userIds = userIds 8793 builder.userIdsFlag = true 8794 return builder 8795 } 8796 8797 // 查询的起始时间,精确到秒的时间戳 8798 // 8799 // 示例值:1566641088 8800 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) CheckTimeFrom(checkTimeFrom string) *QueryUserTaskRemedyPathReqBodyBuilder { 8801 builder.checkTimeFrom = checkTimeFrom 8802 builder.checkTimeFromFlag = true 8803 return builder 8804 } 8805 8806 // 查询的结束时间,精确到秒的时间戳 8807 // 8808 // 示例值:1592561088 8809 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) CheckTimeTo(checkTimeTo string) *QueryUserTaskRemedyPathReqBodyBuilder { 8810 builder.checkTimeTo = checkTimeTo 8811 builder.checkTimeToFlag = true 8812 return builder 8813 } 8814 8815 // 查询依据的时间类型(不填默认依据PeriodTime) 8816 // 8817 // 示例值:PeriodTime 8818 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) CheckDateType(checkDateType string) *QueryUserTaskRemedyPathReqBodyBuilder { 8819 builder.checkDateType = checkDateType 8820 builder.checkDateTypeFlag = true 8821 return builder 8822 } 8823 8824 // 查询状态(不填默认查询已通过状态) 8825 // 8826 // 示例值:2 8827 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) Status(status int) *QueryUserTaskRemedyPathReqBodyBuilder { 8828 builder.status = status 8829 builder.statusFlag = true 8830 return builder 8831 } 8832 8833 func (builder *QueryUserTaskRemedyPathReqBodyBuilder) Build() (*QueryUserTaskRemedyReqBody, error) { 8834 req := &QueryUserTaskRemedyReqBody{} 8835 if builder.userIdsFlag { 8836 req.UserIds = builder.userIds 8837 } 8838 if builder.checkTimeFromFlag { 8839 req.CheckTimeFrom = &builder.checkTimeFrom 8840 } 8841 if builder.checkTimeToFlag { 8842 req.CheckTimeTo = &builder.checkTimeTo 8843 } 8844 if builder.checkDateTypeFlag { 8845 req.CheckDateType = &builder.checkDateType 8846 } 8847 if builder.statusFlag { 8848 req.Status = &builder.status 8849 } 8850 return req, nil 8851 } 8852 8853 type QueryUserTaskRemedyReqBuilder struct { 8854 apiReq *larkcore.ApiReq 8855 body *QueryUserTaskRemedyReqBody 8856 } 8857 8858 func NewQueryUserTaskRemedyReqBuilder() *QueryUserTaskRemedyReqBuilder { 8859 builder := &QueryUserTaskRemedyReqBuilder{} 8860 builder.apiReq = &larkcore.ApiReq{ 8861 PathParams: larkcore.PathParams{}, 8862 QueryParams: larkcore.QueryParams{}, 8863 } 8864 return builder 8865 } 8866 8867 // 请求体中的 user_ids 和响应体中的 user_id 的员工工号类型 8868 // 8869 // 示例值:employee_id 8870 func (builder *QueryUserTaskRemedyReqBuilder) EmployeeType(employeeType string) *QueryUserTaskRemedyReqBuilder { 8871 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 8872 return builder 8873 } 8874 8875 // 获取授权内员工的补卡记录。 8876 func (builder *QueryUserTaskRemedyReqBuilder) Body(body *QueryUserTaskRemedyReqBody) *QueryUserTaskRemedyReqBuilder { 8877 builder.body = body 8878 return builder 8879 } 8880 8881 func (builder *QueryUserTaskRemedyReqBuilder) Build() *QueryUserTaskRemedyReq { 8882 req := &QueryUserTaskRemedyReq{} 8883 req.apiReq = &larkcore.ApiReq{} 8884 req.apiReq.QueryParams = builder.apiReq.QueryParams 8885 req.apiReq.Body = builder.body 8886 return req 8887 } 8888 8889 type QueryUserTaskRemedyReqBody struct { 8890 UserIds []string `json:"user_ids,omitempty"` // employee_no 或 employee_id 列表 8891 CheckTimeFrom *string `json:"check_time_from,omitempty"` // 查询的起始时间,精确到秒的时间戳 8892 CheckTimeTo *string `json:"check_time_to,omitempty"` // 查询的结束时间,精确到秒的时间戳 8893 CheckDateType *string `json:"check_date_type,omitempty"` // 查询依据的时间类型(不填默认依据PeriodTime) 8894 Status *int `json:"status,omitempty"` // 查询状态(不填默认查询已通过状态) 8895 } 8896 8897 type QueryUserTaskRemedyReq struct { 8898 apiReq *larkcore.ApiReq 8899 Body *QueryUserTaskRemedyReqBody `body:""` 8900 } 8901 8902 type QueryUserTaskRemedyRespData struct { 8903 UserRemedys []*UserTaskRemedy `json:"user_remedys,omitempty"` // 补卡记录列表 8904 } 8905 8906 type QueryUserTaskRemedyResp struct { 8907 *larkcore.ApiResp `json:"-"` 8908 larkcore.CodeError 8909 Data *QueryUserTaskRemedyRespData `json:"data"` // 业务数据 8910 } 8911 8912 func (resp *QueryUserTaskRemedyResp) Success() bool { 8913 return resp.Code == 0 8914 } 8915 8916 type QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder struct { 8917 userId string // 用户 ID 8918 userIdFlag bool 8919 remedyDate int // 补卡日期 8920 remedyDateFlag bool 8921 } 8922 8923 func NewQueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder() *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder { 8924 builder := &QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder{} 8925 return builder 8926 } 8927 8928 // 用户 ID 8929 // 8930 //示例值:abd754f7 8931 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder) UserId(userId string) *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder { 8932 builder.userId = userId 8933 builder.userIdFlag = true 8934 return builder 8935 } 8936 8937 // 补卡日期 8938 // 8939 //示例值:20210104 8940 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder) RemedyDate(remedyDate int) *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder { 8941 builder.remedyDate = remedyDate 8942 builder.remedyDateFlag = true 8943 return builder 8944 } 8945 8946 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBodyBuilder) Build() *QueryUserAllowedRemedysUserTaskRemedyReqBody { 8947 req := &QueryUserAllowedRemedysUserTaskRemedyReqBody{} 8948 if builder.userIdFlag { 8949 req.UserId = &builder.userId 8950 } 8951 if builder.remedyDateFlag { 8952 req.RemedyDate = &builder.remedyDate 8953 } 8954 return req 8955 } 8956 8957 type QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder struct { 8958 userId string // 用户 ID 8959 userIdFlag bool 8960 remedyDate int // 补卡日期 8961 remedyDateFlag bool 8962 } 8963 8964 func NewQueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder() *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder { 8965 builder := &QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder{} 8966 return builder 8967 } 8968 8969 // 用户 ID 8970 // 8971 // 示例值:abd754f7 8972 func (builder *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder) UserId(userId string) *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder { 8973 builder.userId = userId 8974 builder.userIdFlag = true 8975 return builder 8976 } 8977 8978 // 补卡日期 8979 // 8980 // 示例值:20210104 8981 func (builder *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder) RemedyDate(remedyDate int) *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder { 8982 builder.remedyDate = remedyDate 8983 builder.remedyDateFlag = true 8984 return builder 8985 } 8986 8987 func (builder *QueryUserAllowedRemedysUserTaskRemedyPathReqBodyBuilder) Build() (*QueryUserAllowedRemedysUserTaskRemedyReqBody, error) { 8988 req := &QueryUserAllowedRemedysUserTaskRemedyReqBody{} 8989 if builder.userIdFlag { 8990 req.UserId = &builder.userId 8991 } 8992 if builder.remedyDateFlag { 8993 req.RemedyDate = &builder.remedyDate 8994 } 8995 return req, nil 8996 } 8997 8998 type QueryUserAllowedRemedysUserTaskRemedyReqBuilder struct { 8999 apiReq *larkcore.ApiReq 9000 body *QueryUserAllowedRemedysUserTaskRemedyReqBody 9001 } 9002 9003 func NewQueryUserAllowedRemedysUserTaskRemedyReqBuilder() *QueryUserAllowedRemedysUserTaskRemedyReqBuilder { 9004 builder := &QueryUserAllowedRemedysUserTaskRemedyReqBuilder{} 9005 builder.apiReq = &larkcore.ApiReq{ 9006 PathParams: larkcore.PathParams{}, 9007 QueryParams: larkcore.QueryParams{}, 9008 } 9009 return builder 9010 } 9011 9012 // 请求体和响应体中的 user_id 的员工工号类型 9013 // 9014 // 示例值:employee_id 9015 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBuilder) EmployeeType(employeeType string) *QueryUserAllowedRemedysUserTaskRemedyReqBuilder { 9016 builder.apiReq.QueryParams.Set("employee_type", fmt.Sprint(employeeType)) 9017 return builder 9018 } 9019 9020 // 获取用户某天可以补的第几次上 / 下班卡的时间。 9021 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBuilder) Body(body *QueryUserAllowedRemedysUserTaskRemedyReqBody) *QueryUserAllowedRemedysUserTaskRemedyReqBuilder { 9022 builder.body = body 9023 return builder 9024 } 9025 9026 func (builder *QueryUserAllowedRemedysUserTaskRemedyReqBuilder) Build() *QueryUserAllowedRemedysUserTaskRemedyReq { 9027 req := &QueryUserAllowedRemedysUserTaskRemedyReq{} 9028 req.apiReq = &larkcore.ApiReq{} 9029 req.apiReq.QueryParams = builder.apiReq.QueryParams 9030 req.apiReq.Body = builder.body 9031 return req 9032 } 9033 9034 type QueryUserAllowedRemedysUserTaskRemedyReqBody struct { 9035 UserId *string `json:"user_id,omitempty"` // 用户 ID 9036 RemedyDate *int `json:"remedy_date,omitempty"` // 补卡日期 9037 } 9038 9039 type QueryUserAllowedRemedysUserTaskRemedyReq struct { 9040 apiReq *larkcore.ApiReq 9041 Body *QueryUserAllowedRemedysUserTaskRemedyReqBody `body:""` 9042 } 9043 9044 type QueryUserAllowedRemedysUserTaskRemedyRespData struct { 9045 UserAllowedRemedys []*UserAllowedRemedy `json:"user_allowed_remedys,omitempty"` // 用户可补卡时间 9046 } 9047 9048 type QueryUserAllowedRemedysUserTaskRemedyResp struct { 9049 *larkcore.ApiResp `json:"-"` 9050 larkcore.CodeError 9051 Data *QueryUserAllowedRemedysUserTaskRemedyRespData `json:"data"` // 业务数据 9052 } 9053 9054 func (resp *QueryUserAllowedRemedysUserTaskRemedyResp) Success() bool { 9055 return resp.Code == 0 9056 } 9057 9058 type ListGroupIterator struct { 9059 nextPageToken *string 9060 items []*GroupMeta 9061 index int 9062 limit int 9063 ctx context.Context 9064 req *ListGroupReq 9065 listFunc func(ctx context.Context, req *ListGroupReq, options ...larkcore.RequestOptionFunc) (*ListGroupResp, error) 9066 options []larkcore.RequestOptionFunc 9067 curlNum int 9068 } 9069 9070 func (iterator *ListGroupIterator) Next() (bool, *GroupMeta, error) { 9071 // 达到最大量,则返回 9072 if iterator.limit > 0 && iterator.curlNum >= iterator.limit { 9073 return false, nil, nil 9074 } 9075 9076 // 为0则拉取数据 9077 if iterator.index == 0 || iterator.index >= len(iterator.items) { 9078 if iterator.index != 0 && iterator.nextPageToken == nil { 9079 return false, nil, nil 9080 } 9081 if iterator.nextPageToken != nil { 9082 iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken) 9083 } 9084 resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...) 9085 if err != nil { 9086 return false, nil, err 9087 } 9088 9089 if resp.Code != 0 { 9090 return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg)) 9091 } 9092 9093 if len(resp.Data.GroupList) == 0 { 9094 return false, nil, nil 9095 } 9096 9097 iterator.nextPageToken = resp.Data.PageToken 9098 iterator.items = resp.Data.GroupList 9099 iterator.index = 0 9100 } 9101 9102 block := iterator.items[iterator.index] 9103 iterator.index++ 9104 iterator.curlNum++ 9105 return true, block, nil 9106 } 9107 9108 func (iterator *ListGroupIterator) NextPageToken() *string { 9109 return iterator.nextPageToken 9110 } 9111 9112 type ListShiftIterator struct { 9113 nextPageToken *string 9114 items []*Shift 9115 index int 9116 limit int 9117 ctx context.Context 9118 req *ListShiftReq 9119 listFunc func(ctx context.Context, req *ListShiftReq, options ...larkcore.RequestOptionFunc) (*ListShiftResp, error) 9120 options []larkcore.RequestOptionFunc 9121 curlNum int 9122 } 9123 9124 func (iterator *ListShiftIterator) Next() (bool, *Shift, error) { 9125 // 达到最大量,则返回 9126 if iterator.limit > 0 && iterator.curlNum >= iterator.limit { 9127 return false, nil, nil 9128 } 9129 9130 // 为0则拉取数据 9131 if iterator.index == 0 || iterator.index >= len(iterator.items) { 9132 if iterator.index != 0 && iterator.nextPageToken == nil { 9133 return false, nil, nil 9134 } 9135 if iterator.nextPageToken != nil { 9136 iterator.req.apiReq.QueryParams.Set("page_token", *iterator.nextPageToken) 9137 } 9138 resp, err := iterator.listFunc(iterator.ctx, iterator.req, iterator.options...) 9139 if err != nil { 9140 return false, nil, err 9141 } 9142 9143 if resp.Code != 0 { 9144 return false, nil, errors.New(fmt.Sprintf("Code:%d,Msg:%s", resp.Code, resp.Msg)) 9145 } 9146 9147 if len(resp.Data.ShiftList) == 0 { 9148 return false, nil, nil 9149 } 9150 9151 iterator.nextPageToken = resp.Data.PageToken 9152 iterator.items = resp.Data.ShiftList 9153 iterator.index = 0 9154 } 9155 9156 block := iterator.items[iterator.index] 9157 iterator.index++ 9158 iterator.curlNum++ 9159 return true, block, nil 9160 } 9161 9162 func (iterator *ListShiftIterator) NextPageToken() *string { 9163 return iterator.nextPageToken 9164 }