From 591278273f09d4d0b423d9ba4ac495418417375e Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 9 Nov 2023 16:11:36 +0800 Subject: [PATCH 01/12] fix --- server/feishu-sync/internal/config/config.go | 2 + server/feishu-sync/internal/handler/routes.go | 5 + .../handler/syncfeishugroupshandler.go | 35 +++ .../internal/logic/syncfeishugroupslogic.go | 57 +++++ server_api/feishu-sync.api | 3 + utils/feishu/api.go | 231 ++++++++++++++++++ 6 files changed, 333 insertions(+) create mode 100644 server/feishu-sync/internal/handler/syncfeishugroupshandler.go create mode 100644 server/feishu-sync/internal/logic/syncfeishugroupslogic.go create mode 100644 utils/feishu/api.go diff --git a/server/feishu-sync/internal/config/config.go b/server/feishu-sync/internal/config/config.go index 1224b8b8..af335cd4 100644 --- a/server/feishu-sync/internal/config/config.go +++ b/server/feishu-sync/internal/config/config.go @@ -14,5 +14,7 @@ type Config struct { ApiHost string EncryptKey string VerificationToken string + AppId string + AppSecret string } } diff --git a/server/feishu-sync/internal/handler/routes.go b/server/feishu-sync/internal/handler/routes.go index db0e1b4c..db0c1419 100644 --- a/server/feishu-sync/internal/handler/routes.go +++ b/server/feishu-sync/internal/handler/routes.go @@ -17,6 +17,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/feishu/webhook", Handler: WebhookHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/api/feishu/sync_feishu_departments", + Handler: SyncFeiShuGroupsHandler(serverCtx), + }, }, ) } diff --git a/server/feishu-sync/internal/handler/syncfeishugroupshandler.go b/server/feishu-sync/internal/handler/syncfeishugroupshandler.go new file mode 100644 index 00000000..4c97aee1 --- /dev/null +++ b/server/feishu-sync/internal/handler/syncfeishugroupshandler.go @@ -0,0 +1,35 @@ +package handler + +import ( + "net/http" + "reflect" + + "fusenapi/utils/basic" + + "fusenapi/server/feishu-sync/internal/logic" + "fusenapi/server/feishu-sync/internal/svc" + "fusenapi/server/feishu-sync/internal/types" +) + +func SyncFeiShuGroupsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + + var req types.Request + userinfo, err := basic.RequestParse(w, r, svcCtx, &req) + if err != nil { + return + } + + // 创建一个业务逻辑层实例 + l := logic.NewSyncFeiShuGroupsLogic(r.Context(), svcCtx) + + rl := reflect.ValueOf(l) + basic.BeforeLogic(w, r, rl) + + resp := l.SyncFeiShuGroups(&req, userinfo) + + if !basic.AfterLogic(w, r, rl, resp) { + basic.NormalAfterLogic(w, r, resp) + } + } +} diff --git a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go new file mode 100644 index 00000000..8ab2800d --- /dev/null +++ b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go @@ -0,0 +1,57 @@ +package logic + +import ( + "fmt" + "fusenapi/utils/auth" + "fusenapi/utils/basic" + "fusenapi/utils/feishu" + "log" + + "context" + + "fusenapi/server/feishu-sync/internal/svc" + "fusenapi/server/feishu-sync/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type SyncFeiShuGroupsLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewSyncFeiShuGroupsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SyncFeiShuGroupsLogic { + return &SyncFeiShuGroupsLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *SyncFeiShuGroupsLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *SyncFeiShuGroupsLogic) SyncFeiShuGroups(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) { + feishuApi := &feishu.FeiShuApi{ + AppId: l.svcCtx.Config.FeiShu.AppId, + AppSecret: l.svcCtx.Config.FeiShu.AppSecret, + ApiHost: l.svcCtx.Config.FeiShu.ApiHost, + } + token, err := feishuApi.GetTenantAccessToken() + if err != nil { + log.Fatalln(err) + } + users, err := feishuApi.FindUsersByDepartment(token.TenantAccessToken) + if err != nil { + log.Fatalln(err) + } + fmt.Println(users) + return resp.SetStatus(basic.CodeOK) +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *SyncFeiShuGroupsLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } diff --git a/server_api/feishu-sync.api b/server_api/feishu-sync.api index 31db4bea..4528b483 100644 --- a/server_api/feishu-sync.api +++ b/server_api/feishu-sync.api @@ -13,4 +13,7 @@ service feishu-sync { //飞书ticket webhook事件接口 @handler WebhookHandler post /api/feishu/webhook(request) returns (response); + //同步飞书分组(现在是get请求) + @handler SyncFeiShuGroupsHandler + get /api/feishu/sync_feishu_departments(request) returns (response); } \ No newline at end of file diff --git a/utils/feishu/api.go b/utils/feishu/api.go new file mode 100644 index 00000000..4154c77b --- /dev/null +++ b/utils/feishu/api.go @@ -0,0 +1,231 @@ +package feishu + +import ( + "bytes" + "encoding/json" + "fusenapi/utils/curl" + "time" +) + +type FeiShuApi struct { + AppId string + AppSecret string + ApiHost string +} + +// 获取tenant_access_token +type GetTenantAccessTokenRsp struct { + Code int `json:"code"` + Msg string `json:"msg"` + TenantAccessToken string `json:"tenant_access_token"` + Expire int `json:"expire"` +} + +func (f *FeiShuApi) GetTenantAccessToken() (resp GetTenantAccessTokenRsp, err error) { + url := f.ApiHost + "/open-apis/auth/v3/tenant_access_token/internal" + header := map[string]string{"Content-Type": "application/json; charset=utf-8"} + req := map[string]interface{}{ + "app_secret": f.AppSecret, + "app_id": f.AppId, + } + postData, _ := json.Marshal(req) + rsp, err := curl.ApiCall2(url, "POST", header, bytes.NewReader(postData), time.Second*15) + if err != nil { + return GetTenantAccessTokenRsp{}, err + } + if err = json.Unmarshal(rsp, &resp); err != nil { + return GetTenantAccessTokenRsp{}, err + } + return resp, nil +} + +// 获取部门列表 +type GetDepartmentsFeiShuRsp struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data struct { + HasMore bool `json:"has_more"` + PageToken string `json:"page_token"` + Items []DeptItem `json:"items"` + } `json:"data"` +} +type DeptItem struct { + Name string `json:"name"` + I18NName struct { + ZhCn string `json:"zh_cn"` + JaJp string `json:"ja_jp"` + EnUs string `json:"en_us"` + } `json:"i18n_name"` + ParentDepartmentId string `json:"parent_department_id"` + DepartmentId string `json:"department_id"` + OpenDepartmentId string `json:"open_department_id"` + LeaderUserId string `json:"leader_user_id"` + ChatId string `json:"chat_id"` + Order string `json:"order"` + UnitIds []string `json:"unit_ids"` + MemberCount int `json:"member_count"` + Status struct { + IsDeleted bool `json:"is_deleted"` + } `json:"status"` +} + +func (f *FeiShuApi) GetDepartments(tenantAccessToken string) (resp []DeptItem, err error) { + url := f.ApiHost + "/open-apis/contact/v3/departments" + header := map[string]string{ + "Content-Type": "application/json; charset=utf-8", + "Authorization": "Bearer " + tenantAccessToken, + } + req := map[string]interface{}{ + "fetch_child": true, + "page_token": "", + "page_size": 50, + "department_id": "0", + } + for { + postData, _ := json.Marshal(req) + //先不循环 + requestRsp, err := curl.ApiCall2(url, "GET", header, bytes.NewReader(postData), time.Second*15) + if err != nil { + return nil, err + } + var parseData GetDepartmentsFeiShuRsp + if err = json.Unmarshal(requestRsp, &parseData); err != nil { + return nil, err + } + resp = append(resp, parseData.Data.Items...) + if !parseData.Data.HasMore { + break + } + req["page_token"] = parseData.Data.PageToken + } + return resp, nil +} + +// 获取部门直属用户列表 +type FindUsersByDepartmentFeiShuRsp struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data struct { + HasMore bool `json:"has_more"` + PageToken string `json:"page_token"` + Items []UserItems `json:"items"` + } `json:"data"` +} +type UserItems struct { + UnionId string `json:"union_id"` + UserId string `json:"user_id"` + OpenId string `json:"open_id"` + Name string `json:"name"` + EnName string `json:"en_name"` + Nickname string `json:"nickname"` + Email string `json:"email"` + Mobile string `json:"mobile"` + MobileVisible bool `json:"mobile_visible"` + Gender int `json:"gender"` + AvatarKey string `json:"avatar_key"` + 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"` + JoinTime int `json:"join_time"` + IsTenantManager bool `json:"is_tenant_manager"` + EmployeeNo string `json:"employee_no"` + EmployeeType int `json:"employee_type"` + Orders []struct { + DepartmentId string `json:"department_id"` + UserOrder int `json:"user_order"` + DepartmentOrder int `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 int `json:"type"` + } `json:"generic_user"` + } `json:"value"` + } `json:"custom_attrs"` + EnterpriseEmail string `json:"enterprise_email"` + JobTitle string `json:"job_title"` + IsFrozen bool `json:"is_frozen"` + Geo string `json:"geo"` + JobLevelId string `json:"job_level_id"` + JobFamilyId string `json:"job_family_id"` + DepartmentPath []struct { + DepartmentId string `json:"department_id"` + DepartmentName struct { + Name string `json:"name"` + I18NName struct { + ZhCn string `json:"zh_cn"` + JaJp string `json:"ja_jp"` + EnUs string `json:"en_us"` + } `json:"i18n_name"` + } `json:"department_name"` + DepartmentPath struct { + DepartmentIds []string `json:"department_ids"` + DepartmentPathName struct { + Name string `json:"name"` + I18NName struct { + ZhCn string `json:"zh_cn"` + JaJp string `json:"ja_jp"` + EnUs string `json:"en_us"` + } `json:"i18n_name"` + } `json:"department_path_name"` + } `json:"department_path"` + } `json:"department_path"` + DottedLineLeaderUserIds []string `json:"dotted_line_leader_user_ids"` +} + +func (f *FeiShuApi) FindUsersByDepartment(tenantAccessToken string) (resp []UserItems, err error) { + url := f.ApiHost + "/open-apis/contact/v3/users/find_by_department" + header := map[string]string{ + "Content-Type": "application/json; charset=utf-8", + "Authorization": "Bearer " + tenantAccessToken, + } + req := map[string]interface{}{ + "page_token": "", + "page_size": 50, + "department_id": "0", + } + for { + postData, _ := json.Marshal(req) + //先不循环 + requestRsp, err := curl.ApiCall2(url, "GET", header, bytes.NewReader(postData), time.Second*15) + if err != nil { + return nil, err + } + var parseData FindUsersByDepartmentFeiShuRsp + if err = json.Unmarshal(requestRsp, &parseData); err != nil { + return nil, err + } + resp = append(resp, parseData.Data.Items...) + if !parseData.Data.HasMore { + break + } + req["page_token"] = parseData.Data.PageToken + } + return resp, nil +} From 286616c13a45d6288391c7318723196d72d01460 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 9 Nov 2023 16:53:31 +0800 Subject: [PATCH 02/12] fix --- .../internal/logic/syncfeishugroupslogic.go | 6 +- utils/feishu/api.go | 191 ------------------ 2 files changed, 1 insertion(+), 196 deletions(-) diff --git a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go index 8ab2800d..c37129f2 100644 --- a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go +++ b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go @@ -43,11 +43,7 @@ func (l *SyncFeiShuGroupsLogic) SyncFeiShuGroups(req *types.Request, userinfo *a if err != nil { log.Fatalln(err) } - users, err := feishuApi.FindUsersByDepartment(token.TenantAccessToken) - if err != nil { - log.Fatalln(err) - } - fmt.Println(users) + fmt.Println("token 信息:", token) return resp.SetStatus(basic.CodeOK) } diff --git a/utils/feishu/api.go b/utils/feishu/api.go index 4154c77b..2fb73963 100644 --- a/utils/feishu/api.go +++ b/utils/feishu/api.go @@ -38,194 +38,3 @@ func (f *FeiShuApi) GetTenantAccessToken() (resp GetTenantAccessTokenRsp, err er } return resp, nil } - -// 获取部门列表 -type GetDepartmentsFeiShuRsp struct { - Code int `json:"code"` - Msg string `json:"msg"` - Data struct { - HasMore bool `json:"has_more"` - PageToken string `json:"page_token"` - Items []DeptItem `json:"items"` - } `json:"data"` -} -type DeptItem struct { - Name string `json:"name"` - I18NName struct { - ZhCn string `json:"zh_cn"` - JaJp string `json:"ja_jp"` - EnUs string `json:"en_us"` - } `json:"i18n_name"` - ParentDepartmentId string `json:"parent_department_id"` - DepartmentId string `json:"department_id"` - OpenDepartmentId string `json:"open_department_id"` - LeaderUserId string `json:"leader_user_id"` - ChatId string `json:"chat_id"` - Order string `json:"order"` - UnitIds []string `json:"unit_ids"` - MemberCount int `json:"member_count"` - Status struct { - IsDeleted bool `json:"is_deleted"` - } `json:"status"` -} - -func (f *FeiShuApi) GetDepartments(tenantAccessToken string) (resp []DeptItem, err error) { - url := f.ApiHost + "/open-apis/contact/v3/departments" - header := map[string]string{ - "Content-Type": "application/json; charset=utf-8", - "Authorization": "Bearer " + tenantAccessToken, - } - req := map[string]interface{}{ - "fetch_child": true, - "page_token": "", - "page_size": 50, - "department_id": "0", - } - for { - postData, _ := json.Marshal(req) - //先不循环 - requestRsp, err := curl.ApiCall2(url, "GET", header, bytes.NewReader(postData), time.Second*15) - if err != nil { - return nil, err - } - var parseData GetDepartmentsFeiShuRsp - if err = json.Unmarshal(requestRsp, &parseData); err != nil { - return nil, err - } - resp = append(resp, parseData.Data.Items...) - if !parseData.Data.HasMore { - break - } - req["page_token"] = parseData.Data.PageToken - } - return resp, nil -} - -// 获取部门直属用户列表 -type FindUsersByDepartmentFeiShuRsp struct { - Code int `json:"code"` - Msg string `json:"msg"` - Data struct { - HasMore bool `json:"has_more"` - PageToken string `json:"page_token"` - Items []UserItems `json:"items"` - } `json:"data"` -} -type UserItems struct { - UnionId string `json:"union_id"` - UserId string `json:"user_id"` - OpenId string `json:"open_id"` - Name string `json:"name"` - EnName string `json:"en_name"` - Nickname string `json:"nickname"` - Email string `json:"email"` - Mobile string `json:"mobile"` - MobileVisible bool `json:"mobile_visible"` - Gender int `json:"gender"` - AvatarKey string `json:"avatar_key"` - 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"` - JoinTime int `json:"join_time"` - IsTenantManager bool `json:"is_tenant_manager"` - EmployeeNo string `json:"employee_no"` - EmployeeType int `json:"employee_type"` - Orders []struct { - DepartmentId string `json:"department_id"` - UserOrder int `json:"user_order"` - DepartmentOrder int `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 int `json:"type"` - } `json:"generic_user"` - } `json:"value"` - } `json:"custom_attrs"` - EnterpriseEmail string `json:"enterprise_email"` - JobTitle string `json:"job_title"` - IsFrozen bool `json:"is_frozen"` - Geo string `json:"geo"` - JobLevelId string `json:"job_level_id"` - JobFamilyId string `json:"job_family_id"` - DepartmentPath []struct { - DepartmentId string `json:"department_id"` - DepartmentName struct { - Name string `json:"name"` - I18NName struct { - ZhCn string `json:"zh_cn"` - JaJp string `json:"ja_jp"` - EnUs string `json:"en_us"` - } `json:"i18n_name"` - } `json:"department_name"` - DepartmentPath struct { - DepartmentIds []string `json:"department_ids"` - DepartmentPathName struct { - Name string `json:"name"` - I18NName struct { - ZhCn string `json:"zh_cn"` - JaJp string `json:"ja_jp"` - EnUs string `json:"en_us"` - } `json:"i18n_name"` - } `json:"department_path_name"` - } `json:"department_path"` - } `json:"department_path"` - DottedLineLeaderUserIds []string `json:"dotted_line_leader_user_ids"` -} - -func (f *FeiShuApi) FindUsersByDepartment(tenantAccessToken string) (resp []UserItems, err error) { - url := f.ApiHost + "/open-apis/contact/v3/users/find_by_department" - header := map[string]string{ - "Content-Type": "application/json; charset=utf-8", - "Authorization": "Bearer " + tenantAccessToken, - } - req := map[string]interface{}{ - "page_token": "", - "page_size": 50, - "department_id": "0", - } - for { - postData, _ := json.Marshal(req) - //先不循环 - requestRsp, err := curl.ApiCall2(url, "GET", header, bytes.NewReader(postData), time.Second*15) - if err != nil { - return nil, err - } - var parseData FindUsersByDepartmentFeiShuRsp - if err = json.Unmarshal(requestRsp, &parseData); err != nil { - return nil, err - } - resp = append(resp, parseData.Data.Items...) - if !parseData.Data.HasMore { - break - } - req["page_token"] = parseData.Data.PageToken - } - return resp, nil -} From 5c1f33a8a89221442a6f9595513ebd57162f7cd9 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 9 Nov 2023 17:15:51 +0800 Subject: [PATCH 03/12] fix --- .../internal/logic/syncfeishugroupslogic.go | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go index c37129f2..63adddde 100644 --- a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go +++ b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go @@ -1,13 +1,9 @@ package logic import ( - "fmt" + "context" "fusenapi/utils/auth" "fusenapi/utils/basic" - "fusenapi/utils/feishu" - "log" - - "context" "fusenapi/server/feishu-sync/internal/svc" "fusenapi/server/feishu-sync/internal/types" @@ -34,16 +30,6 @@ func NewSyncFeiShuGroupsLogic(ctx context.Context, svcCtx *svc.ServiceContext) * // } func (l *SyncFeiShuGroupsLogic) SyncFeiShuGroups(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) { - feishuApi := &feishu.FeiShuApi{ - AppId: l.svcCtx.Config.FeiShu.AppId, - AppSecret: l.svcCtx.Config.FeiShu.AppSecret, - ApiHost: l.svcCtx.Config.FeiShu.ApiHost, - } - token, err := feishuApi.GetTenantAccessToken() - if err != nil { - log.Fatalln(err) - } - fmt.Println("token 信息:", token) return resp.SetStatus(basic.CodeOK) } From 360c19a8f5f69d1e95af42ac67cf9d415c723995 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 10:23:26 +0800 Subject: [PATCH 04/12] fix --- constants/websocket.go | 11 ++++++----- .../internal/logic/rendernotifylogic.go | 5 +++++ .../internal/logic/ws_err_response.go | 8 ++++++++ .../websocket/internal/logic/ws_ok_response.go | 2 +- .../internal/logic/ws_render_image.go | 6 ++++++ utils/websocket_data/render_data.go | 18 ++++++++++++------ 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/constants/websocket.go b/constants/websocket.go index 4fd14ff5..aea30b29 100644 --- a/constants/websocket.go +++ b/constants/websocket.go @@ -21,11 +21,12 @@ const ( // websocket消息类型(云渲染类别) const ( - WEBSOCKET_RENDER_IMAGE Websocket = "WEBSOCKET_RENDER_IMAGE" //图片渲染消息(1级消息,双向通信) - WEBSOCKET_RENDER_IMAGE_ERR Websocket = "WEBSOCKET_RENDER_IMAGE_ERR" //图片渲染失败消息(1级消息,单向通信) - WEBSOCKET_COMBINE_IMAGE Websocket = "WEBSOCKET_COMBINE_IMAGE" //反回合成刀版图消息(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) - WEBSOCKET_ASSEMBLE_RENDER_DATA Websocket = "WEBSOCKET_ASSEMBLE_RENDER_DATA" //组装unity需要的数据 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) - WEBSOCKET_SEND_DATA_TO_UNITY Websocket = "WEBSOCKET_SEND_DATA_TO_UNITY" //发送到unity进行渲染 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_RENDER_IMAGE Websocket = "WEBSOCKET_RENDER_IMAGE" //图片渲染消息(1级消息,双向通信) + WEBSOCKET_RENDER_IMAGE_ERR Websocket = "WEBSOCKET_RENDER_IMAGE_ERR" //图片渲染失败消息(1级消息,单向通信) + WEBSOCKET_COMBINE_IMAGE Websocket = "WEBSOCKET_COMBINE_IMAGE" //反回合成刀版图消息(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_ASSEMBLE_RENDER_DATA Websocket = "WEBSOCKET_ASSEMBLE_RENDER_DATA" //组装unity需要的数据 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_SEND_DATA_TO_UNITY Websocket = "WEBSOCKET_SEND_DATA_TO_UNITY" //发送到unity进行渲染 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER Websocket = "WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER" //后端请求前端去重发渲染任务事件(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) ) // websocket消息类型(系统数据变更通知) diff --git a/server/websocket/internal/logic/rendernotifylogic.go b/server/websocket/internal/logic/rendernotifylogic.go index 42601440..ed545373 100644 --- a/server/websocket/internal/logic/rendernotifylogic.go +++ b/server/websocket/internal/logic/rendernotifylogic.go @@ -114,6 +114,11 @@ func (l *RenderNotifyLogic) RenderNotify(req *types.RenderNotifyReq, userinfo *a if ws.conn != nil { //发送错误信息给前端 ws.renderErrResponse(requestId, info.TemplateTag, info.TaskId, "unity云渲染错误:"+req.Msg, 0, 0, 0, 0, 0, 0, 0) + //发送给前端重发消息 + ws.requestResendRenderResponse(websocket_data.RequestBrowserResendRenderEvent{ + RequestId: info.RequestId, + Description: "unity require resend", + }) logx.Info("渲染失败且发送了失败信息:", req.Msg) } else { logx.Info("渲染失败且找不到ws连接") diff --git a/server/websocket/internal/logic/ws_err_response.go b/server/websocket/internal/logic/ws_err_response.go index 21576076..ae495a86 100644 --- a/server/websocket/internal/logic/ws_err_response.go +++ b/server/websocket/internal/logic/ws_err_response.go @@ -81,3 +81,11 @@ func (w *wsConnectItem) renderErrResponse(requestId, templateTag, taskId, descri } w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_RENDER_IMAGE_ERR, data)) } + +// 渲染失败要求重新发起任务 +func (w *wsConnectItem) requestResendRenderResponse(data websocket_data.RequestBrowserResendRenderEvent) { + if w.debug == nil { + data.Description = "" + } + w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER, data)) +} diff --git a/server/websocket/internal/logic/ws_ok_response.go b/server/websocket/internal/logic/ws_ok_response.go index bcfd7cfb..70ac842a 100644 --- a/server/websocket/internal/logic/ws_ok_response.go +++ b/server/websocket/internal/logic/ws_ok_response.go @@ -32,7 +32,7 @@ func (w *wsConnectItem) sendCombineImageStepResponseMessage(requestId, combineIm SizeId: sizeId, ModelId: modelId, TemplateId: templateId, - CombineProcessTime: websocket_data.CombineProcessTime{ + CombineProcessTime: &websocket_data.CombineProcessTime{ CombineTakesTime: combineTakesTime, UploadCombineImageTakesTime: uploadCombineImageTakesTime, }, diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index 14b6d48b..dea2895c 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -229,7 +229,13 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe } res, err := w.logic.svcCtx.Repositories.ImageHandle.LogoCombine(w.logic.ctx, &combineReq) if err != nil { + //发送渲染错误消息 w.renderErrResponse(renderImageData.RequestId, renderImageData.RenderData.TemplateTag, "", "合成刀版图失败:"+err.Error(), renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) + //发送给前端重发消息 + w.requestResendRenderResponse(websocket_data.RequestBrowserResendRenderEvent{ + RequestId: renderImageData.RequestId, + Description: "combine require resend", + }) //统计合图失败数 increaseCombineRequestErrorCount(w.userId, w.guestId) logx.Error("合成刀版图失败,合成请求数据:", combineReq, "错误信息:", err) diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index 8d0a8136..22ac1cb3 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -39,12 +39,12 @@ type RenderProcessTime struct { // 合图返回数据 type CombineImageRspMsg struct { - RequestId string `json:"request_id"` - CombineImage string `json:"combine_image"` //刀版图 - SizeId int64 `json:"size_id"` //尺寸id - ModelId int64 `json:"model_id"` - TemplateId int64 `json:"template_id"` - CombineProcessTime CombineProcessTime `json:"combine_process_time"` + RequestId string `json:"request_id"` + CombineImage string `json:"combine_image"` //刀版图 + SizeId int64 `json:"size_id"` //尺寸id + ModelId int64 `json:"model_id"` + TemplateId int64 `json:"template_id"` + CombineProcessTime *CombineProcessTime `json:"combine_process_time"` } type CombineProcessTime struct { CombineTakesTime string `json:"combine_takes_time"` //合图时间 @@ -71,3 +71,9 @@ type ToUnityIdStruct struct { UserId int64 `json:"user_id"` GuestId int64 `json:"guest_id"` } + +// 要求前端重发渲染消息事件结构 +type RequestBrowserResendRenderEvent struct { + RequestId string `json:"request_id"` + Description string `json:"description"` +} From d6a25673bc40ca845f404209d8cbaf18e4799d5d Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 15:24:25 +0800 Subject: [PATCH 05/12] fix --- model/gmodel/casbin_rule_gen.go | 17 ++++--- model/gmodel/fs_message_log_gen.go | 33 +++++++++++++ model/gmodel/fs_message_log_logic.go | 2 + model/gmodel/fs_shopping_cart_logic.go | 7 ++- model/gmodel/ldap_apis_gen.go | 25 ++++++++++ model/gmodel/ldap_apis_logic.go | 2 + model/gmodel/ldap_casbin_rule_gen.go | 25 ++++++++++ model/gmodel/ldap_casbin_rule_logic.go | 2 + model/gmodel/ldap_department_gen.go | 22 +++++++++ model/gmodel/ldap_department_logic.go | 2 + model/gmodel/ldap_group_users_gen.go | 19 ++++++++ model/gmodel/ldap_group_users_logic.go | 2 + model/gmodel/ldap_groups_gen.go | 32 +++++++++++++ model/gmodel/ldap_groups_logic.go | 2 + model/gmodel/ldap_menus_gen.go | 29 ++++++++++++ model/gmodel/ldap_menus_logic.go | 2 + model/gmodel/ldap_role_menus_gen.go | 19 ++++++++ model/gmodel/ldap_role_menus_logic.go | 2 + model/gmodel/ldap_roles_gen.go | 28 +++++++++++ model/gmodel/ldap_roles_logic.go | 2 + model/gmodel/ldap_user_roles_gen.go | 19 ++++++++ model/gmodel/ldap_user_roles_logic.go | 2 + model/gmodel/ldap_users_gen.go | 46 +++++++++++++++++++ model/gmodel/ldap_users_logic.go | 21 +++++++++ model/gmodel/var_gen.go | 22 +++++++++ server/feishu-sync/internal/handler/routes.go | 5 -- .../handler/syncfeishugroupshandler.go | 35 -------------- .../internal/logic/syncfeishugroupslogic.go | 39 ---------------- .../internal/logic/user_webhook.go | 28 +++++++---- .../internal/logic/deletecartlogic.go | 2 +- server/shopping-cart/internal/types/types.go | 2 +- server_api/feishu-sync.api | 3 -- server_api/shopping-cart.api | 2 +- 33 files changed, 394 insertions(+), 106 deletions(-) create mode 100644 model/gmodel/fs_message_log_gen.go create mode 100644 model/gmodel/fs_message_log_logic.go create mode 100644 model/gmodel/ldap_apis_gen.go create mode 100644 model/gmodel/ldap_apis_logic.go create mode 100644 model/gmodel/ldap_casbin_rule_gen.go create mode 100644 model/gmodel/ldap_casbin_rule_logic.go create mode 100644 model/gmodel/ldap_department_gen.go create mode 100644 model/gmodel/ldap_department_logic.go create mode 100644 model/gmodel/ldap_group_users_gen.go create mode 100644 model/gmodel/ldap_group_users_logic.go create mode 100644 model/gmodel/ldap_groups_gen.go create mode 100644 model/gmodel/ldap_groups_logic.go create mode 100644 model/gmodel/ldap_menus_gen.go create mode 100644 model/gmodel/ldap_menus_logic.go create mode 100644 model/gmodel/ldap_role_menus_gen.go create mode 100644 model/gmodel/ldap_role_menus_logic.go create mode 100644 model/gmodel/ldap_roles_gen.go create mode 100644 model/gmodel/ldap_roles_logic.go create mode 100644 model/gmodel/ldap_user_roles_gen.go create mode 100644 model/gmodel/ldap_user_roles_logic.go create mode 100644 model/gmodel/ldap_users_gen.go create mode 100644 model/gmodel/ldap_users_logic.go delete mode 100644 server/feishu-sync/internal/handler/syncfeishugroupshandler.go delete mode 100644 server/feishu-sync/internal/logic/syncfeishugroupslogic.go diff --git a/model/gmodel/casbin_rule_gen.go b/model/gmodel/casbin_rule_gen.go index df295df8..57bd8599 100644 --- a/model/gmodel/casbin_rule_gen.go +++ b/model/gmodel/casbin_rule_gen.go @@ -4,16 +4,15 @@ import ( "gorm.io/gorm" ) -// casbin_rule 后台--权限规则表 +// casbin_rule type CasbinRule struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // 序号 - PType *string `gorm:"default:'';" json:"p_type"` // - V0 *string `gorm:"default:'';" json:"v0"` // - V1 *string `gorm:"default:'';" json:"v1"` // - V2 *string `gorm:"default:'';" json:"v2"` // - V3 *string `gorm:"default:'';" json:"v3"` // - V4 *string `gorm:"default:'';" json:"v4"` // - V5 *string `gorm:"default:'';" json:"v5"` // + PType *string `gorm:"default:'';" json:"p_type"` // + V0 *string `gorm:"default:'';" json:"v0"` // + V1 *string `gorm:"default:'';" json:"v1"` // + V2 *string `gorm:"default:'';" json:"v2"` // + V3 *string `gorm:"default:'';" json:"v3"` // + V4 *string `gorm:"default:'';" json:"v4"` // + V5 *string `gorm:"default:'';" json:"v5"` // } type CasbinRuleModel struct { db *gorm.DB diff --git a/model/gmodel/fs_message_log_gen.go b/model/gmodel/fs_message_log_gen.go new file mode 100644 index 00000000..cb9b8fe5 --- /dev/null +++ b/model/gmodel/fs_message_log_gen.go @@ -0,0 +1,33 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// fs_message_log 消息记录表 +type FsMessageLog struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // ID + Type *string `gorm:"default:'';" json:"type"` // + Channel *string `gorm:"default:'';" json:"channel"` // 发送途径:sm=短信 email=邮件 feishu=飞书 + Module *string `gorm:"default:'';" json:"module"` // + Source *string `gorm:"default:'';" json:"source"` // + Sender *string `gorm:"default:'';" json:"sender"` // + Receiver *string `gorm:"default:'';" json:"receiver"` // + TemplateSn *string `gorm:"default:'';" json:"template_sn"` // + Title *string `gorm:"default:'';" json:"title"` // + Content *[]byte `gorm:"default:'';" json:"content"` // + Status *int64 `gorm:"default:0;" json:"status"` // 状态:0=未发送 1=已发送 + Metadata *[]byte `gorm:"default:'';" json:"metadata"` // + IsDel *int64 `gorm:"default:0;" json:"is_del"` // 是否删除 + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // +} +type FsMessageLogModel struct { + db *gorm.DB + name string +} + +func NewFsMessageLogModel(db *gorm.DB) *FsMessageLogModel { + return &FsMessageLogModel{db: db, name: "fs_message_log"} +} diff --git a/model/gmodel/fs_message_log_logic.go b/model/gmodel/fs_message_log_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/fs_message_log_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/fs_shopping_cart_logic.go b/model/gmodel/fs_shopping_cart_logic.go index 5361e195..3c978e6c 100644 --- a/model/gmodel/fs_shopping_cart_logic.go +++ b/model/gmodel/fs_shopping_cart_logic.go @@ -113,8 +113,11 @@ func (s *FsShoppingCartModel) Create(ctx context.Context, data *FsShoppingCart) } // 删除 -func (s *FsShoppingCartModel) Delete(ctx context.Context, userId, id int64) error { - return s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("user_id = ? and id = ?", userId, id).Delete(&FsShoppingCart{}).Error +func (s *FsShoppingCartModel) Delete(ctx context.Context, userId int64, ids []int64) error { + if len(ids) == 0 { + return nil + } + return s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("user_id = ? and id in (?)", userId, ids).Delete(&FsShoppingCart{}).Error } // 更新 diff --git a/model/gmodel/ldap_apis_gen.go b/model/gmodel/ldap_apis_gen.go new file mode 100644 index 00000000..659107f3 --- /dev/null +++ b/model/gmodel/ldap_apis_gen.go @@ -0,0 +1,25 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_apis +type LdapApis struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Method *string `gorm:"default:'';" json:"method"` // + Path *string `gorm:"default:'';" json:"path"` // + Category *string `gorm:"default:'';" json:"category"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Creator *string `gorm:"default:'';" json:"creator"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapApisModel struct { + db *gorm.DB + name string +} + +func NewLdapApisModel(db *gorm.DB) *LdapApisModel { return &LdapApisModel{db: db, name: "ldap_apis"} } diff --git a/model/gmodel/ldap_apis_logic.go b/model/gmodel/ldap_apis_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_apis_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_casbin_rule_gen.go b/model/gmodel/ldap_casbin_rule_gen.go new file mode 100644 index 00000000..86bd35f5 --- /dev/null +++ b/model/gmodel/ldap_casbin_rule_gen.go @@ -0,0 +1,25 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_casbin_rule 规则权限表 +type LdapCasbinRule struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Ptype *string `gorm:"default:'';" json:"ptype"` // + V0 *string `gorm:"default:'';" json:"v0"` // + V1 *string `gorm:"default:'';" json:"v1"` // + V2 *string `gorm:"default:'';" json:"v2"` // + V3 *string `gorm:"default:'';" json:"v3"` // + V4 *string `gorm:"default:'';" json:"v4"` // + V5 *string `gorm:"default:'';" json:"v5"` // +} +type LdapCasbinRuleModel struct { + db *gorm.DB + name string +} + +func NewLdapCasbinRuleModel(db *gorm.DB) *LdapCasbinRuleModel { + return &LdapCasbinRuleModel{db: db, name: "ldap_casbin_rule"} +} diff --git a/model/gmodel/ldap_casbin_rule_logic.go b/model/gmodel/ldap_casbin_rule_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_casbin_rule_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_department_gen.go b/model/gmodel/ldap_department_gen.go new file mode 100644 index 00000000..a8e77c6e --- /dev/null +++ b/model/gmodel/ldap_department_gen.go @@ -0,0 +1,22 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_department 部门表 +type LdapDepartment struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Source *string `gorm:"default:'';" json:"source"` // + AppId *string `gorm:"default:'';" json:"app_id"` // + Name *string `gorm:"default:'';" json:"name"` // + DepartmentId *string `gorm:"default:'';" json:"department_id"` // +} +type LdapDepartmentModel struct { + db *gorm.DB + name string +} + +func NewLdapDepartmentModel(db *gorm.DB) *LdapDepartmentModel { + return &LdapDepartmentModel{db: db, name: "ldap_department"} +} diff --git a/model/gmodel/ldap_department_logic.go b/model/gmodel/ldap_department_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_department_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_group_users_gen.go b/model/gmodel/ldap_group_users_gen.go new file mode 100644 index 00000000..8e75b9af --- /dev/null +++ b/model/gmodel/ldap_group_users_gen.go @@ -0,0 +1,19 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_group_users +type LdapGroupUsers struct { + GroupId *int64 `gorm:"default:0;" json:"group_id"` // 分组id + UserId *int64 `gorm:"default:0;" json:"user_id"` // user表id +} +type LdapGroupUsersModel struct { + db *gorm.DB + name string +} + +func NewLdapGroupUsersModel(db *gorm.DB) *LdapGroupUsersModel { + return &LdapGroupUsersModel{db: db, name: "ldap_group_users"} +} diff --git a/model/gmodel/ldap_group_users_logic.go b/model/gmodel/ldap_group_users_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_group_users_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_groups_gen.go b/model/gmodel/ldap_groups_gen.go new file mode 100644 index 00000000..b0874791 --- /dev/null +++ b/model/gmodel/ldap_groups_gen.go @@ -0,0 +1,32 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_groups +type LdapGroups struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + GroupName *string `gorm:"default:'';" json:"group_name"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Creator *string `gorm:"default:'';" json:"creator"` // + GroupType *string `gorm:"default:'';" json:"group_type"` // + ParentId *int64 `gorm:"default:0;" json:"parent_id"` // + SourceDeptId *string `gorm:"default:'';" json:"source_dept_id"` // + Source *string `gorm:"default:'';" json:"source"` // + SourceDeptParentId *string `gorm:"default:'';" json:"source_dept_parent_id"` // + GroupDn *string `gorm:"default:'';" json:"group_dn"` // + SyncState *int64 `gorm:"default:0;" json:"sync_state"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapGroupsModel struct { + db *gorm.DB + name string +} + +func NewLdapGroupsModel(db *gorm.DB) *LdapGroupsModel { + return &LdapGroupsModel{db: db, name: "ldap_groups"} +} diff --git a/model/gmodel/ldap_groups_logic.go b/model/gmodel/ldap_groups_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_groups_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_menus_gen.go b/model/gmodel/ldap_menus_gen.go new file mode 100644 index 00000000..ffdc6e6e --- /dev/null +++ b/model/gmodel/ldap_menus_gen.go @@ -0,0 +1,29 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_menus +type LdapMenus struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Name *string `gorm:"default:'';" json:"name"` // + Title *string `gorm:"default:'';" json:"title"` // + Icon *string `gorm:"default:'';" json:"icon"` // + Path *string `gorm:"default:'';" json:"path"` // + Sort *int64 `gorm:"default:999;" json:"sort"` // + Status *int64 `gorm:"default:1;" json:"status"` // + Creator *string `gorm:"default:'';" json:"creator"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapMenusModel struct { + db *gorm.DB + name string +} + +func NewLdapMenusModel(db *gorm.DB) *LdapMenusModel { + return &LdapMenusModel{db: db, name: "ldap_menus"} +} diff --git a/model/gmodel/ldap_menus_logic.go b/model/gmodel/ldap_menus_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_menus_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_role_menus_gen.go b/model/gmodel/ldap_role_menus_gen.go new file mode 100644 index 00000000..1bf604a3 --- /dev/null +++ b/model/gmodel/ldap_role_menus_gen.go @@ -0,0 +1,19 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_role_menus +type LdapRoleMenus struct { + MenuId *int64 `gorm:"default:0;" json:"menu_id"` // 菜单id + RoleId *int64 `gorm:"default:0;" json:"role_id"` // 角色id +} +type LdapRoleMenusModel struct { + db *gorm.DB + name string +} + +func NewLdapRoleMenusModel(db *gorm.DB) *LdapRoleMenusModel { + return &LdapRoleMenusModel{db: db, name: "ldap_role_menus"} +} diff --git a/model/gmodel/ldap_role_menus_logic.go b/model/gmodel/ldap_role_menus_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_role_menus_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_roles_gen.go b/model/gmodel/ldap_roles_gen.go new file mode 100644 index 00000000..0e6949d2 --- /dev/null +++ b/model/gmodel/ldap_roles_gen.go @@ -0,0 +1,28 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_roles +type LdapRoles struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Name *string `gorm:"unique_key;default:'';" json:"name"` // + Keyword *string `gorm:"unique_key;default:'';" json:"keyword"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Status *int64 `gorm:"default:1;" json:"status"` // + Sort *int64 `gorm:"default:999;" json:"sort"` // + Creator *string `gorm:"default:'';" json:"creator"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapRolesModel struct { + db *gorm.DB + name string +} + +func NewLdapRolesModel(db *gorm.DB) *LdapRolesModel { + return &LdapRolesModel{db: db, name: "ldap_roles"} +} diff --git a/model/gmodel/ldap_roles_logic.go b/model/gmodel/ldap_roles_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_roles_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_user_roles_gen.go b/model/gmodel/ldap_user_roles_gen.go new file mode 100644 index 00000000..16798ca4 --- /dev/null +++ b/model/gmodel/ldap_user_roles_gen.go @@ -0,0 +1,19 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_user_roles +type LdapUserRoles struct { + RoleId *int64 `gorm:"default:0;" json:"role_id"` // 角色id + UserId *int64 `gorm:"default:0;" json:"user_id"` // 用户id +} +type LdapUserRolesModel struct { + db *gorm.DB + name string +} + +func NewLdapUserRolesModel(db *gorm.DB) *LdapUserRolesModel { + return &LdapUserRolesModel{db: db, name: "ldap_user_roles"} +} diff --git a/model/gmodel/ldap_user_roles_logic.go b/model/gmodel/ldap_user_roles_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_user_roles_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_users_gen.go b/model/gmodel/ldap_users_gen.go new file mode 100644 index 00000000..ded0104d --- /dev/null +++ b/model/gmodel/ldap_users_gen.go @@ -0,0 +1,46 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_users +type LdapUsers struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Source *int64 `gorm:"default:0;" json:"source"` // 来源 1飞书 + AppId *string `gorm:"default:'';" json:"app_id"` // + OpenId *string `gorm:"default:'';" json:"open_id"` // + UnionId *string `gorm:"default:'';" json:"union_id"` // + Name *string `gorm:"default:'';" json:"name"` // + EnName *string `gorm:"default:'';" json:"en_name"` // + Nickname *string `gorm:"default:'';" json:"nickname"` // + Email *string `gorm:"default:'';" json:"email"` // + EnterpriseEmail *string `gorm:"default:'';" json:"enterprise_email"` // + JobTitle *string `gorm:"default:'';" json:"job_title"` // + Mobile *string `gorm:"default:'';" json:"mobile"` // + Gender *int64 `gorm:"default:0;" json:"gender"` // 性别 0未知 1男 2女 + Avatar *string `gorm:"default:'';" json:"avatar"` // + IsFrozen *int64 `gorm:"default:0;" json:"is_frozen"` // 是否冻结 0否1是 + IsResigned *int64 `gorm:"default:0;" json:"is_resigned"` // 是否离职 0否 1是 + IsActivated *int64 `gorm:"default:0;" json:"is_activated"` // 是否激活 0否1是 + IsExited *int64 `gorm:"default:0;" json:"is_exited"` // 是否退出 0否1是 + IsUnjoin *int64 `gorm:"default:0;" json:"is_unjoin"` // 是否未加入 0否1是 + Departmentids *string `gorm:"default:'';" json:"departmentIds"` // + WorkStation *string `gorm:"default:'';" json:"work_station"` // + EmployeeNo *string `gorm:"default:'';" json:"employee_no"` // + EmployeeType *int64 `gorm:"default:0;" json:"employee_type"` // 1:正式员工 2:实习生 3:外包4:劳务 5:顾问 + UserDn *string `gorm:"default:'';" json:"user_dn"` // + JoinTime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"join_time"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapUsersModel struct { + db *gorm.DB + name string +} + +func NewLdapUsersModel(db *gorm.DB) *LdapUsersModel { + return &LdapUsersModel{db: db, name: "ldap_users"} +} diff --git a/model/gmodel/ldap_users_logic.go b/model/gmodel/ldap_users_logic.go new file mode 100644 index 00000000..629ae6dc --- /dev/null +++ b/model/gmodel/ldap_users_logic.go @@ -0,0 +1,21 @@ +package gmodel + +import ( + "context" + "errors" + "gorm.io/gorm" +) + +// TODO: 使用model的属性做你想做的 + +func (u *LdapUsersModel) CreateOrUpdate(ctx context.Context, appId string, openId string, data *LdapUsers) error { + var info LdapUsers + err := u.db.WithContext(ctx).Where("app_id = ? and open_id = ?", appId, openId).Take(&info).Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return u.db.WithContext(ctx).Create(&data).Error + } + return err + } + return u.db.WithContext(ctx).Where("app_id = ? and open_id = ?", appId, openId).Updates(&data).Error +} diff --git a/model/gmodel/var_gen.go b/model/gmodel/var_gen.go index 570c33ef..0228d80f 100644 --- a/model/gmodel/var_gen.go +++ b/model/gmodel/var_gen.go @@ -58,6 +58,7 @@ type AllModelsGen struct { FsMapLibrary *FsMapLibraryModel // fs_map_library 贴图库 FsMenu *FsMenuModel // fs_menu 后台菜单 FsMerchantCategory *FsMerchantCategoryModel // fs_merchant_category 商户类型表 + FsMessageLog *FsMessageLogModel // fs_message_log 消息记录表 FsMigration *FsMigrationModel // fs_migration 版本库 FsOrder *FsOrderModel // fs_order 订单表 FsOrderAffiliateOld *FsOrderAffiliateOldModel // fs_order_affiliate_old 订单附属表-流程控制时间等 @@ -118,6 +119,16 @@ type AllModelsGen struct { FsUserStock *FsUserStockModel // fs_user_stock 用户云仓库存 FsWebSet *FsWebSetModel // fs_web_set 网站配置表 FsZipCode *FsZipCodeModel // fs_zip_code 邮编表 + LdapApis *LdapApisModel // ldap_apis + LdapCasbinRule *LdapCasbinRuleModel // ldap_casbin_rule 规则权限表 + LdapDepartment *LdapDepartmentModel // ldap_department 部门表 + LdapGroupUsers *LdapGroupUsersModel // ldap_group_users + LdapGroups *LdapGroupsModel // ldap_groups + LdapMenus *LdapMenusModel // ldap_menus + LdapRoleMenus *LdapRoleMenusModel // ldap_role_menus + LdapRoles *LdapRolesModel // ldap_roles + LdapUserRoles *LdapUserRolesModel // ldap_user_roles + LdapUsers *LdapUsersModel // ldap_users } @@ -177,6 +188,7 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsMapLibrary: NewFsMapLibraryModel(gdb), FsMenu: NewFsMenuModel(gdb), FsMerchantCategory: NewFsMerchantCategoryModel(gdb), + FsMessageLog: NewFsMessageLogModel(gdb), FsMigration: NewFsMigrationModel(gdb), FsOrder: NewFsOrderModel(gdb), FsOrderAffiliateOld: NewFsOrderAffiliateOldModel(gdb), @@ -237,6 +249,16 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsUserStock: NewFsUserStockModel(gdb), FsWebSet: NewFsWebSetModel(gdb), FsZipCode: NewFsZipCodeModel(gdb), + LdapApis: NewLdapApisModel(gdb), + LdapCasbinRule: NewLdapCasbinRuleModel(gdb), + LdapDepartment: NewLdapDepartmentModel(gdb), + LdapGroupUsers: NewLdapGroupUsersModel(gdb), + LdapGroups: NewLdapGroupsModel(gdb), + LdapMenus: NewLdapMenusModel(gdb), + LdapRoleMenus: NewLdapRoleMenusModel(gdb), + LdapRoles: NewLdapRolesModel(gdb), + LdapUserRoles: NewLdapUserRolesModel(gdb), + LdapUsers: NewLdapUsersModel(gdb), } return models } diff --git a/server/feishu-sync/internal/handler/routes.go b/server/feishu-sync/internal/handler/routes.go index db0c1419..db0e1b4c 100644 --- a/server/feishu-sync/internal/handler/routes.go +++ b/server/feishu-sync/internal/handler/routes.go @@ -17,11 +17,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/feishu/webhook", Handler: WebhookHandler(serverCtx), }, - { - Method: http.MethodGet, - Path: "/api/feishu/sync_feishu_departments", - Handler: SyncFeiShuGroupsHandler(serverCtx), - }, }, ) } diff --git a/server/feishu-sync/internal/handler/syncfeishugroupshandler.go b/server/feishu-sync/internal/handler/syncfeishugroupshandler.go deleted file mode 100644 index 4c97aee1..00000000 --- a/server/feishu-sync/internal/handler/syncfeishugroupshandler.go +++ /dev/null @@ -1,35 +0,0 @@ -package handler - -import ( - "net/http" - "reflect" - - "fusenapi/utils/basic" - - "fusenapi/server/feishu-sync/internal/logic" - "fusenapi/server/feishu-sync/internal/svc" - "fusenapi/server/feishu-sync/internal/types" -) - -func SyncFeiShuGroupsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - - var req types.Request - userinfo, err := basic.RequestParse(w, r, svcCtx, &req) - if err != nil { - return - } - - // 创建一个业务逻辑层实例 - l := logic.NewSyncFeiShuGroupsLogic(r.Context(), svcCtx) - - rl := reflect.ValueOf(l) - basic.BeforeLogic(w, r, rl) - - resp := l.SyncFeiShuGroups(&req, userinfo) - - if !basic.AfterLogic(w, r, rl, resp) { - basic.NormalAfterLogic(w, r, resp) - } - } -} diff --git a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go b/server/feishu-sync/internal/logic/syncfeishugroupslogic.go deleted file mode 100644 index 63adddde..00000000 --- a/server/feishu-sync/internal/logic/syncfeishugroupslogic.go +++ /dev/null @@ -1,39 +0,0 @@ -package logic - -import ( - "context" - "fusenapi/utils/auth" - "fusenapi/utils/basic" - - "fusenapi/server/feishu-sync/internal/svc" - "fusenapi/server/feishu-sync/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type SyncFeiShuGroupsLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewSyncFeiShuGroupsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SyncFeiShuGroupsLogic { - return &SyncFeiShuGroupsLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -// 处理进入前逻辑w,r -// func (l *SyncFeiShuGroupsLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { -// } - -func (l *SyncFeiShuGroupsLogic) SyncFeiShuGroups(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) { - return resp.SetStatus(basic.CodeOK) -} - -// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 -// func (l *SyncFeiShuGroupsLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { -// // httpx.OkJsonCtx(r.Context(), w, resp) -// } diff --git a/server/feishu-sync/internal/logic/user_webhook.go b/server/feishu-sync/internal/logic/user_webhook.go index a4f45e67..96647ea3 100644 --- a/server/feishu-sync/internal/logic/user_webhook.go +++ b/server/feishu-sync/internal/logic/user_webhook.go @@ -1,5 +1,13 @@ package logic +import ( + "encoding/json" + "fusenapi/model/gmodel" + "strconv" + "strings" + "time" +) + type UserWebhookMsg struct { Schema string `json:"schema"` Header struct { @@ -76,12 +84,10 @@ type UserWebhookMsg struct { // 员工增删改信息 func (l *WebhookLogic) OnUserChange(data []byte) error { - return nil - /*var msg UserWebhookMsg + 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 @@ -102,14 +108,16 @@ func (l *WebhookLogic) OnUserChange(data []byte) error { 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) - return l.svcCtx.AllModels.FsFeishuUser.CreateOrUpdate(l.ctx, msg.Header.AppId, msg.Event.Object.OpenId, &gmodel.FsFeishuUser{ + departmentIds := strings.Join(msg.Event.Object.DepartmentIds, ",") + joinTime := time.Unix(msg.Event.Object.Joint64ime, 0) + source := int64(1) + return l.svcCtx.AllModels.LdapUsers.CreateOrUpdate(l.ctx, msg.Header.AppId, msg.Event.Object.OpenId, &gmodel.LdapUsers{ + Source: &source, AppId: &msg.Header.AppId, OpenId: &msg.Event.Object.OpenId, UnionId: &msg.Event.Object.UnionId, @@ -121,18 +129,18 @@ func (l *WebhookLogic) OnUserChange(data []byte) error { JobTitle: &msg.Event.Object.JobTitle, Mobile: &msg.Event.Object.Mobile, Gender: &msg.Event.Object.Gender, - Avatar: &avatar, + Avatar: &msg.Event.Object.Avatar.AvatarOrigin, IsFrozen: &isFrozen, IsResigned: &isResigned, IsActivated: &isActivated, IsExited: &isExited, IsUnjoin: &isUnjoin, - DepartmentIds: &departmentIds, + 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, - })*/ + }) } diff --git a/server/shopping-cart/internal/logic/deletecartlogic.go b/server/shopping-cart/internal/logic/deletecartlogic.go index 4c1bc37b..2c7f7f64 100644 --- a/server/shopping-cart/internal/logic/deletecartlogic.go +++ b/server/shopping-cart/internal/logic/deletecartlogic.go @@ -35,7 +35,7 @@ func (l *DeleteCartLogic) DeleteCart(req *types.DeleteCartReq, userinfo *auth.Us return resp.SetStatusWithMessage(basic.CodeUnAuth, "please sign in") } //删除购物车 - if err := l.svcCtx.AllModels.FsShoppingCart.Delete(l.ctx, userinfo.UserId, req.Id); err != nil { + if err := l.svcCtx.AllModels.FsShoppingCart.Delete(l.ctx, userinfo.UserId, req.IdList); err != nil { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to delete shopping cart") } diff --git a/server/shopping-cart/internal/types/types.go b/server/shopping-cart/internal/types/types.go index d19cbf50..00585e13 100644 --- a/server/shopping-cart/internal/types/types.go +++ b/server/shopping-cart/internal/types/types.go @@ -35,7 +35,7 @@ type DiyInfo struct { } type DeleteCartReq struct { - Id int64 `json:"id"` //购物车id + IdList []int64 `json:"id"` //购物车id } type GetCartsReq struct { diff --git a/server_api/feishu-sync.api b/server_api/feishu-sync.api index 4528b483..31db4bea 100644 --- a/server_api/feishu-sync.api +++ b/server_api/feishu-sync.api @@ -13,7 +13,4 @@ service feishu-sync { //飞书ticket webhook事件接口 @handler WebhookHandler post /api/feishu/webhook(request) returns (response); - //同步飞书分组(现在是get请求) - @handler SyncFeiShuGroupsHandler - get /api/feishu/sync_feishu_departments(request) returns (response); } \ No newline at end of file diff --git a/server_api/shopping-cart.api b/server_api/shopping-cart.api index e568a7c8..40de8729 100644 --- a/server_api/shopping-cart.api +++ b/server_api/shopping-cart.api @@ -55,7 +55,7 @@ type DiyInfo { } //删除购物车 type DeleteCartReq { - Id int64 `json:"id"` //购物车id + IdList []int64 `json:"id"` //购物车id } //获取购物车列表 From e999672037b72e590a381649cf324de44036b937 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 15:29:44 +0800 Subject: [PATCH 06/12] fix --- .../internal/logic/calculatecartpricelogic.go | 2 +- .../shopping-cart/internal/logic/getcartslogic.go | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/shopping-cart/internal/logic/calculatecartpricelogic.go b/server/shopping-cart/internal/logic/calculatecartpricelogic.go index 0ace472b..617363ee 100644 --- a/server/shopping-cart/internal/logic/calculatecartpricelogic.go +++ b/server/shopping-cart/internal/logic/calculatecartpricelogic.go @@ -116,7 +116,7 @@ func (l *CalculateCartPriceLogic) CalculateCartPrice(req *types.CalculateCartPri if fittingInfo, ok := mapModel[*cart.FittingId]; ok { fittingPrice = *fittingInfo.Price } else { - return errors.New(fmt.Sprintf("cart contain some one witch lose fitting:%d", *cart.FittingId)) + logx.Error(fmt.Sprintf("cart contain some one witch lose fitting:%d", *cart.FittingId)) } } //计算价格 diff --git a/server/shopping-cart/internal/logic/getcartslogic.go b/server/shopping-cart/internal/logic/getcartslogic.go index dbe0f267..4a6cbbaa 100644 --- a/server/shopping-cart/internal/logic/getcartslogic.go +++ b/server/shopping-cart/internal/logic/getcartslogic.go @@ -116,14 +116,14 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo fittingPrice := int64(0) if *cart.FittingId > 0 { curFittingInfo, ok := mapModel[*cart.FittingId] - if !ok { - return resp.SetStatusWithMessage(basic.CodeServiceErr, fmt.Sprintf("cart contain some one witch lose fitting:%d", *cart.FittingId)) - } - fittingPrice = *curFittingInfo.Price - //取大的为步进量基数 - if *curFittingInfo.PackedUnit > stepPurchaseQuantity { - stepPurchaseQuantity = *curFittingInfo.PackedUnit + if ok { + fittingPrice = *curFittingInfo.Price + //取大的为步进量基数 + if *curFittingInfo.PackedUnit > stepPurchaseQuantity { + stepPurchaseQuantity = *curFittingInfo.PackedUnit + } } + logx.Error(fmt.Sprintf("cart contain some one witch lose fitting:%d", *cart.FittingId)) } //计算阶梯价格 totalPrice, itemPrice, err := l.svcCtx.Repositories.NewShoppingCart.CaculateStepPrice(*cart.PurchaseQuantity, stepPrice, fittingPrice) From ca6f0c51e5929616eaeeb14ec006b5e4d8e5acee Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 15:43:46 +0800 Subject: [PATCH 07/12] fix --- model/gmodel/ldap_groups_gen.go | 27 +++++++++---------- model/gmodel/ldap_users_gen.go | 3 +-- .../internal/logic/user_webhook.go | 4 +-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/model/gmodel/ldap_groups_gen.go b/model/gmodel/ldap_groups_gen.go index b0874791..80ff12f1 100644 --- a/model/gmodel/ldap_groups_gen.go +++ b/model/gmodel/ldap_groups_gen.go @@ -7,20 +7,19 @@ import ( // ldap_groups type LdapGroups struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - GroupName *string `gorm:"default:'';" json:"group_name"` // - Remark *string `gorm:"default:'';" json:"remark"` // - Creator *string `gorm:"default:'';" json:"creator"` // - GroupType *string `gorm:"default:'';" json:"group_type"` // - ParentId *int64 `gorm:"default:0;" json:"parent_id"` // - SourceDeptId *string `gorm:"default:'';" json:"source_dept_id"` // - Source *string `gorm:"default:'';" json:"source"` // - SourceDeptParentId *string `gorm:"default:'';" json:"source_dept_parent_id"` // - GroupDn *string `gorm:"default:'';" json:"group_dn"` // - SyncState *int64 `gorm:"default:0;" json:"sync_state"` // - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // - Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + GroupName *string `gorm:"default:'';" json:"group_name"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Creator *string `gorm:"default:'';" json:"creator"` // + GroupType *string `gorm:"default:'';" json:"group_type"` // + ParentId *int64 `gorm:"default:0;" json:"parent_id"` // + DeptId *string `gorm:"default:'';" json:"dept_id"` // + DeptParentId *string `gorm:"default:'';" json:"dept_parent_id"` // + GroupDn *string `gorm:"default:'';" json:"group_dn"` // + SyncState *int64 `gorm:"default:0;" json:"sync_state"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // } type LdapGroupsModel struct { db *gorm.DB diff --git a/model/gmodel/ldap_users_gen.go b/model/gmodel/ldap_users_gen.go index ded0104d..628c907c 100644 --- a/model/gmodel/ldap_users_gen.go +++ b/model/gmodel/ldap_users_gen.go @@ -8,8 +8,7 @@ import ( // ldap_users type LdapUsers struct { Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Source *int64 `gorm:"default:0;" json:"source"` // 来源 1飞书 - AppId *string `gorm:"default:'';" json:"app_id"` // + UserId *string `gorm:"default:'';" json:"user_id"` // OpenId *string `gorm:"default:'';" json:"open_id"` // UnionId *string `gorm:"default:'';" json:"union_id"` // Name *string `gorm:"default:'';" json:"name"` // diff --git a/server/feishu-sync/internal/logic/user_webhook.go b/server/feishu-sync/internal/logic/user_webhook.go index 96647ea3..04263265 100644 --- a/server/feishu-sync/internal/logic/user_webhook.go +++ b/server/feishu-sync/internal/logic/user_webhook.go @@ -115,10 +115,8 @@ func (l *WebhookLogic) OnUserChange(data []byte) error { feiShuMsgCreateTime := time.UnixMilli(feiShuMsgCreateTimeInt64) departmentIds := strings.Join(msg.Event.Object.DepartmentIds, ",") joinTime := time.Unix(msg.Event.Object.Joint64ime, 0) - source := int64(1) return l.svcCtx.AllModels.LdapUsers.CreateOrUpdate(l.ctx, msg.Header.AppId, msg.Event.Object.OpenId, &gmodel.LdapUsers{ - Source: &source, - AppId: &msg.Header.AppId, + UserId: &msg.Event.Object.UserId, OpenId: &msg.Event.Object.OpenId, UnionId: &msg.Event.Object.UnionId, Name: &msg.Event.Object.Name, From 81f3eb6675498e86a93f23b843730c550de6c618 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 15:53:46 +0800 Subject: [PATCH 08/12] fix --- model/gmodel/ldap_users_logic.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/model/gmodel/ldap_users_logic.go b/model/gmodel/ldap_users_logic.go index 629ae6dc..75df7797 100644 --- a/model/gmodel/ldap_users_logic.go +++ b/model/gmodel/ldap_users_logic.go @@ -8,14 +8,14 @@ import ( // TODO: 使用model的属性做你想做的 -func (u *LdapUsersModel) CreateOrUpdate(ctx context.Context, appId string, openId string, data *LdapUsers) error { +func (u *LdapUsersModel) CreateOrUpdate(ctx context.Context, openId string, data *LdapUsers) error { var info LdapUsers - err := u.db.WithContext(ctx).Where("app_id = ? and open_id = ?", appId, openId).Take(&info).Error + err := u.db.WithContext(ctx).Where("open_id = ?", openId).Take(&info).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return u.db.WithContext(ctx).Create(&data).Error } return err } - return u.db.WithContext(ctx).Where("app_id = ? and open_id = ?", appId, openId).Updates(&data).Error + return u.db.WithContext(ctx).Where("open_id = ?", openId).Updates(&data).Error } From e2f5fd359f6e209c4aad26de33ff9c2f320e6c79 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 15:55:21 +0800 Subject: [PATCH 09/12] fix --- server/feishu-sync/internal/logic/user_webhook.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/feishu-sync/internal/logic/user_webhook.go b/server/feishu-sync/internal/logic/user_webhook.go index 04263265..9d82d2dd 100644 --- a/server/feishu-sync/internal/logic/user_webhook.go +++ b/server/feishu-sync/internal/logic/user_webhook.go @@ -115,7 +115,7 @@ func (l *WebhookLogic) OnUserChange(data []byte) error { feiShuMsgCreateTime := time.UnixMilli(feiShuMsgCreateTimeInt64) departmentIds := strings.Join(msg.Event.Object.DepartmentIds, ",") joinTime := time.Unix(msg.Event.Object.Joint64ime, 0) - return l.svcCtx.AllModels.LdapUsers.CreateOrUpdate(l.ctx, msg.Header.AppId, msg.Event.Object.OpenId, &gmodel.LdapUsers{ + return l.svcCtx.AllModels.LdapUsers.CreateOrUpdate(l.ctx, msg.Event.Object.OpenId, &gmodel.LdapUsers{ UserId: &msg.Event.Object.UserId, OpenId: &msg.Event.Object.OpenId, UnionId: &msg.Event.Object.UnionId, From ad9d89a1bb40a6ac17afc2ce03f16e2fffbada48 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 16:04:45 +0800 Subject: [PATCH 10/12] fix --- server/shopping-cart/internal/types/types.go | 2 +- server_api/shopping-cart.api | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/shopping-cart/internal/types/types.go b/server/shopping-cart/internal/types/types.go index 00585e13..efe21370 100644 --- a/server/shopping-cart/internal/types/types.go +++ b/server/shopping-cart/internal/types/types.go @@ -35,7 +35,7 @@ type DiyInfo struct { } type DeleteCartReq struct { - IdList []int64 `json:"id"` //购物车id + IdList []int64 `json:"id_list"` //购物车id } type GetCartsReq struct { diff --git a/server_api/shopping-cart.api b/server_api/shopping-cart.api index 40de8729..0767dff2 100644 --- a/server_api/shopping-cart.api +++ b/server_api/shopping-cart.api @@ -55,7 +55,7 @@ type DiyInfo { } //删除购物车 type DeleteCartReq { - IdList []int64 `json:"id"` //购物车id + IdList []int64 `json:"id_list"` //购物车id } //获取购物车列表 From 41e650488d1805ddbefb68ba0ce85afc7a80ef25 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 16:31:10 +0800 Subject: [PATCH 11/12] fix --- model/gmodel/ldap_apis_gen.go | 25 --- model/gmodel/ldap_apis_logic.go | 2 - model/gmodel/ldap_casbin_rule_gen.go | 25 --- model/gmodel/ldap_casbin_rule_logic.go | 2 - model/gmodel/ldap_department_gen.go | 22 --- model/gmodel/ldap_department_logic.go | 2 - model/gmodel/ldap_group_users_gen.go | 19 --- model/gmodel/ldap_group_users_logic.go | 2 - model/gmodel/ldap_groups_gen.go | 31 ---- model/gmodel/ldap_groups_logic.go | 2 - model/gmodel/ldap_menus_gen.go | 29 ---- model/gmodel/ldap_menus_logic.go | 2 - model/gmodel/ldap_role_menus_gen.go | 19 --- model/gmodel/ldap_role_menus_logic.go | 2 - model/gmodel/ldap_roles_gen.go | 28 ---- model/gmodel/ldap_roles_logic.go | 2 - model/gmodel/ldap_user_roles_gen.go | 19 --- model/gmodel/ldap_user_roles_logic.go | 2 - model/gmodel/ldap_users_gen.go | 12 +- model/gmodel/var_gen.go | 12 -- server/feishu-sync/etc/feishu-sync.yaml | 10 -- server/feishu-sync/feishu-sync.go | 37 ----- server/feishu-sync/internal/config/config.go | 20 --- server/feishu-sync/internal/handler/routes.go | 22 --- .../internal/handler/webhookhandler.go | 15 -- .../internal/logic/user_webhook.go | 144 ----------------- .../internal/logic/webhooklogic.go | 150 ------------------ .../internal/svc/servicecontext.go | 27 ---- server/feishu-sync/internal/types/types.go | 75 --------- server_api/feishu-sync.api | 16 -- 30 files changed, 1 insertion(+), 774 deletions(-) delete mode 100644 model/gmodel/ldap_apis_gen.go delete mode 100644 model/gmodel/ldap_apis_logic.go delete mode 100644 model/gmodel/ldap_casbin_rule_gen.go delete mode 100644 model/gmodel/ldap_casbin_rule_logic.go delete mode 100644 model/gmodel/ldap_department_gen.go delete mode 100644 model/gmodel/ldap_department_logic.go delete mode 100644 model/gmodel/ldap_group_users_gen.go delete mode 100644 model/gmodel/ldap_group_users_logic.go delete mode 100644 model/gmodel/ldap_groups_gen.go delete mode 100644 model/gmodel/ldap_groups_logic.go delete mode 100644 model/gmodel/ldap_menus_gen.go delete mode 100644 model/gmodel/ldap_menus_logic.go delete mode 100644 model/gmodel/ldap_role_menus_gen.go delete mode 100644 model/gmodel/ldap_role_menus_logic.go delete mode 100644 model/gmodel/ldap_roles_gen.go delete mode 100644 model/gmodel/ldap_roles_logic.go delete mode 100644 model/gmodel/ldap_user_roles_gen.go delete mode 100644 model/gmodel/ldap_user_roles_logic.go delete mode 100644 server/feishu-sync/etc/feishu-sync.yaml delete mode 100644 server/feishu-sync/feishu-sync.go delete mode 100644 server/feishu-sync/internal/config/config.go delete mode 100644 server/feishu-sync/internal/handler/routes.go delete mode 100644 server/feishu-sync/internal/handler/webhookhandler.go delete mode 100644 server/feishu-sync/internal/logic/user_webhook.go delete mode 100644 server/feishu-sync/internal/logic/webhooklogic.go delete mode 100644 server/feishu-sync/internal/svc/servicecontext.go delete mode 100644 server/feishu-sync/internal/types/types.go delete mode 100644 server_api/feishu-sync.api diff --git a/model/gmodel/ldap_apis_gen.go b/model/gmodel/ldap_apis_gen.go deleted file mode 100644 index 659107f3..00000000 --- a/model/gmodel/ldap_apis_gen.go +++ /dev/null @@ -1,25 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" - "time" -) - -// ldap_apis -type LdapApis struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Method *string `gorm:"default:'';" json:"method"` // - Path *string `gorm:"default:'';" json:"path"` // - Category *string `gorm:"default:'';" json:"category"` // - Remark *string `gorm:"default:'';" json:"remark"` // - Creator *string `gorm:"default:'';" json:"creator"` // - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // - Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // -} -type LdapApisModel struct { - db *gorm.DB - name string -} - -func NewLdapApisModel(db *gorm.DB) *LdapApisModel { return &LdapApisModel{db: db, name: "ldap_apis"} } diff --git a/model/gmodel/ldap_apis_logic.go b/model/gmodel/ldap_apis_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_apis_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_casbin_rule_gen.go b/model/gmodel/ldap_casbin_rule_gen.go deleted file mode 100644 index 86bd35f5..00000000 --- a/model/gmodel/ldap_casbin_rule_gen.go +++ /dev/null @@ -1,25 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_casbin_rule 规则权限表 -type LdapCasbinRule struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Ptype *string `gorm:"default:'';" json:"ptype"` // - V0 *string `gorm:"default:'';" json:"v0"` // - V1 *string `gorm:"default:'';" json:"v1"` // - V2 *string `gorm:"default:'';" json:"v2"` // - V3 *string `gorm:"default:'';" json:"v3"` // - V4 *string `gorm:"default:'';" json:"v4"` // - V5 *string `gorm:"default:'';" json:"v5"` // -} -type LdapCasbinRuleModel struct { - db *gorm.DB - name string -} - -func NewLdapCasbinRuleModel(db *gorm.DB) *LdapCasbinRuleModel { - return &LdapCasbinRuleModel{db: db, name: "ldap_casbin_rule"} -} diff --git a/model/gmodel/ldap_casbin_rule_logic.go b/model/gmodel/ldap_casbin_rule_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_casbin_rule_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_department_gen.go b/model/gmodel/ldap_department_gen.go deleted file mode 100644 index a8e77c6e..00000000 --- a/model/gmodel/ldap_department_gen.go +++ /dev/null @@ -1,22 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_department 部门表 -type LdapDepartment struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Source *string `gorm:"default:'';" json:"source"` // - AppId *string `gorm:"default:'';" json:"app_id"` // - Name *string `gorm:"default:'';" json:"name"` // - DepartmentId *string `gorm:"default:'';" json:"department_id"` // -} -type LdapDepartmentModel struct { - db *gorm.DB - name string -} - -func NewLdapDepartmentModel(db *gorm.DB) *LdapDepartmentModel { - return &LdapDepartmentModel{db: db, name: "ldap_department"} -} diff --git a/model/gmodel/ldap_department_logic.go b/model/gmodel/ldap_department_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_department_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_group_users_gen.go b/model/gmodel/ldap_group_users_gen.go deleted file mode 100644 index 8e75b9af..00000000 --- a/model/gmodel/ldap_group_users_gen.go +++ /dev/null @@ -1,19 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_group_users -type LdapGroupUsers struct { - GroupId *int64 `gorm:"default:0;" json:"group_id"` // 分组id - UserId *int64 `gorm:"default:0;" json:"user_id"` // user表id -} -type LdapGroupUsersModel struct { - db *gorm.DB - name string -} - -func NewLdapGroupUsersModel(db *gorm.DB) *LdapGroupUsersModel { - return &LdapGroupUsersModel{db: db, name: "ldap_group_users"} -} diff --git a/model/gmodel/ldap_group_users_logic.go b/model/gmodel/ldap_group_users_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_group_users_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_groups_gen.go b/model/gmodel/ldap_groups_gen.go deleted file mode 100644 index 80ff12f1..00000000 --- a/model/gmodel/ldap_groups_gen.go +++ /dev/null @@ -1,31 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" - "time" -) - -// ldap_groups -type LdapGroups struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - GroupName *string `gorm:"default:'';" json:"group_name"` // - Remark *string `gorm:"default:'';" json:"remark"` // - Creator *string `gorm:"default:'';" json:"creator"` // - GroupType *string `gorm:"default:'';" json:"group_type"` // - ParentId *int64 `gorm:"default:0;" json:"parent_id"` // - DeptId *string `gorm:"default:'';" json:"dept_id"` // - DeptParentId *string `gorm:"default:'';" json:"dept_parent_id"` // - GroupDn *string `gorm:"default:'';" json:"group_dn"` // - SyncState *int64 `gorm:"default:0;" json:"sync_state"` // - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // - Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // -} -type LdapGroupsModel struct { - db *gorm.DB - name string -} - -func NewLdapGroupsModel(db *gorm.DB) *LdapGroupsModel { - return &LdapGroupsModel{db: db, name: "ldap_groups"} -} diff --git a/model/gmodel/ldap_groups_logic.go b/model/gmodel/ldap_groups_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_groups_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_menus_gen.go b/model/gmodel/ldap_menus_gen.go deleted file mode 100644 index ffdc6e6e..00000000 --- a/model/gmodel/ldap_menus_gen.go +++ /dev/null @@ -1,29 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" - "time" -) - -// ldap_menus -type LdapMenus struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Name *string `gorm:"default:'';" json:"name"` // - Title *string `gorm:"default:'';" json:"title"` // - Icon *string `gorm:"default:'';" json:"icon"` // - Path *string `gorm:"default:'';" json:"path"` // - Sort *int64 `gorm:"default:999;" json:"sort"` // - Status *int64 `gorm:"default:1;" json:"status"` // - Creator *string `gorm:"default:'';" json:"creator"` // - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // - Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // -} -type LdapMenusModel struct { - db *gorm.DB - name string -} - -func NewLdapMenusModel(db *gorm.DB) *LdapMenusModel { - return &LdapMenusModel{db: db, name: "ldap_menus"} -} diff --git a/model/gmodel/ldap_menus_logic.go b/model/gmodel/ldap_menus_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_menus_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_role_menus_gen.go b/model/gmodel/ldap_role_menus_gen.go deleted file mode 100644 index 1bf604a3..00000000 --- a/model/gmodel/ldap_role_menus_gen.go +++ /dev/null @@ -1,19 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_role_menus -type LdapRoleMenus struct { - MenuId *int64 `gorm:"default:0;" json:"menu_id"` // 菜单id - RoleId *int64 `gorm:"default:0;" json:"role_id"` // 角色id -} -type LdapRoleMenusModel struct { - db *gorm.DB - name string -} - -func NewLdapRoleMenusModel(db *gorm.DB) *LdapRoleMenusModel { - return &LdapRoleMenusModel{db: db, name: "ldap_role_menus"} -} diff --git a/model/gmodel/ldap_role_menus_logic.go b/model/gmodel/ldap_role_menus_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_role_menus_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_roles_gen.go b/model/gmodel/ldap_roles_gen.go deleted file mode 100644 index 0e6949d2..00000000 --- a/model/gmodel/ldap_roles_gen.go +++ /dev/null @@ -1,28 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" - "time" -) - -// ldap_roles -type LdapRoles struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - Name *string `gorm:"unique_key;default:'';" json:"name"` // - Keyword *string `gorm:"unique_key;default:'';" json:"keyword"` // - Remark *string `gorm:"default:'';" json:"remark"` // - Status *int64 `gorm:"default:1;" json:"status"` // - Sort *int64 `gorm:"default:999;" json:"sort"` // - Creator *string `gorm:"default:'';" json:"creator"` // - Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // - Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // - Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // -} -type LdapRolesModel struct { - db *gorm.DB - name string -} - -func NewLdapRolesModel(db *gorm.DB) *LdapRolesModel { - return &LdapRolesModel{db: db, name: "ldap_roles"} -} diff --git a/model/gmodel/ldap_roles_logic.go b/model/gmodel/ldap_roles_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_roles_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_user_roles_gen.go b/model/gmodel/ldap_user_roles_gen.go deleted file mode 100644 index 16798ca4..00000000 --- a/model/gmodel/ldap_user_roles_gen.go +++ /dev/null @@ -1,19 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// ldap_user_roles -type LdapUserRoles struct { - RoleId *int64 `gorm:"default:0;" json:"role_id"` // 角色id - UserId *int64 `gorm:"default:0;" json:"user_id"` // 用户id -} -type LdapUserRolesModel struct { - db *gorm.DB - name string -} - -func NewLdapUserRolesModel(db *gorm.DB) *LdapUserRolesModel { - return &LdapUserRolesModel{db: db, name: "ldap_user_roles"} -} diff --git a/model/gmodel/ldap_user_roles_logic.go b/model/gmodel/ldap_user_roles_logic.go deleted file mode 100644 index e68225aa..00000000 --- a/model/gmodel/ldap_user_roles_logic.go +++ /dev/null @@ -1,2 +0,0 @@ -package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_users_gen.go b/model/gmodel/ldap_users_gen.go index 628c907c..5aee8913 100644 --- a/model/gmodel/ldap_users_gen.go +++ b/model/gmodel/ldap_users_gen.go @@ -8,11 +8,7 @@ import ( // ldap_users type LdapUsers struct { Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - UserId *string `gorm:"default:'';" json:"user_id"` // - OpenId *string `gorm:"default:'';" json:"open_id"` // - UnionId *string `gorm:"default:'';" json:"union_id"` // Name *string `gorm:"default:'';" json:"name"` // - EnName *string `gorm:"default:'';" json:"en_name"` // Nickname *string `gorm:"default:'';" json:"nickname"` // Email *string `gorm:"default:'';" json:"email"` // EnterpriseEmail *string `gorm:"default:'';" json:"enterprise_email"` // @@ -20,14 +16,8 @@ type LdapUsers struct { Mobile *string `gorm:"default:'';" json:"mobile"` // Gender *int64 `gorm:"default:0;" json:"gender"` // 性别 0未知 1男 2女 Avatar *string `gorm:"default:'';" json:"avatar"` // - IsFrozen *int64 `gorm:"default:0;" json:"is_frozen"` // 是否冻结 0否1是 - IsResigned *int64 `gorm:"default:0;" json:"is_resigned"` // 是否离职 0否 1是 - IsActivated *int64 `gorm:"default:0;" json:"is_activated"` // 是否激活 0否1是 - IsExited *int64 `gorm:"default:0;" json:"is_exited"` // 是否退出 0否1是 - IsUnjoin *int64 `gorm:"default:0;" json:"is_unjoin"` // 是否未加入 0否1是 + Status *int64 `gorm:"default:1;" json:"status"` // 状态 0禁止 1正常 Departmentids *string `gorm:"default:'';" json:"departmentIds"` // - WorkStation *string `gorm:"default:'';" json:"work_station"` // - EmployeeNo *string `gorm:"default:'';" json:"employee_no"` // EmployeeType *int64 `gorm:"default:0;" json:"employee_type"` // 1:正式员工 2:实习生 3:外包4:劳务 5:顾问 UserDn *string `gorm:"default:'';" json:"user_dn"` // JoinTime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"join_time"` // diff --git a/model/gmodel/var_gen.go b/model/gmodel/var_gen.go index 0228d80f..4b7122fd 100644 --- a/model/gmodel/var_gen.go +++ b/model/gmodel/var_gen.go @@ -121,13 +121,7 @@ type AllModelsGen struct { FsZipCode *FsZipCodeModel // fs_zip_code 邮编表 LdapApis *LdapApisModel // ldap_apis LdapCasbinRule *LdapCasbinRuleModel // ldap_casbin_rule 规则权限表 - LdapDepartment *LdapDepartmentModel // ldap_department 部门表 - LdapGroupUsers *LdapGroupUsersModel // ldap_group_users - LdapGroups *LdapGroupsModel // ldap_groups LdapMenus *LdapMenusModel // ldap_menus - LdapRoleMenus *LdapRoleMenusModel // ldap_role_menus - LdapRoles *LdapRolesModel // ldap_roles - LdapUserRoles *LdapUserRolesModel // ldap_user_roles LdapUsers *LdapUsersModel // ldap_users } @@ -251,13 +245,7 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsZipCode: NewFsZipCodeModel(gdb), LdapApis: NewLdapApisModel(gdb), LdapCasbinRule: NewLdapCasbinRuleModel(gdb), - LdapDepartment: NewLdapDepartmentModel(gdb), - LdapGroupUsers: NewLdapGroupUsersModel(gdb), - LdapGroups: NewLdapGroupsModel(gdb), LdapMenus: NewLdapMenusModel(gdb), - LdapRoleMenus: NewLdapRoleMenusModel(gdb), - LdapRoles: NewLdapRolesModel(gdb), - LdapUserRoles: NewLdapUserRolesModel(gdb), LdapUsers: NewLdapUsersModel(gdb), } return models diff --git a/server/feishu-sync/etc/feishu-sync.yaml b/server/feishu-sync/etc/feishu-sync.yaml deleted file mode 100644 index 03a43b25..00000000 --- a/server/feishu-sync/etc/feishu-sync.yaml +++ /dev/null @@ -1,10 +0,0 @@ -Name: feishu-sync -Host: 0.0.0.0 -Port: 9925 -Timeout: 15000 #服务超时时间(毫秒) -SourceMysql: fsreaderwriter:XErSYmLELKMnf3Dh@tcp(fusen.cdmigcvz3rle.us-east-2.rds.amazonaws.com:3306)/fusen -SourceRabbitMq: "" -Auth: - AccessSecret: fusen2023 - AccessExpire: 2592000 - RefreshAfter: 1592000 diff --git a/server/feishu-sync/feishu-sync.go b/server/feishu-sync/feishu-sync.go deleted file mode 100644 index 140e58b8..00000000 --- a/server/feishu-sync/feishu-sync.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "net/http" - "time" - - "fusenapi/utils/auth" - "fusenapi/utils/fsconfig" - - "fusenapi/server/feishu-sync/internal/config" - "fusenapi/server/feishu-sync/internal/handler" - "fusenapi/server/feishu-sync/internal/svc" - - "github.com/zeromicro/go-zero/rest" -) - -var configFile = flag.String("f", "etc/feishu-sync.yaml", "the config file") - -func main() { - flag.Parse() - - var c config.Config - fsconfig.StartNacosConfig(*configFile, &c, nil) - - c.Timeout = int64(time.Second * 15) - server := rest.MustNewServer(c.RestConf, rest.WithCustomCors(auth.FsCors, func(w http.ResponseWriter) { - })) - defer server.Stop() - - ctx := svc.NewServiceContext(c) - handler.RegisterHandlers(server, ctx) - - fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port) - server.Start() -} diff --git a/server/feishu-sync/internal/config/config.go b/server/feishu-sync/internal/config/config.go deleted file mode 100644 index af335cd4..00000000 --- a/server/feishu-sync/internal/config/config.go +++ /dev/null @@ -1,20 +0,0 @@ -package config - -import ( - "fusenapi/server/feishu-sync/internal/types" - "github.com/zeromicro/go-zero/rest" -) - -type Config struct { - rest.RestConf - SourceMysql string - Auth types.Auth - SourceRabbitMq string - FeiShu struct { - ApiHost string - EncryptKey string - VerificationToken string - AppId string - AppSecret string - } -} diff --git a/server/feishu-sync/internal/handler/routes.go b/server/feishu-sync/internal/handler/routes.go deleted file mode 100644 index db0e1b4c..00000000 --- a/server/feishu-sync/internal/handler/routes.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by goctl. DO NOT EDIT. -package handler - -import ( - "net/http" - - "fusenapi/server/feishu-sync/internal/svc" - - "github.com/zeromicro/go-zero/rest" -) - -func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { - server.AddRoutes( - []rest.Route{ - { - Method: http.MethodPost, - Path: "/api/feishu/webhook", - Handler: WebhookHandler(serverCtx), - }, - }, - ) -} diff --git a/server/feishu-sync/internal/handler/webhookhandler.go b/server/feishu-sync/internal/handler/webhookhandler.go deleted file mode 100644 index 5ed0e568..00000000 --- a/server/feishu-sync/internal/handler/webhookhandler.go +++ /dev/null @@ -1,15 +0,0 @@ -package handler - -import ( - "fusenapi/server/feishu-sync/internal/logic" - "fusenapi/server/feishu-sync/internal/svc" - "net/http" -) - -func WebhookHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - // 创建一个业务逻辑层实例 - l := logic.NewWebhookLogic(r.Context(), svcCtx) - l.Webhook(w, r) - } -} diff --git a/server/feishu-sync/internal/logic/user_webhook.go b/server/feishu-sync/internal/logic/user_webhook.go deleted file mode 100644 index 9d82d2dd..00000000 --- a/server/feishu-sync/internal/logic/user_webhook.go +++ /dev/null @@ -1,144 +0,0 @@ -package logic - -import ( - "encoding/json" - "fusenapi/model/gmodel" - "strconv" - "strings" - "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 - } - 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 - } - feiShuMsgCreateTimeInt64, err := strconv.ParseInt(msg.Header.CreateTime, 10, 64) - if err != nil { - return err - } - feiShuMsgCreateTime := time.UnixMilli(feiShuMsgCreateTimeInt64) - departmentIds := strings.Join(msg.Event.Object.DepartmentIds, ",") - joinTime := time.Unix(msg.Event.Object.Joint64ime, 0) - return l.svcCtx.AllModels.LdapUsers.CreateOrUpdate(l.ctx, msg.Event.Object.OpenId, &gmodel.LdapUsers{ - UserId: &msg.Event.Object.UserId, - 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: &msg.Event.Object.Avatar.AvatarOrigin, - 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, - JoinTime: &joinTime, - Ctime: &feiShuMsgCreateTime, - Utime: &feiShuMsgCreateTime, - }) -} diff --git a/server/feishu-sync/internal/logic/webhooklogic.go b/server/feishu-sync/internal/logic/webhooklogic.go deleted file mode 100644 index 9977575f..00000000 --- a/server/feishu-sync/internal/logic/webhooklogic.go +++ /dev/null @@ -1,150 +0,0 @@ -package logic - -import ( - "context" - "encoding/json" - "fusenapi/model/gmodel" - "fusenapi/server/feishu-sync/internal/svc" - "fusenapi/utils/feishu" - "github.com/zeromicro/go-zero/core/logx" - "io" - "net/http" - "strconv" - "time" -) - -type WebhookLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewWebhookLogic(ctx context.Context, svcCtx *svc.ServiceContext) *WebhookLogic { - return &WebhookLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -type EncryptWebhookMsg struct { - Encrypt string `json:"encrypt"` //加密的消息 -} -type WebhookMsg struct { - Type string `json:"type"` - Challenge string `json:"challenge"` - Header map[string]interface{} `json:"header"` -} - -// webhook消息事件header(body参数)基础信息 -type BaseWebhookMsgHeaderType struct { - EventId string `json:"event_id"` //事件id(可作为消息唯一性确认) - EventType string `json:"event_type"` //事件类型 - CreateTime string `json:"create_time"` //创建时间 - Token string `json:"token"` //事件token - AppId string `json:"app_id"` //app id - TenantKey string `json:"tenant_key"` //租户key -} - -func (l *WebhookLogic) Webhook(w http.ResponseWriter, r *http.Request) { - bodyBytes, err := io.ReadAll(r.Body) - if err != nil { - logx.Error("读取请求body失败", err) - return - } - defer r.Body.Close() - //计算签名 - timestamp := r.Header.Get("X-Lark-Request-Timestamp") - nonce := r.Header.Get("X-Lark-Request-Nonce") - signature := r.Header.Get("X-Lark-Signature") - sign := feishu.CalculateFeiShuWebhookSignature(timestamp, nonce, l.svcCtx.Config.FeiShu.EncryptKey, bodyBytes) - if signature != sign { - logx.Error("非法的消息,签名验证不通过", sign, "====", signature) - return - } - var encryptMsg EncryptWebhookMsg - if err = json.Unmarshal(bodyBytes, &encryptMsg); err != nil { - logx.Error("反序列化body失败", err, "body数据:", string(bodyBytes)) - return - } - if encryptMsg.Encrypt == "" { - logx.Error("消息加密信息是空的") - return - } - //解密 - realMsgBytes, err := feishu.DecryptFeiShuWebhookMsg(encryptMsg.Encrypt, l.svcCtx.Config.FeiShu.EncryptKey) - if err != nil { - logx.Error(err) - return - } - //如果只是验证http连接的消息 - var webhookMsg WebhookMsg - if err = json.Unmarshal(realMsgBytes, &webhookMsg); err != nil { - logx.Error("反序列化请求body失败", err, "解密数据:", string(realMsgBytes)) - return - } - //验证连接(直接返回) - if webhookMsg.Type == "url_verification" { - challengeRsp := map[string]string{ - "challenge": webhookMsg.Challenge, - } - b, _ := json.Marshal(challengeRsp) - w.Write(b) - return - } - bodyHeaderByte, err := json.Marshal(webhookMsg.Header) - if err != nil { - logx.Error("序列化请求体header失败:", err) - return - } - var msgHeader BaseWebhookMsgHeaderType - if err = json.Unmarshal(bodyHeaderByte, &msgHeader); err != nil { - logx.Error("反序列化请求体中的header失败", err) - return - } - httpHeaderBytes, _ := json.Marshal(r.Header) - httpHeaderStr := string(httpHeaderBytes) - //解密后的数据 - decryptMsgStr := string(realMsgBytes) - feiShuMsgCreateTimeInt64, err := strconv.ParseInt(msgHeader.CreateTime, 10, 64) - if err != nil { - logx.Error("解析消息时间错误:", err) - return - } - feiShuMsgCreateTime := time.UnixMilli(feiShuMsgCreateTimeInt64) - now := time.Now().UTC() - //把事件加入日志 - err = l.svcCtx.AllModels.FsFeishuWebhookLog.Create(l.ctx, &gmodel.FsFeishuWebhookLog{ - AppId: &msgHeader.AppId, - EventId: &msgHeader.EventId, - EventType: &msgHeader.EventType, - HttpHeader: &httpHeaderStr, - Data: &encryptMsg.Encrypt, - DecryptData: &decryptMsgStr, - MsgCtime: &feiShuMsgCreateTime, - Ctime: &now, - }) - if err != nil { - logx.Error("保存webhook消息日志失败:", err) - } - switch msgHeader.EventType { - case "contact.department.created_v3": //部门新建 - case "contact.department.deleted_v3": //部门删除 - case "contact.department.updated_v3": //部门信息变化 - case "contact.employee_type_enum.actived_v3": //启动人员类型事件 - case "contact.employee_type_enum.created_v3": //新建人员类型事件 - case "contact.employee_type_enum.deactivated_v3": //停用人员类型事件 - case "contact.employee_type_enum.deleted_v3": //删除人员类型事件 - case "contact.employee_type_enum.updated_v3": //修改人员类型名称事件 - case "contact.user.created_v3": //员工入职 - err = l.OnUserChange(realMsgBytes) - case "contact.user.deleted_v3": //员工离职 - err = l.OnUserChange(realMsgBytes) - case "contact.user.updated_v3": //员工信息变化 - err = l.OnUserChange(realMsgBytes) - } - if err != nil { - logx.Error("处理事件错误:", err) - } - return -} diff --git a/server/feishu-sync/internal/svc/servicecontext.go b/server/feishu-sync/internal/svc/servicecontext.go deleted file mode 100644 index 6e5b8149..00000000 --- a/server/feishu-sync/internal/svc/servicecontext.go +++ /dev/null @@ -1,27 +0,0 @@ -package svc - -import ( - "fusenapi/initalize" - "fusenapi/model/gmodel" - "fusenapi/server/feishu-sync/internal/config" - "gorm.io/gorm" -) - -type ServiceContext struct { - Config config.Config - - MysqlConn *gorm.DB - AllModels *gmodel.AllModelsGen - RabbitMq *initalize.RabbitMqHandle -} - -func NewServiceContext(c config.Config) *ServiceContext { - conn := initalize.InitMysql(c.SourceMysql) - - return &ServiceContext{ - Config: c, - MysqlConn: conn, - AllModels: gmodel.NewAllModels(initalize.InitMysql(c.SourceMysql)), - RabbitMq: initalize.InitRabbitMq(c.SourceRabbitMq, nil), - } -} diff --git a/server/feishu-sync/internal/types/types.go b/server/feishu-sync/internal/types/types.go deleted file mode 100644 index b5fd43e5..00000000 --- a/server/feishu-sync/internal/types/types.go +++ /dev/null @@ -1,75 +0,0 @@ -// Code generated by goctl. DO NOT EDIT. -package types - -import ( - "fusenapi/utils/basic" -) - -type Request struct { -} - -type Response struct { - Code int `json:"code"` - Message string `json:"msg"` - Data interface{} `json:"data"` -} - -type Auth struct { - AccessSecret string `json:"accessSecret"` - AccessExpire int64 `json:"accessExpire"` - RefreshAfter int64 `json:"refreshAfter"` -} - -type File struct { - Filename string `fsfile:"filename"` - Header map[string][]string `fsfile:"header"` - Size int64 `fsfile:"size"` - Data []byte `fsfile:"data"` -} - -type Meta struct { - TotalCount int64 `json:"total_count"` - PageCount int64 `json:"page_count"` - CurrentPage int `json:"current_page"` - PerPage int `json:"per_page"` -} - -// Set 设置Response的Code和Message值 -func (resp *Response) Set(Code int, Message string) *Response { - return &Response{ - Code: Code, - Message: Message, - } -} - -// Set 设置整个Response -func (resp *Response) SetWithData(Code int, Message string, Data interface{}) *Response { - return &Response{ - Code: Code, - Message: Message, - Data: Data, - } -} - -// SetStatus 设置默认StatusResponse(内部自定义) 默认msg, 可以带data, data只使用一个参数 -func (resp *Response) SetStatus(sr *basic.StatusResponse, data ...interface{}) *Response { - newResp := &Response{ - Code: sr.Code, - } - if len(data) == 1 { - newResp.Data = data[0] - } - return newResp -} - -// SetStatusWithMessage 设置默认StatusResponse(内部自定义) 非默认msg, 可以带data, data只使用一个参数 -func (resp *Response) SetStatusWithMessage(sr *basic.StatusResponse, msg string, data ...interface{}) *Response { - newResp := &Response{ - Code: sr.Code, - Message: msg, - } - if len(data) == 1 { - newResp.Data = data[0] - } - return newResp -} diff --git a/server_api/feishu-sync.api b/server_api/feishu-sync.api deleted file mode 100644 index 31db4bea..00000000 --- a/server_api/feishu-sync.api +++ /dev/null @@ -1,16 +0,0 @@ -syntax = "v1" - -info ( - title: "飞书同步服务"// TODO: add title - desc: // TODO: add description - author: "" - email: "" -) - -import "basic.api" - -service feishu-sync { - //飞书ticket webhook事件接口 - @handler WebhookHandler - post /api/feishu/webhook(request) returns (response); -} \ No newline at end of file From 14ebccce5fcf8eaa78b115d02f4cbc89bde3295a Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 16:33:20 +0800 Subject: [PATCH 12/12] fix --- model/gmodel/ldap_apis_gen.go | 25 ++++++++++++++++++++++ model/gmodel/ldap_apis_logic.go | 2 ++ model/gmodel/ldap_casbin_rule_gen.go | 25 ++++++++++++++++++++++ model/gmodel/ldap_casbin_rule_logic.go | 2 ++ model/gmodel/ldap_menus_gen.go | 29 ++++++++++++++++++++++++++ model/gmodel/ldap_menus_logic.go | 2 ++ 6 files changed, 85 insertions(+) create mode 100644 model/gmodel/ldap_apis_gen.go create mode 100644 model/gmodel/ldap_apis_logic.go create mode 100644 model/gmodel/ldap_casbin_rule_gen.go create mode 100644 model/gmodel/ldap_casbin_rule_logic.go create mode 100644 model/gmodel/ldap_menus_gen.go create mode 100644 model/gmodel/ldap_menus_logic.go diff --git a/model/gmodel/ldap_apis_gen.go b/model/gmodel/ldap_apis_gen.go new file mode 100644 index 00000000..659107f3 --- /dev/null +++ b/model/gmodel/ldap_apis_gen.go @@ -0,0 +1,25 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_apis +type LdapApis struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Method *string `gorm:"default:'';" json:"method"` // + Path *string `gorm:"default:'';" json:"path"` // + Category *string `gorm:"default:'';" json:"category"` // + Remark *string `gorm:"default:'';" json:"remark"` // + Creator *string `gorm:"default:'';" json:"creator"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapApisModel struct { + db *gorm.DB + name string +} + +func NewLdapApisModel(db *gorm.DB) *LdapApisModel { return &LdapApisModel{db: db, name: "ldap_apis"} } diff --git a/model/gmodel/ldap_apis_logic.go b/model/gmodel/ldap_apis_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_apis_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_casbin_rule_gen.go b/model/gmodel/ldap_casbin_rule_gen.go new file mode 100644 index 00000000..86bd35f5 --- /dev/null +++ b/model/gmodel/ldap_casbin_rule_gen.go @@ -0,0 +1,25 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// ldap_casbin_rule 规则权限表 +type LdapCasbinRule struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Ptype *string `gorm:"default:'';" json:"ptype"` // + V0 *string `gorm:"default:'';" json:"v0"` // + V1 *string `gorm:"default:'';" json:"v1"` // + V2 *string `gorm:"default:'';" json:"v2"` // + V3 *string `gorm:"default:'';" json:"v3"` // + V4 *string `gorm:"default:'';" json:"v4"` // + V5 *string `gorm:"default:'';" json:"v5"` // +} +type LdapCasbinRuleModel struct { + db *gorm.DB + name string +} + +func NewLdapCasbinRuleModel(db *gorm.DB) *LdapCasbinRuleModel { + return &LdapCasbinRuleModel{db: db, name: "ldap_casbin_rule"} +} diff --git a/model/gmodel/ldap_casbin_rule_logic.go b/model/gmodel/ldap_casbin_rule_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_casbin_rule_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/ldap_menus_gen.go b/model/gmodel/ldap_menus_gen.go new file mode 100644 index 00000000..ffdc6e6e --- /dev/null +++ b/model/gmodel/ldap_menus_gen.go @@ -0,0 +1,29 @@ +package gmodel + +import ( + "gorm.io/gorm" + "time" +) + +// ldap_menus +type LdapMenus struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + Name *string `gorm:"default:'';" json:"name"` // + Title *string `gorm:"default:'';" json:"title"` // + Icon *string `gorm:"default:'';" json:"icon"` // + Path *string `gorm:"default:'';" json:"path"` // + Sort *int64 `gorm:"default:999;" json:"sort"` // + Status *int64 `gorm:"default:1;" json:"status"` // + Creator *string `gorm:"default:'';" json:"creator"` // + Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` // + Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` // + Dtime *time.Time `gorm:"index;default:'0000-00-00 00:00:00';" json:"dtime"` // +} +type LdapMenusModel struct { + db *gorm.DB + name string +} + +func NewLdapMenusModel(db *gorm.DB) *LdapMenusModel { + return &LdapMenusModel{db: db, name: "ldap_menus"} +} diff --git a/model/gmodel/ldap_menus_logic.go b/model/gmodel/ldap_menus_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/ldap_menus_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file