add wxwork kf account management functionality
This commit is contained in:
@@ -45,6 +45,17 @@ func (c *ChannelController) GetBy(id int64) *web.JsonResult {
|
||||
return web.JsonData(buildChannelResponse(item))
|
||||
}
|
||||
|
||||
func (c *ChannelController) AnyWxworkKfAccounts() *web.JsonResult {
|
||||
if _, err := services.AuthService.RequirePermission(c.Ctx, constants.PermissionChannelView); err != nil {
|
||||
return web.JsonError(err)
|
||||
}
|
||||
list, err := services.ChannelService.ListWxWorkKFAccounts()
|
||||
if err != nil {
|
||||
return web.JsonError(err)
|
||||
}
|
||||
return web.JsonData(list)
|
||||
}
|
||||
|
||||
func (c *ChannelController) PostCreate() *web.JsonResult {
|
||||
operator, err := services.AuthService.RequirePermission(c.Ctx, constants.PermissionChannelCreate)
|
||||
if err != nil {
|
||||
|
||||
@@ -17,6 +17,13 @@ type ChannelResponse struct {
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
type WxWorkKFAccountResponse struct {
|
||||
OpenKfID string `json:"openKfId"`
|
||||
Name string `json:"name"`
|
||||
Avatar string `json:"avatar"`
|
||||
ManagePrivilege bool `json:"managePrivilege"`
|
||||
}
|
||||
|
||||
func BuildChannelResponse(item *models.Channel) ChannelResponse {
|
||||
if item == nil {
|
||||
return ChannelResponse{}
|
||||
|
||||
@@ -4,11 +4,13 @@ import (
|
||||
"cs-agent/internal/models"
|
||||
"cs-agent/internal/pkg/dto"
|
||||
"cs-agent/internal/pkg/dto/request"
|
||||
"cs-agent/internal/pkg/dto/response"
|
||||
"cs-agent/internal/pkg/enums"
|
||||
"cs-agent/internal/pkg/errorsx"
|
||||
"cs-agent/internal/pkg/irisx"
|
||||
"cs-agent/internal/pkg/utils"
|
||||
"cs-agent/internal/repositories"
|
||||
"cs-agent/internal/wxwork"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -17,6 +19,7 @@ import (
|
||||
"github.com/mlogclub/simple/common/strs"
|
||||
"github.com/mlogclub/simple/sqls"
|
||||
"github.com/mlogclub/simple/web/params"
|
||||
"github.com/silenceper/wechat/v2/work/kf"
|
||||
)
|
||||
|
||||
var ChannelService = newChannelService()
|
||||
@@ -161,6 +164,44 @@ func (s *channelService) ParseWxWorkKFChannelConfig(raw string) (*dto.WxWorkKFCh
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (s *channelService) ListWxWorkKFAccounts() ([]response.WxWorkKFAccountResponse, error) {
|
||||
if !wxwork.Enabled() || wxwork.GetWorkCli() == nil {
|
||||
return nil, errorsx.BusinessError(1, "企业微信未启用或配置不完整")
|
||||
}
|
||||
cli, err := wxwork.GetWorkCli().GetKF()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
const limit = 100
|
||||
accounts := make([]response.WxWorkKFAccountResponse, 0)
|
||||
for offset := 0; ; offset += limit {
|
||||
result, err := cli.AccountPaging(&kf.AccountPagingRequest{
|
||||
Offset: offset,
|
||||
Limit: limit,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, item := range result.AccountList {
|
||||
openKfID := strings.TrimSpace(item.OpenKFID)
|
||||
if openKfID == "" {
|
||||
continue
|
||||
}
|
||||
accounts = append(accounts, response.WxWorkKFAccountResponse{
|
||||
OpenKfID: openKfID,
|
||||
Name: strings.TrimSpace(item.Name),
|
||||
Avatar: strings.TrimSpace(item.Avatar),
|
||||
ManagePrivilege: item.ManagePrivilege,
|
||||
})
|
||||
}
|
||||
if len(result.AccountList) < limit {
|
||||
break
|
||||
}
|
||||
}
|
||||
return accounts, nil
|
||||
}
|
||||
|
||||
func (s *channelService) ParseWebChannelConfig(raw string) (*dto.WebChannelConfig, error) {
|
||||
raw = strings.TrimSpace(raw)
|
||||
cfg := &dto.WebChannelConfig{
|
||||
|
||||
Reference in New Issue
Block a user