gen_table.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package admin
  2. import (
  3. "gfast/app/model/admin/gen_table"
  4. "gfast/app/service/admin/gen_service"
  5. "gfast/app/service/admin/user_service"
  6. "gfast/library/response"
  7. "github.com/gogf/gf/encoding/gjson"
  8. "github.com/gogf/gf/frame/g"
  9. "github.com/gogf/gf/net/ghttp"
  10. "github.com/gogf/gf/os/gview"
  11. "github.com/gogf/gf/text/gregex"
  12. "github.com/gogf/gf/text/gstr"
  13. "github.com/gogf/gf/util/gconv"
  14. "github.com/gogf/gf/util/gvalid"
  15. "strings"
  16. )
  17. type Gen struct{}
  18. // @Summary 查询数据库列表
  19. // @Description 查询数据库列表
  20. // @Tags 系统工具
  21. // @Param data body gen_table.SelectPageReq true "data"
  22. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  23. // @Router /system/tools/gen/dataList [get]
  24. // @Security
  25. func (c *Gen) DataList(r *ghttp.Request) {
  26. var req *gen_table.SelectPageReq
  27. //获取参数
  28. if err := r.Parse(&req); err != nil {
  29. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  30. }
  31. total, list, err := gen_service.SelectDbTableList(req)
  32. if err != nil {
  33. response.FailJson(true, r, err.Error())
  34. }
  35. response.SusJson(true, r, "ok", g.Map{
  36. "total": total,
  37. "list": list,
  38. })
  39. }
  40. // @Summary 表列表
  41. // @Description 表列表
  42. // @Tags 系统工具
  43. // @Param data body gen_table.SelectPageReq true "data"
  44. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  45. // @Router /system/tools/gen/tableList [post]
  46. // @Security
  47. func (c *Gen) TableList(r *ghttp.Request) {
  48. var req *gen_table.SelectPageReq
  49. //获取参数
  50. if err := r.Parse(&req); err != nil {
  51. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  52. }
  53. total, list, err := gen_service.SelectListByPage(req)
  54. if err != nil {
  55. response.FailJson(true, r, err.Error())
  56. }
  57. response.SusJson(true, r, "ok", g.Map{
  58. "total": total,
  59. "list": list,
  60. })
  61. }
  62. // @Summary 导入表结构操作
  63. // @Description 导入表结构操作
  64. // @Tags 系统工具
  65. // @Param tables body string true "tables"
  66. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  67. // @Router /system/tools/gen/importTableSave [post]
  68. // @Security
  69. func (c *Gen) ImportTableSave(r *ghttp.Request) {
  70. tables := r.GetString("tables")
  71. if tables == "" {
  72. response.FailJson(true, r, "请选择要导入的表格")
  73. }
  74. user := user_service.GetLoginAdminInfo(r)
  75. operName := user.UserName
  76. tableArr := strings.Split(tables, ",")
  77. tableList, err := gen_service.SelectDbTableListByNames(tableArr)
  78. if err != nil {
  79. response.FailJson(true, r, err.Error())
  80. }
  81. if tableList == nil {
  82. response.FailJson(true, r, "表信息不存在")
  83. }
  84. err = gen_service.ImportGenTable(tableList, operName)
  85. if err != nil {
  86. response.FailJson(true, r, err.Error())
  87. }
  88. response.SusJson(true, r, "导入数据表成功")
  89. }
  90. // @Summary 根据表格ID获取表格字段列表数据
  91. // @Description 根据表格ID获取表格字段列表数据
  92. // @Tags 系统工具
  93. // @Param tableId body integer true "tableId"
  94. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  95. // @Router /system/tools/gen/columnList [post]
  96. // @Security
  97. func (c *Gen) ColumnList(r *ghttp.Request) {
  98. tableId := r.GetInt64("tableId")
  99. if tableId == 0 {
  100. response.FailJson(true, r, "参数错误")
  101. }
  102. list, err := gen_service.SelectGenTableColumnListByTableId(tableId)
  103. if err != nil {
  104. response.FailJson(true, r, err.Error())
  105. }
  106. var tableInfo *gen_table.Entity
  107. var tableMap g.Map
  108. tableInfo, err = gen_service.GetTableInfoByTableId(tableId)
  109. tableMap = gconv.Map(tableInfo)
  110. //如果是树表则设置树表配置
  111. if tableInfo != nil && tableInfo.TplCategory == "tree" {
  112. options := gjson.New(tableInfo.Options)
  113. tableMap["tree_code"] = options.Get("tree_code")
  114. tableMap["tree_parent_code"] = options.Get("tree_parent_code")
  115. tableMap["tree_name"] = options.Get("tree_name")
  116. }
  117. res := g.Map{
  118. "rows": list,
  119. "info": tableMap,
  120. }
  121. response.SusJson(true, r, "ok", res)
  122. }
  123. // @Summary 编辑表格信息
  124. // @Description 编辑表格信息
  125. // @Tags 系统工具
  126. // @Param data body gen_table.EditReq true "data"
  127. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  128. // @Router /system/tools/gen/editSave [post]
  129. // @Security
  130. func (c *Gen) EditSave(r *ghttp.Request) {
  131. var req *gen_table.EditReq
  132. //获取参数
  133. if err := r.Parse(&req); err != nil {
  134. response.FailJson(true, r, err.(*gvalid.Error).FirstString())
  135. }
  136. userInfo := user_service.GetLoginAdminInfo(r)
  137. req.UserName = userInfo.UserName
  138. err := gen_service.SaveEdit(req)
  139. if err != nil {
  140. response.FailJson(true, r, err.Error())
  141. }
  142. response.SusJson(true, r, "设置成功")
  143. }
  144. // @Summary 删除表格数据
  145. // @Description 删除表格数据
  146. // @Tags 系统工具
  147. // @Param ids body integer true "ids[1,2,3...]"
  148. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  149. // @Router /system/tools/gen/delete [delete]
  150. // @Security
  151. func (c *Gen) Delete(r *ghttp.Request) {
  152. ids := r.GetInts("ids")
  153. if len(ids) == 0 {
  154. response.FailJson(true, r, "参数错误")
  155. }
  156. err := gen_service.Delete(ids)
  157. if err != nil {
  158. response.FailJson(true, r, err.Error())
  159. }
  160. response.SusJson(true, r, "删除成功")
  161. }
  162. // @Summary 代码生成预览
  163. // @Description 代码生成预览
  164. // @Tags 系统工具
  165. // @Param tableId body integer true "tableId"
  166. // @Success 0 {object} response.Response "{"code": 200, "data": [...]}"
  167. // @Router /system/tools/gen/preview [post]
  168. // @Security
  169. func (c *Gen) Preview(r *ghttp.Request) {
  170. tableId := r.GetInt64("tableId")
  171. if tableId == 0 {
  172. response.FailJson(true, r, "参数错误")
  173. }
  174. entity, err := gen_service.SelectRecordById(tableId)
  175. if err != nil {
  176. response.FailJson(true, r, err.Error())
  177. }
  178. if entity == nil {
  179. response.FailJson(true, r, "表格数据不存在")
  180. }
  181. gen_service.SetPkColumn(entity, entity.Columns)
  182. controllerKey := "vm/go/" + entity.BusinessName + "_controller.go.vm"
  183. controllerValue := ""
  184. serviceKey := "vm/go/" + entity.BusinessName + "_service.go.vm"
  185. serviceValue := ""
  186. modelKey := "vm/go/" + entity.BusinessName + "_model.go.vm"
  187. modelValue := ""
  188. apiJsKey := "vm/html/" + entity.BusinessName + "_api.js.vm"
  189. apiJsValue := ""
  190. vueKey := "vm/html/" + entity.BusinessName + "_vue.js.vm"
  191. vueValue := ""
  192. view := gview.New()
  193. view.BindFuncMap(g.Map{
  194. "UcFirst": func(str string) string {
  195. return gstr.UcFirst(str)
  196. },
  197. "add": func(a, b int) int {
  198. return a + b
  199. },
  200. })
  201. view.SetConfigWithMap(g.Map{
  202. "Paths": []string{"template"},
  203. "Delimiters": []string{"{{", "}}"},
  204. })
  205. //树形菜单选项
  206. var options g.Map
  207. if entity.TplCategory == "tree" {
  208. options = gjson.New(entity.Options).ToMap()
  209. }
  210. if tmpController, err := view.Parse("vm/go/"+entity.TplCategory+"/controller.template", g.Map{"table": entity}); err == nil {
  211. controllerValue = tmpController
  212. }
  213. if tmpService, err := view.Parse("vm/go/"+entity.TplCategory+"/service.template", g.Map{"table": entity, "options": options}); err == nil {
  214. serviceValue = tmpService
  215. }
  216. if tmpModel, err := view.Parse("vm/go/"+entity.TplCategory+"/model.template", g.Map{"table": entity}); err == nil {
  217. modelValue = tmpModel
  218. modelValue, err = c.trimBreak(modelValue)
  219. }
  220. if tmpJs, err := view.Parse("vm/html/js.template", g.Map{"table": entity}); err == nil {
  221. apiJsValue = tmpJs
  222. }
  223. if tmpVue, err := view.Parse("vm/html/vue_"+entity.TplCategory+".template", g.Map{"table": entity, "options": options}); err == nil {
  224. vueValue = tmpVue
  225. vueValue, err = c.trimBreak(vueValue)
  226. }
  227. response.SusJson(true, r, "ok", g.Map{
  228. modelKey: modelValue,
  229. serviceKey: serviceValue,
  230. controllerKey: controllerValue,
  231. apiJsKey: apiJsValue,
  232. vueKey: vueValue,
  233. })
  234. }
  235. //剔除多余的换行
  236. func (c *Gen) trimBreak(str string) (s string, err error) {
  237. var b []byte
  238. if b, err = gregex.Replace("(([\\s\t]*)\r?\n){2,}", []byte("$2\n"), []byte(str)); err == nil {
  239. s = gconv.String(b)
  240. }
  241. return
  242. }