240 lines
4.9 KiB
Go
240 lines
4.9 KiB
Go
|
package service
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/logic"
|
||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/service/approval/model"
|
||
|
"net/http"
|
||
|
"reflect"
|
||
|
|
||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
|
||
|
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
)
|
||
|
|
||
|
// Success Success(c,someMap)
|
||
|
func Success(c *gin.Context, datas ...interface{}) {
|
||
|
var data any
|
||
|
if datas != nil {
|
||
|
data = datas[0]
|
||
|
}
|
||
|
dataFieldStr, _ := c.Get("dataField")
|
||
|
key := []string{"*"}
|
||
|
|
||
|
if dataFieldStr != "" && dataFieldStr != nil {
|
||
|
dataField := dataFieldStr.([]string)
|
||
|
key = dataField
|
||
|
|
||
|
if len(dataField) == 1 && dataField[0] == "*" { //不做处理
|
||
|
|
||
|
} else if len(dataField) >= 1 {
|
||
|
isList := isList(reflect.TypeOf(data).Elem())
|
||
|
|
||
|
// 是列表返回
|
||
|
if isList == false {
|
||
|
ChangeFromReflect(data, dataField)
|
||
|
} else {
|
||
|
ChangeRawFromReflect(data, dataField)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
c.JSON(http.StatusOK, serializer.Response{
|
||
|
Status: e.Ok,
|
||
|
Code: e.SUCCESS,
|
||
|
Data: data,
|
||
|
// Keys: dataField,
|
||
|
Keys: key,
|
||
|
})
|
||
|
c.Abort()
|
||
|
}
|
||
|
|
||
|
// SuccessByDataAuth SuccessByDataAuth(c,someMap)
|
||
|
func SuccessByDataAuth(c *gin.Context, data interface{}) {
|
||
|
|
||
|
dataField, _ := c.Get("dataField")
|
||
|
|
||
|
c.JSON(http.StatusOK, serializer.Response{
|
||
|
Status: e.Ok,
|
||
|
Code: e.SUCCESS,
|
||
|
Data: data,
|
||
|
Keys: dataField.([]string),
|
||
|
})
|
||
|
|
||
|
c.Abort()
|
||
|
}
|
||
|
|
||
|
// Error 统一错误返回
|
||
|
func Error(c *gin.Context, code int, err error, msg ...string) {
|
||
|
|
||
|
fmt.Println("err:", err)
|
||
|
status := e.Failed
|
||
|
if code == e.NotLogin {
|
||
|
status = e.NotLogin
|
||
|
}
|
||
|
|
||
|
if code == e.NotLoginSqueeze {
|
||
|
status = e.NotLoginSqueeze
|
||
|
}
|
||
|
|
||
|
var msgStr string
|
||
|
if msg != nil {
|
||
|
msgStr = msg[0]
|
||
|
} else if err != nil {
|
||
|
msgStr = err.Error()
|
||
|
}
|
||
|
|
||
|
// 国际化
|
||
|
if e.VerifyMsgKey(msgStr) {
|
||
|
msgStr = logic.ConvertOaMsg(c, msgStr)
|
||
|
} else {
|
||
|
lang := c.Request.Header.Get("Accept-Language")
|
||
|
msgStr = model.GetLanguageType(lang, msgStr)
|
||
|
}
|
||
|
|
||
|
c.JSON(e.Success, serializer.Response{
|
||
|
Status: status,
|
||
|
Msg: msgStr,
|
||
|
Data: nil,
|
||
|
})
|
||
|
|
||
|
c.Abort()
|
||
|
}
|
||
|
|
||
|
// NotLoginRes 未登录的返回
|
||
|
func NotLoginRes(c *gin.Context, msg string) {
|
||
|
|
||
|
c.JSON(e.Success, serializer.Response{
|
||
|
Code: 401,
|
||
|
Status: 1,
|
||
|
Msg: msg,
|
||
|
Data: nil,
|
||
|
})
|
||
|
|
||
|
c.Abort()
|
||
|
}
|
||
|
|
||
|
func ResponseMsg(c *gin.Context, httpCode int, Resp serializer.Response) {
|
||
|
if httpCode == 0 {
|
||
|
httpCode = http.StatusOK
|
||
|
}
|
||
|
|
||
|
// 国际化
|
||
|
if e.VerifyMsgKey(Resp.Msg) {
|
||
|
Resp.Msg = logic.ConvertOaMsg(c, Resp.Msg)
|
||
|
}
|
||
|
|
||
|
c.JSON(httpCode, serializer.Response{
|
||
|
Status: Resp.Status,
|
||
|
Code: Resp.Code,
|
||
|
Msg: Resp.Msg,
|
||
|
Error: Resp.Error,
|
||
|
Data: Resp.Data,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func ResponseQuickMsg(c *gin.Context, Status uint8, Msg string, Data interface{}) {
|
||
|
//var c gin.Context
|
||
|
c.JSON(http.StatusOK, serializer.Response{
|
||
|
Status: int(Status),
|
||
|
Msg: Msg,
|
||
|
Data: Data,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func isList(m reflect.Type) bool {
|
||
|
dataExist := false
|
||
|
|
||
|
for i := 0; i < m.NumField(); i++ {
|
||
|
|
||
|
fieldType := m.Field(i)
|
||
|
|
||
|
if fieldType.Name == "Data" {
|
||
|
getValue := reflect.ValueOf(fieldType)
|
||
|
|
||
|
if getValue.Kind() != reflect.Slice {
|
||
|
dataExist = true
|
||
|
}
|
||
|
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return dataExist
|
||
|
}
|
||
|
|
||
|
func IsContainString(items []string, item string) bool {
|
||
|
for _, eachItem := range items {
|
||
|
if eachItem == item {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
func ChangeFromReflect(data interface{}, dataField []string) {
|
||
|
m := reflect.TypeOf(data).Elem()
|
||
|
for i := 0; i < m.NumField(); i++ {
|
||
|
fieldType := m.Field(i)
|
||
|
if IsContainString(dataField, fieldType.Name) == false {
|
||
|
field := reflect.ValueOf(data).Elem().FieldByName(fieldType.Name)
|
||
|
|
||
|
switch m.Field(i).Type.Name() {
|
||
|
case "int":
|
||
|
if field.CanSet() {
|
||
|
field.SetInt(0)
|
||
|
}
|
||
|
case "uint":
|
||
|
if field.CanSet() {
|
||
|
field.SetUint(0)
|
||
|
}
|
||
|
case "uint64":
|
||
|
if field.CanSet() {
|
||
|
field.SetUint(0)
|
||
|
}
|
||
|
case "string":
|
||
|
if field.CanSet() {
|
||
|
field.SetString("")
|
||
|
}
|
||
|
default:
|
||
|
if reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).CanAddr() {
|
||
|
if reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).Kind() == reflect.Slice {
|
||
|
field := reflect.ValueOf(data).Elem().FieldByName(fieldType.Name)
|
||
|
|
||
|
if field.CanSet() {
|
||
|
field.Set(reflect.MakeSlice(field.Type(), 0, 0))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).Kind() == reflect.Struct {
|
||
|
}
|
||
|
|
||
|
if reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).Kind() == reflect.Ptr {
|
||
|
field := reflect.ValueOf(data).Elem().FieldByName(fieldType.Name)
|
||
|
if !reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).IsNil() {
|
||
|
fieldType := reflect.ValueOf(data).Elem().FieldByName(fieldType.Name).Elem().Type()
|
||
|
|
||
|
if field.CanSet() {
|
||
|
field.Set(reflect.New(fieldType))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
func ChangeRawFromReflect(data interface{}, dataField []string) {
|
||
|
|
||
|
sliceContent := reflect.ValueOf(data).Elem().FieldByName("Data")
|
||
|
for i := 0; i < sliceContent.Len(); i++ {
|
||
|
sliceContent.Index(i)
|
||
|
ChangeFromReflect(sliceContent.Index(i).Interface(), dataField)
|
||
|
}
|
||
|
|
||
|
}
|