Commit 81e205e1 authored by jianhua.zhang's avatar jianhua.zhang

表结构自动转化成GO struct

parents
Pipeline #9 failed with stages
# Default ignored files
/workspace.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/postgre-struct-maker-master.iml" filepath="$PROJECT_DIR$/.idea/postgre-struct-maker-master.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
type cou_incomingparts struct {
Licensedate string `json:"licensedate"`
Imnamej string `json:"imnamej"`
Proftype string `json:"proftype"`
Bankcardtype string `json:"bankcardtype"`
Bankcardf string `json:"bankcardf"`
Backup string `json:"backup"`
Displaymap string `json:"displaymap"`
Banks bigint `json:"banks"`
Licenseno string `json:"licenseno"`
Idcardf string `json:"idcardf"`
Idcardb string `json:"idcardb"`
Corporation string `json:"corporation"`
Bankcard string `json:"bankcard"`
Accountname string `json:"accountname"`
Bankname string `json:"bankname"`
Imname string `json:"imname"`
Bankcardno string `json:"bankcardno"`
Bankcardb string `json:"bankcardb"`
Doorp string `json:"doorp"`
Spacep bigint `json:"spacep"`
Banktype string `json:"banktype"`
Accounttype string `json:"accounttype"`
Id bigint `json:"id"`
Minlicense string `json:"minlicense"`
Idcard string `json:"idcard"`
Corporationmob string `json:"corporationmob"`
Spaceaddr string `json:"spaceaddr"`
Logo string `json:"logo"`
Mintype string `json:"mintype"`
Spaces bigint `json:"spaces"`
Bankmob string `json:"bankmob"`
Idcardtype string `json:"idcardtype"`
Idcarddate string `json:"idcarddate"`
Agreeon string `json:"agreeon"`
Bankp bigint `json:"bankp"`
Cardtype string `json:"cardtype"`
Cooperation string `json:"cooperation"`
}
type cou_partners struct {
Backup string `json:"backup"`
Pname string `json:"pname"`
Status int `json:"status"`
Likeman string `json:"likeman"`
Agreement string `json:"agreement"`
Id bigint `json:"id"`
Pkey string `json:"pkey"`
Benefit decimal `json:"benefit"`
Papers string `json:"papers"`
Sdate datetime `json:"sdate"`
Edate datetime `json:"edate"`
Prespondurl string `json:"prespondurl"`
Bid bigint `json:"bid"`
Pno string `json:"pno"`
Benefittype int `json:"benefittype"`
Mob string `json:"mob"`
}
type cou_ticketcodes struct {
Appid string `json:"appid"`
Outfree decimal `json:"outfree"`
Tochanno string `json:"tochanno"`
Oamount decimal `json:"oamount"`
Pdate datetime `json:"pdate"`
Mid bigint `json:"mid"`
Adiscount decimal `json:"adiscount"`
Norate decimal `json:"norate"`
Tstatus string `json:"tstatus"`
Accountdate datetime `json:"accountdate"`
Returnchanno string `json:"returnchanno"`
Pamount decimal `json:"pamount"`
Infree decimal `json:"infree"`
Partnersfree decimal `json:"partnersfree"`
Popenid string `json:"popenid"`
Porderid string `json:"porderid"`
Codenum int `json:"codenum"`
Free decimal `json:"free"`
Odesc string `json:"odesc"`
Status int `json:"status"`
Id bigint `json:"id"`
Pmno string `json:"pmno"`
Ptype int `json:"ptype"`
Odate datetime `json:"odate"`
Pnum int `json:"pnum"`
Ptno2 string `json:"ptno2"`
Benefittype int `json:"benefittype"`
Preferentialtype int `json:"preferentialtype"`
Backup string `json:"backup"`
Orderid string `json:"orderid"`
Pmno2 string `json:"pmno2"`
Uid string `json:"uid"`
Gatewayno string `json:"gatewayno"`
Ptno string `json:"ptno"`
}
type merchants struct {
Mlinkmob string `json:"mlinkmob"`
Mtype int `json:"mtype"`
Ischain int `json:"ischain"`
Warmline decimal `json:"warmline"`
Area bigint `json:"area"`
Fid bigint `json:"fid"`
Haver int `json:"haver"`
Adiscounts decimal `json:"adiscounts"`
Bid bigint `json:"bid"`
Cid bigint `json:"cid"`
Ssign datetime `json:"ssign"`
Backup string `json:"backup"`
Mlinkman string `json:"mlinkman"`
Persales decimal `json:"persales"`
Deldate datetime `json:"deldate"`
Dinerprice decimal `json:"dinerprice"`
Mact string `json:"mact"`
Cosperson decimal `json:"cosperson"`
Retype int `json:"retype"`
Supperetime time `json:"supperetime"`
Mdiposit string `json:"mdiposit"`
Marea bigint `json:"marea"`
Linedate datetime `json:"linedate"`
Issnp int `json:"issnp"`
Id bigint `json:"id"`
Licence string `json:"licence"`
Indate time.Time `json:"indate"`
Msubtype int `json:"msubtype"`
Actionid bigint `json:"actionid"`
Firrenew datetime `json:"firrenew"`
Pname string `json:"pname"`
Suppersprice decimal `json:"suppersprice"`
Lat string `json:"lat"`
Ppass string `json:"ppass"`
Dineretime time `json:"dineretime"`
Mno2 string `json:"mno2"`
Sdiscounts decimal `json:"sdiscounts"`
Tstatue int `json:"tstatue"`
Ordertel string `json:"ordertel"`
Acid bigint `json:"acid"`
Perquisites decimal `json:"perquisites"`
Shophours string `json:"shophours"`
Supperaprice decimal `json:"supperaprice"`
Mbtype int `json:"mbtype"`
Mno string `json:"mno"`
Mcode string `json:"mcode"`
Distype int `json:"distype"`
Paystatue int `json:"paystatue"`
Supperprice decimal `json:"supperprice"`
Mactname string `json:"mactname"`
Statue int `json:"statue"`
Esign datetime `json:"esign"`
Altdate time.Time `json:"altdate"`
Maddr string `json:"maddr"`
Murl string `json:"murl"`
Aid bigint `json:"aid"`
Rregular decimal `json:"rregular"`
Isset int `json:"isset"`
Dinersprice decimal `json:"dinersprice"`
Supperstime time `json:"supperstime"`
Relevel int `json:"relevel"`
Sregular decimal `json:"sregular"`
Contract string `json:"contract"`
Lng string `json:"lng"`
Mname string `json:"mname"`
Regular decimal `json:"regular"`
Keywords string `json:"keywords"`
Dinerstime time `json:"dinerstime"`
Dineraprice decimal `json:"dineraprice"`
}
type merchantsale struct {
Cardtype string `json:"cardtype"`
Acquirer bigint `json:"acquirer"`
Ttype bigint `json:"ttype"`
Bereposit decimal `json:"bereposit"`
Statue int `json:"statue"`
Actid int `json:"actid"`
Perquisites decimal `json:"perquisites"`
Tno string `json:"tno"`
Nodisamount decimal `json:"nodisamount"`
Disamount decimal `json:"disamount"`
Settledate string `json:"settledate"`
Terno string `json:"terno"`
Mno string `json:"mno"`
Cardid string `json:"cardid"`
Backup string `json:"backup"`
Ttime datetime `json:"ttime"`
Tamount decimal `json:"tamount"`
Indate datetime `json:"indate"`
Feerate decimal `json:"feerate"`
Fee decimal `json:"fee"`
Id bigint `json:"id"`
Subsidy decimal `json:"subsidy"`
Adiscounts decimal `json:"adiscounts"`
Bankname string `json:"bankname"`
Mid bigint `json:"mid"`
Oamount decimal `json:"oamount"`
Sdiscounts decimal `json:"sdiscounts"`
Altdate time.Time `json:"altdate"`
Afreposit decimal `json:"afreposit"`
Deldate time.Time `json:"deldate"`
Treposit decimal `json:"treposit"`
}
type alibusi struct {
Aact string `json:"aact"`
Sdiscounts decimal `json:"sdiscounts"`
Status int `json:"status"`
Acode string `json:"acode"`
Licence string `json:"licence"`
Altdate time.Time `json:"altdate"`
Aname string `json:"aname"`
Atype int `json:"atype"`
Amount decimal `json:"amount"`
Deldate time.Time `json:"deldate"`
Backup string `json:"backup"`
Abail decimal `json:"abail"`
Indate time.Time `json:"indate"`
Sabail decimal `json:"sabail"`
Aactbank string `json:"aactbank"`
Fid bigint `json:"fid"`
Aaddr string `json:"aaddr"`
Bid bigint `json:"bid"`
Amob string `json:"amob"`
Aactname string `json:"aactname"`
Id bigint `json:"id"`
Alinkman string `json:"alinkman"`
}
type alibusirecord struct {
Samount decimal `json:"samount"`
Indate time.Time `json:"indate"`
Backup string `json:"backup"`
Id bigint `json:"id"`
Aid bigint `json:"aid"`
Amount decimal `json:"amount"`
Action int `json:"action"`
Desc string `json:"desc"`
}
type cou_tcantm struct {
Codenum int `json:"codenum"`
Status int `json:"status"`
Resid int `json:"resid"`
Backup string `json:"backup"`
Id bigint `json:"id"`
Tid bigint `json:"tid"`
}
type cou_tickets struct {
Tdesc string `json:"tdesc"`
Userules string `json:"userules"`
Edate time.Time `json:"edate"`
Status int `json:"status"`
Validtydays int `json:"validtydays"`
Id bigint `json:"id"`
Tname string `json:"tname"`
Etime time `json:"etime"`
Pid bigint `json:"pid"`
Useamount decimal `json:"useamount"`
Stime time `json:"stime"`
Sprice decimal `json:"sprice"`
Ismesh int `json:"ismesh"`
Bid bigint `json:"bid"`
Logo string `json:"logo"`
Whatday int `json:"whatday"`
Ttype int `json:"ttype"`
Discount decimal `json:"discount"`
Sdate time.Time `json:"sdate"`
Validitytype int `json:"validitytype"`
Sdays int `json:"sdays"`
Usenum int `json:"usenum"`
Codenum int `json:"codenum"`
Codestork int `json:"codestork"`
Backup string `json:"backup"`
}
# postgre-struct-maker
----------
### 简介
这是一个帮助go项目开发的小工具,能够通过连接数据库,自动得到数据库中已经建立的所有表格的字段名和类型并生成结构体的代码;优点是简单易用,扩展性搞,支持从配置文件读取数据库配置,并将生成结果保存到不同的文件中。目前支持postgres数据库,并且能够生成golang和typescript 的结构体。
### 使用方法
修改 main.exe 同级目录下的config.conf文件,点击运行main.exe或go run main.go,即可在该目录生成go.txt 和typescript.txt 分别保存生成的结构体代码。
### 配置格式
# 数据库连接参数,json格式,字段名勿改
database = {
"host":"localhost",
"port":5432,
"username":"testuser",
"dbname":"testdb",
"password":"testpassword"
}
# 模式名,将会查询这个模式下的所有表的字段名和类型,从而生成结构体
schema = "public"
----------
2019/7/9 16:31:22
\ No newline at end of file
export class cou_incomingparts {
licensedate:string;
imnamej:string;
proftype:string;
bankcardtype:string;
bankcardf:string;
backup:string;
displaymap:string;
banks:bigint;
licenseno:string;
idcardf:string;
idcardb:string;
corporation:string;
bankcard:string;
accountname:string;
bankname:string;
imname:string;
bankcardno:string;
bankcardb:string;
doorp:string;
spacep:bigint;
banktype:string;
accounttype:string;
id:bigint;
minlicense:string;
idcard:string;
corporationmob:string;
spaceaddr:string;
logo:string;
mintype:string;
spaces:bigint;
bankmob:string;
idcardtype:string;
idcarddate:string;
agreeon:string;
bankp:bigint;
cardtype:string;
cooperation:string;
}
export class cou_partners {
backup:string;
pname:string;
status:int;
likeman:string;
agreement:string;
id:bigint;
pkey:string;
benefit:decimal;
papers:string;
sdate:datetime;
edate:datetime;
prespondurl:string;
bid:bigint;
pno:string;
benefittype:int;
mob:string;
}
export class cou_ticketcodes {
appid:string;
outfree:decimal;
tochanno:string;
oamount:decimal;
pdate:datetime;
mid:bigint;
adiscount:decimal;
norate:decimal;
tstatus:string;
accountdate:datetime;
returnchanno:string;
pamount:decimal;
infree:decimal;
partnersfree:decimal;
popenid:string;
porderid:string;
codenum:int;
free:decimal;
odesc:string;
status:int;
id:bigint;
pmno:string;
ptype:int;
odate:datetime;
pnum:int;
ptno2:string;
benefittype:int;
preferentialtype:int;
backup:string;
orderid:string;
pmno2:string;
uid:string;
gatewayno:string;
ptno:string;
}
export class merchants {
mlinkmob:string;
mtype:int;
ischain:int;
warmline:decimal;
area:bigint;
fid:bigint;
haver:int;
adiscounts:decimal;
bid:bigint;
cid:bigint;
ssign:datetime;
backup:string;
mlinkman:string;
persales:decimal;
deldate:datetime;
dinerprice:decimal;
mact:string;
cosperson:decimal;
retype:int;
supperetime:time;
mdiposit:string;
marea:bigint;
linedate:datetime;
issnp:int;
id:bigint;
licence:string;
indate:string;
msubtype:int;
actionid:bigint;
firrenew:datetime;
pname:string;
suppersprice:decimal;
lat:string;
ppass:string;
dineretime:time;
mno2:string;
sdiscounts:decimal;
tstatue:int;
ordertel:string;
acid:bigint;
perquisites:decimal;
shophours:string;
supperaprice:decimal;
mbtype:int;
mno:string;
mcode:string;
distype:int;
paystatue:int;
supperprice:decimal;
mactname:string;
statue:int;
esign:datetime;
altdate:string;
maddr:string;
murl:string;
aid:bigint;
rregular:decimal;
isset:int;
dinersprice:decimal;
supperstime:time;
relevel:int;
sregular:decimal;
contract:string;
lng:string;
mname:string;
regular:decimal;
keywords:string;
dinerstime:time;
dineraprice:decimal;
}
export class merchantsale {
cardtype:string;
acquirer:bigint;
ttype:bigint;
bereposit:decimal;
statue:int;
actid:int;
perquisites:decimal;
tno:string;
nodisamount:decimal;
disamount:decimal;
settledate:string;
terno:string;
mno:string;
cardid:string;
backup:string;
ttime:datetime;
tamount:decimal;
indate:datetime;
feerate:decimal;
fee:decimal;
id:bigint;
subsidy:decimal;
adiscounts:decimal;
bankname:string;
mid:bigint;
oamount:decimal;
sdiscounts:decimal;
altdate:string;
afreposit:decimal;
deldate:string;
treposit:decimal;
}
export class alibusi {
aact:string;
sdiscounts:decimal;
status:int;
acode:string;
licence:string;
altdate:string;
aname:string;
atype:int;
amount:decimal;
deldate:string;
backup:string;
abail:decimal;
indate:string;
sabail:decimal;
aactbank:string;
fid:bigint;
aaddr:string;
bid:bigint;
amob:string;
aactname:string;
id:bigint;
alinkman:string;
}
export class alibusirecord {
samount:decimal;
indate:string;
backup:string;
id:bigint;
aid:bigint;
amount:decimal;
action:int;
desc:string;
}
export class cou_tcantm {
codenum:int;
status:int;
resid:int;
backup:string;
id:bigint;
tid:bigint;
}
export class cou_tickets {
tdesc:string;
userules:string;
edate:string;
status:int;
validtydays:int;
id:bigint;
tname:string;
etime:time;
pid:bigint;
useamount:decimal;
stime:time;
sprice:decimal;
ismesh:int;
bid:bigint;
logo:string;
whatday:int;
ttype:int;
discount:decimal;
sdate:string;
validitytype:int;
sdays:int;
usenum:int;
codenum:int;
codestork:int;
backup:string;
}
redis.host=123.56.5.114:6379
redis.db=2
redis.password=123456
redis.maxidle=1
redis.maxactive=10
\ No newline at end of file
# 数据库连接配置
database = {
"host":"localhost",
"port":"3306",
"username":"root",
"dbname":"test",
"password":"root"
}
# schema模式名称,将会查询这个模式下的所有表的字段名和类型
schema = "test"
package main
import (
"./util"
)
func main() {
util.QueryTables()
util.Report()
}
package model
type DBConfig struct {
Host string `json:"host"`
Port string `json:"port"`
UserName string `json:"username"`
DbName string `json:"dbname"`
Password string `json:"password"`
}
package util
import (
"../model"
"database/sql"
"fmt"
"github.com/BlackCarDriver/config"
"github.com/BlackCarDriver/log"
_ "github.com/go-sql-driver/mysql"
"strings"
)
var (
db *sql.DB
goRes *log.Logger
tsRes *log.Logger
conf *config.ConfigMachine
schemeName string
queryResult map[string]column
)
type column map[string]string
// 查询schema下所有的表以及表对应的字段、类型信息
var template string = "SELECT TABLE_NAME as tablename, COLUMN_NAME as columnname, DATA_TYPE as type FROM information_schema.`COLUMNS` " +
" WHERE TABLE_SCHEMA = '?' ORDER BY TABLE_NAME"
var tconf = model.DBConfig{}
func init() {
queryResult = make(map[string]column)
//set the file path that result save in
log.SetLogPath("./")
goRes = log.NewLogger("Go.txt")
tsRes = log.NewLogger("TypeScript.txt")
//get database connect config from config file
conf, err := config.NewConfig("./")
if err != nil {
fmt.Println("无法获取配置文件!!")
panic(err)
}
conf.SetIsStrict(true)
schemeName, err = conf.GetString("schema")
conf.GetStruct("database", &tconf)
path := strings.Join([]string{tconf.UserName, ":", tconf.Password, "@tcp(", tconf.Host, ":", tconf.Port, ")/", tconf.DbName, "?charset=utf8"}, "")
db, err = sql.Open("mysql", path)
err = db.Ping()
if err != nil {
fmt.Println(err)
}
fmt.Println("Database Connect Scuess!")
}
func QueryTables() {
template = strings.Replace(template, "?", schemeName, 1)
rows, err := db.Query(template)
if err != nil {
fmt.Println(err)
panic(err)
}
fmt.Println("》》............................获取表基本信息开始............................》》")
for rows.Next() {
tableName, colName, colType := "", "", ""
rows.Scan(&tableName, &colName, &colType)
_, ok := queryResult[tableName]
if !ok {
queryResult[tableName] = make(map[string]string)
fmt.Println("获取表", tableName, "基本信息已完成.")
}
queryResult[tableName][colName] = colType
}
}
func Report() {
fmt.Println("》》............................映射结构体开始............................》》")
for tableName, ctMap := range queryResult {
goRes.Write("\ntype %s struct {\n", tableName)
tsRes.Write("\nexport class %s {\n", tableName)
record := "type "
record += tableName
record += "\t struct {\n"
for colName, coltype := range ctMap {
//translate to go struct foramt
retype := MGMap[coltype]
if retype == "" {
retype = coltype
}
jsonName := strings.ToLower(colName)
vname := strings.ToUpper(jsonName[0:1]) + jsonName[1:]
goRes.Write("\t%-10s %-10s `json:\"%s\"`\n", vname, retype, jsonName)
record += "\n"
record += vname
record += "\t"
record += retype
//translate to typescript format
retype = MTMap[coltype]
if retype == "" {
retype = coltype
}
tsRes.Write("\t%s:%s; \n", jsonName, retype)
}
goRes.Write("}\n")
tsRes.Write("}\n")
record += "\n}"
//FlushRecordToRedis(tableName, record)
fmt.Println("表", tableName, "映射结构体已完成.")
}
}
package util
import (
"fmt"
"github.com/astaxie/beego"
"github.com/gomodule/redigo/redis"
"time"
)
var (
// 定义常量
RedisClient *redis.Pool
REDIS_HOST string
REDIS_DB int
REDIS_PASSWORD string
)
func init() {
REDIS_HOST = beego.AppConfig.String("redis.host")
REDIS_DB, _ = beego.AppConfig.Int("redis.db")
REDIS_PASSWORD = beego.AppConfig.String("redis.password")
RedisClient = &redis.Pool{
MaxIdle: beego.AppConfig.DefaultInt("redis.maxidle", 1),
MaxActive: beego.AppConfig.DefaultInt("redis.maxactive", 10),
IdleTimeout: 180 * time.Second,
Wait: false,
MaxConnLifetime: 0,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", REDIS_HOST)
if err != nil {
fmt.Println(err)
return nil, err
}
// 设置密码
if _, err := c.Do("AUTH", REDIS_PASSWORD); err != nil {
fmt.Println(err)
return nil, err
}
// 选择db
c.Do("SELECT", REDIS_DB)
fmt.Println("Redis Connect Scuess!")
return c, nil
},
}
}
func FlushRecordToRedis(key, record string) {
rc := RedisClient.Get()
rc.Do("hset", "record", key, record)
defer rc.Close()
}
package util
//MySQL type -> go type
var MGMap = map[string]string{
"int4": "int32",
"int8": "int64",
"float4": "float32",
"float8": "float64",
"double": "float64",
"varchar": "string",
"boolean": "bool",
"timestamp": "time.Time",
"date": "time.Time",
}
//MySQL type -> typeScript type
var MTMap = map[string]string{
"int4": "number",
"int8": "number",
"float4": "number",
"float8": "number",
"double": "number",
"varchar": "string",
"boolean": "boolean",
"timestamp": "string",
"date": "string",
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment