sys_auto_code.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package model
  2. import (
  3. "gin-vue-admin/utils"
  4. "html/template"
  5. "os"
  6. )
  7. // 初始版本自动化代码工具
  8. type AutoCodeStruct struct {
  9. StructName string `json:"structName"`
  10. PackageName string `json:"packageName"`
  11. Abbreviation string `json:"abbreviation"`
  12. Fields []Field `json:"fields"`
  13. }
  14. type Field struct {
  15. FieldName string `json:"fieldName"`
  16. FieldType string `json:"fieldType"`
  17. FieldJson string `json:"fieldJson"`
  18. ColumnName string `json:"columnName"`
  19. }
  20. // @title CreateTemp
  21. // @description 函数的详细描述
  22. // @auth (2020/04/05 20:22 )
  23. // @param newPassword string
  24. // @return err error
  25. func (a *AutoCodeStruct) CreateTemp() (err error) {
  26. basePath := "./template"
  27. modelTmpl, err := template.ParseFiles(basePath + "/te/model.go.tpl")
  28. if err != nil {
  29. return err
  30. }
  31. apiTmpl, err := template.ParseFiles(basePath + "/te/api.go.tpl")
  32. if err != nil {
  33. return err
  34. }
  35. routerTmpl, err := template.ParseFiles(basePath + "/te/router.go.tpl")
  36. if err != nil {
  37. return err
  38. }
  39. feapiTmpl, err := template.ParseFiles(basePath + "/fe/api.js.tpl")
  40. if err != nil {
  41. return err
  42. }
  43. readmeTmpl, err := template.ParseFiles(basePath + "/readme.txt.tpl")
  44. if err != nil {
  45. return err
  46. }
  47. //自动化总目录
  48. _autoCode := "./autoCode/"
  49. //自动化后台代码目录
  50. _te := "./autoCode/te/"
  51. _dir := _te + a.PackageName
  52. _modeldir := _te + a.PackageName + "/model"
  53. _apidir := _te + a.PackageName + "/api"
  54. _routerdir := _te + a.PackageName + "/router"
  55. //自动化前台代码目录
  56. _fe := "./autoCode/fe/"
  57. _fe_dir := _fe + a.PackageName
  58. _fe_apidir := _fe + a.PackageName + "/api"
  59. err = createDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _fe, _fe_dir, _fe_apidir)
  60. if err != nil {
  61. return err
  62. }
  63. model, err := os.OpenFile(_te+a.PackageName+"/model/model.go", os.O_CREATE|os.O_WRONLY, 0755)
  64. if err != nil {
  65. return err
  66. }
  67. api, err := os.OpenFile(_te+a.PackageName+"/api/api.go", os.O_CREATE|os.O_WRONLY, 0755)
  68. if err != nil {
  69. return err
  70. }
  71. router, err := os.OpenFile(_te+a.PackageName+"/router/router.go", os.O_CREATE|os.O_WRONLY, 0755)
  72. if err != nil {
  73. return err
  74. }
  75. feapi, err := os.OpenFile(_fe+a.PackageName+"/api/api.js", os.O_CREATE|os.O_WRONLY, 0755)
  76. if err != nil {
  77. return err
  78. }
  79. readme, err := os.OpenFile(_autoCode+"readme.txt", os.O_CREATE|os.O_WRONLY, 0755)
  80. if err != nil {
  81. return err
  82. }
  83. // 生成代码
  84. {
  85. err = modelTmpl.Execute(model, a)
  86. if err != nil {
  87. return err
  88. }
  89. err = apiTmpl.Execute(api, a)
  90. if err != nil {
  91. return err
  92. }
  93. err = routerTmpl.Execute(router, a)
  94. if err != nil {
  95. return err
  96. }
  97. err = feapiTmpl.Execute(feapi, a)
  98. if err != nil {
  99. return err
  100. }
  101. err = readmeTmpl.Execute(readme, a)
  102. if err != nil {
  103. return err
  104. }
  105. }
  106. _ = model.Close()
  107. _ = api.Close()
  108. _ = router.Close()
  109. _ = feapi.Close()
  110. _ = readme.Close()
  111. fileList := []string{
  112. _te + a.PackageName + "/model/model.go",
  113. _te + a.PackageName + "/api/api.go",
  114. _te + a.PackageName + "/router/router.go",
  115. _fe + a.PackageName + "/api/api.js",
  116. _autoCode + "readme.txt",
  117. }
  118. err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", ".")
  119. if err != nil {
  120. return err
  121. }
  122. err = os.RemoveAll(_autoCode)
  123. if err != nil {
  124. return err
  125. }
  126. return nil
  127. }
  128. // @title createDir
  129. // @description 批量创建文件夹
  130. // @auth (2020/04/05 20:22 )
  131. // @param newPassword string
  132. // @return err error
  133. func createDir(dirs ...string) (err error) {
  134. for _, v := range dirs {
  135. exist, err := utils.PathExists(v)
  136. if err != nil {
  137. //log.L.Info(fmt.Sprintf("get dir error![%v]\n", err))
  138. return err
  139. }
  140. if exist {
  141. //log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir))
  142. } else {
  143. //log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir))
  144. // 创建文件夹
  145. err = os.Mkdir(v, os.ModePerm)
  146. if err != nil {
  147. //log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err))
  148. } else {
  149. //log.L.Info("mkdir success!\n")
  150. }
  151. }
  152. }
  153. return err
  154. }