generator.go 2.2 KB
Newer Older
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
1 2
package action

aaronchen2k2k's avatar
aaronchen2k2k 已提交
3
import (
aaronchen2k2k's avatar
aaronchen2k2k 已提交
4 5
	"encoding/json"
	"encoding/xml"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	"fmt"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	"github.com/easysoft/zendata/src/gen"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	"github.com/easysoft/zendata/src/model"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10
	logUtils "github.com/easysoft/zendata/src/utils/log"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
	"github.com/easysoft/zendata/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12 13
	"os"
	"path/filepath"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
14
	"strings"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
15
)
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
16

aaronchen2k2k's avatar
aaronchen2k2k 已提交
17
func Generate(deflt string, yml string, total int, fieldsToExportStr string, out string, format string, table string) {
18
	//startTime := time.Now().Unix()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
19

aaronchen2k2k's avatar
aaronchen2k2k 已提交
20 21 22 23 24
	if deflt != "" && yml == "" {
		yml = deflt
		deflt = ""
	}

25 26 27 28 29
	fieldsToExport := make([]string, 0)
	if fieldsToExportStr != "" {
		fieldsToExport = strings.Split(fieldsToExportStr, ",")
	}

30 31 32
	vari.InputDir = filepath.Dir(yml) + string(os.PathSeparator)
	constant.Total = total

aaronchen2k2k's avatar
aaronchen2k2k 已提交
33
	rows, colTypes := gen.GenerateForDefinition(deflt, yml, fieldsToExport, total)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
34 35
	content := Print(rows, format, table, colTypes, fieldsToExport)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
36 37 38
	if out != "" {
		WriteToFile(out, content)
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
39

40 41
	//entTime := time.Now().Unix()
	//logUtils.Screen(i118Utils.I118Prt.Sprintf("generate_records", len(rows), out, entTime - startTime ))
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
42
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
43

aaronchen2k2k's avatar
aaronchen2k2k 已提交
44
func Print(rows [][]string, format string, table string, colTypes []bool, fields []string) string {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
45
	//width := stringUtils.GetNumbWidth(len(rows))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
46

aaronchen2k2k's avatar
aaronchen2k2k 已提交
47 48 49 50 51 52
	content := ""
	sql := ""

	testData := model.TestData{}
	testData.Title = "测试数据"

aaronchen2k2k's avatar
aaronchen2k2k 已提交
53
	for i, cols := range rows {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54
		line := ""
aaronchen2k2k's avatar
aaronchen2k2k 已提交
55 56 57
		row := model.Row{}
		valueList := ""

aaronchen2k2k's avatar
aaronchen2k2k 已提交
58
		for j, col := range cols {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60 61
			if j >0 && format == "sql" {
				line = line + ","
				valueList = valueList + ","
aaronchen2k2k's avatar
aaronchen2k2k 已提交
62 63
			}
			line = line + col
aaronchen2k2k's avatar
aaronchen2k2k 已提交
64 65 66 67 68 69

			row.Cols = append(row.Cols, col)

			colVal := col
			if !colTypes[j] { colVal = "'" + colVal + "'" }
			valueList = valueList + colVal
aaronchen2k2k's avatar
aaronchen2k2k 已提交
70
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
71

aaronchen2k2k's avatar
aaronchen2k2k 已提交
72 73
		if format == "text" && i < len(rows) - 1 { content = content + line + "\n" }

aaronchen2k2k's avatar
aaronchen2k2k 已提交
74
		logUtils.Screen(fmt.Sprintf("%s", line))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
75 76 77 78

		testData.Table.Rows = append(testData.Table.Rows, row)

		if format == "sql" {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
79
			sent := fmt.Sprintf("INSERT INTO %s(%s) VALUES(%s)", table, strings.Join(fields, ","), valueList)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80 81
			sql = sql + sent + ";\n"
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
82
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
83 84 85 86 87 88 89 90 91 92 93 94

	if format == "json" {
		json, _ := json.Marshal(rows)
		content = string(json)
	} else if format == "xml" {
		xml, _ := xml.Marshal(testData)
		content = string(xml)
	} else if format == "sql" {
		content = sql
	}

	return content
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95
}