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

generate output

上级 85c56f48
...@@ -12,10 +12,14 @@ fields: ...@@ -12,10 +12,14 @@ fields:
- field: field2 - field: field2
note: 测试系统字段 note: 测试系统字段
from: system.ip.yaml from: system.ip.yaml
use: privatec,privateb use: privateC,privateB
- field: field3 - field: field3
note: 测试Excel数据 note: 测试Excel数据
from: system.address.city from: system.address.city
select: name select: name
where: state like '%山东%' where: state like '%山东%'
\ No newline at end of file
- field: field4
note: 测试Excel数据
range: a-z,0-9
\ No newline at end of file
...@@ -23,11 +23,7 @@ func Generate(defFile string, total int, fieldsToExportStr string, out string, f ...@@ -23,11 +23,7 @@ func Generate(defFile string, total int, fieldsToExportStr string, out string, f
constant.Total = total constant.Total = total
fieldsToExport := strings.Split(fieldsToExportStr, ",") fieldsToExport := strings.Split(fieldsToExportStr, ",")
rows, colTypes := gen.GenerateForDefinition(defFile, fieldsToExport, total)
referFieldValueMap := gen.LoadClsDef(defFile, fieldsToExport)
referFieldValueMap = referFieldValueMap
rows, colTypes := gen.GenerateForDefinition(total, fieldsToExport)
content := Print(rows, format, table, colTypes, fieldsToExport) content := Print(rows, format, table, colTypes, fieldsToExport)
WriteToFile(out, content) WriteToFile(out, content)
......
...@@ -17,20 +17,7 @@ import ( ...@@ -17,20 +17,7 @@ import (
func LoadClsDef(file string, fieldsToExport []string) map[string]map[string][]string { func LoadClsDef(file string, fieldsToExport []string) map[string]map[string][]string {
referFieldValueMap := map[string]map[string][]string{} referFieldValueMap := map[string]map[string][]string{}
yamlContent, err := ioutil.ReadFile(file) for _, field := range constant.RootDef.Fields {
if err != nil {
logUtils.Screen("fail to read " + file)
return referFieldValueMap
}
def := model.DefData{}
err = yaml.Unmarshal(yamlContent, &def)
if err != nil {
logUtils.Screen("fail to parse " + file)
return referFieldValueMap
}
for _, field := range def.Fields {
if !stringUtils.FindInArr(field.Field, fieldsToExport) { continue } if !stringUtils.FindInArr(field.Field, fieldsToExport) { continue }
loadClsField(&field, &referFieldValueMap) loadClsField(&field, &referFieldValueMap)
......
...@@ -2,48 +2,25 @@ package gen ...@@ -2,48 +2,25 @@ package gen
import ( import (
"github.com/easysoft/zendata/src/model" "github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
logUtils "github.com/easysoft/zendata/src/utils/log" logUtils "github.com/easysoft/zendata/src/utils/log"
stringUtils "github.com/easysoft/zendata/src/utils/string"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
"io/ioutil" "io/ioutil"
) )
func LoadRootDef(file string, fieldsToExport []string) ([]model.ClsRanges, []model.ClsInst) { func LoadRootDef(file string) model.DefData {
referRangeFields := make([]model.ClsRanges, 0) def := model.DefData{}
referInstFields := make([]model.ClsInst, 0)
yamlContent, err := ioutil.ReadFile(file) yamlContent, err := ioutil.ReadFile(file)
if err != nil { if err != nil {
logUtils.Screen("fail to read " + file) logUtils.Screen("fail to read " + file)
return referRangeFields, referInstFields return def
} }
def := model.DefData{}
err = yaml.Unmarshal(yamlContent, &def) err = yaml.Unmarshal(yamlContent, &def)
if err != nil { if err != nil {
logUtils.Screen("fail to parse " + file) logUtils.Screen("fail to parse " + file)
return referRangeFields, referInstFields return def
}
constant.RootDef = def
//constant.ResMap =
for _, field := range def.Fields {
if !stringUtils.FindInArr(field.Field, fieldsToExport) { continue }
if field.From != "" {
if field.Select != "" { // excel
} else if field.Use != "" { // range or instance format
//referFile, referType := getReferProp(field.From)
// init const.ResMap
}
}
// TODO:
} }
return referRangeFields, referInstFields return def
} }
...@@ -9,21 +9,22 @@ import ( ...@@ -9,21 +9,22 @@ import (
"strings" "strings"
) )
func GenerateForDefinition(total int, fieldsToExport []string) ([][]string, []bool) { func GenerateForDefinition(defFile string, fieldsToExport []string, total int) ([][]string, []bool) {
def := constant.RootDef constant.RootDef = LoadRootDef(defFile)
constant.ReferedValues = LoadClsDef(defFile, fieldsToExport)
fieldNameToValues := map[string][]string{} fieldNameToValues := map[string][]string{}
colTypes := make([]bool, 0) colTypes := make([]bool, 0)
// 为每个field生成值列表 // 为每个field生成值列表
for index, field := range def.Fields { for index, field := range constant.RootDef.Fields {
if !stringUtils.FindInArr(field.Field, fieldsToExport) { if !stringUtils.FindInArr(field.Field, fieldsToExport) {
continue continue
} }
values := GenerateForField(&field, total) values := GenerateForField(&field, total)
def.Fields[index].Precision = field.Precision constant.RootDef.Fields[index].Precision = field.Precision
fieldNameToValues[field.Field] = values fieldNameToValues[field.Field] = values
colTypes = append(colTypes, field.IsNumb) colTypes = append(colTypes, field.IsNumb)
...@@ -32,7 +33,7 @@ func GenerateForDefinition(total int, fieldsToExport []string) ([][]string, []bo ...@@ -32,7 +33,7 @@ func GenerateForDefinition(total int, fieldsToExport []string) ([][]string, []bo
// 生成指定数量行的数据 // 生成指定数量行的数据
rows := make([][]string, 0) rows := make([][]string, 0)
for i := 0; i < total; i++ { for i := 0; i < total; i++ {
for _, field := range def.Fields { for _, field := range constant.RootDef.Fields {
if !stringUtils.FindInArr(field.Field, fieldsToExport) { if !stringUtils.FindInArr(field.Field, fieldsToExport) {
continue continue
} }
...@@ -60,7 +61,7 @@ func GenerateForField(field *model.DefField, total int) []string { ...@@ -60,7 +61,7 @@ func GenerateForField(field *model.DefField, total int) []string {
for i := 0; i < total; i++ { for i := 0; i < total; i++ {
concat := "" concat := ""
for _, row := range arr { for _, row := range arr {
concat = concat + row[i] // a1 or b2 concat = concat + row[i] // get one item from each child, grouped as a1 or b2
} }
concat = field.Prefix + concat + field.Postfix concat = field.Prefix + concat + field.Postfix
...@@ -68,32 +69,21 @@ func GenerateForField(field *model.DefField, total int) []string { ...@@ -68,32 +69,21 @@ func GenerateForField(field *model.DefField, total int) []string {
} }
values = LoopSubFields(field, values, total) values = LoopSubFields(field, values, total)
} else if field.From != "" && field.Select != "" { // refer to excel } else if field.From != "" { // refer field
arr := strings.Split(field.From, ".") groupValues := constant.ReferedValues[field.From]
referField := constant.ResMap[arr[0]]
referField.From = field.From if field.Use != "" { // refer to cls
referField.Select = field.Select groups := strings.Split(field.Use, ",")
referField.Where = field.Where for _, group := range groups {
values = append(values, groupValues[group]...)
referField.Format = field.Format }
referField.Prefix = field.Prefix
referField.Postfix = field.Postfix
referField.Loop = field.Loop
referField.Loopfix = field.Loopfix
//values = GenerateFieldItemsFromDefinition(&referField, total)
} else if field.From != "" && field.Range != "" { // refer to yaml file } else { // refer to excel
if field.Range != "" { // specific custom file slct := field.Select
//LoadRootDef(constant.InputDir + field.Range) values = append(values, groupValues[slct]...)
} }
//referField := constant.ResMap[field.Field] } else { // basic field
//values = GenerateForField(&referField, total)
// TODO: 需要处理range: small,large等逻辑
} else {
values = GenerateFieldItemsFromDefinition(field) values = GenerateFieldItemsFromDefinition(field)
} }
......
...@@ -28,17 +28,17 @@ var ( ...@@ -28,17 +28,17 @@ var (
Total = 10 Total = 10
MaxNumb = 100000 // max number in array MaxNumb = 100000 // max number in array
RootDef model.DefData = model.DefData{} RootDef = model.DefData{}
ResMap map[string]model.FieldValue = map[string]model.FieldValue{} ReferedValues = map[string]map[string][]string{}
ResDir string = "data/" ResDir = "data/"
ResBuildIn string = ResDir + "system/buildin.yaml" ResBuildIn = ResDir + "system/buildin.yaml"
SqliteDriver string = "sqlite3" SqliteDriver = "sqlite3"
SqliteSource string = "file:" + ResDir + ".cache/.data.db" SqliteSource = "file:" + ResDir + ".cache/.data.db"
SqliteTrackTable string = "excel_update" SqliteTrackTable = "excel_update"
ExcelBorder string = `{"border": [{"type":"left","color":"999999","style":1}, {"type":"top","color":"999999","style":1}, ExcelBorder = `{"border": [{"type":"left","color":"999999","style":1}, {"type":"top","color":"999999","style":1},
{"type":"bottom","color":"999999","style":1}, {"type":"right","color":"999999","style":1}]}` {"type":"bottom","color":"999999","style":1}, {"type":"right","color":"999999","style":1}]}`
ExcelHeader string = `{"fill":{"type":"pattern","pattern":1,"color":["E0EBF5"]}}` ExcelHeader = `{"fill":{"type":"pattern","pattern":1,"color":["E0EBF5"]}}`
) )
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册