diff --git a/apps/develop/api/table.go b/apps/develop/api/table.go index 09cb196..e7ea7be 100644 --- a/apps/develop/api/table.go +++ b/apps/develop/api/table.go @@ -8,6 +8,7 @@ import ( "pandax/base/ginx" "pandax/base/utils" "strings" + "sync" ) type GenTableApi struct { @@ -111,11 +112,19 @@ func (g *GenTableApi) GetTableTree(rc *ctx.ReqCtx) { // @Router /develop/code/table [post] // @Security Bearer func (g *GenTableApi) Insert(rc *ctx.ReqCtx) { - tablesList := strings.Split(rc.GinCtx.Query("tableName"), ",") + tablesList := strings.Split(rc.GinCtx.Query("tables"), ",") + + wg := sync.WaitGroup{} for i := 0; i < len(tablesList); i++ { - genTable := gen.ToolsGenTableColumn.GenTableInit(tablesList[i]) - g.GenTableApp.Insert(genTable) + index := i + wg.Add(1) + go func(wg *sync.WaitGroup, index int) { + genTable := gen.ToolsGenTableColumn.GenTableInit(tablesList[index]) + g.GenTableApp.Insert(genTable) + wg.Done() + }(&wg, index) } + wg.Wait() } // @Summary 修改表结构 diff --git a/apps/develop/gen/gen.go b/apps/develop/gen/gen.go index 959f3db..1c2c097 100644 --- a/apps/develop/gen/gen.go +++ b/apps/develop/gen/gen.go @@ -2,7 +2,6 @@ package gen import ( "bytes" - "fmt" "github.com/kakuilan/kgo" "os" "pandax/apps/develop/entity" @@ -12,6 +11,7 @@ import ( "pandax/base/utils" "strconv" "strings" + "sync" "text/template" ) @@ -193,146 +193,152 @@ func (s *toolsGenTableColumn) GenTableInit(tableName string) entity.DevGenTable } data.FunctionName = data.TableComment data.FunctionAuthor = "panda" - + wg := sync.WaitGroup{} dcs := *dbColumn for i := 0; i < len(dcs); i++ { - var column entity.DevGenTableColumn - column.ColumnComment = dcs[i].ColumnComment - column.ColumnName = dcs[i].ColumnName - column.ColumnType = dcs[i].ColumnType - column.Sort = i + 1 - column.IsPk = "0" + index := i + wg.Add(1) + go func(wg *sync.WaitGroup, i int) { + var column entity.DevGenTableColumn + column.ColumnComment = dcs[i].ColumnComment + column.ColumnName = dcs[i].ColumnName + column.ColumnType = dcs[i].ColumnType + column.Sort = i + 1 + column.IsPk = "0" - nameList := strings.Split(dcs[i].ColumnName, "_") - for i := 0; i < len(nameList); i++ { - strStart := string([]byte(nameList[i])[:1]) - strend := string([]byte(nameList[i])[1:]) - column.GoField += strings.ToUpper(strStart) + strend - if i == 0 { - column.JsonField = strings.ToLower(strStart) + strend - } else { - column.JsonField += strings.ToUpper(strStart) + strend + nameList := strings.Split(dcs[i].ColumnName, "_") + for i := 0; i < len(nameList); i++ { + strStart := string([]byte(nameList[i])[:1]) + strend := string([]byte(nameList[i])[1:]) + column.GoField += strings.ToUpper(strStart) + strend + if i == 0 { + column.JsonField = strings.ToLower(strStart) + strend + } else { + column.JsonField += strings.ToUpper(strStart) + strend + } + } + if strings.Contains(dcs[i].ColumnKey, "PR") { + column.IsPk = "1" + data.PkColumn = dcs[i].ColumnName + data.PkGoField = column.GoField + data.PkJsonField = column.JsonField } - } - if strings.Contains(dcs[i].ColumnKey, "PR") { - column.IsPk = "1" - data.PkColumn = dcs[i].ColumnName - data.PkGoField = column.GoField - data.PkJsonField = column.JsonField - } - dataType := s.GetDbType(column.ColumnType) - if s.IsStringObject(dataType) { - //字段为字符串类型 - column.GoType = "string" - columnLength := s.GetColumnLength(column.ColumnType) - if columnLength >= 500 { - column.HtmlType = "textarea" - } else { + dataType := s.GetDbType(column.ColumnType) + if s.IsStringObject(dataType) { + //字段为字符串类型 + column.GoType = "string" + columnLength := s.GetColumnLength(column.ColumnType) + if columnLength >= 500 { + column.HtmlType = "textarea" + } else { + column.HtmlType = "input" + } + } else if s.IsTimeObject(dataType) { + //字段为时间类型 + column.GoType = "Time" + column.HtmlType = "datetime" + } else if s.IsNumberObject(dataType) { + //字段为数字类型 column.HtmlType = "input" - } - } else if s.IsTimeObject(dataType) { - //字段为时间类型 - column.GoType = "Time" - column.HtmlType = "datetime" - } else if s.IsNumberObject(dataType) { - //字段为数字类型 - column.HtmlType = "input" - t, _ := utils.ReplaceString(`\(.+\)`, "", column.ColumnType) - t = strings.Split(strings.TrimSpace(t), " ")[0] - t = strings.ToLower(t) - // 如果是浮点型 - switch t { - case "float", "double", "decimal": - column.GoType = "float64" - case "bit", "int", "tinyint", "small_int", "smallint", "medium_int", "mediumint": - if utils.Contains(column.ColumnType, "unsigned") != -1 { - column.GoType = "uint" - } else { - column.GoType = "int" - } - case "big_int", "bigint": - if utils.Contains(column.ColumnType, "unsigned") != -1 { - column.GoType = "uint64" - } else { - column.GoType = "int64" + t, _ := utils.ReplaceString(`\(.+\)`, "", column.ColumnType) + t = strings.Split(strings.TrimSpace(t), " ")[0] + t = strings.ToLower(t) + // 如果是浮点型 + switch t { + case "float", "double", "decimal": + column.GoType = "float64" + case "bit", "int", "tinyint", "small_int", "smallint", "medium_int", "mediumint": + if utils.Contains(column.ColumnType, "unsigned") != -1 { + column.GoType = "uint" + } else { + column.GoType = "int" + } + case "big_int", "bigint": + if utils.Contains(column.ColumnType, "unsigned") != -1 { + column.GoType = "uint64" + } else { + column.GoType = "int64" + } } } - } - //新增字段 - if s.IsNotEdit(column.ColumnName) { - column.IsRequired = "0" - column.IsInsert = "0" - } else { - column.IsInsert = "1" - if strings.Index(column.ColumnName, "name") >= 0 || strings.Index(column.ColumnName, "status") >= 0 { - column.IsRequired = "1" + //新增字段 + if s.IsNotEdit(column.ColumnName) { + column.IsRequired = "0" + column.IsInsert = "0" + } else { + column.IsInsert = "1" + if strings.Index(column.ColumnName, "name") >= 0 || strings.Index(column.ColumnName, "status") >= 0 { + column.IsRequired = "1" + } } - } - // 编辑字段 - if s.IsNotEdit(column.ColumnName) { - column.IsEdit = "0" - } else { - if column.IsPk == "1" { + // 编辑字段 + if s.IsNotEdit(column.ColumnName) { column.IsEdit = "0" } else { - column.IsEdit = "1" + if column.IsPk == "1" { + column.IsEdit = "0" + } else { + column.IsEdit = "1" + } + } + // 列表字段 + if s.IsNotList(column.ColumnName) { + column.IsList = "0" + } else { + column.IsList = "1" + } + // 查询字段 + if s.IsNotQuery(column.ColumnName) { + column.IsQuery = "0" + } else { + column.IsQuery = "1" } - } - // 列表字段 - if s.IsNotList(column.ColumnName) { - column.IsList = "0" - } else { - column.IsList = "1" - } - // 查询字段 - if s.IsNotQuery(column.ColumnName) { - column.IsQuery = "0" - } else { - column.IsQuery = "1" - } - // 查询字段类型 - if s.CheckNameColumn(column.ColumnName) { - column.QueryType = "LIKE" - } else { - column.QueryType = "EQ" - } - // 状态字段设置单选框 - if s.CheckStatusColumn(column.ColumnName) { - column.HtmlType = "radio" - } else if s.CheckTypeColumn(column.ColumnName) || s.CheckSexColumn(column.ColumnName) { - // 类型&性别字段设置下拉框 - column.HtmlType = "select" - } - data.Columns = append(data.Columns, column) + // 查询字段类型 + if s.CheckNameColumn(column.ColumnName) { + column.QueryType = "LIKE" + } else { + column.QueryType = "EQ" + } + // 状态字段设置单选框 + if s.CheckStatusColumn(column.ColumnName) { + column.HtmlType = "radio" + } else if s.CheckTypeColumn(column.ColumnName) || s.CheckSexColumn(column.ColumnName) { + // 类型&性别字段设置下拉框 + column.HtmlType = "select" + } + data.Columns = append(data.Columns, column) + wg.Done() + }(&wg, index) } + wg.Wait() return data } // 视图预览 func Preview(tableId int64) map[string]interface{} { t1, err := template.ParseFiles("resource/template/go/entity.template") - biz.ErrIsNil(err, fmt.Sprintf("entity模版读取失败!错误详情:%s", err.Error())) + biz.ErrIsNil(err, "entity模版读取失败") - t2, err := template.ParseFiles("resource/template/go/api.template") - biz.ErrIsNil(err, fmt.Sprintf("api模版读取失败!错误详情:%s", err.Error())) + t2, err := template.ParseFiles("resource/template/go/service.template") + biz.ErrIsNil(err, "service模版读取失败") - t3, err := template.ParseFiles("resource/template/go/service.template") - biz.ErrIsNil(err, fmt.Sprintf("service模版读取失败!错误详情:%s", err.Error())) - - t4, err := template.ParseFiles("resource/template/go/router.template") - biz.ErrIsNil(err, fmt.Sprintf("router模版读取失败!错误详情:%s", err.Error())) - - t5, err := template.ParseFiles("resource/template/js/api.template") - biz.ErrIsNil(err, fmt.Sprintf("js模版读取失败!错误详情:%s", err.Error())) - - t6, err := template.ParseFiles("resource/template/vue/list-vue.template") - biz.ErrIsNil(err, fmt.Sprintf("vue列表模版读取失败!错误详情:%s", err.Error())) - - t7, err := template.ParseFiles("resource/template/vue/edit-vue.template") - biz.ErrIsNil(err, fmt.Sprintf("vue编辑模版读取失败!错误详情:%s", err.Error())) + //t3, err := template.ParseFiles("resource/template/go/api.template") + //biz.ErrIsNil(err, "api模版读取失败!") + // + //t4, err := template.ParseFiles("resource/template/go/router.template") + //biz.ErrIsNil(err, "router模版读取失败") + // + //t5, err := template.ParseFiles("resource/template/js/api.template") + //biz.ErrIsNil(err, "js模版读取失败") + // + //t6, err := template.ParseFiles("resource/template/vue/list-vue.template") + //biz.ErrIsNil(err, "vue列表模版读取失败!") + // + //t7, err := template.ParseFiles("resource/template/vue/edit-vue.template") + //biz.ErrIsNil(err,"vue编辑模版读取失败!") tab := services.DevGenTableModelDao.FindOne(entity.DevGenTable{TableId: tableId}, false) @@ -340,25 +346,25 @@ func Preview(tableId int64) map[string]interface{} { err = t1.Execute(&b1, tab) var b2 bytes.Buffer err = t2.Execute(&b2, tab) - var b3 bytes.Buffer - err = t3.Execute(&b3, tab) - var b4 bytes.Buffer - err = t4.Execute(&b4, tab) - var b5 bytes.Buffer - err = t5.Execute(&b5, tab) - var b6 bytes.Buffer - err = t6.Execute(&b6, tab) - var b7 bytes.Buffer - err = t7.Execute(&b7, tab) + //var b3 bytes.Buffer + //err = t3.Execute(&b3, tab) + //var b4 bytes.Buffer + //err = t4.Execute(&b4, tab) + //var b5 bytes.Buffer + //err = t5.Execute(&b5, tab) + //var b6 bytes.Buffer + //err = t6.Execute(&b6, tab) + //var b7 bytes.Buffer + //err = t7.Execute(&b7, tab) mp := make(map[string]interface{}) mp["template/entity.template"] = b1.String() - mp["template/api.template"] = b2.String() - mp["template/service.template"] = b3.String() - mp["template/router.template"] = b4.String() - mp["template/jsApi.template"] = b5.String() - mp["template/listVue.template"] = b6.String() - mp["template/editVue.template"] = b7.String() + mp["template/service.template"] = b2.String() + //mp["template/api.template"] = b3.String() + //mp["template/router.template"] = b4.String() + //mp["template/jsApi.template"] = b5.String() + //mp["template/listVue.template"] = b6.String() + //mp["template/editVue.template"] = b7.String() return mp } @@ -369,24 +375,24 @@ func GenCode(tableId int64) { tab.ModuleName = strings.Replace(tab.TableName, "_", "-", -1) t1, err := template.ParseFiles("resource/template/go/entity.template") - biz.ErrIsNil(err, fmt.Sprintf("entity模版读取失败!错误详情:%s", err.Error())) + biz.ErrIsNil(err, "entity模版读取失败!") - t2, err := template.ParseFiles("resource/template/go/api.template") - biz.ErrIsNil(err, fmt.Sprintf("api模版读取失败!错误详情:%s", err.Error())) + t2, err := template.ParseFiles("resource/template/go/service.template") + biz.ErrIsNil(err, "service模版读取失败!") - t3, err := template.ParseFiles("resource/template/go/service.template") - biz.ErrIsNil(err, fmt.Sprintf("service模版读取失败!错误详情:%s", err.Error())) - - t4, err := template.ParseFiles("resource/template/go/router.template") - biz.ErrIsNil(err, fmt.Sprintf("router模版读取失败!错误详情:%s", err.Error())) - - t5, err := template.ParseFiles("resource/template/js/api.template") - biz.ErrIsNil(err, fmt.Sprintf("js模版读取失败!错误详情:%s", err.Error())) - - t6, err := template.ParseFiles("resource/template/vue/list-vue.template") - biz.ErrIsNil(err, fmt.Sprintf("vue列表模版读取失败!错误详情:%s", err.Error())) - t7, err := template.ParseFiles("resource/template/vue/edit-vue.template") - biz.ErrIsNil(err, fmt.Sprintf("vue编辑模版读取失败!错误详情:%s", err.Error())) + //t3, err := template.ParseFiles("resource/template/go/api.template") + //biz.ErrIsNil(err, "api模版读取失败!") + // + //t4, err := template.ParseFiles("resource/template/go/router.template") + //biz.ErrIsNil(err, "router模版读取失败!") + // + //t5, err := template.ParseFiles("resource/template/js/api.template") + //biz.ErrIsNil(err, "js模版读取失败!") + // + //t6, err := template.ParseFiles("resource/template/vue/list-vue.template") + //biz.ErrIsNil(err, "vue列表模版读取失败!") + //t7, err := template.ParseFiles("resource/template/vue/edit-vue.template") + //biz.ErrIsNil(err, "vue编辑模版读取失败!") kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/api/", os.ModePerm) kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/entity/", os.ModePerm) @@ -400,22 +406,22 @@ func GenCode(tableId int64) { err = t1.Execute(&b1, tab) var b2 bytes.Buffer err = t2.Execute(&b2, tab) - var b3 bytes.Buffer - err = t3.Execute(&b3, tab) - var b4 bytes.Buffer - err = t4.Execute(&b4, tab) - var b5 bytes.Buffer - err = t5.Execute(&b5, tab) - var b6 bytes.Buffer - err = t6.Execute(&b6, tab) - var b7 bytes.Buffer - err = t7.Execute(&b7, tab) + //var b3 bytes.Buffer + //err = t3.Execute(&b3, tab) + //var b4 bytes.Buffer + //err = t4.Execute(&b4, tab) + //var b5 bytes.Buffer + //err = t5.Execute(&b5, tab) + //var b6 bytes.Buffer + //err = t6.Execute(&b6, tab) + //var b7 bytes.Buffer + //err = t7.Execute(&b7, tab) kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/entity/"+tab.TableName+".go", b1.Bytes()) - kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/api/"+tab.TableName+".go", b2.Bytes()) - kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/services/"+tab.TableName+".go", b3.Bytes()) - kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/router/"+tab.TableName+".go", b4.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/"+tab.ModuleName+".js", b5.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/index.vue", b6.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/"+"component"+"/index.vue", b7.Bytes()) + kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/services/"+tab.TableName+".go", b2.Bytes()) + //kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/api/"+tab.TableName+".go", b3.Bytes()) + //kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/router/"+tab.TableName+".go", b4.Bytes()) + //kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/"+tab.ModuleName+".js", b5.Bytes()) + //kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/index.vue", b6.Bytes()) + //kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/"+"component"+"/index.vue", b7.Bytes()) } diff --git a/apps/develop/services/gen_table.go b/apps/develop/services/gen_table.go index f051e68..31337ca 100644 --- a/apps/develop/services/gen_table.go +++ b/apps/develop/services/gen_table.go @@ -75,7 +75,7 @@ func (m *devGenTableModelImpl) FindDbTablesListPage(page, pageSize int, data ent func (m *devGenTableModelImpl) FindDbTableOne(tableName string) *entity.DBTables { resData := new(entity.DBTables) - if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType != "postgresql" { biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") } db := global.Db.Table("information_schema.tables") diff --git a/apps/develop/services/gen_table_column.go b/apps/develop/services/gen_table_column.go index 919019b..011b0c7 100644 --- a/apps/develop/services/gen_table_column.go +++ b/apps/develop/services/gen_table_column.go @@ -37,12 +37,16 @@ func (m *devTableColumnModelImpl) FindDbTablesColumnListPage(page, pageSize int, list := make([]entity.DBColumns, 0) var total int64 = 0 offset := pageSize * (page - 1) - if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType != "postgresql" { biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") } - db := global.Db.Table("information_schema.COLUMNS") - db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + if config.Conf.Server.DbType == "mysql" { + db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + } + if config.Conf.Server.DbType == "postgresql" { + db = db.Where("table_schema = ? ", "public") + } if data.TableName != "" { db = db.Where("table_name = ?", data.TableName) @@ -56,16 +60,21 @@ func (m *devTableColumnModelImpl) FindDbTablesColumnListPage(page, pageSize int, func (m *devTableColumnModelImpl) FindDbTableColumnList(tableName string) *[]entity.DBColumns { resData := make([]entity.DBColumns, 0) - if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType != "postgresql" { biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") } db := global.Db.Table("information_schema.columns") - db = db.Where("table_schema = ? ", config.Conf.Gen.Dbname) + if config.Conf.Server.DbType == "mysql" { + db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + } + if config.Conf.Server.DbType == "postgresql" { + db = db.Where("table_schema = ? ", "public") + } biz.IsTrue(tableName != "", "table name cannot be empty!") db = db.Where("table_name = ?", tableName) - err := db.First(&resData).Error - biz.ErrIsNil(err, err.Error()) + err := db.Find(&resData).Error + biz.ErrIsNil(err, "查询表字段失败") return &resData } diff --git a/base/biz/assert.go b/base/biz/assert.go index e3d482a..0b00268 100644 --- a/base/biz/assert.go +++ b/base/biz/assert.go @@ -8,7 +8,10 @@ import ( ) func ErrIsNil(err error, msg string, params ...interface{}) { - if err != nil && err.Error() != "record not found" { + if err != nil { + if err.Error() == "record not found" { + return + } global.Log.Error(msg + ": " + err.Error()) panic(NewBizErr(fmt.Sprintf(msg, params...))) } diff --git a/config.yml b/config.yml index dfc166e..47b7ca3 100644 --- a/config.yml +++ b/config.yml @@ -7,7 +7,7 @@ server: model: release port: 7788 cors: true - db-type: postgresql + db-type: mysql isInitTable: false excel-dir: ./resource/excel/ tls: diff --git a/resource/template/go/entity.template b/resource/template/go/entity.template index f4c9cbf..4dfb53a 100644 --- a/resource/template/go/entity.template +++ b/resource/template/go/entity.template @@ -1,86 +1,23 @@ // ========================================================================== -// GFast自动生成dao操作代码,无需手动修改,重新生成不会自动覆盖. -// 生成日期:{{.table.CreateTime}} -// 生成路径: {{.table.PackageName}}/dao/{{.table.TableName}}.go -// 生成人:{{.table.FunctionAuthor}} +// 生成日期:{{.CreatedAt}} +// 生成路径: apps/{{.PackageName}}/entity/{{.TableName}}.go +// 生成人:{{.FunctionAuthor}} // ========================================================================== -//// -package dao - -{{$hasGTime:=false}} -{{range $index, $column := .table.Columns}} -{{if eq $column.GoType "Time"}} -{{$hasGTime = true}} -{{end}} -{{end}} +package entity import ( - comModel "gfast/app/common/model" - "{{.table.PackageName}}/dao/internal" - {{if $hasGTime}} - "github.com/gogf/gf/os/gtime" - {{end}} + import "pandax/base/model" ) - -// {{.table.BusinessName | CaseCamelLower}}Dao is the manager for logic model data accessing and custom defined data operations functions management. -// You can define custom methods on it to extend its functionality as you wish. -type {{.table.BusinessName | CaseCamelLower}}Dao struct { - *internal.{{.table.BusinessName | CaseCamel}}Dao +type {{.FunctionName}} struct { + model.BaseAutoModel + {{- range .Columns -}} + {{- if eq .IsQuery "1" }} + {{.GoField}} {{.GoType}} `json:"{{.JsonField}}" gorm:"type:{{.ColumnType}};comment:{{.ColumnComment}}" binding:"required"` + {{- end }} + {{- end }} } -var ( - // {{.table.ClassName}} is globally public accessible object for table tools_gen_table operations. - {{.table.ClassName}} = {{.table.BusinessName | CaseCamelLower}}Dao{ - internal.New{{.table.ClassName}}Dao(), - } -) - -//// -// Fill with you ideas below. -//// - - -// {{.table.ClassName}}SearchReq 分页请求参数 -type {{.table.ClassName}}SearchReq struct { - {{range $index, $column := .table.Columns}} - {{if eq $column.IsQuery "1"}} - {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else if or (eq $column.GoType "int") (eq $column.GoType "int64") (eq $column.GoType "uint") (eq $column.GoType "uint64")}}string{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}"` //{{$column.ColumnComment}} - {{end}} - {{end}} - comModel.PageReq +func ({{.FunctionName}}) TableName() string { + return "{{.TableName}}" } - - -// {{.table.ClassName}}AddReq 添加操作请求参数 -type {{.table.ClassName}}AddReq struct { - {{range $index, $column := .table.Columns}} - {{if and (eq $column.IsInsert "1") (ne $column.IsPk "1")}} - {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}" {{if eq $column.IsRequired "1"}}v:"required#{{$column.ColumnComment}}不能为空"{{end}}` - {{end}} - {{if eq $column.ColumnName "created_by"}}CreatedBy uint64 {{end}} - {{end}} -} - - -// {{.table.ClassName}}EditReq 修改操作请求参数 -type {{.table.ClassName}}EditReq struct { - {{.table.PkColumn.GoField}} {{.table.PkColumn.GoType}} `p:"{{.table.PkColumn.HtmlField}}" v:"required#主键ID不能为空"` - {{range $index, $column := .table.Columns}} - {{if eq $column.IsEdit "1"}} - {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}" {{if eq $column.IsRequired "1"}}v:"required#{{$column.ColumnComment}}不能为空"{{end}}`{{end}} - {{if eq $column.ColumnName "updated_by"}}UpdatedBy uint64 {{end}} - {{end}} -} - - - -{{range $index,$column:= .table.Columns}} -{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} -// {{$.table.ClassName}}{{$column.GoField}}Req 设置用户状态参数 -type {{$.table.ClassName}}{{$column.GoField}}Req struct { - {{$.table.PkColumn.GoField}} {{$.table.PkColumn.GoType}} `p:"{{$.table.PkColumn.HtmlField}}" v:"required#主键ID不能为空"` - {{$column.GoField}} {{$column.GoType}} `p:"{{$column.HtmlField}}" v:"required#{{$column.ColumnComment}}不能为空"` -} -{{end}} -{{end}} \ No newline at end of file diff --git a/resource/template/go/service.template b/resource/template/go/service.template index 766ef84..7dc97ae 100644 --- a/resource/template/go/service.template +++ b/resource/template/go/service.template @@ -1,198 +1,86 @@ // ========================================================================== -// Panda自动生成业务逻辑层相关代码,只生成一次,按需修改,再次生成不会覆盖. -// 生成日期:{{.table.CreateTime}} -// 生成路径: {{.table.PackageName}}/service/{{.table.BusinessName}}.go -// 生成人:{{.table.FunctionAuthor}} +// 生成日期:{{.CreatedAt}} +// 生成路径: apps/{{.PackageName}}/services/{{.TableName}}.go +// 生成人:{{.FunctionAuthor}} // ========================================================================== -//// -{{$structName := .table.BusinessName | CaseCamelLower}} package service - import ( - "context" - comModel "gfast/app/common/model" - "pandax/apps/{{.table.PackageName}}/entity" - "pandax/base/biz" + "pandax/apps/{{.PackageName}}/entity" + "pandax/base/biz" "pandax/base/global" ) +type ( + {{.FunctionName}}Model interface { + Insert(data entity.{{.FunctionName}}) *entity.{{.FunctionName}} + FindOne({{.PkJsonField}} int64) *entity.{{.FunctionName}} + FindListPage(page, pageSize int, data entity.{{.FunctionName}}) (*[]entity.{{.FunctionName}}, int64) + FindList(data entity.{{ .FunctionName }}) *[]entity.{{.FunctionName}} + Update(data entity.{{.FunctionName}}) *entity.{{.FunctionName}} + Delete({{.PkJsonField}}s []int64) + } -type {{$structName}} struct { + {{.BusinessName}}ModelImpl struct { + table string + } +) + +{{$model := .FunctionName }} + +var {{.FunctionName}}ModelDao {{.FunctionName}}Model = &{{.BusinessName}}ModelImpl{ + table: `{{.TableName}}`, } -var {{.table.ClassName}} = new({{$structName}}) - - -{{$pk:=""}} -{{$pkGoField:=""}} - -{{$createdAt:=""}} -{{$createdAtGoField:=""}} - -{{range $index, $column := .table.Columns}} -{{if eq $column.IsPk "1"}} - {{$pk = $column.ColumnName}} - {{$pkGoField = $column.GoField}} -{{end}} -{{if eq $column.ColumnName "created_at"}} - {{$createdAt = $column.ColumnName}} - {{$createdAtGoField = $column.GoField}} -{{end}} -{{end}} - -// GetList 获取任务列表 -func (s *{{$structName}}) GetList(req *dao.{{.table.ClassName}}SearchReq) (total, page int, list []*model.{{.table.ClassName}}, err error) { - m := dao.{{.table.ClassName}}.Ctx(req.Ctx) - {{range $index, $column := .table.Columns}} {{if eq $column.IsQuery "1"}} - {{if eq $column.QueryType "LIKE"}} - if req.{{$column.GoField}} != "" { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" like ?", "%"+req.{{$column.GoField}}+"%") - } {{end}} - {{if eq $column.QueryType "EQ"}} {{if eq $column.GoType "string"}} - if req.{{$column.GoField}} != "" { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" = ?", req.{{$column.GoField}}) - } - {{else if and (eq $column.GoType "Time") (eq $column.ColumnName "created_at")}} - if req.BeginTime != "" { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" >=", req.BeginTime) - } - if req.EndTime != "" { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" <", req.EndTime) - } - {{else if or (eq $column.GoType "int") (eq $column.GoType "int64") (eq $column.GoType "uint") (eq $column.GoType "uint64") }} - if req.{{$column.GoField}} != "" { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" = ?", req.{{$column.GoField}}) - } - {{end}} {{end}} - {{if and (eq $column.QueryType "BETWEEN") (eq $column.ColumnType "datetime") }} - if req.{{$column.GoField}} != nil { - m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" >= ? AND "+dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" < ?", req.{{$column.GoField}}, req.{{$column.GoField}}.Add(gtime.D)) - } - {{end}} - {{end}} - {{end}} - - total, err = m.Count() - if err != nil { - g.Log().Error(err) - err = gerror.New("获取总行数失败") - return - } - {{if ne .table.TplCategory "tree"}} - if req.PageNum == 0 { - req.PageNum = 1 - } - page = req.PageNum - if req.PageSize == 0 { - req.PageSize = comModel.PageSize - } - order:= "{{$pk}} asc" - if req.OrderBy!=""{ - order = req.OrderBy - } - err = m.Page(page, req.PageSize).Order(order).Scan(&list) - {{else}} - order:= "{{$pk}} asc" - if req.OrderBy!=""{ - order = req.OrderBy - } - err = m.Order(order).Scan(&list) - {{end}} - if err != nil { - g.Log().Error(err) - err = gerror.New("获取数据失败") - } - return +func (m *{{.BusinessName}}ModelImpl) Insert(data entity.{{$model}}) *entity.{{$model}} { + err := global.Db.Table(m.table).Create(&data).Error + biz.ErrIsNil(err, "添加{{.TableComment}}失败") + return &data } - -// GetInfoById 通过id获取 -func (s *{{$structName}}) GetInfoById(ctx context.Context,id {{$.table.PkColumn.GoType}}) (info *model.{{.table.ClassName}}, err error) { - if id == 0 { - err = gerror.New("参数错误") - return - } - err = dao.{{.table.ClassName}}.Ctx(ctx).Where(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}, id).Scan(&info) - if err != nil { - g.Log().Error(err) - } - if info == nil || err != nil { - err = gerror.New("获取信息失败") - } - return +func (m *{{.BusinessName}}ModelImpl) FindOne({{.PkJsonField}} int64) *entity.{{$model}} { + resData := new(entity.{{$model}}) + err := global.Db.Table(m.table).Where("{{.PkColumn}} = ?", {{.PkJsonField}}).First(resData).Error + biz.ErrIsNil(err, "查询{{.TableComment}}失败") + return resData } -// Add 添加 -func (s *{{$structName}}) Add(ctx context.Context,req *dao.{{.table.ClassName}}AddReq) (err error) { - _, err = dao.{{.table.ClassName}}.Ctx(ctx).Insert(req) - return +func (m *{{.BusinessName}}ModelImpl) FindListPage(page, pageSize int, data entity.{{$model}}) (*[]entity.{{$model}}, int64) { + list := make([]entity.{{$model}}, 0) + var total int64 = 0 + offset := pageSize * (page - 1) + db := global.Db.Table(m.table) + // 此处填写 where参数判断 + if data.{{.PkGoField}} != 0 { + db = db.Where("{{.PkColumn}} = ?", data.{{.PkGoField}}) + } + + db.Where("delete_time IS NULL") + err := db.Count(&total).Error + err = db.Order("create_time").Limit(pageSize).Offset(offset).Find(&list).Error + biz.ErrIsNil(err, "查询{{.TableComment}}分页列表失败") + return &list, total } -// Edit 修改 -func (s *{{$structName}}) Edit(ctx context.Context,req *dao.{{.table.ClassName}}EditReq) error { - {{ $fieldsEx:= concat "dao." $.table.ClassName ".Columns." $pkGoField }} - {{if ne $createdAt ""}} - {{$fieldsEx = concat "dao." $.table.ClassName ".Columns." $pkGoField "," "dao." $.table.ClassName ".Columns." $createdAtGoField}} - {{end}} - _, err := dao.{{.table.ClassName}}.Ctx(ctx).FieldsEx({{$fieldsEx}}).Where(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}, req.{{$pkGoField}}). - Update(req) - return err +func (m *{{.BusinessName}}ModelImpl) FindList(data entity.{{$model}}) *[]entity.{{$model}} { + list := make([]entity.{{$model}}, 0) + db := global.Db.Table(m.table) + // 此处填写 where参数判断 + if data.{{.PkGoField}} != 0 { + db = db.Where("{{.PkColumn}} = ?", data.{{.PkGoField}}) + } + + db.Where("delete_time IS NULL") + biz.ErrIsNil(db.Order("create_time").Find(&list).Error, "查询{{.TableComment}}列表失败") + return &list } - -// DeleteByIds 删除 -func (s *{{$structName}}) DeleteByIds(ctx context.Context,ids []int) (err error) { - if len(ids) == 0 { - err = gerror.New("参数错误") - return - } - {{if eq .table.TplCategory "tree"}} - ids, err = s.GetChildrenIds(ctx,ids) - if err != nil { - return - } - {{end}} - _, err = dao.{{.table.ClassName}}.Ctx(ctx).Delete(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}+" in (?)", ids) - if err != nil { - g.Log().Error(err) - err = gerror.New("删除失败") - } - return +func (m *{{.BusinessName}}ModelImpl) Update(data entity.{{$model}}) *entity.{{$model}} { + biz.ErrIsNil(global.Db.Table(m.table).Updates(&data).Error, "修改{{.TableComment}}失败") + return &data } - -{{range $index,$column:= .table.Columns}} -{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} -// Change{{$column.GoField}} 修改状态 -func (s *{{$structName}}) Change{{$column.GoField}}(ctx context.Context,req *dao.{{$.table.ClassName}}{{$column.GoField}}Req) error { - _, err := dao.{{$.table.ClassName}}.Ctx(ctx).WherePri(req.{{$pkGoField}}).Update(g.Map{ - dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}: req.{{$column.GoField}}, - }) - return err +func (m *{{.BusinessName}}ModelImpl) Delete({{.PkJsonField}}s []int64) { + biz.ErrIsNil(global.Db.Table(m.table).Delete(&entity.{{$model}}{}, "{{.PkColumn}} in (?)", {{.PkJsonField}}s).Error, "删除{{.TableComment}}失败") } -{{end}} -{{end}} - -{{if eq .table.TplCategory "tree"}} -// GetChildrenIds 通过ID获取子级ID -func (s *{{$structName}})GetChildrenIds(ctx context.Context,ids []int) ([]int, error) { - //获取所有 - _,_,all, err := s.GetList(&dao.{{.table.ClassName}}SearchReq{PageReq:comModel.PageReq{Ctx: ctx}}) - if err != nil { - return nil, err - } - list := make(g.List, len(all)) - for k, info := range all { - list[k] = gconv.Map(info) - } - for _, id := range ids { - children := library.FindSonByParentId(list, id, "{{.table.TreeParentCode}}", "{{.table.TreeCode}}") - for _, cid := range children { - ids = append(ids, gconv.Int(cid["{{.table.TreeCode}}"])) - } - } - return ids, nil -} -{{end}} \ No newline at end of file