jimmyyem 2 долоо хоног өмнө
parent
commit
8af3bfe1cb

+ 205 - 132
internal/logic/Wx/get_wx_list_logic.go

@@ -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