service.go.tpl 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. {{- $db := "" }}
  2. {{- if eq .BusinessDB "" }}
  3. {{- $db = "global.GVA_DB" }}
  4. {{- else}}
  5. {{- $db = printf "global.MustGetGlobalDBByDBName(\"%s\")" .BusinessDB }}
  6. {{- end}}
  7. {{- if .IsAdd}}
  8. // Get{{.StructName}}InfoList 新增搜索语句
  9. {{- range .Fields}}
  10. {{- if .FieldSearchType}}
  11. {{- if or (eq .FieldType "enum") (eq .FieldType "pictures") (eq .FieldType "picture") (eq .FieldType "video") (eq .FieldType "json") }}
  12. if info.{{.FieldName}} != "" {
  13. {{- if or (eq .FieldType "enum") }}
  14. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+ {{ end }}*info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }})
  15. {{- else}}
  16. // 数据类型为复杂类型,请根据业务需求自行实现复杂类型的查询业务
  17. {{- end}}
  18. }
  19. {{- else if eq .FieldSearchType "BETWEEN" "NOT BETWEEN"}}
  20. if info.Start{{.FieldName}} != nil && info.End{{.FieldName}} != nil {
  21. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ? AND ? ",info.Start{{.FieldName}},info.End{{.FieldName}})
  22. }
  23. {{- else}}
  24. if info.{{.FieldName}} != nil{{- if eq .FieldType "string" }} && *info.{{.FieldName}} != ""{{- end }} {
  25. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}*info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }})
  26. }
  27. {{- end }}
  28. {{- end }}
  29. {{- end }}
  30. // Get{{.StructName}}InfoList 新增排序语句 请自行在搜索语句中添加orderMap内容
  31. {{- range .Fields}}
  32. {{- if .Sort}}
  33. orderMap["{{.ColumnName}}"] = true
  34. {{- end}}
  35. {{- end}}
  36. {{- if .HasDataSource }}
  37. // Get{{.StructName}}DataSource()方法新增关联语句
  38. {{range $key, $value := .DataSourceMap}}
  39. {{$key}} := make([]map[string]any, 0)
  40. {{ $dataDB := "" }}
  41. {{- if eq $value.DBName "" }}
  42. {{ $dataDB = $db }}
  43. {{- else}}
  44. {{ $dataDB = printf "global.MustGetGlobalDBByDBName(\"%s\")" $value.DBName }}
  45. {{- end}}
  46. {{$dataDB}}.Table("{{$value.Table}}"){{- if $value.HasDeletedAt}}.Where("deleted_at IS NULL"){{ end }}.Select("{{$value.Label}} as label,{{$value.Value}} as value").Scan(&{{$key}})
  47. res["{{$key}}"] = {{$key}}
  48. {{- end }}
  49. {{- end }}
  50. {{- else}}
  51. package {{.Package}}
  52. import (
  53. {{- if not .OnlyTemplate }}
  54. "context"
  55. "{{.Module}}/global"
  56. "{{.Module}}/model/{{.Package}}"
  57. {{- if not .IsTree}}
  58. {{.Package}}Req "{{.Module}}/model/{{.Package}}/request"
  59. {{- else }}
  60. "{{.Module}}/utils"
  61. "errors"
  62. {{- end }}
  63. {{- if .AutoCreateResource }}
  64. "gorm.io/gorm"
  65. {{- end}}
  66. {{- end }}
  67. )
  68. type {{.StructName}}Service struct {}
  69. {{- if not .OnlyTemplate }}
  70. // Create{{.StructName}} 创建{{.Description}}记录
  71. // Author [yourname](https://github.com/yourname)
  72. func ({{.Abbreviation}}Service *{{.StructName}}Service) Create{{.StructName}}(ctx context.Context, {{.Abbreviation}} *{{.Package}}.{{.StructName}}) (err error) {
  73. err = {{$db}}.Create({{.Abbreviation}}).Error
  74. return err
  75. }
  76. // Delete{{.StructName}} 删除{{.Description}}记录
  77. // Author [yourname](https://github.com/yourname)
  78. func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}(ctx context.Context, {{.PrimaryField.FieldJson}} string{{- if .AutoCreateResource -}},userID uint{{- end -}}) (err error) {
  79. {{- if .IsTree }}
  80. var count int64
  81. err = {{$db}}.Find(&{{.Package}}.{{.StructName}}{},"parent_id = ?",{{.PrimaryField.FieldJson}}).Count(&count).Error
  82. if count > 0 {
  83. return errors.New("此节点存在子节点不允许删除")
  84. }
  85. if err != nil {
  86. return err
  87. }
  88. {{- end }}
  89. {{- if .AutoCreateResource }}
  90. err = {{$db}}.Transaction(func(tx *gorm.DB) error {
  91. if err := tx.Model(&{{.Package}}.{{.StructName}}{}).Where("{{.PrimaryField.ColumnName}} = ?", {{.PrimaryField.FieldJson}}).Update("deleted_by", userID).Error; err != nil {
  92. return err
  93. }
  94. if err = tx.Delete(&{{.Package}}.{{.StructName}}{},"{{.PrimaryField.ColumnName}} = ?",{{.PrimaryField.FieldJson}}).Error; err != nil {
  95. return err
  96. }
  97. return nil
  98. })
  99. {{- else }}
  100. err = {{$db}}.Delete(&{{.Package}}.{{.StructName}}{},"{{.PrimaryField.ColumnName}} = ?",{{.PrimaryField.FieldJson}}).Error
  101. {{- end }}
  102. return err
  103. }
  104. // Delete{{.StructName}}ByIds 批量删除{{.Description}}记录
  105. // Author [yourname](https://github.com/yourname)
  106. func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}ByIds(ctx context.Context, {{.PrimaryField.FieldJson}}s []string {{- if .AutoCreateResource }},deleted_by uint{{- end}}) (err error) {
  107. {{- if .AutoCreateResource }}
  108. err = {{$db}}.Transaction(func(tx *gorm.DB) error {
  109. if err := tx.Model(&{{.Package}}.{{.StructName}}{}).Where("{{.PrimaryField.ColumnName}} in ?", {{.PrimaryField.FieldJson}}s).Update("deleted_by", deleted_by).Error; err != nil {
  110. return err
  111. }
  112. if err := tx.Where("{{.PrimaryField.ColumnName}} in ?", {{.PrimaryField.FieldJson}}s).Delete(&{{.Package}}.{{.StructName}}{}).Error; err != nil {
  113. return err
  114. }
  115. return nil
  116. })
  117. {{- else}}
  118. err = {{$db}}.Delete(&[]{{.Package}}.{{.StructName}}{},"{{.PrimaryField.ColumnName}} in ?",{{.PrimaryField.FieldJson}}s).Error
  119. {{- end}}
  120. return err
  121. }
  122. // Update{{.StructName}} 更新{{.Description}}记录
  123. // Author [yourname](https://github.com/yourname)
  124. func ({{.Abbreviation}}Service *{{.StructName}}Service)Update{{.StructName}}(ctx context.Context, {{.Abbreviation}} {{.Package}}.{{.StructName}}) (err error) {
  125. err = {{$db}}.Model(&{{.Package}}.{{.StructName}}{}).Where("{{.PrimaryField.ColumnName}} = ?",{{.Abbreviation}}.{{.PrimaryField.FieldName}}).Updates(&{{.Abbreviation}}).Error
  126. return err
  127. }
  128. // Get{{.StructName}} 根据{{.PrimaryField.FieldJson}}获取{{.Description}}记录
  129. // Author [yourname](https://github.com/yourname)
  130. func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}(ctx context.Context, {{.PrimaryField.FieldJson}} string) ({{.Abbreviation}} {{.Package}}.{{.StructName}}, err error) {
  131. err = {{$db}}.Where("{{.PrimaryField.ColumnName}} = ?", {{.PrimaryField.FieldJson}}).First(&{{.Abbreviation}}).Error
  132. return
  133. }
  134. {{- if .IsTree }}
  135. // Get{{.StructName}}InfoList 分页获取{{.Description}}记录,Tree模式下不添加分页和搜索
  136. // Author [yourname](https://github.com/yourname)
  137. func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoList(ctx context.Context) (list []*{{.Package}}.{{.StructName}},err error) {
  138. // 创建db
  139. db := {{$db}}.Model(&{{.Package}}.{{.StructName}}{})
  140. var {{.Abbreviation}}s []*{{.Package}}.{{.StructName}}
  141. err = db.Find(&{{.Abbreviation}}s).Error
  142. return utils.BuildTree({{.Abbreviation}}s), err
  143. }
  144. {{- else }}
  145. // Get{{.StructName}}InfoList 分页获取{{.Description}}记录
  146. // Author [yourname](https://github.com/yourname)
  147. func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoList(ctx context.Context, info {{.Package}}Req.{{.StructName}}Search) (list []{{.Package}}.{{.StructName}}, total int64, err error) {
  148. limit := info.PageSize
  149. offset := info.PageSize * (info.Page - 1)
  150. // 创建db
  151. db := {{$db}}.Model(&{{.Package}}.{{.StructName}}{})
  152. var {{.Abbreviation}}s []{{.Package}}.{{.StructName}}
  153. // 如果有条件搜索 下方会自动创建搜索语句
  154. {{- if .GvaModel }}
  155. if info.StartCreatedAt !=nil && info.EndCreatedAt !=nil {
  156. db = db.Where("created_at BETWEEN ? AND ?", info.StartCreatedAt, info.EndCreatedAt)
  157. }
  158. {{- end }}
  159. {{- range .Fields}}
  160. {{- if .FieldSearchType}}
  161. {{- if or (eq .FieldType "enum") (eq .FieldType "pictures") (eq .FieldType "picture") (eq .FieldType "video") (eq .FieldType "json") }}
  162. if info.{{.FieldName}} != "" {
  163. {{- if or (eq .FieldType "enum")}}
  164. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+ {{ end }}*info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }})
  165. {{- else}}
  166. // 数据类型为复杂类型,请根据业务需求自行实现复杂类型的查询业务
  167. {{- end}}
  168. }
  169. {{- else if eq .FieldSearchType "BETWEEN" "NOT BETWEEN"}}
  170. if info.Start{{.FieldName}} != nil && info.End{{.FieldName}} != nil {
  171. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ? AND ? ",info.Start{{.FieldName}},info.End{{.FieldName}})
  172. }
  173. {{- else}}
  174. if info.{{.FieldName}} != nil{{- if eq .FieldType "string" }} && *info.{{.FieldName}} != ""{{- end }} {
  175. db = db.Where("{{.ColumnName}} {{.FieldSearchType}} ?",{{if eq .FieldSearchType "LIKE"}}"%"+{{ end }}*info.{{.FieldName}}{{if eq .FieldSearchType "LIKE"}}+"%"{{ end }})
  176. }
  177. {{- end }}
  178. {{- end }}
  179. {{- end }}
  180. err = db.Count(&total).Error
  181. if err!=nil {
  182. return
  183. }
  184. {{- if .NeedSort}}
  185. var OrderStr string
  186. orderMap := make(map[string]bool)
  187. {{- range .Fields}}
  188. {{- if .Sort}}
  189. orderMap["{{.ColumnName}}"] = true
  190. {{- end}}
  191. {{- end}}
  192. if orderMap[info.Sort] {
  193. OrderStr = info.Sort
  194. if info.Order == "descending" {
  195. OrderStr = OrderStr + " desc"
  196. }
  197. db = db.Order(OrderStr)
  198. }
  199. {{- end}}
  200. if limit != 0 {
  201. db = db.Limit(limit).Offset(offset)
  202. }
  203. err = db.Find(&{{.Abbreviation}}s).Error
  204. return {{.Abbreviation}}s, total, err
  205. }
  206. {{- end }}
  207. {{- if .HasDataSource }}
  208. func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}DataSource(ctx context.Context) (res map[string][]map[string]any, err error) {
  209. res = make(map[string][]map[string]any)
  210. {{range $key, $value := .DataSourceMap}}
  211. {{$key}} := make([]map[string]any, 0)
  212. {{ $dataDB := "" }}
  213. {{- if eq $value.DBName "" }}
  214. {{ $dataDB = $db }}
  215. {{- else}}
  216. {{ $dataDB = printf "global.MustGetGlobalDBByDBName(\"%s\")" $value.DBName }}
  217. {{- end}}
  218. {{$dataDB}}.Table("{{$value.Table}}"){{- if $value.HasDeletedAt}}.Where("deleted_at IS NULL"){{ end }}.Select("{{$value.Label}} as label,{{$value.Value}} as value").Scan(&{{$key}})
  219. res["{{$key}}"] = {{$key}}
  220. {{- end }}
  221. return
  222. }
  223. {{- end }}
  224. {{- end }}
  225. func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}Public(ctx context.Context) {
  226. // 此方法为获取数据源定义的数据
  227. // 请自行实现
  228. }
  229. {{- end }}