[修复]代码生成

This commit is contained in:
PandaGoAdmin
2022-07-17 01:26:42 +08:00
parent c33f6f816b
commit d33bd39570
12 changed files with 153 additions and 42 deletions

View File

@@ -34,3 +34,16 @@ func (e *GenApi) GenCode(rc *ctx.ReqCtx) {
tableId := ginx.PathParamInt(rc.GinCtx, "tableId")
gen.GenCode(int64(tableId))
}
// @Summary 配置生成
// @Description 生成API和菜单
// @Tags 工具 / 生成工具
// @Param tableId path int true "tableId"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /develop/code/gen/configure/{tableId} [get]
// @Security X-TOKEN
func (e *GenApi) GenConfigure(rc *ctx.ReqCtx) {
tableId := ginx.PathParamInt(rc.GinCtx, "tableId")
menuId := ginx.QueryInt(rc.GinCtx, "menuId", 0)
gen.GenConfigure(tableId, menuId)
}

View File

@@ -13,11 +13,8 @@ type DevGenTable struct {
BusinessName string `gorm:"business_name" json:"businessName"` // 生成业务名
FunctionName string `gorm:"function_name" json:"functionName"` // 生成功能名
FunctionAuthor string `gorm:"function_author" json:"functionAuthor"` // 生成功能作者
TreeCode string `gorm:"tree_code" json:"treeCode"`
TreeParentCode string `gorm:"tree_parent_code" json:"treeParentCode"`
TreeName string `gorm:"tree_name" json:"treeName"`
Options string `gorm:"options" json:"options"` // 其它生成选项
Remark string `gorm:"remark" json:"remark"` // 备注
Options string `gorm:"options" json:"options"` // 其它生成选项
Remark string `gorm:"remark" json:"remark"` // 备注
PkColumn string `gorm:"pk_column;" json:"pkColumn"`
PkGoField string `gorm:"pk_go_field" json:"pkGoField"`
PkJsonField string `gorm:"pk_json_field" json:"pkJsonField"`

View File

@@ -2,11 +2,14 @@ package gen
import (
"bytes"
"fmt"
"github.com/kakuilan/kgo"
"log"
"os"
"pandax/apps/develop/entity"
"pandax/apps/develop/services"
sysEntity "pandax/apps/system/entity"
sysServices "pandax/apps/system/services"
"pandax/base/biz"
"pandax/base/config"
"pandax/base/global"
@@ -411,8 +414,8 @@ func GenCode(tableId int64) {
kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/router/", os.ModePerm)
kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/services/", os.ModePerm)
kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/", os.ModePerm)
kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/", os.ModePerm)
kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/"+"component"+"/", os.ModePerm)
kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/", os.ModePerm)
kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/"+"component"+"/", os.ModePerm)
var b1 bytes.Buffer
err = t1.Execute(&b1, tab)
@@ -433,7 +436,105 @@ func GenCode(tableId int64) {
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"+"/editModule.vue", b7.Bytes())
kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/"+tab.BusinessName+".js", b5.Bytes())
kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/index.vue", b6.Bytes())
kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/"+"component"+"/editModule.vue", b7.Bytes())
}
// GenConfigure 生成菜单api
func GenConfigure(tableId, parentId int) {
tab := services.DevGenTableModelDao.FindOne(entity.DevGenTable{TableId: int64(tableId)}, false)
//生成菜单 一个菜单 三个按钮
component := "Layout"
if parentId != 0 {
component = fmt.Sprintf("/%s/%s/index", tab.PackageName, tab.BusinessName)
}
menu := sysEntity.SysMenu{
ParentId: int64(parentId),
MenuName: tab.TableComment,
MenuType: "C",
Sort: 1,
Icon: "elementSetting",
Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName),
Component: component,
IsIframe: "1",
IsHide: "0",
IsKeepAlive: "1",
IsAffix: "1",
Permission: fmt.Sprintf("%s:%s:list", tab.PackageName, tab.BusinessName),
Status: "0",
CreateBy: "admin",
}
insert := sysServices.SysMenuModelDao.Insert(menu)
log.Println("insert", insert.MenuId)
//新增按钮
menuA := sysEntity.SysMenu{
ParentId: insert.MenuId,
MenuName: "新增" + tab.TableComment,
MenuType: "F",
Sort: 1,
Permission: fmt.Sprintf("%s:%s:add", tab.PackageName, tab.BusinessName),
Status: "0",
CreateBy: "admin",
}
go sysServices.SysMenuModelDao.Insert(menuA)
//修改按钮
menuE := sysEntity.SysMenu{
ParentId: insert.MenuId,
MenuName: "修改" + tab.TableComment,
MenuType: "F",
Sort: 2,
Permission: fmt.Sprintf("%s:%s:edit", tab.PackageName, tab.BusinessName),
Status: "0",
CreateBy: "admin",
}
go sysServices.SysMenuModelDao.Insert(menuE)
//删除按钮
menuD := sysEntity.SysMenu{
ParentId: insert.MenuId,
MenuName: "删除" + tab.TableComment,
MenuType: "F",
Sort: 3,
Permission: fmt.Sprintf("%s:%s:delete", tab.PackageName, tab.BusinessName),
Status: "0",
CreateBy: "admin",
}
go sysServices.SysMenuModelDao.Insert(menuD)
//生成api
apiL := sysEntity.SysApi{
Path: fmt.Sprintf("/%s/%s/list", tab.PackageName, tab.BusinessName),
Description: fmt.Sprintf("查询%s列表分页", tab.TableComment),
ApiGroup: tab.BusinessName,
Method: "GET",
}
go sysServices.SysApiModelDao.Insert(apiL)
apiG := sysEntity.SysApi{
Path: fmt.Sprintf("/%s/%s/:%s", tab.PackageName, tab.BusinessName, tab.PkJsonField),
Description: fmt.Sprintf("获取%s信息", tab.TableComment),
ApiGroup: tab.BusinessName,
Method: "GET",
}
go sysServices.SysApiModelDao.Insert(apiG)
apiA := sysEntity.SysApi{
Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName),
Description: fmt.Sprintf("添加%s信息", tab.TableComment),
ApiGroup: tab.BusinessName,
Method: "POST",
}
go sysServices.SysApiModelDao.Insert(apiA)
apiE := sysEntity.SysApi{
Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName),
Description: fmt.Sprintf("修改%s信息", tab.TableComment),
ApiGroup: tab.BusinessName,
Method: "PUT",
}
go sysServices.SysApiModelDao.Insert(apiE)
apiD := sysEntity.SysApi{
Path: fmt.Sprintf("/%s/%s/:%s", tab.PackageName, tab.BusinessName, tab.PkJsonField),
Description: fmt.Sprintf("删除%s信息", tab.TableComment),
ApiGroup: tab.BusinessName,
Method: "DELETE",
}
go sysServices.SysApiModelDao.Insert(apiD)
}

View File

@@ -26,6 +26,6 @@ func InitGenRouter(router *gin.RouterGroup) {
genConfigureLog := ctx.NewLogInfo("生成配置")
gen.GET("configure/:tableId", func(c *gin.Context) {
ctx.NewReqCtxWithGin(c).WithLog(genConfigureLog).Handle(genApi.GenCode)
ctx.NewReqCtxWithGin(c).WithLog(genConfigureLog).Handle(genApi.GenConfigure)
})
}

View File

@@ -7,7 +7,6 @@ import (
"pandax/base/config"
"pandax/base/global"
"pandax/base/utils"
"strings"
)
/**
@@ -178,7 +177,7 @@ func (m *devGenTableModelImpl) Update(data entity.DevGenTable) *entity.DevGenTab
tableMap := make(map[string]*entity.DevGenTable)
if len(tableNames) > 0 {
err = global.Db.Table(m.table).Where("table_name in (?)", tableNames).Find(&tables).Error
biz.ErrIsNil(err, err.Error())
biz.ErrIsNil(err, "关联表不存在")
for i := range tables {
tableMap[tables[i].TableName] = &tables[i]
}
@@ -189,17 +188,9 @@ func (m *devGenTableModelImpl) Update(data entity.DevGenTable) *entity.DevGenTab
t, ok := tableMap[data.Columns[i].LinkTableName]
if ok {
data.Columns[i].LinkTableClass = t.ClassName
data.Columns[i].LinkTablePackage = t.ModuleName
} else {
tableNameList := strings.Split(data.Columns[i].LinkTableName, "_")
data.Columns[i].LinkTableClass = ""
data.Columns[i].LinkTablePackage = ""
for a := 0; a < len(tableNameList); a++ {
strStart := string([]byte(tableNameList[a])[:1])
strEnd := string([]byte(tableNameList[a])[1:])
data.Columns[i].LinkTableClass += strings.ToUpper(strStart) + strEnd
data.Columns[i].LinkTablePackage += strings.ToLower(strStart) + strings.ToLower(strEnd)
}
data.Columns[i].LinkTablePackage = t.PackageName
data.Columns[i].LinkLabelId = t.PkColumn
data.Columns[i].LinkLabelName = t.PkGoField
}
}
DevTableColumnModelDao.Update(data.Columns[i])

View File

@@ -22,7 +22,7 @@ type SysTenantsApi struct {
// @Param pageSize query int false "页条数"
// @Param pageNum query int false "页码"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /admin/sysTenants/list [get]
// @Router /admin/tenant/list [get]
// @Security
func (p *SysTenantsApi) GetSysTenantsList(rc *ctx.ReqCtx) {
data := entity.SysTenants{}
@@ -44,7 +44,7 @@ func (p *SysTenantsApi) GetSysTenantsList(rc *ctx.ReqCtx) {
// @Tags SysTenants
// @Param tenantId path int true "tenantId"
// @Success 200 {string} string "{"code": 200, "data": [...]}"
// @Router /admin/sysTenants/{tenantId} [get]
// @Router /admin/tenant/{tenantId} [get]
// @Security
func (p *SysTenantsApi) GetSysTenants(rc *ctx.ReqCtx) {
tenantId := ginx.PathParamInt(rc.GinCtx, "tenantId")
@@ -59,7 +59,7 @@ func (p *SysTenantsApi) GetSysTenants(rc *ctx.ReqCtx) {
// @Param data body entity.SysTenants true "data"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /admin/sysTenants [post]
// @Router /admin/tenant [post]
// @Security X-TOKEN
func (p *SysTenantsApi) InsertSysTenants(rc *ctx.ReqCtx) {
var data entity.SysTenants
@@ -76,7 +76,7 @@ func (p *SysTenantsApi) InsertSysTenants(rc *ctx.ReqCtx) {
// @Param data body entity.SysTenants true "body"
// @Success 200 {string} string "{"code": 200, "message": "添加成功"}"
// @Success 200 {string} string "{"code": 400, "message": "添加失败"}"
// @Router /admin/sysTenants [put]
// @Router /admin/tenant [put]
// @Security X-TOKEN
func (p *SysTenantsApi) UpdateSysTenants(rc *ctx.ReqCtx) {
var data entity.SysTenants
@@ -91,9 +91,8 @@ func (p *SysTenantsApi) UpdateSysTenants(rc *ctx.ReqCtx) {
// @Param tenantId path string true "tenantId"
// @Success 200 {string} string "{"code": 200, "message": "删除成功"}"
// @Success 200 {string} string "{"code": 400, "message": "删除失败"}"
// @Router /admin/sysTenants/{tenantId} [delete]
// @Router /admin/tenant/{tenantId} [delete]
func (p *SysTenantsApi) DeleteSysTenants(rc *ctx.ReqCtx) {
tenantId := rc.GinCtx.Param("tenantId")
tenantIds := utils.IdsStrToIdsIntGroup(tenantId)
p.SysTenantsApp.Delete(tenantIds)

View File

@@ -9,7 +9,7 @@ import (
func InitApiRouter(router *gin.RouterGroup) {
s := &api.SystemApiApi{
ApiApp: services.SysSysApiModelDao,
ApiApp: services.SysApiModelDao,
}
api := router.Group("api")

View File

@@ -19,16 +19,16 @@ type (
Delete(ids []int64)
}
sysSysApiModelImpl struct {
sysApiModelImpl struct {
table string
}
)
var SysSysApiModelDao SysApiModel = &sysSysApiModelImpl{
var SysApiModelDao SysApiModel = &sysApiModelImpl{
table: `sys_apis`,
}
func (m *sysSysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi {
func (m *sysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi {
err := global.Db.Table(m.table).Where("path = ? AND method = ?", api.Path, api.Method).First(&entity.SysApi{}).Error
biz.IsTrue(errors.Is(err, gorm.ErrRecordNotFound), "存在相同api")
err = global.Db.Table(m.table).Create(&api).Error
@@ -36,14 +36,14 @@ func (m *sysSysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi {
return &api
}
func (m *sysSysApiModelImpl) FindOne(id int64) (resData *entity.SysApi) {
func (m *sysApiModelImpl) FindOne(id int64) (resData *entity.SysApi) {
resData = new(entity.SysApi)
err := global.Db.Table(m.table).Where("id = ?", id).First(&resData).Error
biz.ErrIsNil(err, "查询Api失败")
return
}
func (m *sysSysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi) (*[]entity.SysApi, int64) {
func (m *sysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi) (*[]entity.SysApi, int64) {
list := make([]entity.SysApi, 0)
var total int64 = 0
offset := pageSize * (page - 1)
@@ -73,7 +73,7 @@ func (m *sysSysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi
return &list, total
}
func (m *sysSysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi {
func (m *sysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi {
list := make([]entity.SysApi, 0)
db := global.Db.Table(m.table)
@@ -98,7 +98,7 @@ func (m *sysSysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi {
return &list
}
func (m *sysSysApiModelImpl) Update(api entity.SysApi) *entity.SysApi {
func (m *sysApiModelImpl) Update(api entity.SysApi) *entity.SysApi {
var oldA entity.SysApi
err := global.Db.Table(m.table).Where("id = ?", api.Id).First(&oldA).Error
biz.ErrIsNil(err, "【修改api】查询api失败")
@@ -113,7 +113,7 @@ func (m *sysSysApiModelImpl) Update(api entity.SysApi) *entity.SysApi {
return &api
}
func (m *sysSysApiModelImpl) Delete(ids []int64) {
func (m *sysApiModelImpl) Delete(ids []int64) {
err := global.Db.Table(m.table).Delete(&entity.SysApi{}, "id in (?)", ids).Error
biz.ErrIsNil(err, "删除配置信息失败")
}

View File

@@ -32,7 +32,6 @@ var SysMenuModelDao SysMenuModel = &sysMenuModelImpl{
func (m *sysMenuModelImpl) Insert(data entity.SysMenu) *entity.SysMenu {
err := global.Db.Table(m.table).Create(&data).Error
biz.ErrIsNil(err, "添加菜单失败")
//m.InitPaths(&data)
return &data
}

View File

@@ -1,3 +1,4 @@
package api
// ==========================================================================
// 生成日期:{{.CreatedAt}}
// 生成路径: apps/{{.PackageName}}/api/{{.TableName}}.go

View File

@@ -14,8 +14,15 @@ package entity
{{if $hasGTime -}}import "time"{{- end }}
type {{.ClassName}} struct {
{{range $index, $column := .Columns}}
{{if eq $column.IsPk "1"}} {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"primary_key;{{if eq $column.IsIncrement "1"}}AUTO_INCREMENT{{end}}" json:"{{$column.JsonField}}"` // {{$column.ColumnComment}} {{else}} {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}" {{if eq $column.IsRequired "1"}}binding:"required"{{end}}` // {{$column.ColumnComment}} {{end}}
{{- range $index, $column := .Columns}}
{{- if eq $column.IsPk "1" }}
{{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"primary_key;{{if eq $column.IsIncrement "1"}}AUTO_INCREMENT{{end}}" json:"{{$column.JsonField}}"` // {{$column.ColumnComment}}
{{- else if ne $column.LinkTableName ""}}
{{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}"`
{{$column.LinkTableClass}} {{$column.LinkTableClass}} `json:"{{$column.LinkTablePackage}}" gorm:"foreignKey:{{$column.LinkLabelName}};references:{{$column.GoField}};"`
{{- else }}
{{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}" {{if eq $column.IsRequired "1"}}binding:"required"{{- end }}` // {{$column.ColumnComment}}
{{- end -}}
{{end}}
}

View File

@@ -108,6 +108,9 @@ func (m *{{.BusinessName}}ModelImpl) FindListPage(page, pageSize int, data entit
{{- if eq $column.ColumnName "delete_time" }}
db.Where("delete_time IS NULL")
{{- end -}}
{{- if ne $column.LinkTableName "" }}
db.Preload("{{$column.LinkTableClass}}")
{{- end -}}
{{- end}}
err := db.Count(&total).Error
err = db.Order("create_time").Limit(pageSize).Offset(offset).Find(&list).Error