cms_news.go 8.3 KB

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