cms_news.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. // ============================================================================
  2. // This is auto-generated by gf cli tool only once. Fill this file as you wish.
  3. // ============================================================================
  4. package cms_news
  5. import (
  6. "gfast/app/model/admin/cms_category_news"
  7. "gfast/app/model/admin/user"
  8. "gfast/library/service"
  9. "gfast/library/utils"
  10. "github.com/gogf/gf/database/gdb"
  11. "github.com/gogf/gf/errors/gerror"
  12. "github.com/gogf/gf/frame/g"
  13. "github.com/gogf/gf/os/gtime"
  14. "github.com/gogf/gf/util/gconv"
  15. )
  16. // Fill with you ideas below.
  17. //添加文章参数
  18. type ReqAddParams struct {
  19. NewsStatus uint `p:"status" v:"in:0,1#状态只能为0或1"` // 状态;1:已发布;0:未发布;
  20. Attr []int `p:attr` //文章标记 置顶 推荐
  21. PublishedTime string `p:"published_time"` // 发布时间
  22. NewsTitle string `p:"title" v:"required#标题不能为空"` // post标题
  23. NewsKeywords string `p:"keywords"` // seo keywords
  24. NewsExcerpt string `p:"excerpt"` // post摘要
  25. NewsSource string `p:"source" ` // 转载文章的来源
  26. Thumbnail string `p:"thumbnail" ` // 缩略图
  27. IsJump uint `p:"IsJump" v:"in:0,1#跳转类型只能为0或1"` // 是否跳转地址
  28. JumpUrl string `p:"JumpUrl" v:"required-if:IsJump,1|url#跳转地址不能为空|跳转地址格式不正确"` // 跳转地址
  29. ModelForm g.Map `p:"modelForm"`
  30. }
  31. //文章搜索参数
  32. type ReqListSearchParams struct {
  33. CateId []int `p:"cateId"`
  34. PublishedTimeStart string `p:"pubTimeStart"`
  35. PublishedTimeEnd string `p:"pubTimeEnd"`
  36. KeyWords string `p:"keyWords"`
  37. PageNum int `p:"page"` //当前页码
  38. PageSize int `p:"pageSize"` //每页数
  39. }
  40. type ReqEditParams struct {
  41. Id int `p:"id" v:"integer|min:1#文章ID只能为整数|文章ID只能为正数"`
  42. ReqAddParams
  43. }
  44. //添加文章操作
  45. func AddNews(req *ReqAddParams, cateIds []int, userId uint64, tx *gdb.TX) (insId int64, err error) {
  46. if len(cateIds) == 0 {
  47. err = gerror.New("栏目不能为空")
  48. return
  49. }
  50. nowTime := gconv.Uint(gtime.Timestamp())
  51. entity := &Entity{
  52. UserId: gconv.Uint64(userId),
  53. NewsStatus: req.NewsStatus,
  54. CreateTime: nowTime,
  55. UpdateTime: nowTime,
  56. PublishedTime: gconv.Uint(utils.StrToTimestamp(req.PublishedTime)),
  57. NewsTitle: req.NewsTitle,
  58. NewsKeywords: req.NewsKeywords,
  59. NewsExcerpt: req.NewsExcerpt,
  60. NewsSource: req.NewsSource,
  61. Thumbnail: req.Thumbnail,
  62. IsJump: req.IsJump,
  63. JumpUrl: req.JumpUrl,
  64. }
  65. for _, v := range req.Attr {
  66. if v == 1 {
  67. entity.IsTop = 1
  68. } else if v == 2 {
  69. entity.Recommended = 1
  70. }
  71. }
  72. res, e := Model.TX(tx).Insert(entity)
  73. if e != nil {
  74. g.Log().Error(e)
  75. err = gerror.New("保存文章失败")
  76. return
  77. }
  78. insId, err = res.LastInsertId()
  79. if err != nil {
  80. g.Log().Error(err)
  81. err = gerror.New("添加文章失败")
  82. return
  83. }
  84. //保存栏目与文章关联信息
  85. catNewsEntity := make([]cms_category_news.Entity, len(cateIds))
  86. for k, cateId := range cateIds {
  87. catNewsEntity[k].CategoryId = gconv.Uint64(cateId)
  88. catNewsEntity[k].NewsId = gconv.Uint64(insId)
  89. }
  90. _, err = cms_category_news.Model.TX(tx).Data(catNewsEntity).Insert()
  91. if err != nil {
  92. g.Log().Error(err)
  93. err = gerror.New("设置文章栏目失败")
  94. return
  95. }
  96. return
  97. }
  98. //修改文章操作
  99. func EditNews(req *ReqEditParams, cateIds []int, tx *gdb.TX) (err error) {
  100. if len(cateIds) == 0 {
  101. err = gerror.New("栏目不能为空")
  102. return
  103. }
  104. entity, err := Model.FindOne("id", req.Id)
  105. if err != nil {
  106. g.Log().Error(err)
  107. }
  108. if err != nil || entity == nil {
  109. err = gerror.New("文章信息获取失败")
  110. return
  111. }
  112. entity.NewsStatus = req.NewsStatus
  113. entity.UpdateTime = gconv.Uint(gtime.Timestamp())
  114. entity.PublishedTime = gconv.Uint(utils.StrToTimestamp(req.PublishedTime))
  115. entity.NewsTitle = req.NewsTitle
  116. entity.NewsKeywords = req.NewsKeywords
  117. entity.NewsExcerpt = req.NewsExcerpt
  118. entity.NewsSource = req.NewsSource
  119. entity.Thumbnail = req.Thumbnail
  120. entity.IsJump = req.IsJump
  121. entity.JumpUrl = req.JumpUrl
  122. for _, v := range req.Attr {
  123. if v == 1 {
  124. entity.IsTop = 1
  125. } else if v == 2 {
  126. entity.Recommended = 1
  127. }
  128. }
  129. _, err = Model.TX(tx).Replace(entity)
  130. if err != nil {
  131. g.Log().Error(err)
  132. err = gerror.New("修改文章失败")
  133. return
  134. }
  135. //删除旧的栏目文章关联信息
  136. cnList, err := cms_category_news.GetCategoriesByNewsId(entity.Id)
  137. if err != nil {
  138. return
  139. }
  140. for _, cn := range cnList {
  141. _, err = cms_category_news.Model.TX(tx).Delete("news_id", cn.NewsId)
  142. if err != nil {
  143. g.Log().Error(err)
  144. err = gerror.New("更新文章栏目所属信息失败")
  145. return
  146. }
  147. }
  148. //保存栏目与文章关联信息
  149. catNewsEntity := make([]cms_category_news.Entity, len(cateIds))
  150. for k, cateId := range cateIds {
  151. catNewsEntity[k].CategoryId = gconv.Uint64(cateId)
  152. catNewsEntity[k].NewsId = gconv.Uint64(req.Id)
  153. }
  154. _, err = cms_category_news.Model.TX(tx).Data(catNewsEntity).Insert()
  155. if err != nil {
  156. g.Log().Error(err)
  157. err = gerror.New("更新文章栏目所属信息失败")
  158. return
  159. }
  160. return
  161. }
  162. //文章列表查询
  163. func ListByPage(req *ReqListSearchParams) (total, page int, list gdb.Result, err error) {
  164. model := g.DB().Table(Table + " news")
  165. if req != nil {
  166. if len(req.CateId) > 0 {
  167. model = model.InnerJoin(cms_category_news.Table+" cn", "cn.news_id=news.id").Where("cn.category_id in(?)", req.CateId)
  168. model = model.Group("cn.news_id")
  169. }
  170. if req.KeyWords != "" {
  171. model = model.Where("news.news_title like ?", "%"+req.KeyWords+"%")
  172. }
  173. if req.PublishedTimeStart != "" {
  174. model = model.Where("news.published_time >=?", utils.StrToTimestamp(req.PublishedTimeStart))
  175. }
  176. if req.PublishedTimeEnd != "" {
  177. model = model.Where("news.published_time <=?", utils.StrToTimestamp(req.PublishedTimeEnd))
  178. }
  179. }
  180. model = model.LeftJoin(user.Table+" user", "news.user_id=user.id")
  181. total, err = model.Count()
  182. if err != nil {
  183. g.Log().Error(err)
  184. err = gerror.New("获取总行数失败")
  185. return
  186. }
  187. if req.PageNum == 0 {
  188. req.PageNum = 1
  189. }
  190. page = req.PageNum
  191. if req.PageSize == 0 {
  192. req.PageSize = service.AdminPageNum
  193. }
  194. list, err = model.Page(page, req.PageSize).Fields("news.*,user.user_nickname").Order("published_time desc,news.id desc").All()
  195. if err != nil {
  196. g.Log().Error(err)
  197. err = gerror.New("获取数据失败")
  198. return
  199. }
  200. return
  201. }
  202. //通过文章id获取文章信息
  203. func GetById(id int) (news *Entity, err error) {
  204. news, err = Model.FindOne(id)
  205. if err != nil {
  206. g.Log().Error(err)
  207. }
  208. if err != nil || news == nil {
  209. err = gerror.New("获取文章信息失败")
  210. return
  211. }
  212. return
  213. }
  214. func DeleteByIds(ids []int, tx *gdb.TX) error {
  215. _, err := Model.TX(tx).Delete("id in (?)", ids)
  216. if err != nil {
  217. g.Log().Error(err)
  218. return gerror.New("删除文章失败")
  219. }
  220. _, err = cms_category_news.Model.TX(tx).Delete("news_id in (?)", ids)
  221. if err != nil {
  222. g.Log().Error(err)
  223. return gerror.New("删除文章栏目关联信息失败")
  224. }
  225. return nil
  226. }