controller_gen.go 6.6 KB

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