diff --git a/server/service/system/sys_auto_code.go b/server/service/system/sys_auto_code.go index 31178fdcf879694d331349e5295bbbd685104af3..0fb7a14309703c310f1918d40acbc022b2a0a91d 100644 --- a/server/service/system/sys_auto_code.go +++ b/server/service/system/sys_auto_code.go @@ -23,6 +23,52 @@ const ( basePath = "resource/template" ) +var injectionPaths []injectionMeta + +func Init() { + if len(injectionPaths) != 0 { + return + } + injectionPaths = []injectionMeta{ + { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go"), + funcName: "MysqlTables", + structNameF: "autocode.%s{},", + }, + { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go"), + funcName: "Routers", + structNameF: "autocodeRouter.Init%sRouter(PrivateGroup)", + }, + { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SApi, "enter.go"), + funcName: "ApiGroup", + structNameF: "%sApi", + }, + { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SRouter, "enter.go"), + funcName: "RouterGroup", + structNameF: "%sRouter", + }, + { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SService, "enter.go"), + funcName: "ServiceGroup", + structNameF: "%sService", + }, + } +} + +type injectionMeta struct { + path string + funcName string + structNameF string // 带格式化的 +} + type tplData struct { template *template.Template locationPath string @@ -142,6 +188,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc idBf.WriteString(";") } if autoCode.AutoMoveFile { // 判断是否需要自动转移 + Init() for index := range dataList { autoCodeService.addAutoMoveFile(&dataList[index]) } @@ -150,49 +197,10 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc return err } } - initializeGormFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go") - initializeRouterFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go") - initializeApiFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SApi, "enter.go") - - initializeAutoRouterFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SRouter, "enter.go") - initializeServiceFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SService, "enter.go") - - err = utils.AutoInjectionCode(initializeGormFilePath, "MysqlTables", "model."+autoCode.StructName+"{},") - if err != nil { - return err - } - err = utils.AutoInjectionCode(initializeRouterFilePath, "Routers", "router.Init"+autoCode.StructName+"Router(PrivateGroup)") - if err != nil { - return err - } - err = utils.AutoInjectionCode(initializeApiFilePath, "ApiGroup", autoCode.StructName+"Api") - if err != nil { - return err - } - err = utils.AutoInjectionCode(initializeAutoRouterFilePath, "RouterGroup", autoCode.StructName+"Router") - if err != nil { - return err - } - err = utils.AutoInjectionCode(initializeServiceFilePath, "ServiceGroup", autoCode.StructName+"Service") + err = injectionCode(autoCode.StructName, &injectionCodeMeta) if err != nil { - return err + return } - - injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeGormFilePath, "MysqlTables", "model."+autoCode.StructName+"{},")) - injectionCodeMeta.WriteString(";") - injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeRouterFilePath, "Routers", "router.Init"+autoCode.StructName+"Router(PrivateGroup)")) - injectionCodeMeta.WriteString(";") - injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeApiFilePath, "ApiGroup", autoCode.StructName+"Api")) - injectionCodeMeta.WriteString(";") - injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeAutoRouterFilePath, "RouterGroup", autoCode.StructName+"Router")) - injectionCodeMeta.WriteString(";") - injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeServiceFilePath, "ServiceGroup", autoCode.StructName+"Service")) - // 保存生成信息 for _, data := range dataList { if len(data.autoMoveFilePath) != 0 { @@ -202,11 +210,10 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc } if global.GVA_CONFIG.AutoCode.TransferRestart { - //go func() { - // _ = utils.Reload() - //}() + go func() { + _ = utils.Reload() + }() } - //return errors.New("创建代码成功并移动文件成功") } else { // 打包 if err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil { return err @@ -472,3 +479,15 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr } return dataList, fileList, needMkdir, err } + +// injectionCode 封装代码注入 +func injectionCode(structName string, bf *strings.Builder) error { + for _, meta := range injectionPaths { + code := fmt.Sprintf(meta.structNameF, structName) + if err := utils.AutoInjectionCode(meta.path, meta.funcName, code); err != nil { + return err + } + bf.WriteString(fmt.Sprintf("%s@%s@%s;", meta.path, meta.funcName, code)) + } + return nil +}