service.go.template 10 KB

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