cms_news.go 7.2 KB

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