service.go.tpl 8.0 KB

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