411 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			411 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tools
 | ||
| 
 | ||
| import (
 | ||
| 	"bytes"
 | ||
| 	"fmt"
 | ||
| 	"go-admin/app/admin/service"
 | ||
| 	"go-admin/app/admin/service/dto"
 | ||
| 	"strconv"
 | ||
| 	"strings"
 | ||
| 	"text/template"
 | ||
| 	"time"
 | ||
| 
 | ||
| 	"github.com/gin-gonic/gin"
 | ||
| 	"github.com/go-admin-team/go-admin-core/sdk/api"
 | ||
| 	"github.com/go-admin-team/go-admin-core/sdk/config"
 | ||
| 	"github.com/go-admin-team/go-admin-core/sdk/pkg"
 | ||
| 
 | ||
| 	"go-admin/app/other/models/tools"
 | ||
| )
 | ||
| 
 | ||
| type Gen struct {
 | ||
| 	api.Api
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) Preview(c *gin.Context) {
 | ||
| 	e.Context = c
 | ||
| 	log := e.GetLogger()
 | ||
| 	table := tools.SysTables{}
 | ||
| 	id, err := pkg.StringToInt(c.Param("tableId"))
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("tableId接收失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	table.TableId = id
 | ||
| 	t1, err := template.ParseFiles("template/v4/model.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("model模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t2, err := template.ParseFiles("template/v4/no_actions/apis.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("api模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t3, err := template.ParseFiles("template/v4/js.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("js模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t4, err := template.ParseFiles("template/v4/vue.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("vue模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t5, err := template.ParseFiles("template/v4/no_actions/router_check_role.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("路由模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t6, err := template.ParseFiles("template/v4/dto.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("dto模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t7, err := template.ParseFiles("template/v4/no_actions/service.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("service模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	db, err := pkg.GetOrm(c)
 | ||
| 	if err != nil {
 | ||
| 		log.Errorf("get db connection error, %s", err.Error())
 | ||
| 		e.Error(500, err, fmt.Sprintf("数据库链接获取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	tab, _ := table.Get(db,false)
 | ||
| 	var b1 bytes.Buffer
 | ||
| 	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)
 | ||
| 
 | ||
| 	mp := make(map[string]interface{})
 | ||
| 	mp["template/model.go.template"] = b1.String()
 | ||
| 	mp["template/api.go.template"] = b2.String()
 | ||
| 	mp["template/js.go.template"] = b3.String()
 | ||
| 	mp["template/vue.go.template"] = b4.String()
 | ||
| 	mp["template/router.go.template"] = b5.String()
 | ||
| 	mp["template/dto.go.template"] = b6.String()
 | ||
| 	mp["template/service.go.template"] = b7.String()
 | ||
| 	e.OK(mp, "")
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) GenCode(c *gin.Context) {
 | ||
| 	e.Context = c
 | ||
| 	log := e.GetLogger()
 | ||
| 	table := tools.SysTables{}
 | ||
| 	id, err := pkg.StringToInt(c.Param("tableId"))
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("tableId参数接收失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	db, err := pkg.GetOrm(c)
 | ||
| 	if err != nil {
 | ||
| 		log.Errorf("get db connection error, %s", err.Error())
 | ||
| 		e.Error(500, err, fmt.Sprintf("数据库链接获取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	table.TableId = id
 | ||
| 	tab, _ := table.Get(db,false)
 | ||
| 
 | ||
| 	e.NOActionsGen(c, tab)
 | ||
| 
 | ||
| 	e.OK("", "Code generated successfully!")
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) GenApiToFile(c *gin.Context) {
 | ||
| 	e.Context = c
 | ||
| 	log := e.GetLogger()
 | ||
| 	table := tools.SysTables{}
 | ||
| 	id, err := pkg.StringToInt(c.Param("tableId"))
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("tableId参数获取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	db, err := pkg.GetOrm(c)
 | ||
| 	if err != nil {
 | ||
| 		log.Errorf("get db connection error, %s", err.Error())
 | ||
| 		e.Error(500, err, fmt.Sprintf("数据库链接获取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	table.TableId = id
 | ||
| 	tab, _ := table.Get(db,false)
 | ||
| 	e.genApiToFile(c, tab)
 | ||
| 
 | ||
| 	e.OK("", "Code generated successfully!")
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) NOActionsGen(c *gin.Context, tab tools.SysTables) {
 | ||
| 	e.Context = c
 | ||
| 	log := e.GetLogger()
 | ||
| 	tab.MLTBName = strings.Replace(tab.TBName, "_", "-", -1)
 | ||
| 
 | ||
| 	basePath := "template/v4/"
 | ||
| 	routerFile := basePath + "no_actions/router_check_role.go.template"
 | ||
| 
 | ||
| 	if tab.IsAuth == 2 {
 | ||
| 		routerFile = basePath + "no_actions/router_no_check_role.go.template"
 | ||
| 	}
 | ||
| 
 | ||
| 	t1, err := template.ParseFiles(basePath + "model.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("model模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t2, err := template.ParseFiles(basePath + "no_actions/apis.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("api模版读取失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t3, err := template.ParseFiles(routerFile)
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("路由模版失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t4, err := template.ParseFiles(basePath + "js.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("js模版解析失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t5, err := template.ParseFiles(basePath + "vue.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("vue模版解析失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t6, err := template.ParseFiles(basePath + "dto.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("dto模版解析失败失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	t7, err := template.ParseFiles(basePath + "no_actions/service.go.template")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("service模版失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	_ = pkg.PathCreate("./app/" + tab.PackageName + "/apis/")
 | ||
| 	_ = pkg.PathCreate("./app/" + tab.PackageName + "/models/")
 | ||
| 	_ = pkg.PathCreate("./app/" + tab.PackageName + "/router/")
 | ||
| 	_ = pkg.PathCreate("./app/" + tab.PackageName + "/service/dto/")
 | ||
| 	_ = pkg.PathCreate(config.GenConfig.FrontPath + "/api/" + tab.PackageName + "/")
 | ||
| 	err = pkg.PathCreate(config.GenConfig.FrontPath + "/views/" + tab.PackageName + "/" + tab.MLTBName + "/")
 | ||
| 	if err != nil {
 | ||
| 		log.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("views目录创建失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	var b1 bytes.Buffer
 | ||
| 	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)
 | ||
| 	pkg.FileCreate(b1, "./app/"+tab.PackageName+"/models/"+tab.TBName+".go")
 | ||
| 	pkg.FileCreate(b2, "./app/"+tab.PackageName+"/apis/"+tab.TBName+".go")
 | ||
| 	pkg.FileCreate(b3, "./app/"+tab.PackageName+"/router/"+tab.TBName+".go")
 | ||
| 	pkg.FileCreate(b4, config.GenConfig.FrontPath+"/api/"+tab.PackageName+"/"+tab.MLTBName+".js")
 | ||
| 	pkg.FileCreate(b5, config.GenConfig.FrontPath+"/views/"+tab.PackageName+"/"+tab.MLTBName+"/index.vue")
 | ||
| 	pkg.FileCreate(b6, "./app/"+tab.PackageName+"/service/dto/"+tab.TBName+".go")
 | ||
| 	pkg.FileCreate(b7, "./app/"+tab.PackageName+"/service/"+tab.TBName+".go")
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) genApiToFile(c *gin.Context, tab tools.SysTables) {
 | ||
| 	err := e.MakeContext(c).
 | ||
| 		MakeOrm().
 | ||
| 		Errors
 | ||
| 	if err != nil {
 | ||
| 		e.Logger.Error(err)
 | ||
| 		e.Error(500, err, err.Error())
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	basePath := "template/"
 | ||
| 
 | ||
| 	t1, err := template.ParseFiles(basePath + "api_migrate.template")
 | ||
| 	if err != nil {
 | ||
| 		e.Logger.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("数据迁移模版解析失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 	i := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
 | ||
| 	var b1 bytes.Buffer
 | ||
| 	err = t1.Execute(&b1, struct {
 | ||
| 		tools.SysTables
 | ||
| 		GenerateTime string
 | ||
| 	}{tab, i})
 | ||
| 
 | ||
| 	pkg.FileCreate(b1, "./cmd/migrate/migration/version-local/"+i+"_migrate.go")
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| func (e Gen) GenMenuAndApi(c *gin.Context) {
 | ||
| 	s := service.SysMenu{}
 | ||
| 	err := e.MakeContext(c).
 | ||
| 		MakeOrm().
 | ||
| 		MakeService(&s.Service).
 | ||
| 		Errors
 | ||
| 	if err != nil {
 | ||
| 		e.Logger.Error(err)
 | ||
| 		e.Error(500, err, err.Error())
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	table := tools.SysTables{}
 | ||
| 	id, err := pkg.StringToInt(c.Param("tableId"))
 | ||
| 	if err != nil {
 | ||
| 		e.Logger.Error(err)
 | ||
| 		e.Error(500, err, fmt.Sprintf("tableId参数解析失败!错误详情:%s", err.Error()))
 | ||
| 		return
 | ||
| 	}
 | ||
| 
 | ||
| 	table.TableId = id
 | ||
| 	tab, _ := table.Get(e.Orm,true)
 | ||
| 	tab.MLTBName = strings.Replace(tab.TBName, "_", "-", -1)
 | ||
| 
 | ||
| 	Mmenu := dto.SysMenuInsertReq{}
 | ||
| 	Mmenu.Title = tab.TableComment
 | ||
| 	Mmenu.Icon = "pass"
 | ||
| 	Mmenu.Path = "/" + tab.MLTBName
 | ||
| 	Mmenu.MenuType = "M"
 | ||
| 	Mmenu.Action = "无"
 | ||
| 	Mmenu.ParentId = 0
 | ||
| 	Mmenu.NoCache = false
 | ||
| 	Mmenu.Component = "Layout"
 | ||
| 	Mmenu.Sort = 0
 | ||
| 	Mmenu.Visible = "0"
 | ||
| 	Mmenu.IsFrame = "0"
 | ||
| 	Mmenu.CreateBy = 1
 | ||
| 	s.Insert(&Mmenu)
 | ||
| 
 | ||
| 	Cmenu := dto.SysMenuInsertReq{}
 | ||
| 	Cmenu.MenuName = tab.ClassName + "Manage"
 | ||
| 	Cmenu.Title = tab.TableComment
 | ||
| 	Cmenu.Icon = "pass"
 | ||
| 	Cmenu.Path = "/" + tab.PackageName + "/" + tab.MLTBName
 | ||
| 	Cmenu.MenuType = "C"
 | ||
| 	Cmenu.Action = "无"
 | ||
| 	Cmenu.Permission = tab.PackageName + ":" + tab.BusinessName + ":list"
 | ||
| 	Cmenu.ParentId = Mmenu.MenuId
 | ||
| 	Cmenu.NoCache = false
 | ||
| 	Cmenu.Component = "/" + tab.PackageName + "/" + tab.MLTBName + "/index"
 | ||
| 	Cmenu.Sort = 0
 | ||
| 	Cmenu.Visible = "0"
 | ||
| 	Cmenu.IsFrame = "0"
 | ||
| 	Cmenu.CreateBy = 1
 | ||
| 	Cmenu.UpdateBy = 1
 | ||
| 	s.Insert(&Cmenu)
 | ||
| 
 | ||
| 	MList := dto.SysMenuInsertReq{}
 | ||
| 	MList.MenuName = ""
 | ||
| 	MList.Title = "分页获取" + tab.TableComment
 | ||
| 	MList.Icon = ""
 | ||
| 	MList.Path = tab.TBName
 | ||
| 	MList.MenuType = "F"
 | ||
| 	MList.Action = "无"
 | ||
| 	MList.Permission = tab.PackageName + ":" + tab.BusinessName + ":query"
 | ||
| 	MList.ParentId = Cmenu.MenuId
 | ||
| 	MList.NoCache = false
 | ||
| 	MList.Sort = 0
 | ||
| 	MList.Visible = "0"
 | ||
| 	MList.IsFrame = "0"
 | ||
| 	MList.CreateBy = 1
 | ||
| 	MList.UpdateBy = 1
 | ||
| 	s.Insert(&MList)
 | ||
| 
 | ||
| 	MCreate := dto.SysMenuInsertReq{}
 | ||
| 	MCreate.MenuName = ""
 | ||
| 	MCreate.Title = "创建" + tab.TableComment
 | ||
| 	MCreate.Icon = ""
 | ||
| 	MCreate.Path = tab.TBName
 | ||
| 	MCreate.MenuType = "F"
 | ||
| 	MCreate.Action = "无"
 | ||
| 	MCreate.Permission = tab.PackageName + ":" + tab.BusinessName + ":add"
 | ||
| 	MCreate.ParentId = Cmenu.MenuId
 | ||
| 	MCreate.NoCache = false
 | ||
| 	MCreate.Sort = 0
 | ||
| 	MCreate.Visible = "0"
 | ||
| 	MCreate.IsFrame = "0"
 | ||
| 	MCreate.CreateBy = 1
 | ||
| 	MCreate.UpdateBy = 1
 | ||
| 	s.Insert(&MCreate)
 | ||
| 
 | ||
| 	MUpdate := dto.SysMenuInsertReq{}
 | ||
| 	MUpdate.MenuName = ""
 | ||
| 	MUpdate.Title = "修改" + tab.TableComment
 | ||
| 	MUpdate.Icon = ""
 | ||
| 	MUpdate.Path = tab.TBName
 | ||
| 	MUpdate.MenuType = "F"
 | ||
| 	MUpdate.Action = "无"
 | ||
| 	MUpdate.Permission = tab.PackageName + ":" + tab.BusinessName + ":edit"
 | ||
| 	MUpdate.ParentId = Cmenu.MenuId
 | ||
| 	MUpdate.NoCache = false
 | ||
| 	MUpdate.Sort = 0
 | ||
| 	MUpdate.Visible = "0"
 | ||
| 	MUpdate.IsFrame = "0"
 | ||
| 	MUpdate.CreateBy = 1
 | ||
| 	MUpdate.UpdateBy = 1
 | ||
| 	s.Insert(&MUpdate)
 | ||
| 
 | ||
| 	MDelete := dto.SysMenuInsertReq{}
 | ||
| 	MDelete.MenuName = ""
 | ||
| 	MDelete.Title = "删除" + tab.TableComment
 | ||
| 	MDelete.Icon = ""
 | ||
| 	MDelete.Path = tab.TBName
 | ||
| 	MDelete.MenuType = "F"
 | ||
| 	MDelete.Action = "无"
 | ||
| 	MDelete.Permission = tab.PackageName + ":" + tab.BusinessName + ":remove"
 | ||
| 	MDelete.ParentId = Cmenu.MenuId
 | ||
| 	MDelete.NoCache = false
 | ||
| 	MDelete.Sort = 0
 | ||
| 	MDelete.Visible = "0"
 | ||
| 	MDelete.IsFrame = "0"
 | ||
| 	MDelete.CreateBy = 1
 | ||
| 	MDelete.UpdateBy = 1
 | ||
| 	s.Insert(&MDelete)
 | ||
| 
 | ||
| 	e.OK("", "数据生成成功!")
 | ||
| }
 |