- 去掉dao对于jxutils的依赖

This commit is contained in:
gazebo
2019-03-25 18:28:00 +08:00
parent 2a6f8b9120
commit 344b17d8ca
7 changed files with 128 additions and 125 deletions

111
globals/refutil/refutil.go Normal file
View File

@@ -0,0 +1,111 @@
package refutil
import (
"bytes"
"encoding/base64"
"encoding/gob"
"fmt"
"reflect"
"git.rosy.net.cn/baseapi/utils"
"github.com/fatih/structs"
)
func CheckAndGetStructValue(item interface{}) *reflect.Value {
value := reflect.ValueOf(item)
if value.Kind() == reflect.Ptr {
value = value.Elem()
} else {
panic("item ust be ptr type")
}
return &value
}
func GetObjFieldByName(obj interface{}, fieldName string) interface{} {
return reflect.Indirect(reflect.ValueOf(obj)).FieldByName(fieldName).Interface()
}
func SetObjFieldByName(obj interface{}, fieldName string, value interface{}) {
refValue := CheckAndGetStructValue(obj)
refValue.FieldByName(fieldName).Set(reflect.ValueOf(value))
}
func SerializeData(data interface{}) (strValue string, err error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
if err = enc.Encode(data); err == nil {
strValue = base64.StdEncoding.EncodeToString(buf.Bytes())
return strValue, nil
}
return "", err
}
func DeSerializeData(strValue string, dataPtr interface{}) (err error) {
byteData, err := base64.StdEncoding.DecodeString(strValue)
if err == nil {
dec := gob.NewDecoder(bytes.NewReader(byteData))
return dec.Decode(dataPtr)
}
return err
}
func FlatMap(in map[string]interface{}) map[string]interface{} {
keys := []string{}
maps := []map[string]interface{}{}
for k, v := range in {
if vMap, ok := v.(map[string]interface{}); ok {
vMap = FlatMap(vMap)
maps = append(maps, vMap)
keys = append(keys, k)
}
}
if len(maps) > 0 {
retVal := utils.MergeMaps(in, maps...)
for _, v := range keys {
delete(retVal, v)
}
return retVal
}
return in
}
func Struct2FlatMap(obj interface{}) map[string]interface{} {
m := structs.Map(obj)
return FlatMap(m)
}
// todo 这里看是否需要将key值转换成标准格式即字母大写因为beego orm不区分不转换也可以
func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, excludedFields []string, isCheckValue bool) (valid map[string]interface{}, invalid map[string]interface{}) {
excludedMap := make(map[string]int)
for _, v := range excludedFields {
excludedMap[v] = 1
}
m := Struct2FlatMap(obj)
valid = make(map[string]interface{})
invalid = make(map[string]interface{})
for k, v := range mapData {
if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || !IsValueEqual(m[k], v)) {
valid[k] = v
} else {
invalid[k] = v
}
}
return valid, invalid
}
func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (valid map[string]interface{}, invalid map[string]interface{}) {
valid = make(map[string]interface{})
invalid = make(map[string]interface{})
for _, field := range fields {
if mapData[field] != nil {
valid[field] = mapData[field]
} else {
invalid[field] = mapData[field]
}
}
return valid, invalid
}
func IsValueEqual(value1, value2 interface{}) bool {
return fmt.Sprint(value1) == fmt.Sprint(value2)
}