cms_news.go 7.7 KB

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