提交 3973405c 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

adjust code logic for nested fields

上级 40bfb06d
package gen package gen
import ( import (
"encoding/json"
"github.com/easysoft/zendata/src/model" "github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const" constant "github.com/easysoft/zendata/src/utils/const"
logUtils "github.com/easysoft/zendata/src/utils/log"
stringUtils "github.com/easysoft/zendata/src/utils/string" stringUtils "github.com/easysoft/zendata/src/utils/string"
"strconv" "strconv"
"strings" "strings"
...@@ -27,29 +29,10 @@ func Generate(def *model.Definition, total int, fields string, out string, table ...@@ -27,29 +29,10 @@ func Generate(def *model.Definition, total int, fields string, out string, table
continue continue
} }
if field.Loop == 0 { str := GenerateFieldValWithLoop(field, fieldMap, indexOfRow)
field.Loop = 1
}
prefix := field.Prefix
postfix := field.Postfix
if len(rows) == i { rows = append(rows, make([]string, 0)) } if len(rows) == i { rows = append(rows, make([]string, 0)) }
rows[i] = append(rows[i], str)
loopStr := "" indexOfRow++
for j := 0; j < field.Loop; j++ {
if loopStr != "" {
loopStr = loopStr + field.Loopfix
}
str := GetFieldStr(field, fieldMap, indexOfRow)
loopStr = loopStr + str
indexOfRow++
if indexOfRow == len(fieldMap[field.Name]) { // no enough
indexOfRow = 0
}
}
rows[i] = append(rows[i], prefix + loopStr + postfix)
} }
} }
...@@ -69,14 +52,57 @@ func GenerateFieldArr(field *model.Field, total int, fieldMap map[string][]inter ...@@ -69,14 +52,57 @@ func GenerateFieldArr(field *model.Field, total int, fieldMap map[string][]inter
default: default:
} }
fieldMap[field.Name] = GetFieldPlatArr(fieldValue, total) fieldMap[field.Name] = append(fieldMap[field.Name], fieldValue)
}
func GenerateFieldValWithLoop(field model.Field, fieldMap map[string][]interface{}, indexOfRow int) string {
prefix := field.Prefix
postfix := field.Postfix
loopStr := ""
for j := 0; j < field.Loop; j++ {
if loopStr != "" {
loopStr = loopStr + field.Loopfix
}
str := GenerateFieldVal(field, fieldMap, indexOfRow)
loopStr = loopStr + str
indexOfRow++
}
return prefix + loopStr + postfix
}
func GenerateFieldVal(field model.Field, fieldMap map[string][]interface{}, indexOfRow int) string {
fieldValue := fieldMap[field.Name][indexOfRow % len(fieldMap[field.Name])].(model.FieldValue)
str := ""
index := indexOfRow % len(fieldValue.Values)
if len(fieldValue.Children) == 0 {
val := fieldValue.Values[index]
str = GetFieldValStr(field, val)
} else {
str = GetFieldValStrFromNestedObj(fieldValue, index)
}
return str
}
func GetFieldValStrFromNestedObj(fieldValue model.FieldValue, index int) string {
arr := GetFieldPlatArr(fieldValue)
bytes, _ := json.Marshal(arr)
logUtils.Screen(string(bytes))
return ""
} }
func GetFieldPlatArr(fieldValue model.FieldValue, total int) []interface{} { func GetFieldPlatArr(fieldValue model.FieldValue) []interface{} {
arr := make([]interface{}, 0) arr := make([]interface{}, 0)
if len(fieldValue.Children) > 0 { if len(fieldValue.Children) > 0 {
platArr := ConvertNestedFieldToPlatArr(fieldValue)
arr = append(arr, platArr...)
} else { } else {
arr = append(arr, fieldValue.Values...) arr = append(arr, fieldValue.Values...)
} }
...@@ -84,10 +110,22 @@ func GetFieldPlatArr(fieldValue model.FieldValue, total int) []interface{} { ...@@ -84,10 +110,22 @@ func GetFieldPlatArr(fieldValue model.FieldValue, total int) []interface{} {
return arr return arr
} }
func GetFieldStr(field model.Field, fieldMap map[string][]interface{}, indexOfRow int) string { func ConvertNestedFieldToPlatArr(fieldValue model.FieldValue) []interface{} {
arr := make([]interface{}, 0)
for _, child := range fieldValue.Children {
if child.Level == 0 {
}
}
return arr
}
func GetFieldValStr(field model.Field, val interface{}) string {
str := "n/a" str := "n/a"
success := false success := false
val := fieldMap[field.Name][indexOfRow]
switch val.(type) { switch val.(type) {
case int64: case int64:
if field.Format != "" { if field.Format != "" {
...@@ -119,4 +157,5 @@ func GetFieldStr(field model.Field, fieldMap map[string][]interface{}, indexOfRo ...@@ -119,4 +157,5 @@ func GetFieldStr(field model.Field, fieldMap map[string][]interface{}, indexOfRo
} }
return str return str
} }
\ No newline at end of file
package gen package gen
import ( import (
"encoding/json"
"github.com/easysoft/zendata/src/model" "github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const" constant "github.com/easysoft/zendata/src/utils/const"
logUtils "github.com/easysoft/zendata/src/utils/log"
"strconv" "strconv"
"strings" "strings"
) )
...@@ -13,15 +11,13 @@ func GenerateList(field *model.Field, total int) model.FieldValue { ...@@ -13,15 +11,13 @@ func GenerateList(field *model.Field, total int) model.FieldValue {
fieldValue := model.FieldValue{} fieldValue := model.FieldValue{}
GenerateListField(field, &fieldValue, 0) GenerateListField(field, &fieldValue, 0)
bytes, _ := json.Marshal(fieldValue)
logUtils.Screen(string(bytes))
return fieldValue return fieldValue
} }
func GenerateListField(field *model.Field, fieldValue *model.FieldValue, level int) { func GenerateListField(field *model.Field, fieldValue *model.FieldValue, level int) {
fieldValue.Name = field.Name fieldValue.Name = field.Name
fieldValue.Precision = field.Precision fieldValue.Precision = field.Precision
fieldValue.Level = level
if len(field.Fields) > 0 { if len(field.Fields) > 0 {
GenerateFieldChildren(field, fieldValue, level) GenerateFieldChildren(field, fieldValue, level)
......
...@@ -29,6 +29,7 @@ type FieldValue struct { ...@@ -29,6 +29,7 @@ type FieldValue struct {
Name string Name string
Type string Type string
Precision int Precision int
Level int
Values []interface{} Values []interface{}
Children []FieldValue Children []FieldValue
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册