| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package cms_service
- import (
- "gfast/app/model/admin/cms_category"
- "gfast/app/model/admin/cms_category_news"
- "gfast/app/model/admin/cms_news"
- "gfast/app/service/common/com_model_service"
- "gfast/library/utils"
- "github.com/gogf/gf/container/gvar"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/util/gconv"
- )
- //添加文章操作
- func AddNews(req *cms_news.ReqAddParams, cateIds []int, userId uint64) (insId int64, err error) {
- cateIds, err = getPubCateIds(cateIds)
- if err != nil {
- return
- }
- tx, err := g.DB().Begin()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("添加事务开启失败")
- return
- }
- insId, err = cms_news.AddNews(req, cateIds, userId, tx)
- if err != nil {
- tx.Rollback()
- return
- }
- //保存文章模型字段数据
- err = handlePostData(cateIds, insId, req.ModelForm, tx, false)
- if err != nil {
- tx.Rollback()
- return
- }
- tx.Commit()
- return
- }
- //修改文章操作
- func EditNews(req *cms_news.ReqEditParams, cateIds []int) (err error) {
- cateIds, err = getPubCateIds(cateIds)
- if err != nil {
- return
- }
- tx, err := g.DB().Begin()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("开启事务失败")
- return
- }
- err = cms_news.EditNews(req, cateIds, tx)
- if err != nil {
- tx.Rollback()
- return
- }
- //保存模型字段数据
- err = handlePostData(cateIds, gconv.Int64(req.Id), req.ModelForm, tx, true)
- if err != nil {
- tx.Rollback()
- return
- }
- tx.Commit()
- return
- }
- func getPubCateIds(cateIds []int) ([]int, error) {
- //获取所有栏目
- menuList, err := GetMenuList()
- if err != nil {
- return nil, err
- }
- pubCateIds := make([]int, 0, len(menuList))
- if len(cateIds) > 0 {
- //查询可发布栏目id
- menuListSlice := gconv.SliceMap(menuList)
- for _, cid := range cateIds {
- for _, entity := range menuList {
- if gconv.Int(entity.Id) == cid && entity.CateType == cms_category.PublishCateType {
- pubCateIds = append(pubCateIds, cid)
- }
- }
- mList := make([]*cms_category.Entity, 0)
- sonList := utils.FindSonByParentId(menuListSlice, cid, "parent_id", "id")
- gconv.Structs(sonList, &mList)
- for _, v := range mList {
- if v.CateType == cms_category.PublishCateType {
- pubCateIds = append(pubCateIds, gconv.Int(v.Id))
- }
- }
- }
- if len(pubCateIds) == 0 {
- return nil, gerror.New("所选栏目不存在可发布文章的栏目")
- }
- return pubCateIds, nil
- } else {
- return nil, gerror.New("所属栏目不能为空")
- }
- }
- //文章列表查询
- func NewsListByPage(req *cms_news.ReqListSearchParams) (total, page int, list []*cms_news.NewsList, err error) {
- var menuList []*cms_category.Entity
- //获取所有栏目
- menuList, err = GetMenuList()
- if err != nil {
- return
- }
- if len(req.CateId) > 0 {
- //查询可发布栏目id
- menuListSlice := gconv.SliceMap(menuList)
- cateIds := req.CateId
- for _, cid := range cateIds {
- mList := make([]*cms_category.Entity, 0)
- sonList := utils.FindSonByParentId(menuListSlice, cid, "parent_id", "id")
- gconv.Structs(sonList, &mList)
- for _, v := range mList {
- if v.CateType == cms_category.PublishCateType {
- req.CateId = append(req.CateId, gconv.Int(v.Id))
- }
- }
- }
- }
- total, page, list, err = cms_news.ListByPage(req)
- if err != nil || len(list) == 0 {
- return
- }
- //匹配文章所属栏目
- var cateIds []int
- for _, v := range list {
- cateIds, err = GetCheckedCategoryIdByNewsId(gconv.Uint64(v.Id))
- if err != nil {
- return
- }
- cateNameList := make(map[int]string)
- for _, menu := range menuList {
- for _, cateId := range cateIds {
- if menu.Id == gconv.Uint64(cateId) {
- cateNameList[cateId] = menu.Name
- }
- }
- }
- cateVal := new(gvar.Var)
- if len(cateNameList) > 0 {
- cateVal.Set(cateNameList)
- }
- v.CateList = cateVal
- }
- return
- }
- //通过id获取文章信息
- func GetNewsById(id int) (news *cms_news.Entity, err error) {
- return cms_news.GetById(id)
- }
- //通过文章id获取关联的栏目id
- func GetCheckedCategoryIdByNewsId(newsId uint64) (catIds []int, err error) {
- categories, err := GetCategoriesByNewsId(newsId)
- if err != nil {
- return
- }
- catIds = make([]int, len(categories))
- for k, v := range categories {
- catIds[k] = gconv.Int(v.CategoryId)
- }
- return
- }
- //通过文章id获取关联栏目信息
- func GetCategoriesByNewsId(newsId uint64) (categories []*cms_category_news.Entity, err error) {
- return cms_category_news.GetCategoriesByNewsId(newsId)
- }
- //删除文章数据
- func DeleteCmsByIds(ids []int) (err error) {
- var tx *gdb.TX
- tx, err = g.DB().Begin()
- if err != nil {
- g.Log().Error(err)
- err = gerror.New("开启事务失败")
- return
- }
- //获取对应文章模型ID
- for _, id := range ids {
- var cateNews []*cms_category_news.Entity
- cateNews, err = GetCategoriesByNewsId(gconv.Uint64(id))
- if err != nil {
- return
- }
- for _, cn := range cateNews {
- var cateInfo *cms_category.Entity
- cateInfo, err = GetMenuInfoById(gconv.Int(cn.CategoryId))
- if err != nil {
- return
- }
- //删除模型字段数据
- err = com_model_service.DeleteModelFieldData(gconv.Int64(cateInfo.ModelId), gconv.Int64(id), tx)
- if err != nil {
- tx.Rollback()
- return
- }
- }
- }
- err = cms_news.DeleteByIds(ids, tx)
- if err != nil {
- tx.Rollback()
- }
- tx.Commit()
- return
- }
- //处理模型数据
- func handlePostData(cateIds []int, insId int64, modelForm g.Map, tx *gdb.TX, isUpdate bool) error {
- modelId, err := GetModelIdByCateIds(cateIds)
- if err != nil {
- return err
- }
- //保存模型数据
- return com_model_service.HandlePostData(gconv.Int64(modelId), modelForm, insId, tx, isUpdate)
- }
|