package logic import ( "encoding/json" "fusenapi/model/gmodel" "strconv" "time" ) type UserWebhookMsg struct { Schema string `json:"schema"` Header struct { EventId string `json:"event_id"` EventType string `json:"event_type"` CreateTime string `json:"create_time"` Token string `json:"token"` AppId string `json:"app_id"` TenantKey string `json:"tenant_key"` } `json:"header"` Event struct { Object struct { OpenId string `json:"open_id"` UnionId string `json:"union_id"` UserId string `json:"user_id"` Name string `json:"name"` EnName string `json:"en_name"` Nickname string `json:"nickname"` Email string `json:"email"` EnterpriseEmail string `json:"enterprise_email"` JobTitle string `json:"job_title"` Mobile string `json:"mobile"` Gender int64 `json:"gender"` Avatar struct { Avatar72 string `json:"avatar_72"` Avatar240 string `json:"avatar_240"` Avatar640 string `json:"avatar_640"` AvatarOrigin string `json:"avatar_origin"` } `json:"avatar"` Status struct { IsFrozen bool `json:"is_frozen"` IsResigned bool `json:"is_resigned"` IsActivated bool `json:"is_activated"` IsExited bool `json:"is_exited"` IsUnjoin bool `json:"is_unjoin"` } `json:"status"` DepartmentIds []string `json:"department_ids"` LeaderUserId string `json:"leader_user_id"` City string `json:"city"` Country string `json:"country"` WorkStation string `json:"work_station"` Joint64ime int64 `json:"join_time"` EmployeeNo string `json:"employee_no"` EmployeeType int64 `json:"employee_type"` Orders []struct { DepartmentId string `json:"department_id"` UserOrder int64 `json:"user_order"` DepartmentOrder int64 `json:"department_order"` IsPrimaryDept bool `json:"is_primary_dept"` } `json:"orders"` CustomAttrs []struct { Type string `json:"type"` Id string `json:"id"` Value struct { Text string `json:"text"` Url string `json:"url"` PcUrl string `json:"pc_url"` OptionId string `json:"option_id"` OptionValue string `json:"option_value"` Name string `json:"name"` PictureUrl string `json:"picture_url"` GenericUser struct { Id string `json:"id"` Type int64 `json:"type"` } `json:"generic_user"` } `json:"value"` } `json:"custom_attrs"` JobLevelId string `json:"job_level_id"` JobFamilyId string `json:"job_family_id"` DottedLineLeaderUserIds []string `json:"dotted_line_leader_user_ids"` } `json:"object"` } `json:"event"` } // 员工增删改信息 func (l *WebhookLogic) OnUserChange(data []byte) error { var msg UserWebhookMsg if err := json.Unmarshal(data, &msg); err != nil { return err } avatar, _ := json.Marshal(msg.Event.Object.Avatar) isFrozen := int64(0) if msg.Event.Object.Status.IsFrozen { isFrozen = 1 } isResigned := int64(0) if msg.Event.Object.Status.IsResigned { isResigned = 1 } isActivated := int64(0) if msg.Event.Object.Status.IsActivated { isActivated = 1 } isExited := int64(0) if msg.Event.Object.Status.IsExited { isExited = 1 } isUnjoin := int64(0) if msg.Event.Object.Status.IsUnjoin { isUnjoin = 1 } departmentIds, _ := json.Marshal(msg.Event.Object.DepartmentIds) orders, _ := json.Marshal(msg.Event.Object.Orders) feiShuMsgCreateTimeInt64, err := strconv.ParseInt(msg.Header.CreateTime, 10, 64) if err != nil { return err } feiShuMsgCreateTime := time.UnixMilli(feiShuMsgCreateTimeInt64) joinTime := time.Unix(msg.Event.Object.Joint64ime, 0) return l.svcCtx.AllModels.FsFeishuUser.CreateOrUpdate(l.ctx, msg.Header.AppId, msg.Event.Object.OpenId, &gmodel.FsFeishuUser{ AppId: &msg.Header.AppId, OpenId: &msg.Event.Object.OpenId, UnionId: &msg.Event.Object.UnionId, Name: &msg.Event.Object.Name, EnName: &msg.Event.Object.EnName, Nickname: &msg.Event.Object.Nickname, Email: &msg.Event.Object.Email, EnterpriseEmail: &msg.Event.Object.EnterpriseEmail, JobTitle: &msg.Event.Object.JobTitle, Mobile: &msg.Event.Object.Mobile, Gender: &msg.Event.Object.Gender, Avatar: &avatar, IsFrozen: &isFrozen, IsResigned: &isResigned, IsActivated: &isActivated, IsExited: &isExited, IsUnjoin: &isUnjoin, DepartmentIds: &departmentIds, WorkStation: &msg.Event.Object.WorkStation, EmployeeNo: &msg.Event.Object.EmployeeNo, EmployeeType: &msg.Event.Object.EmployeeType, Orders: &orders, JoinTime: &joinTime, Ctime: &feiShuMsgCreateTime, Utime: &feiShuMsgCreateTime, }) }