autoCode.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package autoCodeModel
  2. import (
  3. "gin-vue-admin/tools"
  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. type Dictionary struct {
  21. Label string `json:"label"`
  22. Value string `json:"value"`
  23. }
  24. func (a *AutoCodeStruct) CreateTemp() (err error) {
  25. basePath := "./tpl"
  26. modelTmpl, err := template.ParseFiles(basePath + "/te/model.go.tpl")
  27. if err != nil {
  28. return err
  29. }
  30. apiTmpl, err := template.ParseFiles(basePath + "/te/api.go.tpl")
  31. if err != nil {
  32. return err
  33. }
  34. routerTmpl, err := template.ParseFiles(basePath + "/te/router.go.tpl")
  35. if err != nil {
  36. return err
  37. }
  38. feapiTmpl, err := template.ParseFiles(basePath + "/fe/api.js.tpl")
  39. if err != nil {
  40. return err
  41. }
  42. readmeTmpl, err := template.ParseFiles(basePath + "/readme.txt.tpl")
  43. if err != nil {
  44. return err
  45. }
  46. //自动化总目录
  47. _autoCode := "./autoCode/"
  48. //自动化后台代码目录
  49. _te := "./autoCode/te/"
  50. _dir := _te + a.PackageName
  51. _modeldir := _te + a.PackageName + "/model"
  52. _apidir := _te + a.PackageName + "/api"
  53. _routerdir := _te + a.PackageName + "/router"
  54. //自动化前台代码目录
  55. _fe := "./autoCode/fe/"
  56. _fe_dir := _fe + a.PackageName
  57. _fe_apidir := _fe + a.PackageName + "/api"
  58. err = createDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _fe, _fe_dir, _fe_apidir)
  59. if err != nil {
  60. return err
  61. }
  62. model, err := os.OpenFile(_te+a.PackageName+"/model/model.go", os.O_CREATE|os.O_WRONLY, 0755)
  63. if err != nil {
  64. return err
  65. }
  66. api, err := os.OpenFile(_te+a.PackageName+"/api/api.go", os.O_CREATE|os.O_WRONLY, 0755)
  67. if err != nil {
  68. return err
  69. }
  70. router, err := os.OpenFile(_te+a.PackageName+"/router/router.go", os.O_CREATE|os.O_WRONLY, 0755)
  71. if err != nil {
  72. return err
  73. }
  74. feapi, err := os.OpenFile(_fe+a.PackageName+"/api/api.js", os.O_CREATE|os.O_WRONLY, 0755)
  75. if err != nil {
  76. return err
  77. }
  78. readme, err := os.OpenFile(_autoCode+"readme.txt", os.O_CREATE|os.O_WRONLY, 0755)
  79. if err != nil {
  80. return err
  81. }
  82. // 生成代码
  83. {
  84. err = modelTmpl.Execute(model, a)
  85. if err != nil {
  86. return err
  87. }
  88. err = apiTmpl.Execute(api, a)
  89. if err != nil {
  90. return err
  91. }
  92. err = routerTmpl.Execute(router, a)
  93. if err != nil {
  94. return err
  95. }
  96. err = feapiTmpl.Execute(feapi, a)
  97. if err != nil {
  98. return err
  99. }
  100. err = readmeTmpl.Execute(readme, a)
  101. if err != nil {
  102. return err
  103. }
  104. }
  105. model.Close()
  106. api.Close()
  107. router.Close()
  108. feapi.Close()
  109. readme.Close()
  110. fileList := []string{
  111. _te + a.PackageName + "/model/model.go",
  112. _te + a.PackageName + "/api/api.go",
  113. _te + a.PackageName + "/router/router.go",
  114. _fe + a.PackageName + "/api/api.js",
  115. _autoCode + "readme.txt",
  116. }
  117. err = tools.ZipFiles("./ginvueadmin.zip", fileList, ".", ".")
  118. if err != nil {
  119. return err
  120. }
  121. err = os.RemoveAll(_autoCode)
  122. if err != nil {
  123. return err
  124. }
  125. return nil
  126. }
  127. //批量创建文件夹
  128. func createDir(dirs ...string) (err error) {
  129. for _, v := range dirs {
  130. exist, err := tools.PathExists(v)
  131. if err != nil {
  132. //log.L.Info(fmt.Sprintf("get dir error![%v]\n", err))
  133. return err
  134. }
  135. if exist {
  136. //log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir))
  137. } else {
  138. //log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir))
  139. // 创建文件夹
  140. err = os.Mkdir(v, os.ModePerm)
  141. if err != nil {
  142. //log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err))
  143. } else {
  144. //log.L.Info("mkdir success!\n")
  145. }
  146. }
  147. }
  148. return err
  149. }