Kaynağa Gözat

feat:优化自动代码段

songzhibin97 3 yıl önce
ebeveyn
işleme
a2cad44d16
1 değiştirilmiş dosya ile 64 ekleme ve 45 silme
  1. 64 45
      server/service/system/sys_auto_code.go

+ 64 - 45
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
+}