报价单接近完成
This commit is contained in:
@@ -6,12 +6,24 @@ import (
|
||||
)
|
||||
|
||||
func ArrayColumn[R any, T any](arr []T, column string) []R {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
var result []R
|
||||
s := reflect.ValueOf(arr)
|
||||
|
||||
for i := 0; i < s.Len(); i++ {
|
||||
e := s.Index(i)
|
||||
if e.Kind() == reflect.Ptr {
|
||||
e = e.Elem()
|
||||
}
|
||||
k := e.FieldByName(column)
|
||||
if k.Kind() == reflect.Ptr {
|
||||
k = k.Elem()
|
||||
}
|
||||
result = append(result, k.Interface().(R))
|
||||
}
|
||||
|
||||
@@ -19,20 +31,36 @@ func ArrayColumn[R any, T any](arr []T, column string) []R {
|
||||
}
|
||||
|
||||
func ArrayColumnTag[R any, T any](arrSrc []T, tag string) []R {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
var result []R
|
||||
arr := reflect.ValueOf(arrSrc)
|
||||
if arr.Len() == 0 {
|
||||
return result
|
||||
}
|
||||
|
||||
eleType := arr.Index(0).Elem().Type()
|
||||
ele := arr.Index(0)
|
||||
if ele.Kind() == reflect.Ptr {
|
||||
ele = ele.Elem()
|
||||
}
|
||||
eleType := ele.Type()
|
||||
|
||||
for j := 0; j < eleType.NumField(); j++ {
|
||||
if value, ok := eleType.Field(j).Tag.Lookup("json"); ok && value == tag {
|
||||
|
||||
for i := 0; i < arr.Len(); i++ {
|
||||
srcv := arr.Index(i)
|
||||
fv := srcv.Elem().Field(j)
|
||||
if srcv.Kind() == reflect.Ptr {
|
||||
srcv = srcv.Elem()
|
||||
}
|
||||
fv := srcv.Field(j)
|
||||
if fv.Kind() == reflect.Ptr {
|
||||
fv = fv.Elem()
|
||||
}
|
||||
result = append(result, fv.Interface().(R))
|
||||
}
|
||||
|
||||
@@ -44,6 +72,7 @@ func ArrayColumnTag[R any, T any](arrSrc []T, tag string) []R {
|
||||
}
|
||||
|
||||
func ArrayIndex[T any](arr []T, index int) (result T, ok bool) {
|
||||
|
||||
if index < len(arr) {
|
||||
result = arr[index]
|
||||
ok = true
|
||||
@@ -54,6 +83,12 @@ func ArrayIndex[T any](arr []T, index int) (result T, ok bool) {
|
||||
}
|
||||
|
||||
func ArrayString2Int(arr interface{}) (result []int64) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
for _, a := range arr.([]string) {
|
||||
v, err := strconv.ParseInt(a, 10, 64)
|
||||
if err != nil {
|
||||
@@ -65,6 +100,12 @@ func ArrayString2Int(arr interface{}) (result []int64) {
|
||||
}
|
||||
|
||||
func Array2MapByKey[KEY comparable, VALUE any](arrSrc []VALUE, fieldName string) (result map[KEY]VALUE) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
result = make(map[KEY]VALUE)
|
||||
arr := reflect.ValueOf(arrSrc)
|
||||
|
||||
@@ -80,6 +121,12 @@ func Array2MapByKey[KEY comparable, VALUE any](arrSrc []VALUE, fieldName string)
|
||||
|
||||
func Array2MapByKeyTag[KEY comparable, VALUE any](arrSrc []VALUE, tag string) (result map[KEY]VALUE) {
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
arr := reflect.ValueOf(arrSrc)
|
||||
|
||||
if arr.Len() == 0 {
|
||||
@@ -87,14 +134,27 @@ func Array2MapByKeyTag[KEY comparable, VALUE any](arrSrc []VALUE, tag string) (r
|
||||
}
|
||||
result = make(map[KEY]VALUE)
|
||||
|
||||
eleType := arr.Index(0).Elem().Type()
|
||||
ele := arr.Index(0)
|
||||
if ele.Kind() == reflect.Ptr {
|
||||
ele = ele.Elem()
|
||||
}
|
||||
eleType := ele.Type()
|
||||
|
||||
for j := 0; j < eleType.NumField(); j++ {
|
||||
if value, ok := eleType.Field(j).Tag.Lookup("json"); ok && value == tag {
|
||||
|
||||
for i := 0; i < arr.Len(); i++ {
|
||||
srcv := arr.Index(i)
|
||||
fv := srcv.Elem().Field(j)
|
||||
var fv reflect.Value
|
||||
if srcv.Kind() == reflect.Ptr {
|
||||
fv = srcv.Elem().Field(j)
|
||||
} else {
|
||||
fv = srcv.Field(j)
|
||||
}
|
||||
|
||||
if fv.Kind() == reflect.Ptr {
|
||||
fv = fv.Elem()
|
||||
}
|
||||
k := fv.Interface().(KEY)
|
||||
result[k] = srcv.Interface().(VALUE)
|
||||
}
|
||||
@@ -105,3 +165,40 @@ func Array2MapByKeyTag[KEY comparable, VALUE any](arrSrc []VALUE, tag string) (r
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func StructJson2Map(s interface{}) map[string]interface{} {
|
||||
t := reflect.TypeOf(s)
|
||||
v := reflect.ValueOf(s)
|
||||
|
||||
var data = make(map[string]interface{})
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
field := t.Field(i)
|
||||
if field.Tag == "" {
|
||||
continue
|
||||
}
|
||||
tag := field.Tag.Get("json")
|
||||
val := v.Field(i)
|
||||
if val.Kind() == reflect.Ptr {
|
||||
val = val.Elem()
|
||||
}
|
||||
data[tag] = val.Interface()
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
func StructSliceJson2Maps(s interface{}) []map[string]interface{} {
|
||||
slice := reflect.ValueOf(s)
|
||||
var maps []map[string]interface{}
|
||||
|
||||
for i := 0; i < slice.Len(); i++ {
|
||||
s := slice.Index(i)
|
||||
|
||||
if s.Kind() == reflect.Ptr {
|
||||
s = s.Elem()
|
||||
}
|
||||
structValue := s.Interface()
|
||||
m := StructJson2Map(structValue)
|
||||
maps = append(maps, m)
|
||||
}
|
||||
return maps
|
||||
}
|
||||
|
||||
20
utils/format/template.go
Normal file
20
utils/format/template.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package format
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
var TemplateFuncMap = template.FuncMap{
|
||||
"add": func(a, b int) int {
|
||||
return a + b
|
||||
},
|
||||
"json_decode": func(o interface{}) interface{} {
|
||||
var r []map[string]interface{}
|
||||
err := json.Unmarshal([]byte(o.(string)), &r)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return r
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user