diff --git a/pkg/wecom/auth/client.go b/pkg/wecom/auth/client.go new file mode 100644 index 0000000..219213d --- /dev/null +++ b/pkg/wecom/auth/client.go @@ -0,0 +1,20 @@ +package auth + +type Client struct { + CorpId string + CorpSecret string +} + +type tokenResponse struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` + AccessToken string `json:"access_token"` + ExpiresIn int `json:"expires_in"` +} + +func NewClient(corpId, corpSecret string) *Client { + return &Client{ + CorpId: corpId, + CorpSecret: corpSecret, + } +} diff --git a/pkg/wecom/auth/token.go b/pkg/wecom/auth/token.go index 5617385..ffe27e4 100644 --- a/pkg/wecom/auth/token.go +++ b/pkg/wecom/auth/token.go @@ -14,25 +14,6 @@ import ( "lone-services/pkg/utils" ) -type Client struct { - CorpId string - CorpSecret string -} - -type tokenResponse struct { - ErrCode int `json:"errcode"` - ErrMsg string `json:"errmsg"` - AccessToken string `json:"access_token"` - ExpiresIn int `json:"expires_in"` -} - -func NewClient(corpId, corpSecret string) *Client { - return &Client{ - CorpId: corpId, - CorpSecret: corpSecret, - } -} - func (c *Client) AccessToken(ctx context.Context) (string, error) { secretMd5 := md5.Sum([]byte(c.CorpSecret)) key := fmt.Sprintf("wecom:access_token:%s:%s", c.CorpId, hex.EncodeToString(secretMd5[:])[:8]) diff --git a/pkg/wecom/tags/add_users.go b/pkg/wecom/tags/add_users.go new file mode 100644 index 0000000..89babc5 --- /dev/null +++ b/pkg/wecom/tags/add_users.go @@ -0,0 +1,71 @@ +package tags + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "net/http" +) + +type AddTagUsersRequest struct { + TagId int `json:"tagid"` + UserIds []string `json:"userlist"` +} + +type AddTagUsersResponse struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` +} + +func (c *Client) Add(ctx context.Context, params AddTagUsersRequest) error { + + token, err := c.auth.AccessToken(ctx) + if err != nil { + return err + } + + url := fmt.Sprintf( + "https://qyapi.weixin.qq.com/cgi-bin/tag/addtagusers?access_token=%s", + token, + ) + + body, err := json.Marshal(params) + if err != nil { + return err + } + + req, err := http.NewRequestWithContext( + ctx, + http.MethodPost, + url, + bytes.NewBuffer(body), + ) + + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + + defer resp.Body.Close() + + result := AddTagUsersResponse{} + + err = json.NewDecoder(resp.Body).Decode(&result) + if err != nil { + return err + } + + if result.ErrCode != 0 { + return errors.New(result.ErrMsg) + } + + return nil +} diff --git a/pkg/wecom/tags/client.go b/pkg/wecom/tags/client.go new file mode 100644 index 0000000..ce1eddd --- /dev/null +++ b/pkg/wecom/tags/client.go @@ -0,0 +1,11 @@ +package tags + +import "lone-services/pkg/wecom/auth" + +type Client struct { + auth *auth.Client +} + +func NewClient(authClient *auth.Client) *Client { + return &Client{auth: authClient} +} diff --git a/pkg/wecom/tags/create.go b/pkg/wecom/tags/create.go new file mode 100644 index 0000000..a8709d5 --- /dev/null +++ b/pkg/wecom/tags/create.go @@ -0,0 +1,58 @@ +package tags + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "net/http" +) + +func (c *Client) Create(ctx context.Context, reqData CreateRequest) (*Response, error) { + + token, err := c.auth.AccessToken(ctx) + if err != nil { + return nil, err + } + + url := fmt.Sprintf( + "https://qyapi.weixin.qq.com/cgi-bin/tag/create?access_token=%s", + token, + ) + + body, err := json.Marshal(reqData) + if err != nil { + return nil, err + } + + req, err := http.NewRequestWithContext( + ctx, + http.MethodPost, + url, + bytes.NewBuffer(body), + ) + if err != nil { + return nil, err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var result Response + + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + + if result.ErrCode != 0 { + return nil, errors.New(result.ErrMsg) + } + + return &result, nil +} diff --git a/pkg/wecom/tags/delete.go b/pkg/wecom/tags/delete.go new file mode 100644 index 0000000..a451733 --- /dev/null +++ b/pkg/wecom/tags/delete.go @@ -0,0 +1,51 @@ +package tags + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "net/http" +) + +func (c *Client) Delete(ctx context.Context, tagId string) error { + + token, err := c.auth.AccessToken(ctx) + if err != nil { + return err + } + + url := fmt.Sprintf( + "https://qyapi.weixin.qq.com/cgi-bin/tag/delete?access_token=%s&tagid=%s", + token, + tagId, + ) + + req, err := http.NewRequestWithContext( + ctx, + http.MethodGet, + url, + nil, + ) + if err != nil { + return err + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + var result Response + + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return err + } + + if result.ErrCode != 0 { + return errors.New(result.ErrMsg) + } + + return nil +} diff --git a/pkg/wecom/tags/list.go b/pkg/wecom/tags/list.go new file mode 100644 index 0000000..9a893f8 --- /dev/null +++ b/pkg/wecom/tags/list.go @@ -0,0 +1,50 @@ +package tags + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "net/http" +) + +func (c *Client) List(ctx context.Context) ([]Tags, error) { + + token, err := c.auth.AccessToken(ctx) + if err != nil { + return nil, err + } + + url := fmt.Sprintf( + "https://qyapi.weixin.qq.com/cgi-bin/tag/list?access_token=%s", + token, + ) + + req, err := http.NewRequestWithContext( + ctx, + http.MethodGet, + url, + nil, + ) + if err != nil { + return nil, err + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var result Response + + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, err + } + + if result.ErrCode != 0 { + return nil, errors.New(result.ErrMsg) + } + + return result.TagList, nil +} diff --git a/pkg/wecom/tags/remove_users.go b/pkg/wecom/tags/remove_users.go new file mode 100644 index 0000000..837820b --- /dev/null +++ b/pkg/wecom/tags/remove_users.go @@ -0,0 +1,70 @@ +package tags + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "net/http" +) + +type RemoveTagUsersRequest struct { + TagId int `json:"tagid"` + UserIds []string `json:"userlist"` +} + +type RemoveTagUsersResponse struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` +} + +func (c *Client) Remove(ctx context.Context, params RemoveTagUsersRequest) error { + + token, err := c.auth.AccessToken(ctx) + if err != nil { + return err + } + url := fmt.Sprintf( + "https://qyapi.weixin.qq.com/cgi-bin/tag/deltagusers?access_token=%s", + token, + ) + + body, err := json.Marshal(params) + if err != nil { + return err + } + + req, err := http.NewRequestWithContext( + ctx, + http.MethodPost, + url, + bytes.NewBuffer(body), + ) + + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + + defer resp.Body.Close() + + result := RemoveTagUsersResponse{} + + err = json.NewDecoder(resp.Body).Decode(&result) + if err != nil { + return err + } + + if result.ErrCode != 0 { + return errors.New(result.ErrMsg) + } + + return nil +} diff --git a/pkg/wecom/tags/request.go b/pkg/wecom/tags/request.go new file mode 100644 index 0000000..49d6aad --- /dev/null +++ b/pkg/wecom/tags/request.go @@ -0,0 +1,6 @@ +package tags + +type CreateRequest struct { + TagName string `json:"tagname"` + TagID int `json:"tagid,omitempty"` +} diff --git a/pkg/wecom/tags/response.go b/pkg/wecom/tags/response.go new file mode 100644 index 0000000..2744d50 --- /dev/null +++ b/pkg/wecom/tags/response.go @@ -0,0 +1,13 @@ +package tags + +type Response struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` + TagID int64 `json:"tagid,omitempty"` + TagList []Tags `json:"taglist,omitempty"` +} + +type Tags struct { + TagID int64 `json:"tagid"` + TagName string `json:"tagname"` +} diff --git a/rpc/wecom/pb/wecom.pb.go b/rpc/wecom/pb/wecom.pb.go index aec68ea..6198c2f 100644 --- a/rpc/wecom/pb/wecom.pb.go +++ b/rpc/wecom/pb/wecom.pb.go @@ -22,66 +22,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type Response struct { - state protoimpl.MessageState `protogen:"open.v1"` - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Response) Reset() { - *x = Response{} - mi := &file_wecom_wecom_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Response) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Response) ProtoMessage() {} - -func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[0] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Response.ProtoReflect.Descriptor instead. -func (*Response) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{0} -} - -func (x *Response) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Response) GetMsg() string { - if x != nil { - return x.Msg - } - return "" -} - -func (x *Response) GetData() string { - if x != nil { - return x.Data - } - return "" -} - type EmptyReq struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -90,7 +30,7 @@ type EmptyReq struct { func (x *EmptyReq) Reset() { *x = EmptyReq{} - mi := &file_wecom_wecom_proto_msgTypes[1] + mi := &file_wecom_wecom_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -102,7 +42,7 @@ func (x *EmptyReq) String() string { func (*EmptyReq) ProtoMessage() {} func (x *EmptyReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[1] + mi := &file_wecom_wecom_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -115,9 +55,121 @@ func (x *EmptyReq) ProtoReflect() protoreflect.Message { // Deprecated: Use EmptyReq.ProtoReflect.Descriptor instead. func (*EmptyReq) Descriptor() ([]byte, []int) { + return file_wecom_wecom_proto_rawDescGZIP(), []int{0} +} + +type CreateTagsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateTagsReq) Reset() { + *x = CreateTagsReq{} + mi := &file_wecom_wecom_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateTagsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTagsReq) ProtoMessage() {} + +func (x *CreateTagsReq) ProtoReflect() protoreflect.Message { + mi := &file_wecom_wecom_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTagsReq.ProtoReflect.Descriptor instead. +func (*CreateTagsReq) Descriptor() ([]byte, []int) { return file_wecom_wecom_proto_rawDescGZIP(), []int{1} } +func (x *CreateTagsReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreateTagsReq) GetRemarks() string { + if x != nil { + return x.Remarks + } + return "" +} + +type ItemsTagsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Page uint32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ItemsTagsReq) Reset() { + *x = ItemsTagsReq{} + mi := &file_wecom_wecom_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ItemsTagsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemsTagsReq) ProtoMessage() {} + +func (x *ItemsTagsReq) ProtoReflect() protoreflect.Message { + mi := &file_wecom_wecom_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItemsTagsReq.ProtoReflect.Descriptor instead. +func (*ItemsTagsReq) Descriptor() ([]byte, []int) { + return file_wecom_wecom_proto_rawDescGZIP(), []int{2} +} + +func (x *ItemsTagsReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ItemsTagsReq) GetPage() uint32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ItemsTagsReq) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + type ItemsUserReq struct { state protoimpl.MessageState `protogen:"open.v1"` Page uint32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` @@ -131,7 +183,7 @@ type ItemsUserReq struct { func (x *ItemsUserReq) Reset() { *x = ItemsUserReq{} - mi := &file_wecom_wecom_proto_msgTypes[2] + mi := &file_wecom_wecom_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -143,7 +195,7 @@ func (x *ItemsUserReq) String() string { func (*ItemsUserReq) ProtoMessage() {} func (x *ItemsUserReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[2] + mi := &file_wecom_wecom_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -156,7 +208,7 @@ func (x *ItemsUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ItemsUserReq.ProtoReflect.Descriptor instead. func (*ItemsUserReq) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{2} + return file_wecom_wecom_proto_rawDescGZIP(), []int{3} } func (x *ItemsUserReq) GetPage() uint32 { @@ -202,14 +254,14 @@ type CreateUserReq struct { Mobile string `protobuf:"bytes,4,opt,name=mobile,proto3" json:"mobile,omitempty"` Avatar string `protobuf:"bytes,5,opt,name=avatar,proto3" json:"avatar,omitempty"` Status uint32 `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"` - AgentIds []int64 `protobuf:"varint,7,rep,packed,name=agent_ids,json=agentIds,proto3" json:"agent_ids,omitempty"` // 应用 agents.id,多选 + AgentIds []int64 `protobuf:"varint,7,rep,packed,name=agent_ids,json=agentIds,proto3" json:"agent_ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateUserReq) Reset() { *x = CreateUserReq{} - mi := &file_wecom_wecom_proto_msgTypes[3] + mi := &file_wecom_wecom_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -221,7 +273,7 @@ func (x *CreateUserReq) String() string { func (*CreateUserReq) ProtoMessage() {} func (x *CreateUserReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[3] + mi := &file_wecom_wecom_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -234,7 +286,7 @@ func (x *CreateUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateUserReq.ProtoReflect.Descriptor instead. func (*CreateUserReq) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{3} + return file_wecom_wecom_proto_rawDescGZIP(), []int{4} } func (x *CreateUserReq) GetUserId() int64 { @@ -288,21 +340,21 @@ func (x *CreateUserReq) GetAgentIds() []int64 { type UpdateUserReq struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // wecom_users 主键,优先 + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` Type uint32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` Mobile string `protobuf:"bytes,5,opt,name=mobile,proto3" json:"mobile,omitempty"` Avatar string `protobuf:"bytes,6,opt,name=avatar,proto3" json:"avatar,omitempty"` Status uint32 `protobuf:"varint,7,opt,name=status,proto3" json:"status,omitempty"` - AgentIds []int64 `protobuf:"varint,8,rep,packed,name=agent_ids,json=agentIds,proto3" json:"agent_ids,omitempty"` // 应用 agents.id,多选 + AgentIds []int64 `protobuf:"varint,8,rep,packed,name=agent_ids,json=agentIds,proto3" json:"agent_ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateUserReq) Reset() { *x = UpdateUserReq{} - mi := &file_wecom_wecom_proto_msgTypes[4] + mi := &file_wecom_wecom_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -314,7 +366,7 @@ func (x *UpdateUserReq) String() string { func (*UpdateUserReq) ProtoMessage() {} func (x *UpdateUserReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[4] + mi := &file_wecom_wecom_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -327,7 +379,7 @@ func (x *UpdateUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateUserReq.ProtoReflect.Descriptor instead. func (*UpdateUserReq) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{4} + return file_wecom_wecom_proto_rawDescGZIP(), []int{5} } func (x *UpdateUserReq) GetId() int64 { @@ -396,7 +448,7 @@ type StatusUserReq struct { func (x *StatusUserReq) Reset() { *x = StatusUserReq{} - mi := &file_wecom_wecom_proto_msgTypes[5] + mi := &file_wecom_wecom_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -408,7 +460,7 @@ func (x *StatusUserReq) String() string { func (*StatusUserReq) ProtoMessage() {} func (x *StatusUserReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[5] + mi := &file_wecom_wecom_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -421,7 +473,7 @@ func (x *StatusUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusUserReq.ProtoReflect.Descriptor instead. func (*StatusUserReq) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{5} + return file_wecom_wecom_proto_rawDescGZIP(), []int{6} } func (x *StatusUserReq) GetId() int64 { @@ -447,7 +499,7 @@ type DeleteUserReq struct { func (x *DeleteUserReq) Reset() { *x = DeleteUserReq{} - mi := &file_wecom_wecom_proto_msgTypes[6] + mi := &file_wecom_wecom_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -459,7 +511,7 @@ func (x *DeleteUserReq) String() string { func (*DeleteUserReq) ProtoMessage() {} func (x *DeleteUserReq) ProtoReflect() protoreflect.Message { - mi := &file_wecom_wecom_proto_msgTypes[6] + mi := &file_wecom_wecom_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -472,7 +524,7 @@ func (x *DeleteUserReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteUserReq.ProtoReflect.Descriptor instead. func (*DeleteUserReq) Descriptor() ([]byte, []int) { - return file_wecom_wecom_proto_rawDescGZIP(), []int{6} + return file_wecom_wecom_proto_rawDescGZIP(), []int{7} } func (x *DeleteUserReq) GetId() int64 { @@ -482,17 +534,80 @@ func (x *DeleteUserReq) GetId() int64 { return 0 } +type Response struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Response) Reset() { + *x = Response{} + mi := &file_wecom_wecom_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_wecom_wecom_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_wecom_wecom_proto_rawDescGZIP(), []int{8} +} + +func (x *Response) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Response) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *Response) GetData() string { + if x != nil { + return x.Data + } + return "" +} + var File_wecom_wecom_proto protoreflect.FileDescriptor const file_wecom_wecom_proto_rawDesc = "" + "\n" + - "\x11wecom/wecom.proto\x12\x05wecom\x1a\x1cgoogle/api/annotations.proto\"D\n" + - "\bResponse\x12\x12\n" + - "\x04code\x18\x01 \x01(\x05R\x04code\x12\x10\n" + - "\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n" + - "\x04data\x18\x03 \x01(\tR\x04data\"\n" + + "\x11wecom/wecom.proto\x12\x05wecom\x1a\x1cgoogle/api/annotations.proto\"\n" + "\n" + - "\bEmptyReq\"\x7f\n" + + "\bEmptyReq\"=\n" + + "\rCreateTagsReq\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\aremarks\x18\x02 \x01(\tR\aremarks\"S\n" + + "\fItemsTagsReq\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" + + "\x04page\x18\x02 \x01(\rR\x04page\x12\x1b\n" + + "\tpage_size\x18\x03 \x01(\rR\bpageSize\"\x7f\n" + "\fItemsUserReq\x12\x12\n" + "\x04page\x18\x01 \x01(\rR\x04page\x12\x1b\n" + "\tpage_size\x18\x02 \x01(\rR\bpageSize\x12\x12\n" + @@ -520,7 +635,11 @@ const file_wecom_wecom_proto_rawDesc = "" + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x16\n" + "\x06status\x18\x02 \x01(\rR\x06status\"\x1f\n" + "\rDeleteUserReq\x12\x0e\n" + - "\x02id\x18\x01 \x01(\x03R\x02id2\xe2\x04\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\"D\n" + + "\bResponse\x12\x12\n" + + "\x04code\x18\x01 \x01(\x05R\x04code\x12\x10\n" + + "\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n" + + "\x04data\x18\x03 \x01(\tR\x04data2\x8c\x06\n" + "\x05Wecom\x12S\n" + "\n" + "ItemsUsers\x12\x13.wecom.ItemsUserReq\x1a\x0f.wecom.Response\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\x12\x14/admin/v3/wecom/user\x12T\n" + @@ -533,7 +652,10 @@ const file_wecom_wecom_proto_rawDesc = "" + "\n" + "DeleteUser\x12\x14.wecom.DeleteUserReq\x1a\x0f.wecom.Response\"&\x82\xd3\xe4\x93\x02 :\x01*\x1a\x1b/admin/v3/wecom/user/delete\x12Q\n" + "\vItemsAgents\x12\x0f.wecom.EmptyReq\x1a\x0f.wecom.Response\" \x82\xd3\xe4\x93\x02\x1a:\x01*\x12\x15/admin/v3/wecom/agent\x12K\n" + - "\x05Types\x12\x0f.wecom.EmptyReq\x1a\x0f.wecom.Response\" \x82\xd3\xe4\x93\x02\x1a:\x01*\x12\x15/admin/v3/wecom/typesB\x19Z\x17lone-services/rpc/wecomb\x06proto3" + "\x05Types\x12\x0f.wecom.EmptyReq\x1a\x0f.wecom.Response\" \x82\xd3\xe4\x93\x02\x1a:\x01*\x12\x15/admin/v3/wecom/types\x12T\n" + + "\n" + + "CreateTags\x12\x14.wecom.CreateTagsReq\x1a\x0f.wecom.Response\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/admin/v3/wecom/tags\x12R\n" + + "\tItemsTags\x12\x13.wecom.ItemsTagsReq\x1a\x0f.wecom.Response\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\x12\x14/admin/v3/wecom/tagsB\x19Z\x17lone-services/rpc/wecomb\x06proto3" var ( file_wecom_wecom_proto_rawDescOnce sync.Once @@ -547,33 +669,39 @@ func file_wecom_wecom_proto_rawDescGZIP() []byte { return file_wecom_wecom_proto_rawDescData } -var file_wecom_wecom_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_wecom_wecom_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_wecom_wecom_proto_goTypes = []any{ - (*Response)(nil), // 0: wecom.Response - (*EmptyReq)(nil), // 1: wecom.EmptyReq - (*ItemsUserReq)(nil), // 2: wecom.ItemsUserReq - (*CreateUserReq)(nil), // 3: wecom.CreateUserReq - (*UpdateUserReq)(nil), // 4: wecom.UpdateUserReq - (*StatusUserReq)(nil), // 5: wecom.StatusUserReq - (*DeleteUserReq)(nil), // 6: wecom.DeleteUserReq + (*EmptyReq)(nil), // 0: wecom.EmptyReq + (*CreateTagsReq)(nil), // 1: wecom.CreateTagsReq + (*ItemsTagsReq)(nil), // 2: wecom.ItemsTagsReq + (*ItemsUserReq)(nil), // 3: wecom.ItemsUserReq + (*CreateUserReq)(nil), // 4: wecom.CreateUserReq + (*UpdateUserReq)(nil), // 5: wecom.UpdateUserReq + (*StatusUserReq)(nil), // 6: wecom.StatusUserReq + (*DeleteUserReq)(nil), // 7: wecom.DeleteUserReq + (*Response)(nil), // 8: wecom.Response } var file_wecom_wecom_proto_depIdxs = []int32{ - 2, // 0: wecom.Wecom.ItemsUsers:input_type -> wecom.ItemsUserReq - 3, // 1: wecom.Wecom.CreateUser:input_type -> wecom.CreateUserReq - 4, // 2: wecom.Wecom.UpdateUser:input_type -> wecom.UpdateUserReq - 5, // 3: wecom.Wecom.StatusUser:input_type -> wecom.StatusUserReq - 6, // 4: wecom.Wecom.DeleteUser:input_type -> wecom.DeleteUserReq - 1, // 5: wecom.Wecom.ItemsAgents:input_type -> wecom.EmptyReq - 1, // 6: wecom.Wecom.Types:input_type -> wecom.EmptyReq - 0, // 7: wecom.Wecom.ItemsUsers:output_type -> wecom.Response - 0, // 8: wecom.Wecom.CreateUser:output_type -> wecom.Response - 0, // 9: wecom.Wecom.UpdateUser:output_type -> wecom.Response - 0, // 10: wecom.Wecom.StatusUser:output_type -> wecom.Response - 0, // 11: wecom.Wecom.DeleteUser:output_type -> wecom.Response - 0, // 12: wecom.Wecom.ItemsAgents:output_type -> wecom.Response - 0, // 13: wecom.Wecom.Types:output_type -> wecom.Response - 7, // [7:14] is the sub-list for method output_type - 0, // [0:7] is the sub-list for method input_type + 3, // 0: wecom.Wecom.ItemsUsers:input_type -> wecom.ItemsUserReq + 4, // 1: wecom.Wecom.CreateUser:input_type -> wecom.CreateUserReq + 5, // 2: wecom.Wecom.UpdateUser:input_type -> wecom.UpdateUserReq + 6, // 3: wecom.Wecom.StatusUser:input_type -> wecom.StatusUserReq + 7, // 4: wecom.Wecom.DeleteUser:input_type -> wecom.DeleteUserReq + 0, // 5: wecom.Wecom.ItemsAgents:input_type -> wecom.EmptyReq + 0, // 6: wecom.Wecom.Types:input_type -> wecom.EmptyReq + 1, // 7: wecom.Wecom.CreateTags:input_type -> wecom.CreateTagsReq + 2, // 8: wecom.Wecom.ItemsTags:input_type -> wecom.ItemsTagsReq + 8, // 9: wecom.Wecom.ItemsUsers:output_type -> wecom.Response + 8, // 10: wecom.Wecom.CreateUser:output_type -> wecom.Response + 8, // 11: wecom.Wecom.UpdateUser:output_type -> wecom.Response + 8, // 12: wecom.Wecom.StatusUser:output_type -> wecom.Response + 8, // 13: wecom.Wecom.DeleteUser:output_type -> wecom.Response + 8, // 14: wecom.Wecom.ItemsAgents:output_type -> wecom.Response + 8, // 15: wecom.Wecom.Types:output_type -> wecom.Response + 8, // 16: wecom.Wecom.CreateTags:output_type -> wecom.Response + 8, // 17: wecom.Wecom.ItemsTags:output_type -> wecom.Response + 9, // [9:18] is the sub-list for method output_type + 0, // [0:9] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -590,7 +718,7 @@ func file_wecom_wecom_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_wecom_wecom_proto_rawDesc), len(file_wecom_wecom_proto_rawDesc)), NumEnums: 0, - NumMessages: 7, + NumMessages: 9, NumExtensions: 0, NumServices: 1, }, diff --git a/rpc/wecom/pb/wecom_grpc.pb.go b/rpc/wecom/pb/wecom_grpc.pb.go index b995686..156d45c 100644 --- a/rpc/wecom/pb/wecom_grpc.pb.go +++ b/rpc/wecom/pb/wecom_grpc.pb.go @@ -26,6 +26,8 @@ const ( Wecom_DeleteUser_FullMethodName = "/wecom.Wecom/DeleteUser" Wecom_ItemsAgents_FullMethodName = "/wecom.Wecom/ItemsAgents" Wecom_Types_FullMethodName = "/wecom.Wecom/Types" + Wecom_CreateTags_FullMethodName = "/wecom.Wecom/CreateTags" + Wecom_ItemsTags_FullMethodName = "/wecom.Wecom/ItemsTags" ) // WecomClient is the client API for Wecom service. @@ -39,6 +41,8 @@ type WecomClient interface { DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*Response, error) ItemsAgents(ctx context.Context, in *EmptyReq, opts ...grpc.CallOption) (*Response, error) Types(ctx context.Context, in *EmptyReq, opts ...grpc.CallOption) (*Response, error) + CreateTags(ctx context.Context, in *CreateTagsReq, opts ...grpc.CallOption) (*Response, error) + ItemsTags(ctx context.Context, in *ItemsTagsReq, opts ...grpc.CallOption) (*Response, error) } type wecomClient struct { @@ -119,6 +123,26 @@ func (c *wecomClient) Types(ctx context.Context, in *EmptyReq, opts ...grpc.Call return out, nil } +func (c *wecomClient) CreateTags(ctx context.Context, in *CreateTagsReq, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Wecom_CreateTags_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wecomClient) ItemsTags(ctx context.Context, in *ItemsTagsReq, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Wecom_ItemsTags_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // WecomServer is the server API for Wecom service. // All implementations must embed UnimplementedWecomServer // for forward compatibility. @@ -130,6 +154,8 @@ type WecomServer interface { DeleteUser(context.Context, *DeleteUserReq) (*Response, error) ItemsAgents(context.Context, *EmptyReq) (*Response, error) Types(context.Context, *EmptyReq) (*Response, error) + CreateTags(context.Context, *CreateTagsReq) (*Response, error) + ItemsTags(context.Context, *ItemsTagsReq) (*Response, error) mustEmbedUnimplementedWecomServer() } @@ -161,6 +187,12 @@ func (UnimplementedWecomServer) ItemsAgents(context.Context, *EmptyReq) (*Respon func (UnimplementedWecomServer) Types(context.Context, *EmptyReq) (*Response, error) { return nil, status.Error(codes.Unimplemented, "method Types not implemented") } +func (UnimplementedWecomServer) CreateTags(context.Context, *CreateTagsReq) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method CreateTags not implemented") +} +func (UnimplementedWecomServer) ItemsTags(context.Context, *ItemsTagsReq) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method ItemsTags not implemented") +} func (UnimplementedWecomServer) mustEmbedUnimplementedWecomServer() {} func (UnimplementedWecomServer) testEmbeddedByValue() {} @@ -308,6 +340,42 @@ func _Wecom_Types_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } +func _Wecom_CreateTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTagsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WecomServer).CreateTags(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Wecom_CreateTags_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WecomServer).CreateTags(ctx, req.(*CreateTagsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Wecom_ItemsTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ItemsTagsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WecomServer).ItemsTags(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Wecom_ItemsTags_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WecomServer).ItemsTags(ctx, req.(*ItemsTagsReq)) + } + return interceptor(ctx, in, info, handler) +} + // Wecom_ServiceDesc is the grpc.ServiceDesc for Wecom service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -343,6 +411,14 @@ var Wecom_ServiceDesc = grpc.ServiceDesc{ MethodName: "Types", Handler: _Wecom_Types_Handler, }, + { + MethodName: "CreateTags", + Handler: _Wecom_CreateTags_Handler, + }, + { + MethodName: "ItemsTags", + Handler: _Wecom_ItemsTags_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "wecom/wecom.proto", diff --git a/rpc/wecom/wecom.pb b/rpc/wecom/wecom.pb index 3036c3d..61aa1b6 100644 Binary files a/rpc/wecom/wecom.pb and b/rpc/wecom/wecom.pb differ diff --git a/rpc/wecom/wecom.proto b/rpc/wecom/wecom.proto index ce80cc4..ead2574 100644 --- a/rpc/wecom/wecom.proto +++ b/rpc/wecom/wecom.proto @@ -49,16 +49,35 @@ service Wecom { body: "*" }; } -} -message Response { - int32 code = 1; - string msg = 2; - string data = 3; + rpc CreateTags(CreateTagsReq) returns (Response) { + option (google.api.http) = { + post: "/admin/v3/wecom/tags" + body: "*" + }; + } + + rpc ItemsTags(ItemsTagsReq) returns (Response) { + option (google.api.http) = { + get: "/admin/v3/wecom/tags" + body: "*" + }; + } } message EmptyReq {} +message CreateTagsReq{ + string name = 1; + string remarks = 2; +} + +message ItemsTagsReq{ + string name = 1; + uint32 page = 2; + uint32 page_size = 3; +} + message ItemsUserReq { uint32 page = 1; uint32 page_size = 2; @@ -74,18 +93,18 @@ message CreateUserReq { string mobile = 4; string avatar = 5; uint32 status = 6; - repeated int64 agent_ids = 7; // 应用 agents.id,多选 + repeated int64 agent_ids = 7; } message UpdateUserReq { - int64 id = 1; // wecom_users 主键,优先 + int64 id = 1; int64 user_id = 2; uint32 type = 3; string name = 4; string mobile = 5; string avatar = 6; uint32 status = 7; - repeated int64 agent_ids = 8; // 应用 agents.id,多选 + repeated int64 agent_ids = 8; } message StatusUserReq { @@ -96,3 +115,9 @@ message StatusUserReq { message DeleteUserReq { int64 id = 1; } + +message Response { + int32 code = 1; + string msg = 2; + string data = 3; +} diff --git a/services/sale/run.toml b/services/sale/run.toml new file mode 100644 index 0000000..6f83ec6 --- /dev/null +++ b/services/sale/run.toml @@ -0,0 +1,59 @@ +[base] + login_out_time=43200 #api接口超时时间分 + login_refresh_out_time=83200 + name = "sale-service" + listenOn = "0.0.0.0:10300" + mode = "dev" +[log] + path = "logs" + serviceName = "sale-service" + mode = "file" + encoding = "plain" + level = "info" + keepDays = 7 + maxSize = 50 + maxBackups = 5 + compress = false + +[oss] + accessKeyId = "LTAI5t7U8KvxSiPE5auwQUuu" + accessKeySecret = "xjfgbQQRpL4TcIspNuClg6bYADa3pk" + roleArn = "acs:ram::1663896742753915:role/oss-upload" + roleSessionName = "oss-upload" + region = "oss-cn-hangzhou" + bucketName = "lone-images" + endpoint = "https://oss-accelerate.aliyuncs.com" + host = "https://images.ailuowan.com" + dir = "upload/" + expireSeconds = 3600 + +[mysql] + host = '39.106.171.204' + port = 33066 + user = 'root' + password = 'MOLXRZNOU4Y4' + database = 'dms-sale' + charset = 'utf8mb4' + prefix = '' + debug = true +[mysql_read] + host = '39.106.171.204' + port = 33066 + user = 'root' + password = 'MOLXRZNOU4Y4' + database = 'dms-sale' + charset = 'utf8mb4' + prefix = '' + +[redis] + host = '39.106.171.204' + password = 'lLMLcuPpzSj' + port = 6379 + db = 0 + +[encrypt] + data_key = "u2t9T3luZtoRfhBstkFN6TiIMW38BA8a" + +[services] + chore = "chore-service" + user = "user-service" \ No newline at end of file diff --git a/services/wecom/internal/dao/tags.go b/services/wecom/internal/dao/tags.go new file mode 100644 index 0000000..fb36f75 --- /dev/null +++ b/services/wecom/internal/dao/tags.go @@ -0,0 +1,13 @@ +package dao + +import "lone-services/pkg/utils" + +type Tags struct { + ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` + Name string `gorm:"column:name" json:"name"` + TagID int64 `gorm:"column:tag_id" json:"tag_id"` + Remarks string `gorm:"column:remarks" json:"remarks"` + Status uint8 `gorm:"column:status" json:"status"` + CreatedAt utils.CustomTime `gorm:"column:created_at" json:"created_at"` + UpdatedAt utils.CustomTime `gorm:"column:updated_at" json:"updated_at"` +} diff --git a/services/wecom/internal/logic/createTagsLogic.go b/services/wecom/internal/logic/createTagsLogic.go new file mode 100644 index 0000000..bdb1116 --- /dev/null +++ b/services/wecom/internal/logic/createTagsLogic.go @@ -0,0 +1,55 @@ +package logic + +import ( + "context" + + "lone-services/pkg/utils" + "lone-services/pkg/wecom/tags" + wecom "lone-services/rpc/wecom/pb" + "lone-services/services/wecom/internal/dao" + "lone-services/services/wecom/internal/model" + "lone-services/services/wecom/internal/svc" + + "github.com/zeromicro/go-zero/core/logx" +) + +type CreateTagsLogic struct { + ctx context.Context + svcCtx *svc.ServiceContext + logx.Logger +} + +func NewCreateTagsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateTagsLogic { + return &CreateTagsLogic{ + ctx: ctx, + svcCtx: svcCtx, + Logger: logx.WithContext(ctx), + } +} + +func (l *CreateTagsLogic) CreateTags(in *wecom.CreateTagsReq) (*wecom.Response, error) { + + client := NewTagClient() + data := tags.CreateRequest{ + TagName: in.Name, + } + tag, err := client.Create(l.ctx, data) + if err != nil { + l.Logger.Error("create tag error", "error", err) + return failResponse(utils.Fail), nil + } + + create := dao.Tags{ + Name: in.Name, + Remarks: in.Remarks, + Status: 1, + TagID: tag.TagID, + CreatedAt: utils.Now(), + } + err = model.TagsModel{}.Init().Create(&create) + if err != nil { + l.Logger.Error("create tag error", "error", err) + return failResponse(utils.Fail), nil + } + return okResponse(nil), nil +} diff --git a/services/wecom/internal/logic/helper.go b/services/wecom/internal/logic/helper.go index e0f4ef1..5ae60b3 100644 --- a/services/wecom/internal/logic/helper.go +++ b/services/wecom/internal/logic/helper.go @@ -6,6 +6,8 @@ import ( "lone-services/pkg/modelbase" "lone-services/pkg/utils" + "lone-services/pkg/wecom/auth" + "lone-services/pkg/wecom/tags" "lone-services/services/wecom/internal/dao" "lone-services/services/wecom/internal/model" @@ -128,3 +130,7 @@ func cleanAgentIds(ids []int64) []int64 { } return out } + +func NewTagClient() *tags.Client { + return tags.NewClient(auth.NewClient(utils.GetConfigString("wecom.corp_id"), utils.GetConfigString("wecom.corp_secret"))) +} diff --git a/services/wecom/internal/logic/itemsTagsLogic.go b/services/wecom/internal/logic/itemsTagsLogic.go new file mode 100644 index 0000000..87414a0 --- /dev/null +++ b/services/wecom/internal/logic/itemsTagsLogic.go @@ -0,0 +1,47 @@ +package logic + +import ( + "context" + + "lone-services/pkg/modelbase" + "lone-services/pkg/utils" + wecom "lone-services/rpc/wecom/pb" + "lone-services/services/wecom/internal/dao" + "lone-services/services/wecom/internal/model" + "lone-services/services/wecom/internal/svc" + + "github.com/zeromicro/go-zero/core/logx" +) + +type ItemsTagsLogic struct { + ctx context.Context + svcCtx *svc.ServiceContext + logx.Logger +} + +func NewItemsTagsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ItemsTagsLogic { + return &ItemsTagsLogic{ + ctx: ctx, + svcCtx: svcCtx, + Logger: logx.WithContext(ctx), + } +} + +func (l *ItemsTagsLogic) ItemsTags(in *wecom.ItemsTagsReq) (*wecom.Response, error) { + + w := modelbase.Params{ + Page: int(in.Page), + Size: int(in.PageSize), + Order: "id desc", + } + + if in.Name != utils.StringEmpty { + w.Like["name"] = "%" + in.Name + "%" + } + var data []dao.Tags + page, err := model.TagsModel{}.Init().Page(w, &data) + if err != nil { + return failResponse(utils.Fail), nil + } + return okResponse(page), nil +} diff --git a/services/wecom/internal/model/tags.go b/services/wecom/internal/model/tags.go new file mode 100644 index 0000000..2ce3cf7 --- /dev/null +++ b/services/wecom/internal/model/tags.go @@ -0,0 +1,18 @@ +package model + +import ( + "lone-services/pkg/modelbase" +) + +type TagsModel struct { + modelbase.Base +} + +func (m TagsModel) TableName() string { + return modelbase.Prefix() + "tags" +} + +func (m TagsModel) Init() TagsModel { + m.Table = m.TableName() + return m +} diff --git a/services/wecom/internal/server/wecomServer.go b/services/wecom/internal/server/wecomServer.go index d957134..e99b41f 100644 --- a/services/wecom/internal/server/wecomServer.go +++ b/services/wecom/internal/server/wecomServer.go @@ -57,3 +57,13 @@ func (s *WecomServer) Types(ctx context.Context, in *wecom.EmptyReq) (*wecom.Res l := logic.NewTypesLogic(ctx, s.svcCtx) return l.Types(in) } + +func (s *WecomServer) CreateTags(ctx context.Context, in *wecom.CreateTagsReq) (*wecom.Response, error) { + l := logic.NewCreateTagsLogic(ctx, s.svcCtx) + return l.CreateTags(in) +} + +func (s *WecomServer) ItemsTags(ctx context.Context, in *wecom.ItemsTagsReq) (*wecom.Response, error) { + l := logic.NewItemsTagsLogic(ctx, s.svcCtx) + return l.ItemsTags(in) +} diff --git a/services/wecom/wecomClient/wecom.go b/services/wecom/wecomClient/wecom.go index b67e424..823a79b 100644 --- a/services/wecom/wecomClient/wecom.go +++ b/services/wecom/wecomClient/wecom.go @@ -14,9 +14,11 @@ import ( ) type ( + CreateTagsReq = wecom.CreateTagsReq CreateUserReq = wecom.CreateUserReq DeleteUserReq = wecom.DeleteUserReq EmptyReq = wecom.EmptyReq + ItemsTagsReq = wecom.ItemsTagsReq ItemsUserReq = wecom.ItemsUserReq Response = wecom.Response StatusUserReq = wecom.StatusUserReq @@ -30,6 +32,8 @@ type ( DeleteUser(ctx context.Context, in *DeleteUserReq, opts ...grpc.CallOption) (*Response, error) ItemsAgents(ctx context.Context, in *EmptyReq, opts ...grpc.CallOption) (*Response, error) Types(ctx context.Context, in *EmptyReq, opts ...grpc.CallOption) (*Response, error) + CreateTags(ctx context.Context, in *CreateTagsReq, opts ...grpc.CallOption) (*Response, error) + ItemsTags(ctx context.Context, in *ItemsTagsReq, opts ...grpc.CallOption) (*Response, error) } defaultWecom struct { @@ -77,3 +81,13 @@ func (m *defaultWecom) Types(ctx context.Context, in *EmptyReq, opts ...grpc.Cal client := wecom.NewWecomClient(m.cli.Conn()) return client.Types(ctx, in, opts...) } + +func (m *defaultWecom) CreateTags(ctx context.Context, in *CreateTagsReq, opts ...grpc.CallOption) (*Response, error) { + client := wecom.NewWecomClient(m.cli.Conn()) + return client.CreateTags(ctx, in, opts...) +} + +func (m *defaultWecom) ItemsTags(ctx context.Context, in *ItemsTagsReq, opts ...grpc.CallOption) (*Response, error) { + client := wecom.NewWecomClient(m.cli.Conn()) + return client.ItemsTags(ctx, in, opts...) +}