plug_ad.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package plug_ad
  2. import (
  3. "gfast/app/model/admin/plug_adtype"
  4. "github.com/gogf/gf/database/gdb"
  5. "github.com/gogf/gf/errors/gerror"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/os/gtime"
  8. )
  9. // AddReq 用于存储新增广告请求的请求参数
  10. type AddReq struct {
  11. AdName string `p:"adName" v:"required#名称不能为空"` // 广告名称
  12. AdAdtypeid int `p:"adAdtypeid"` // 所属位置
  13. AdCheckid int `p:"adCheckid"` // 1=图片 2=JS
  14. AdJs string `p:"adJs"` // JS代码
  15. AdPic string `p:"adPic"` // 广告图片URL
  16. AdUrl string `p:"adUrl"` // 广告链接
  17. AdContent string `p:"adContent"` // 广告文字内容
  18. AdSort int `p:"adSort"` // 排序
  19. AdOpen int `p:"adOpen"` // 1=审核 0=未审核
  20. }
  21. // EditReq 用于存储修改广告请求参数
  22. type EditReq struct {
  23. PlugAdID int64 `p:"plugAdID" v:"required|min:1#广告id不能为空|广告id参数错误"`
  24. AddReq
  25. }
  26. // SelectPageReq 用于存储分页查询广告的请求参数
  27. type SelectPageReq struct {
  28. AdName string `p:"adName"` // 广告名称
  29. PageNo int64 `p:"pageNum"` // 当前页
  30. PageSize int64 `p:"pageSize"` // 每页显示记录数
  31. }
  32. // 用于存储分页查询的数据
  33. type ListEntity struct {
  34. Entity
  35. AdTypeName string `orm:"adtype_name" json:"adtype_name" ` // 广告所属位置
  36. }
  37. // GetPlugAdByID 根据ID查询广告记录
  38. func GetPlugAdByID(id int64) (*Entity, error) {
  39. entity, err := Model.FindOne("ad_id", id)
  40. if err != nil {
  41. g.Log().Error(err)
  42. return nil, gerror.New("根据ID查询广告记录出错")
  43. }
  44. if entity == nil {
  45. return nil, gerror.New("根据ID未能查询到广告记录")
  46. }
  47. return entity, nil
  48. }
  49. // AddSave 添加广告
  50. func AddSave(req *AddReq) error {
  51. var entity Entity
  52. entity.AdName = req.AdName // 名称
  53. entity.AdAdtypeid = req.AdAdtypeid // 位置
  54. entity.AdCheckid = req.AdCheckid // 1=图片 2=JS
  55. entity.AdJs = req.AdJs // JS代码
  56. entity.AdPic = req.AdPic // 广告图片URL
  57. entity.AdUrl = req.AdUrl // 广告链接
  58. entity.AdContent = req.AdContent // 广告文字内容
  59. entity.AdAddtime = int(gtime.Timestamp()) // 时间戳
  60. entity.AdSort = req.AdSort // 排序
  61. entity.AdOpen = req.AdOpen // 1=审核 0=未审核
  62. // 保存实体
  63. _, err := entity.Insert()
  64. if err != nil {
  65. g.Log().Error(err)
  66. return gerror.New("添加广告记录入库失败")
  67. }
  68. return nil
  69. }
  70. // 批量删除广告记录
  71. func DeleteByIDs(ids []int) error {
  72. _, err := Model.Delete("ad_id in(?)", ids)
  73. if err != nil {
  74. g.Log().Error(err)
  75. return gerror.New("删除广告失败")
  76. }
  77. return nil
  78. }
  79. // 根据广告ID来修改广告信息
  80. func EditSave(editReq *EditReq) error {
  81. // 先根据ID来查询要修改的广告记录
  82. entity, err := GetPlugAdByID(editReq.PlugAdID)
  83. if err != nil {
  84. return err
  85. }
  86. // 修改实体
  87. entity.AdName = editReq.AdName
  88. entity.AdAdtypeid = editReq.AdAdtypeid
  89. entity.AdCheckid = editReq.AdCheckid
  90. entity.AdJs = editReq.AdJs
  91. entity.AdPic = editReq.AdPic
  92. entity.AdUrl = editReq.AdUrl
  93. entity.AdContent = editReq.AdContent
  94. entity.AdSort = editReq.AdSort
  95. entity.AdOpen = editReq.AdOpen
  96. _, err = Model.Save(entity)
  97. if err != nil {
  98. g.Log().Error(err)
  99. return gerror.New("修改广告失败")
  100. }
  101. return nil
  102. }
  103. // 分页查询,返回值total总记录数,page当前页
  104. func SelectListByPage(req *SelectPageReq) (total int, page int64, list []*ListEntity, err error) {
  105. model := g.DB().Table(Table + " ad")
  106. if req != nil {
  107. if req.AdName != "" {
  108. model.Where("ad.ad_name like ?", "%"+req.AdName+"%")
  109. }
  110. }
  111. model = model.LeftJoin(plug_adtype.Table+" type", "type.adtype_id=ad.ad_adtypeid")
  112. // 查询广告位总记录数(总行数)
  113. total, err = model.Count()
  114. if err != nil {
  115. g.Log().Error(err)
  116. err = gerror.New("获取总记录数失败")
  117. return 0, 0, nil, err
  118. }
  119. if req.PageNo == 0 {
  120. req.PageNo = 1
  121. }
  122. page = req.PageNo
  123. if req.PageSize == 0 {
  124. req.PageSize = 10
  125. }
  126. // 分页排序查询
  127. var res gdb.Result
  128. res, err = model.Fields("ad.*,type.adtype_name").Page(int(page), int(req.PageSize)).Order("ad.ad_sort asc,ad.ad_id asc").All()
  129. if err != nil {
  130. g.Log().Error(err)
  131. err = gerror.New("分页查询广告失败")
  132. return 0, 0, nil, err
  133. }
  134. err = res.Structs(&list)
  135. if err != nil {
  136. g.Log().Error(err)
  137. err = gerror.New("分页查询广告失败")
  138. return 0, 0, nil, err
  139. }
  140. return total, page, list, nil
  141. }
  142. // 获取size条状态为status的广告信息,优先按排序序号排序,其次按时间倒序(status 0停用 1正常)
  143. func GetSizeAd(size int, status int, typeId int) ([]*Entity, error) {
  144. model := Model
  145. model = model.Where("ad_open = ?", status)
  146. if typeId != 0 {
  147. model = model.Where("ad_adtypeid = ?", typeId)
  148. }
  149. entity, err := model.Order("ad_sort asc,ad_addtime desc").Limit(size).All()
  150. if err != nil {
  151. g.Log().Error(err)
  152. return nil, gerror.New("查询广告信息失败")
  153. }
  154. return entity, nil
  155. }