controller_gen.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. {{$parentName := .data.Name}}
  50. {{range .data.Apis}}
  51. // {{CamelizeStr .Name true}}
  52. // @Title {{CamelizeStr .Name true}}
  53. // @Description {{.Desc}}
  54. // @Url {{$parentName}}/{{.Name}}
  55. {{range .ParamList -}}
  56. // @Param {{.Name}} {{.Type}} {{.Must}} "{{.Desc}}"
  57. {{end -}}
  58. // @Success 200 {object} sysReturn
  59. // @Failure 403 :id is empty
  60. // @router /{{.Name}} [{{.Method}}]
  61. func (c *{{$dataName}}Controller) {{CamelizeStr .Name true}}(ctx *gin.Context) {
  62. //
  63. db:=c.apiengine.BusinessOrmEngine[ctx.GetString("domain")]
  64. partial.{{$dataName}}_{{CamelizeStr .Name true}}(&entitys.CtrlContext{c.apiengine, ctx, db, c.apiengine.PlatformOrmEngine})
  65. }
  66. {{end}}
  67. `
  68. func GenController(templateData interface{}, params map[string]interface{}) ([]byte, error) {
  69. return utils.GenTemplate(controllerTemplate, templateData, params)
  70. }
  71. func GenPartial(templateData interface{}, params map[string]interface{}) ([]byte, error) {
  72. return utils.GenTemplate(partialTemplate, templateData, params)
  73. }
  74. const partialTemplate = `
  75. package partial
  76. import (
  77. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  78. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  79. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  80. "{{.app.ApplicationName}}/models"
  81. //__import_packages__
  82. )
  83. {{$parentName := .data.Name}}
  84. {{$dataName := CamelizeStr .data.Name true}}
  85. {{range .data.Apis}}
  86. // _{{CamelizeStr .Name true}}
  87. // @Title _{{CamelizeStr .Name true}}
  88. // @Description {{.Desc}}
  89. {{range $i, $v := .ParamList -}}
  90. // @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}}"
  91. {{end -}}
  92. // @Success 200 {object} Account
  93. // @Failure 403 :id is empty
  94. func {{$dataName}}_{{CamelizeStr .Name true}}(c *entitys.CtrlContext) {
  95. {{if eq .Function "add"}}
  96. var bean models.{{$dataName}}
  97. if err := c.Ctx.ShouldBindJSON(&bean); err != nil {
  98. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  99. return
  100. }
  101. userId := c.Ctx.GetString("user_id")
  102. bean.CreateBy = userId
  103. bean.CreateTime = sysmodel.NowLocal()
  104. bean.LastUpdateBy = userId
  105. bean.LastUpdateTime = sysmodel.NowLocal()
  106. bean.DelFlag = 0
  107. _, err := c.Db.Insert(&bean)
  108. if err == nil {
  109. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", bean.Id})
  110. } else {
  111. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  112. }
  113. {{else if eq .Function "update"}}
  114. var bean models.{{$dataName}}
  115. if err := c.Ctx.ShouldBindJSON(&bean); err != nil {
  116. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  117. return
  118. }
  119. userId := c.Ctx.GetString("user_id")
  120. bean.LastUpdateBy = userId
  121. bean.LastUpdateTime = sysmodel.NowLocal()
  122. _, err := c.Db.ID(bean.Id).Update(&bean)
  123. if err != nil {
  124. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  125. return
  126. }
  127. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", bean.Id})
  128. {{else if eq .Function "delete"}}
  129. var paramObj0 []models.Id
  130. c.Ctx.BindJSON(&paramObj0)
  131. ret := __none_func_{{$parentName}}__(paramObj0)
  132. if ret {
  133. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  134. }else{
  135. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  136. }
  137. {{else if eq .Function "page"}}
  138. // 需要引用apiengine v1.1.8版本
  139. params := sysutils.GetPageParams(c, []sysutils.PageParam{
  140. {"page", "1"},
  141. {"rows", "10"},
  142. })
  143. // 根据业务需求对params进行处理
  144. if sysutils.CheckExport(c){
  145. // 进入导出模式,需要引用apiengine v1.1.8版本
  146. // 前端需要配合ExportButton插件
  147. exporter := sysutils.NewExcelExporterExt(c, params, "{{$parentName}}", "page")
  148. exporter.ExportExt()
  149. }else{
  150. // 查询模式
  151. result, err := sysutils.PageSearch(c.Db,"{{$parentName}}","{{.Name}}", "{{$parentName}}", params)
  152. if err == nil {
  153. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
  154. } else {
  155. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  156. }
  157. }
  158. {{else if eq .Function "tree"}}
  159. paramMap_i_t := map[string]interface{}{"sort": "name"}
  160. result, err := sysutils.TreeSearch(c.Db, "{{$parentName}}","{{.Name}}", "{{$parentName}}", paramMap_i_t)
  161. if err == nil {
  162. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
  163. } else {
  164. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  165. }
  166. {{else}}
  167. {{- range $i, $v := .ParamList}}
  168. {{- if Contains $v.Type "[]"}}
  169. var {{ParamName $i $v}} {{$v.Type}}
  170. c.Ctx.BindJSON(&{{ParamName $i $v}})
  171. {{- else if Contains $v.Ref "$"}}
  172. {{$refName := TrimPrefix $v.Ref "$" -}}
  173. {{if Contains $v.Ref " array" -}}
  174. var {{ParamName $i $v}} []models.{{CamelizeStr (TrimSuffix $refName " array") true}}
  175. {{- else -}}
  176. var {{ParamName $i $v}} models.{{CamelizeStr $refName true}}
  177. {{- end}}
  178. c.Ctx.BindJSON(&{{ParamName $i $v}})
  179. {{else}}
  180. {{$v.Name}} := c.Ctx.Query("{{$v.Name}}")
  181. {{- end}}
  182. {{- end}}
  183. ret := __none_func_{{$parentName}}__({{AllParams .ParamList}})
  184. if ret {
  185. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  186. }else{
  187. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  188. }
  189. {{end -}}
  190. }
  191. {{end}}
  192. func __none_func_{{$parentName}}__(params ... interface{}) bool{
  193. return true
  194. }
  195. `