controller_gen.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package apigen
  2. import "git.qianqiusoft.com/qianqiusoft/light-apiengine-client/code_gen/utils"
  3. /*
  4. type XmlController struct {
  5. Name string `xml:"name,attr"`
  6. Desc string `xml:"desc,attr"`
  7. Dir string `xml:"dir,attr"`
  8. SkipLogin bool `xml:"skip_login,attr"`
  9. Apis []XmlApi `xml:"api"`
  10. ApplicationName string `xml:"-"`
  11. PackageName string `xml:"-"`
  12. }
  13. type XmlApi struct {
  14. Name string `xml:"name,attr"`
  15. Desc string `xml:"desc,attr"`
  16. Method string `xml:"method,attr"`
  17. Function string `xml:"function,attr"`//page,tree
  18. Table string `xml:"table,attr"`
  19. ParamList []XmlApiParam `xml:"param"`
  20. Return XmlReturn `xml:"return"`
  21. }
  22. type XmlApiParam struct {
  23. Name string `xml:"name,attr"`
  24. TransType string `xml:"trans-type,attr"`
  25. Type string `xml:"type,attr"`
  26. Desc string `xml:"desc,attr"`
  27. Ref string `xml:"ref,attr"`
  28. Must bool `xml:"must,attr"`
  29. DefaultValue string `xml:"default-value,attr"`
  30. }
  31. */
  32. const controllerTemplate = `
  33. package gen
  34. import (
  35. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  36. "github.com/gin-gonic/gin"
  37. "{{.app.ApplicationName}}/controllers/partial/{{.data.Dir}}"
  38. "git.qianqiusoft.com/qianqiusoft/light-apiengine/engine"
  39. )
  40. {{$dataName := CamelizeStr .data.Name true}}
  41. // {{$dataName}}Controller operations for {{$dataName}}
  42. type {{$dataName}}Controller struct {
  43. apiengine *engine.ApiEngine
  44. }
  45. func New{{$dataName}}Controller(e *engine.ApiEngine) *{{$dataName}}Controller {
  46. controller := &{{$dataName}}Controller{e}
  47. return controller
  48. }
  49. {{range .data.Apis}}
  50. // {{CamelizeStr .Name true}}
  51. // @Title {{CamelizeStr .Name true}}
  52. // @Description {{.Desc}}
  53. {{range .ParamList -}}
  54. // @Param {{.Name}} {{.Type}} {{.Must}} "{{.Desc}}"
  55. {{end -}}
  56. // @Success 200 {object} sysReturn
  57. // @Failure 403 :id is empty
  58. // @router /{{.Name}} [{{.Method}}]
  59. func (c *{{$dataName}}Controller) {{CamelizeStr .Name true}}(ctx *gin.Context) {
  60. //
  61. db:=c.apiengine.BusinessOrmEngine[ctx.GetString("domain")]
  62. partial.{{$dataName}}_{{CamelizeStr .Name true}}(&entitys.CtrlContext{c.apiengine, ctx, db, c.apiengine.PlatformOrmEngine})
  63. }
  64. {{end}}
  65. `
  66. func GenController(templateData interface{}, params map[string]interface{}) ([]byte, error) {
  67. return utils.GenTemplate(controllerTemplate, templateData, params)
  68. }
  69. func GenPartial(templateData interface{}, params map[string]interface{}) ([]byte, error) {
  70. return utils.GenTemplate(partialTemplate, templateData, params)
  71. }
  72. const partialTemplate = `
  73. package partial
  74. import (
  75. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  76. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  77. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  78. "{{.app.ApplicationName}}/models"
  79. //__import_packages__
  80. )
  81. {{$parentName := .data.Name}}
  82. {{$dataName := CamelizeStr .data.Name true}}
  83. {{range .data.Apis}}
  84. // _{{CamelizeStr .Name true}}
  85. // @Title _{{CamelizeStr .Name true}}
  86. // @Description {{.Desc}}
  87. {{range $i, $v := .ParamList -}}
  88. // @Param {{ParamName $i $v}} {{if ne $v.Type ""}}{{$v.Type}}{{else}}{{if Contains $v.Ref "$"}}models.{{CamelizeStr (TrimPrefix (TrimSuffix $v.Ref " array") "$") true}}{{end}}{{end}} {{$v.Must}} "{{$v.Desc}}"
  89. {{end -}}
  90. // @Success 200 {object} Account
  91. // @Failure 403 :id is empty
  92. func {{$dataName}}_{{CamelizeStr .Name true}}(c *entitys.CtrlContext) {
  93. {{if eq .Function "add"}}
  94. var bean models.{{$dataName}}
  95. if err := c.Ctx.ShouldBindJSON(&bean); err != nil {
  96. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  97. return
  98. }
  99. userId := c.Ctx.GetString("user_id")
  100. bean.CreateBy = userId
  101. bean.CreateTime = sysmodel.NowLocal()
  102. bean.LastUpdateBy = userId
  103. bean.LastUpdateTime = sysmodel.NowLocal()
  104. bean.DelFlag = 0
  105. _, err := c.Db.Insert(&bean)
  106. if err == nil {
  107. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", bean.Id})
  108. } else {
  109. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  110. }
  111. {{else if eq .Function "update"}}
  112. var bean models.{{$dataName}}
  113. if err := c.Ctx.ShouldBindJSON(&bean); err != nil {
  114. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  115. return
  116. }
  117. userId := c.Ctx.GetString("user_id")
  118. bean.LastUpdateBy = userId
  119. bean.LastUpdateTime = sysmodel.NowLocal()
  120. _, err := c.Db.ID(bean.Id).Update(&bean)
  121. if err != nil {
  122. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  123. return
  124. }
  125. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", bean.Id})
  126. {{else if eq .Function "delete"}}
  127. var paramObj0 []models.Id
  128. c.Ctx.BindJSON(&paramObj0)
  129. ret := __none_func_{{$parentName}}__(paramObj0)
  130. if ret {
  131. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  132. }else{
  133. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  134. }
  135. {{else if eq .Function "page"}}
  136. // 需要引用apiengine v1.1.8版本
  137. params := sysutils.GetPageParams(c, []sysutils.PageParam{
  138. {"page", "1"},
  139. {"rows", "10"},
  140. })
  141. // 根据业务需求对params进行处理
  142. if sysutils.CheckExport(c){
  143. // 进入导出模式,需要引用apiengine v1.1.8版本
  144. // 前端需要配合ExportButton插件
  145. exporter := sysutils.NewExcelExporterExt(c, params, "{{$parentName}}", "page")
  146. exporter.ExportExt()
  147. }else{
  148. // 查询模式
  149. result, err := sysutils.PageSearch(c.Db,"{{$parentName}}","{{.Name}}", "{{$parentName}}", params)
  150. if err == nil {
  151. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
  152. } else {
  153. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  154. }
  155. }
  156. {{else if eq .Function "tree"}}
  157. paramMap_i_t := map[string]interface{}{"sort": "name"}
  158. result, err := sysutils.TreeSearch(c.Db, "{{$parentName}}","{{.Name}}", "{{$parentName}}", paramMap_i_t)
  159. if err == nil {
  160. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
  161. } else {
  162. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  163. }
  164. {{else}}
  165. {{- range $i, $v := .ParamList}}
  166. {{- if Contains $v.Type "[]"}}
  167. var {{ParamName $i $v}} {{$v.Type}}
  168. c.Ctx.BindJSON(&{{ParamName $i $v}})
  169. {{- else if Contains $v.Ref "$"}}
  170. {{$refName := TrimPrefix $v.Ref "$" -}}
  171. {{if Contains $v.Ref " array" -}}
  172. var {{ParamName $i $v}} []models.{{CamelizeStr (TrimSuffix $refName " array") true}}
  173. {{- else -}}
  174. var {{ParamName $i $v}} models.{{CamelizeStr $refName true}}
  175. {{- end}}
  176. c.Ctx.BindJSON(&{{ParamName $i $v}})
  177. {{else}}
  178. {{$v.Name}} := c.Ctx.Query("{{$v.Name}}")
  179. {{- end}}
  180. {{- end}}
  181. ret := __none_func_{{$parentName}}__({{AllParams .ParamList}})
  182. if ret {
  183. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  184. }else{
  185. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  186. }
  187. {{end -}}
  188. }
  189. {{end}}
  190. func __none_func_{{$parentName}}__(params ... interface{}) bool{
  191. return true
  192. }
  193. `