|
@@ -4,6 +4,7 @@ import (
|
|
|
"context"
|
|
|
"fmt"
|
|
|
reqv3 "github.com/imroc/req/v3"
|
|
|
+ "github.com/suyuan32/simple-admin-common/utils/pointy"
|
|
|
"github.com/suyuan32/simple-admin-core/rpc/types/core"
|
|
|
"strings"
|
|
|
"wechat-api/ent"
|
|
@@ -17,7 +18,6 @@ import (
|
|
|
|
|
|
"github.com/suyuan32/simple-admin-common/msg/errormsg"
|
|
|
|
|
|
- "github.com/suyuan32/simple-admin-common/utils/pointy"
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
)
|
|
|
|
|
@@ -91,156 +91,229 @@ func (l *GetWxListLogic) GetWxList(req *types.WxListReq) (*types.WxListResp, err
|
|
|
resp.Msg = errormsg.Success
|
|
|
resp.Data.Total = data.PageDetails.Total
|
|
|
|
|
|
- var result types.WorkPhoneGetWeChatsResp
|
|
|
+ if req.Ctype != nil && *req.Ctype == 3 {
|
|
|
+ for _, v := range data.List {
|
|
|
+ // 创建 hookClient 客户端
|
|
|
+ serverInfo := serverSet[v.ServerID]
|
|
|
+ serverName := serverInfo.Name
|
|
|
+ processID := v.ProcessID
|
|
|
+ wxid := v.Wxid
|
|
|
+ account := v.Account
|
|
|
+ nickname := v.Nickname
|
|
|
+ tel := v.Tel
|
|
|
+ headBig := v.HeadBig
|
|
|
|
|
|
- res, err := reqv3.C().DevMode().R().SetSuccessResult(&result).Post("http://chat.gkscrm.com:13086/pc/GetWeChatsReq?id=13")
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- if !res.IsSuccessState() {
|
|
|
- err = fmt.Errorf("GetWeChats failed with status code %d", res.StatusCode)
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+ departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
|
|
|
+ if err != nil {
|
|
|
+ l.Error("获取部门信息失败", err)
|
|
|
+ }
|
|
|
|
|
|
- workphoneWxList := make(map[string]types.WorkPhoneWeChat, len(result.Data))
|
|
|
- for _, v := range result.Data {
|
|
|
- workphoneWxList[v.Wechatid] = v
|
|
|
- }
|
|
|
+ totalTokens := uint64(0)
|
|
|
+ usageTotalInfo, _ := l.svcCtx.DB.UsageTotal.Query().
|
|
|
+ Where(
|
|
|
+ usagetotal.BotID(wxid),
|
|
|
+ ).
|
|
|
+ Only(l.ctx)
|
|
|
+ if usageTotalInfo != nil {
|
|
|
+ totalTokens = usageTotalInfo.TotalTokens
|
|
|
+ }
|
|
|
|
|
|
- for _, v := range data.List {
|
|
|
- // 创建 hookClient 客户端
|
|
|
- serverInfo := serverSet[v.ServerID]
|
|
|
- serverName := serverInfo.Name
|
|
|
- if strings.HasPrefix(strings.ToUpper(v.Port), "PC-") {
|
|
|
- serverName = "本地版"
|
|
|
- }
|
|
|
- var loginStatus uint8 = 0
|
|
|
- hookClient := hook.NewHook(serverInfo.PrivateIP, serverInfo.AdminPort, v.Port)
|
|
|
- if v.ServerID > 0 {
|
|
|
- if serverInfo.Status == 1 {
|
|
|
- // 获取登录状态
|
|
|
- loginInfo, err := hookClient.IsLoginStatus()
|
|
|
-
|
|
|
- if err != nil {
|
|
|
- l.Error("退出登录失败", err)
|
|
|
- } else {
|
|
|
- if loginInfo.Onlinestatus == "3" {
|
|
|
- loginStatus = 1
|
|
|
- }
|
|
|
+ var agent types.AgentInfo
|
|
|
+ if v.Edges.Agent != nil {
|
|
|
+ agent = types.AgentInfo{
|
|
|
+ BaseIDInfo: types.BaseIDInfo{
|
|
|
+ Id: &v.AgentID,
|
|
|
+ CreatedAt: pointy.GetPointer(v.Edges.Agent.CreatedAt.UnixMilli()),
|
|
|
+ UpdatedAt: pointy.GetPointer(v.Edges.Agent.UpdatedAt.UnixMilli()),
|
|
|
+ },
|
|
|
+ Name: &v.Edges.Agent.Name,
|
|
|
+ Role: &v.Edges.Agent.Role,
|
|
|
+ Status: &v.Edges.Agent.Status,
|
|
|
+ Background: &v.Edges.Agent.Background,
|
|
|
+ Examples: &v.Edges.Agent.Examples,
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- workphoneWx, exists := workphoneWxList[v.Wxid]
|
|
|
- if exists && workphoneWx.Isonline == 0 {
|
|
|
- loginStatus = 1
|
|
|
- } else {
|
|
|
- loginStatus = 0
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- processID := v.ProcessID
|
|
|
- wxid := v.Wxid
|
|
|
- account := v.Account
|
|
|
- nickname := v.Nickname
|
|
|
- tel := v.Tel
|
|
|
- headBig := v.HeadBig
|
|
|
+ resp.Data.Data = append(resp.Data.Data,
|
|
|
+ types.WxInfo{
|
|
|
+ BaseIDInfo: types.BaseIDInfo{
|
|
|
+ Id: &v.ID,
|
|
|
+ CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
|
|
|
+ UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
|
|
|
+ },
|
|
|
+ Status: &v.Status,
|
|
|
+ ServerId: &v.ServerID,
|
|
|
+ ServerName: &serverName,
|
|
|
+ Port: &v.Port,
|
|
|
+ ProcessId: &processID,
|
|
|
+ Callback: &v.Callback,
|
|
|
+ Wxid: &wxid,
|
|
|
+ Account: &account,
|
|
|
+ Nickname: &nickname,
|
|
|
+ Tel: &tel,
|
|
|
+ HeadBig: &headBig,
|
|
|
+ OrganizationId: &v.OrganizationID,
|
|
|
+ OrganizationName: departmentInfo.Name,
|
|
|
+ AgentId: &v.AgentID,
|
|
|
+ AgentInfo: &agent,
|
|
|
+ ApiBase: &v.APIBase,
|
|
|
+ ApiKey: &v.APIKey,
|
|
|
+ TotalTokens: &totalTokens,
|
|
|
+ Ctype: &v.Ctype,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var result types.WorkPhoneGetWeChatsResp
|
|
|
|
|
|
- departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
|
|
|
+ res, err := reqv3.C().DevMode().R().SetSuccessResult(&result).Post("http://chat.gkscrm.com:13086/pc/GetWeChatsReq?id=13")
|
|
|
if err != nil {
|
|
|
- l.Error("获取部门信息失败", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if !res.IsSuccessState() {
|
|
|
+ err = fmt.Errorf("GetWeChats failed with status code %d", res.StatusCode)
|
|
|
+ return nil, err
|
|
|
}
|
|
|
|
|
|
- if v.ServerID > 0 {
|
|
|
- if loginStatus == 1 {
|
|
|
- // 如果处于登录状态,获取登录信息
|
|
|
- wxInfo, _ := hookClient.GetSelfLoginInfo()
|
|
|
- if err != nil {
|
|
|
- l.Error("获取登录信息失败", err)
|
|
|
- } else {
|
|
|
- if wxid != wxInfo.Wxid {
|
|
|
- l.svcCtx.Rds.HDel(l.ctx, "wx_info", wxid)
|
|
|
- l.svcCtx.Rds.HDel(l.ctx, "wx_info", wxInfo.Wxid)
|
|
|
- l.svcCtx.Rds.HDel(l.ctx, "crontask_wx_server_info", wxid)
|
|
|
- l.svcCtx.Rds.HDel(l.ctx, "crontask_wx_server_info", wxInfo.Wxid)
|
|
|
+ workphoneWxList := make(map[string]types.WorkPhoneWeChat, len(result.Data))
|
|
|
+ for _, v := range result.Data {
|
|
|
+ workphoneWxList[v.Wechatid] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range data.List {
|
|
|
+ // 创建 hookClient 客户端
|
|
|
+ serverInfo := serverSet[v.ServerID]
|
|
|
+ serverName := serverInfo.Name
|
|
|
+ if strings.HasPrefix(strings.ToUpper(v.Port), "PC-") {
|
|
|
+ serverName = "本地版"
|
|
|
+ }
|
|
|
+ var loginStatus uint8 = 0
|
|
|
+ hookClient := hook.NewHook(serverInfo.PrivateIP, serverInfo.AdminPort, v.Port)
|
|
|
+ if v.ServerID > 0 {
|
|
|
+ if serverInfo.Status == 1 {
|
|
|
+ // 获取登录状态
|
|
|
+ loginInfo, err := hookClient.IsLoginStatus()
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ l.Error("退出登录失败", err)
|
|
|
+ } else {
|
|
|
+ if loginInfo.Onlinestatus == "3" {
|
|
|
+ loginStatus = 1
|
|
|
+ }
|
|
|
}
|
|
|
- processID = wxInfo.ProcessID
|
|
|
- wxid = wxInfo.Wxid
|
|
|
- account = wxInfo.Account
|
|
|
- nickname = wxInfo.Nickname
|
|
|
- tel = wxInfo.Tel
|
|
|
- headBig = wxInfo.HeadBig
|
|
|
- _ = l.svcCtx.DB.Wx.UpdateOneID(v.ID).
|
|
|
- SetNotNilStatus(&loginStatus).
|
|
|
- SetNotNilProcessID(&wxInfo.ProcessID).
|
|
|
- SetNotNilWxid(&wxInfo.Wxid).
|
|
|
- SetNotNilAccount(&wxInfo.Account).
|
|
|
- SetNotNilNickname(&wxInfo.Nickname).
|
|
|
- SetNotNilTel(&wxInfo.Tel).
|
|
|
- SetNotNilHeadBig(&wxInfo.HeadBig).
|
|
|
- Exec(l.ctx)
|
|
|
}
|
|
|
} else {
|
|
|
- if loginStatus != v.Status {
|
|
|
- _ = l.svcCtx.DB.Wx.UpdateOneID(v.ID).
|
|
|
- SetNotNilStatus(&loginStatus).
|
|
|
- Exec(l.ctx)
|
|
|
+ workphoneWx, exists := workphoneWxList[v.Wxid]
|
|
|
+ if exists && workphoneWx.Isonline == 0 {
|
|
|
+ loginStatus = 1
|
|
|
+ } else {
|
|
|
+ loginStatus = 0
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- totalTokens := uint64(0)
|
|
|
- usageTotalInfo, _ := l.svcCtx.DB.UsageTotal.Query().
|
|
|
- Where(
|
|
|
- usagetotal.BotID(wxid),
|
|
|
- ).
|
|
|
- Only(l.ctx)
|
|
|
- if usageTotalInfo != nil {
|
|
|
- totalTokens = usageTotalInfo.TotalTokens
|
|
|
- }
|
|
|
+ processID := v.ProcessID
|
|
|
+ wxid := v.Wxid
|
|
|
+ account := v.Account
|
|
|
+ nickname := v.Nickname
|
|
|
+ tel := v.Tel
|
|
|
+ headBig := v.HeadBig
|
|
|
|
|
|
- var agent types.AgentInfo
|
|
|
- if v.Edges.Agent != nil {
|
|
|
- agent = types.AgentInfo{
|
|
|
- BaseIDInfo: types.BaseIDInfo{
|
|
|
- Id: &v.AgentID,
|
|
|
- CreatedAt: pointy.GetPointer(v.Edges.Agent.CreatedAt.UnixMilli()),
|
|
|
- UpdatedAt: pointy.GetPointer(v.Edges.Agent.UpdatedAt.UnixMilli()),
|
|
|
- },
|
|
|
- Name: &v.Edges.Agent.Name,
|
|
|
- Role: &v.Edges.Agent.Role,
|
|
|
- Status: &v.Edges.Agent.Status,
|
|
|
- Background: &v.Edges.Agent.Background,
|
|
|
- Examples: &v.Edges.Agent.Examples,
|
|
|
+ departmentInfo, err := l.svcCtx.CoreRpc.GetDepartmentById(l.ctx, &core.IDReq{Id: v.OrganizationID})
|
|
|
+ if err != nil {
|
|
|
+ l.Error("获取部门信息失败", err)
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- resp.Data.Data = append(resp.Data.Data,
|
|
|
- types.WxInfo{
|
|
|
- BaseIDInfo: types.BaseIDInfo{
|
|
|
- Id: &v.ID,
|
|
|
- CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
|
|
|
- UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
|
|
|
- },
|
|
|
- Status: &loginStatus,
|
|
|
- ServerId: &v.ServerID,
|
|
|
- ServerName: &serverName,
|
|
|
- Port: &v.Port,
|
|
|
- ProcessId: &processID,
|
|
|
- Callback: &v.Callback,
|
|
|
- Wxid: &wxid,
|
|
|
- Account: &account,
|
|
|
- Nickname: &nickname,
|
|
|
- Tel: &tel,
|
|
|
- HeadBig: &headBig,
|
|
|
- OrganizationId: &v.OrganizationID,
|
|
|
- OrganizationName: departmentInfo.Name,
|
|
|
- AgentId: &v.AgentID,
|
|
|
- AgentInfo: &agent,
|
|
|
- ApiBase: &v.APIBase,
|
|
|
- ApiKey: &v.APIKey,
|
|
|
- TotalTokens: &totalTokens,
|
|
|
- Ctype: &v.Ctype,
|
|
|
- })
|
|
|
+ if v.ServerID > 0 {
|
|
|
+ if loginStatus == 1 {
|
|
|
+ // 如果处于登录状态,获取登录信息
|
|
|
+ wxInfo, _ := hookClient.GetSelfLoginInfo()
|
|
|
+ if err != nil {
|
|
|
+ l.Error("获取登录信息失败", err)
|
|
|
+ } else {
|
|
|
+ if wxid != wxInfo.Wxid {
|
|
|
+ l.svcCtx.Rds.HDel(l.ctx, "wx_info", wxid)
|
|
|
+ l.svcCtx.Rds.HDel(l.ctx, "wx_info", wxInfo.Wxid)
|
|
|
+ l.svcCtx.Rds.HDel(l.ctx, "crontask_wx_server_info", wxid)
|
|
|
+ l.svcCtx.Rds.HDel(l.ctx, "crontask_wx_server_info", wxInfo.Wxid)
|
|
|
+ }
|
|
|
+ processID = wxInfo.ProcessID
|
|
|
+ wxid = wxInfo.Wxid
|
|
|
+ account = wxInfo.Account
|
|
|
+ nickname = wxInfo.Nickname
|
|
|
+ tel = wxInfo.Tel
|
|
|
+ headBig = wxInfo.HeadBig
|
|
|
+ _ = l.svcCtx.DB.Wx.UpdateOneID(v.ID).
|
|
|
+ SetNotNilStatus(&loginStatus).
|
|
|
+ SetNotNilProcessID(&wxInfo.ProcessID).
|
|
|
+ SetNotNilWxid(&wxInfo.Wxid).
|
|
|
+ SetNotNilAccount(&wxInfo.Account).
|
|
|
+ SetNotNilNickname(&wxInfo.Nickname).
|
|
|
+ SetNotNilTel(&wxInfo.Tel).
|
|
|
+ SetNotNilHeadBig(&wxInfo.HeadBig).
|
|
|
+ Exec(l.ctx)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if loginStatus != v.Status {
|
|
|
+ _ = l.svcCtx.DB.Wx.UpdateOneID(v.ID).
|
|
|
+ SetNotNilStatus(&loginStatus).
|
|
|
+ Exec(l.ctx)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ totalTokens := uint64(0)
|
|
|
+ usageTotalInfo, _ := l.svcCtx.DB.UsageTotal.Query().
|
|
|
+ Where(
|
|
|
+ usagetotal.BotID(wxid),
|
|
|
+ ).
|
|
|
+ Only(l.ctx)
|
|
|
+ if usageTotalInfo != nil {
|
|
|
+ totalTokens = usageTotalInfo.TotalTokens
|
|
|
+ }
|
|
|
+
|
|
|
+ var agent types.AgentInfo
|
|
|
+ if v.Edges.Agent != nil {
|
|
|
+ agent = types.AgentInfo{
|
|
|
+ BaseIDInfo: types.BaseIDInfo{
|
|
|
+ Id: &v.AgentID,
|
|
|
+ CreatedAt: pointy.GetPointer(v.Edges.Agent.CreatedAt.UnixMilli()),
|
|
|
+ UpdatedAt: pointy.GetPointer(v.Edges.Agent.UpdatedAt.UnixMilli()),
|
|
|
+ },
|
|
|
+ Name: &v.Edges.Agent.Name,
|
|
|
+ Role: &v.Edges.Agent.Role,
|
|
|
+ Status: &v.Edges.Agent.Status,
|
|
|
+ Background: &v.Edges.Agent.Background,
|
|
|
+ Examples: &v.Edges.Agent.Examples,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.Data.Data = append(resp.Data.Data,
|
|
|
+ types.WxInfo{
|
|
|
+ BaseIDInfo: types.BaseIDInfo{
|
|
|
+ Id: &v.ID,
|
|
|
+ CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
|
|
|
+ UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
|
|
|
+ },
|
|
|
+ Status: &loginStatus,
|
|
|
+ ServerId: &v.ServerID,
|
|
|
+ ServerName: &serverName,
|
|
|
+ Port: &v.Port,
|
|
|
+ ProcessId: &processID,
|
|
|
+ Callback: &v.Callback,
|
|
|
+ Wxid: &wxid,
|
|
|
+ Account: &account,
|
|
|
+ Nickname: &nickname,
|
|
|
+ Tel: &tel,
|
|
|
+ HeadBig: &headBig,
|
|
|
+ OrganizationId: &v.OrganizationID,
|
|
|
+ OrganizationName: departmentInfo.Name,
|
|
|
+ AgentId: &v.AgentID,
|
|
|
+ AgentInfo: &agent,
|
|
|
+ ApiBase: &v.APIBase,
|
|
|
+ ApiKey: &v.APIKey,
|
|
|
+ TotalTokens: &totalTokens,
|
|
|
+ Ctype: &v.Ctype,
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return resp, nil
|