migu_server/tools/app/return.go

138 lines
3.6 KiB
Go
Raw Normal View History

2024-10-18 15:46:54 +00:00
package app
import (
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"go-admin/app/admin/models"
"go-admin/tools"
"net/http"
"strconv"
)
// 失败数据处理
func Error(c *gin.Context, code int, err error, msg string) {
var res Response
if err != nil {
res.Msg = err.Error()
}
if msg != "" {
res.Msg = msg
}
res.RequestId = tools.GenerateMsgIDFromContext(c)
//traceId, _ := c.Get("trace")
//res.RequestId = traceId.(string)
c.JSON(http.StatusOK, res.ReturnError(code))
response, _ := json.Marshal(res)
c.Set("response", string(response))
}
// 通常成功数据处理
func OK(c *gin.Context, data interface{}, msg string) {
var res Response
res.Data = data
if msg != "" {
res.Msg = msg
}
res.RequestId = tools.GenerateMsgIDFromContext(c)
//traceId, _ := c.Get("trace")
//res.RequestId = traceId.(string)
c.JSON(http.StatusOK, res.ReturnOK())
response, _ := json.Marshal(res)
c.Set("response", string(response))
}
// MiGuOK 通常成功数据处理
func MiGuOK(c *gin.Context, data interface{}) {
// 从上下文中获取 requestId
requestId := pkg.GenerateMsgIDFromContext(c)
// 根据具体的响应类型判断并添加 requestId
switch v := data.(type) {
case models.MiGuRsp:
// 修改数据并添加 requestId
v.RequestId = requestId
c.JSON(http.StatusOK, v)
case models.MiGuCheckRsp:
// 修改数据并添加 requestId
v.RequestId = requestId
c.JSON(http.StatusOK, v)
case models.CheckOrderResp:
// 修改数据并添加 requestId
v.RequestId = requestId
c.JSON(http.StatusOK, v)
default:
// 如果不是预期的类型,则直接返回原始数据
c.JSON(http.StatusOK, data)
}
// 如果仍然需要记录 response 到上下文中
response, _ := json.Marshal(data)
c.Set("response", string(response))
}
// MiGuError 失败数据处理code 为 int 类型,内部转换为 string
func MiGuError(c *gin.Context, code int, err error, msg string) {
var res MiGuErrorResponse
if err != nil {
res.Msg = err.Error()
}
if msg != "" {
res.Msg = msg
}
res.RequestId = tools.GenerateMsgIDFromContext(c) // 获取 requestId
res.Code = strconv.Itoa(code) // 将 int 类型的 code 转为 string
// 返回 JSON 响应
c.JSON(http.StatusOK, res)
// 如果仍然需要记录 response 到上下文中
response, _ := json.Marshal(res)
c.Set("response", string(response))
}
// MiGuNoticeOK 通常成功数据处理
func MiGuNoticeOK(c *gin.Context, data interface{}) {
// 将传入的数据转换为字符串
var responseString string
// 根据 data 的类型进行不同的处理
switch v := data.(type) {
case string:
responseString = v // 如果 data 已经是字符串,直接赋值
default:
// 对于其他类型的数据,尝试将其转换为 JSON 字符串
responseBytes, err := json.Marshal(data)
if err != nil {
// 如果转换失败,返回一个默认的错误信息
c.String(http.StatusInternalServerError, "无法处理响应数据")
return
}
responseString = string(responseBytes)
}
c.Writer.Header().Set("Content-Type", "text/plain; charset=utf-8")
// 直接返回字符串
c.String(http.StatusOK, responseString)
// 如果仍然需要记录 response 到上下文中
c.Set("response", responseString)
}
// 分页数据处理
func PageOK(c *gin.Context, result interface{}, count int, pageIndex int, pageSize int, msg string) {
var res Page
res.List = result
res.Count = count
res.PageIndex = pageIndex
res.PageSize = pageSize
OK(c, res, msg)
}
// 兼容函数
func Custum(c *gin.Context, data gin.H) {
c.JSON(http.StatusOK, data)
}