Browse Source

暂时存档

boweniac 3 months ago
parent
commit
bf36d75bbf

+ 2 - 1
desc/all.api

@@ -33,4 +33,5 @@ import "./wechat/aliyun_avatar.api"
 import "./wechat/workphone.api"
 import "./wechat/usage_detail.api"
 import "./wechat/usage_total.api"
-import "./wechat/xiaoice.api"
+import "./wechat/xiaoice.api"
+import "./wechat/dashboard.api"

+ 45 - 0
desc/wechat/dashboard.api

@@ -0,0 +1,45 @@
+import "../base.api"
+
+type (
+    ChartsReq {
+        StartDate *string `json:"start_date"`
+
+        EndDate *string `json:"end_date"`
+
+        // 租户id
+        OrganizationId  *uint64 `json:"organizationId,optional"`
+    }
+    ChartsResp {
+        BaseDataInfo
+
+        Data *ChartsData `json:"data"`
+    }
+
+    ChartsData {
+        AiResponse *ChartsInfo `json:"ai_response"`
+        SopRun *ChartsInfo `json:"sop_run"`
+        TotalFriend *ChartsInfo `json:"total_friend"`
+        TotalGroup *ChartsInfo `json:"total_group"`
+        AccountBalance *ChartsInfo `json:"account_balance"`
+        ConsumeToken *ChartsInfo `json:"consume_token"`
+        ActiveUser *ChartsInfo `json:"active_user"`
+        NewUser *ChartsInfo `json:"new_user"`
+    }
+
+    ChartsInfo {
+        Count *uint64 `json:"count"`
+        Rate *float32 `json:"rate"`
+        Label []string `json:"label"`
+        Val []uint64 `json:"val"`
+    }
+)
+
+@server(
+	group: dashboard
+)
+
+service Wechat {
+    // get charts | 获取图表数据
+    @handler getCharts
+    post /dashboard/charts (ChartsReq) returns (ChartsResp)
+}

+ 44 - 0
internal/handler/dashboard/get_charts_handler.go

@@ -0,0 +1,44 @@
+package dashboard
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/dashboard"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /dashboard/charts dashboard GetCharts
+//
+// get charts | 获取图表数据
+//
+// get charts | 获取图表数据
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: ChartsReq
+//
+// Responses:
+//  200: ChartsResp
+
+func GetChartsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ChartsReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := dashboard.NewGetChartsLogic(r.Context(), svcCtx)
+		resp, err := l.GetCharts(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 44 - 0
internal/handler/dashboard/gptbots_message_handler.go

@@ -0,0 +1,44 @@
+package dashboard
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/dashboard"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /dashboard/charts dashboard GptbotsMessage
+//
+// gen gptbots | 调用gptbots
+//
+// gen gptbots | 调用gptbots
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: ChartsReq
+//
+// Responses:
+//  200: ChartsResp
+
+func GptbotsMessageHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ChartsReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := dashboard.NewGptbotsMessageLogic(r.Context(), svcCtx)
+		resp, err := l.GptbotsMessage(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 11 - 0
internal/handler/routes.go

@@ -24,6 +24,7 @@ import (
 	chatrecords "wechat-api/internal/handler/chatrecords"
 	chatsession "wechat-api/internal/handler/chatsession"
 	contact "wechat-api/internal/handler/contact"
+	dashboard "wechat-api/internal/handler/dashboard"
 	employee "wechat-api/internal/handler/employee"
 	employee_config "wechat-api/internal/handler/employee_config"
 	label "wechat-api/internal/handler/label"
@@ -1487,4 +1488,14 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 			},
 		},
 	)
+
+	server.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodPost,
+				Path:    "/dashboard/charts",
+				Handler: dashboard.GetChartsHandler(serverCtx),
+			},
+		},
+	)
 }

+ 67 - 0
internal/logic/dashboard/get_charts_logic.go

@@ -0,0 +1,67 @@
+package dashboard
+
+import (
+	"context"
+	"fmt"
+	"time"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetChartsLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetChartsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetChartsLogic {
+	return &GetChartsLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *GetChartsLogic) GetCharts(req *types.ChartsReq) (resp *types.ChartsResp, err error) {
+	// 获取组织id
+	var organizationId uint64 = 0
+	isAdmin := l.ctx.Value("isAdmin").(bool)
+	if isAdmin && req.OrganizationId != nil && *req.OrganizationId != 0 {
+		organizationId = *req.OrganizationId
+	} else {
+		organizationId = l.ctx.Value("organizationId").(uint64)
+	}
+
+	// 解析起始和截止时间
+	layouts := []string{
+		"2006-01",    // 对应 "2024-01"
+		"2006-01-02", // 对应 "2024-01-01"
+	}
+
+	var startTime time.Time
+	for _, layout := range layouts {
+		startTime, err = time.Parse(layout, *req.StartDate)
+		if err == nil {
+			break
+		}
+	}
+	if err != nil {
+		fmt.Println("解析开始时间失败:", err)
+		return
+	}
+
+	var endTime time.Time
+	for _, layout := range layouts {
+		endTime, err = time.Parse(layout, *req.EndDate)
+		if err == nil {
+			break
+		}
+	}
+	if err != nil {
+		fmt.Println("解析结束时间失败:", err)
+		return
+	}
+
+	return
+}

+ 33 - 0
internal/types/types.go

@@ -2904,3 +2904,36 @@ type MessageReq struct {
 	UserId *uint64 `json:"user_id"`
 	Text   *string `json:"text"`
 }
+
+// swagger:model ChartsReq
+type ChartsReq struct {
+	StartDate *string `json:"start_date"`
+	EndDate   *string `json:"end_date"`
+	// 租户id
+	OrganizationId *uint64 `json:"organizationId,optional"`
+}
+
+// swagger:model ChartsResp
+type ChartsResp struct {
+	BaseDataInfo
+	Data *ChartsData `json:"data"`
+}
+
+type ChartsData struct {
+	AiResponse     *ChartsInfo `json:"ai_response"`
+	SopRun         *ChartsInfo `json:"sop_run"`
+	TotalFriend    *ChartsInfo `json:"total_friend"`
+	TotalGroup     *ChartsInfo `json:"total_group"`
+	AccountBalance *ChartsInfo `json:"account_balance"`
+	ConsumeToken   *ChartsInfo `json:"consume_token"`
+	ActiveUser     *ChartsInfo `json:"active_user"`
+	NewUser        *ChartsInfo `json:"new_user"`
+}
+
+// swagger:model ChartsInfo
+type ChartsInfo struct {
+	Count *uint64  `json:"count"`
+	Rate  *float32 `json:"rate"`
+	Label []string `json:"label"`
+	Val   []uint64 `json:"val"`
+}