121 lines
3.1 KiB
Go
121 lines
3.1 KiB
Go
|
package generator
|
|||
|
|
|||
|
import (
|
|||
|
"bufio"
|
|||
|
"fmt"
|
|||
|
"io"
|
|||
|
"os"
|
|||
|
"service/bizcommon/util"
|
|||
|
"service/codecreate/consts"
|
|||
|
"strings"
|
|||
|
|
|||
|
"github.com/xuri/excelize/v2"
|
|||
|
)
|
|||
|
|
|||
|
func CreateFileDirectory(genSource *GenSource) {
|
|||
|
//在/service/api/proto下准备保存proto的文件夹
|
|||
|
|
|||
|
//判断是否存在,不存在就创建
|
|||
|
path := fmt.Sprintf("%v%v%v/proto", consts.RootPath, consts.ProtoOutPath, genSource.ModuleName)
|
|||
|
_, err := os.Stat(path)
|
|||
|
if os.IsNotExist(err) {
|
|||
|
// mkdir 创建目录,mkdirAll 可创建多层级目录
|
|||
|
err = os.MkdirAll(path, os.ModePerm)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Create directory fail : %v", err)
|
|||
|
}
|
|||
|
} else if err != nil {
|
|||
|
fmt.Printf("Stat fail :%v", err)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func GenerateEntity(genSource *GenSource) {
|
|||
|
infile, err := os.Open(genSource.InPath)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Open File Err : %v", err)
|
|||
|
}
|
|||
|
outfile, err := os.OpenFile(genSource.OutPath, os.O_WRONLY|os.O_CREATE, 0666)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Open File Err : %v", err)
|
|||
|
}
|
|||
|
entityDefineFile, err := excelize.OpenFile(consts.RootPath + consts.ExcelPath)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Open File Err : %v", err)
|
|||
|
}
|
|||
|
rows, err := entityDefineFile.GetRows(genSource.EntityName)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Get rows Err : %v", err)
|
|||
|
}
|
|||
|
|
|||
|
defer infile.Close()
|
|||
|
defer outfile.Close()
|
|||
|
defer entityDefineFile.Close()
|
|||
|
|
|||
|
reader := bufio.NewReader(infile)
|
|||
|
writer := bufio.NewWriter(outfile)
|
|||
|
|
|||
|
entityDef := CreateEntityDefination(rows)
|
|||
|
|
|||
|
for {
|
|||
|
str, err := reader.ReadString('\n')
|
|||
|
|
|||
|
str = strings.ReplaceAll(str, consts.EntityNamePlaceHolder, genSource.EntityName)
|
|||
|
str = strings.ReplaceAll(str, consts.EntityCNNamePlaceHolder, genSource.EntityCNName)
|
|||
|
str = strings.ReplaceAll(str, consts.EntityDefinationPlaceHolder, entityDef)
|
|||
|
writer.WriteString(str)
|
|||
|
|
|||
|
if err == io.EOF {
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
writer.Flush()
|
|||
|
}
|
|||
|
|
|||
|
func GenerateModule(genSource *GenSource) {
|
|||
|
infile, err := os.Open(genSource.InPath)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Open File Err : %v", err)
|
|||
|
}
|
|||
|
outfile, err := os.OpenFile(genSource.OutPath, os.O_WRONLY|os.O_CREATE, 0666)
|
|||
|
if err != nil {
|
|||
|
fmt.Printf("Open File Err : %v", err)
|
|||
|
}
|
|||
|
|
|||
|
defer infile.Close()
|
|||
|
defer outfile.Close()
|
|||
|
|
|||
|
reader := bufio.NewReader(infile)
|
|||
|
writer := bufio.NewWriter(outfile)
|
|||
|
|
|||
|
for {
|
|||
|
str, err := reader.ReadString('\n')
|
|||
|
|
|||
|
str = strings.ReplaceAll(str, consts.EntityNamePlaceHolder, genSource.EntityName)
|
|||
|
str = strings.ReplaceAll(str, consts.ModuleNamePlaceHolder, genSource.ModuleName)
|
|||
|
str = strings.ReplaceAll(str, consts.EntityCNNamePlaceHolder, genSource.EntityCNName)
|
|||
|
str = strings.ReplaceAll(str, consts.ErrCodeSeqPlaceHolder, genSource.ErrCodeSeq)
|
|||
|
writer.WriteString(str)
|
|||
|
|
|||
|
if err == io.EOF {
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
writer.Flush()
|
|||
|
}
|
|||
|
|
|||
|
func CreateEntityDefination(rows [][]string) string {
|
|||
|
var sb strings.Builder
|
|||
|
|
|||
|
//第四列为ID
|
|||
|
row := rows[3]
|
|||
|
sb.WriteString(fmt.Sprintf(" Id *%v `json:\"id\" bson:\"_id\"` // %v\n", row[2], row[1]))
|
|||
|
|
|||
|
//第五列开始为表其他字段
|
|||
|
for i := 4; i < len(rows); i++ {
|
|||
|
row = rows[i]
|
|||
|
sb.WriteString(fmt.Sprintf(" %v *%v `json:\"%v\" bson:\"%v\"` // %v\n", util.UderscoreToUpperCamelCase(row[0]), row[2], row[0], row[0], row[1]))
|
|||
|
}
|
|||
|
|
|||
|
return sb.String()
|
|||
|
}
|