You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
307 lines
9.5 KiB
307 lines
9.5 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/admin/main/activity/model" |
|
articlemodel "go-common/app/interface/openplatform/article/model" |
|
"go-common/library/log" |
|
"go-common/library/net/metadata" |
|
|
|
"github.com/jinzhu/gorm" |
|
) |
|
|
|
// GetArticleMetas from rpc . |
|
func (s *Service) GetArticleMetas(c context.Context, aids []int64) (res map[int64]*articlemodel.Meta, err error) { |
|
if res, err = s.artRPC.ArticleMetas(c, &articlemodel.ArgAids{Aids: aids}); err != nil { |
|
log.Error("s.ArticleMetas(%v) error(%v)", aids, err) |
|
} |
|
return |
|
} |
|
|
|
// SubjectList get subject list . |
|
func (s *Service) SubjectList(c context.Context, listParams *model.ListSub) (listRes *model.SubListRes, err error) { |
|
var ( |
|
count int64 |
|
list []*model.ActSubject |
|
) |
|
db := s.DB |
|
if listParams.Keyword != "" { |
|
names := listParams.Keyword + "%" |
|
db = db.Where("`id` = ? or `name` like ? or `author` like ?", listParams.Keyword, names, names) |
|
} |
|
if listParams.Sctime != 0 { |
|
parseScime := time.Unix(listParams.Sctime, 0) |
|
db = db.Where("ctime >= ?", parseScime.Format("2006-01-02 15:04:05")) |
|
} |
|
if listParams.Ectime != 0 { |
|
parseEcime := time.Unix(listParams.Ectime, 0) |
|
db = db.Where("etime <= ?", parseEcime.Format("2006-01-02 15:04:05")) |
|
} |
|
if len(listParams.States) > 0 { |
|
db = db.Where("state in (?)", listParams.States) |
|
} |
|
if len(listParams.Types) > 0 { |
|
db = db.Where("type in (?)", listParams.Types) |
|
} |
|
if err = db.Offset((listParams.Page - 1) * listParams.PageSize).Limit(listParams.PageSize).Order("id desc").Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error(" db.Model(&model.ActSubject{}).Find() args(%v) error(%v)", listParams, err) |
|
return |
|
} |
|
if err = db.Model(&model.ActSubject{}).Count(&count).Error; err != nil { |
|
log.Error("db.Model(&model.ActSubject{}).Count() args(%v) error(%v)", listParams, err) |
|
return |
|
} |
|
listRes = &model.SubListRes{ |
|
List: list, |
|
Page: &model.PageRes{ |
|
Num: listParams.Page, |
|
Size: listParams.PageSize, |
|
Total: count, |
|
}, |
|
} |
|
return |
|
} |
|
|
|
// VideoList . |
|
func (s *Service) VideoList(c context.Context) (res []*model.ActSubjectResult, err error) { |
|
var ( |
|
types = []int{1, 4} |
|
list []*model.ActSubject |
|
likeList []*model.Like |
|
) |
|
db := s.DB |
|
if err = db.Where("state = ?", 1).Where("type in (?)", types).Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("db.Model(&model.ActSubject{}).Where(state = ?, 1).Where(type in (?), %v).Find() error(%v)", types, err) |
|
return |
|
} |
|
listCount := len(list) |
|
if listCount == 0 { |
|
return |
|
} |
|
sids := make([]int64, 0, listCount) |
|
for _, value := range list { |
|
sids = append(sids, value.ID) |
|
} |
|
if err = db.Where("sid in (?)", sids).Where("wid > ?", 0).Find(&likeList).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("db.Model(&model.Like{}).Where(sid in (?), %v).Find() error(%v)", sids, err) |
|
return |
|
} |
|
hashList := make(map[int64][]int64) |
|
for _, value := range likeList { |
|
hashList[value.Sid] = append(hashList[value.Sid], value.Wid) |
|
} |
|
res = make([]*model.ActSubjectResult, 0, len(list)) |
|
for _, value := range list { |
|
rs := &model.ActSubjectResult{ |
|
ActSubject: value, |
|
} |
|
if v, ok := hashList[value.ID]; ok { |
|
rs.Aids = v |
|
} |
|
res = append(res, rs) |
|
} |
|
return |
|
} |
|
|
|
// AddActSubject . |
|
func (s *Service) AddActSubject(c context.Context, params *model.AddList) (res int64, err error) { |
|
if params.ScreenSet != 2 { |
|
params.ScreenSet = 1 |
|
} |
|
protect := &model.ActSubjectProtocol{ |
|
Protocol: params.Protocol, |
|
Types: params.Types, |
|
Pubtime: params.Pubtime, |
|
Deltime: params.Deltime, |
|
Editime: params.Editime, |
|
Tags: params.Tags, |
|
Hot: params.Hot, |
|
BgmID: params.BgmID, |
|
Oids: params.Oids, |
|
ScreenSet: params.ScreenSet, |
|
PasterID: params.PasterID, |
|
} |
|
actTime := &model.ActTimeConfig{ |
|
Interval: params.Interval, |
|
Tlimit: params.Tlimit, |
|
Ltime: params.Ltime, |
|
} |
|
if params.Tags != "" { |
|
if err = s.dao.AddTags(c, params.Tags, metadata.String(c, metadata.RemoteIP)); err != nil { |
|
log.Error("s.AddTags(%s,) error(%v)", params.Tags, err) |
|
return |
|
} |
|
} |
|
actSub := &model.ActSubject{ |
|
Oid: params.ActSubject.Oid, |
|
Type: params.ActSubject.Type, |
|
State: params.ActSubject.State, |
|
Level: params.ActSubject.Level, |
|
Flag: params.ActSubject.Flag, |
|
Rank: params.ActSubject.Rank, |
|
Stime: params.ActSubject.Stime, |
|
Etime: params.ActSubject.Etime, |
|
Lstime: params.ActSubject.Lstime, |
|
Letime: params.ActSubject.Letime, |
|
Uetime: params.ActSubject.Uetime, |
|
Ustime: params.ActSubject.Ustime, |
|
Name: params.ActSubject.Name, |
|
Author: params.ActSubject.Author, |
|
ActURL: params.ActSubject.ActURL, |
|
Cover: params.ActSubject.Cover, |
|
Dic: params.ActSubject.Dic, |
|
H5Cover: params.ActSubject.H5Cover, |
|
LikeLimit: params.ActSubject.LikeLimit, |
|
AndroidURL: params.ActSubject.AndroidURL, |
|
IosURL: params.ActSubject.IosURL, |
|
} |
|
if err = s.DB.Create(actSub).Error; err != nil { |
|
log.Error("s.DB.Create(%v) error(%v)", actSub, err) |
|
return |
|
} |
|
protect.Sid = actSub.ID |
|
if err = s.DB.Create(protect).Error; err != nil { |
|
log.Error("s.DB.Create(%v) error(%v)", protect, err) |
|
return |
|
} |
|
if params.Type == model.ONLINEVOTE { |
|
actTime.Sid = actSub.ID |
|
if err = s.DB.Create(actTime).Error; err != nil { |
|
log.Error("s.DB.Create(%v) error(%v)", actTime, err) |
|
return |
|
} |
|
} |
|
res = actSub.ID |
|
return |
|
} |
|
|
|
// UpActSubject . |
|
func (s *Service) UpActSubject(c context.Context, params *model.AddList, sid int64) (res int64, err error) { |
|
if params.ScreenSet != 2 { |
|
params.ScreenSet = 1 |
|
} |
|
onlineData := &model.ActTimeConfig{ |
|
Interval: params.Interval, |
|
Tlimit: params.Tlimit, |
|
Ltime: params.Ltime, |
|
} |
|
actSubject := new(model.ActSubject) |
|
if err = s.DB.Where("id = ?", sid).Last(actSubject).Error; err != nil { |
|
log.Error("s.DB.Where(id = ?, %d).Last(%v) error(%v)", sid, actSubject, err) |
|
return |
|
} |
|
data := map[string]interface{}{ |
|
"Oid": params.Oid, |
|
"Type": params.Type, |
|
"State": params.State, |
|
"Level": params.Level, |
|
"Flag": params.Flag, |
|
"Rank": params.Rank, |
|
"Stime": params.Stime, |
|
"Etime": params.Etime, |
|
"Lstime": params.Lstime, |
|
"Uetime": params.Uetime, |
|
"Ustime": params.Ustime, |
|
"Name": params.Name, |
|
"Author": params.Author, |
|
"ActURL": params.ActURL, |
|
"Cover": params.Cover, |
|
"Dic": params.Dic, |
|
"H5Cover": params.H5Cover, |
|
"LikeLimit": params.LikeLimit, |
|
"AndroidURL": params.AndroidURL, |
|
"IosURL": params.IosURL, |
|
} |
|
if err = s.DB.Model(&model.ActSubject{}).Where("id = ?", sid).Update(data).Error; err != nil { |
|
log.Error("s.DB.Model(&model.ActSubject{}).Where(id = ?, %d).Update(%v) error(%v)", sid, data, err) |
|
return |
|
} |
|
item := new(model.ActSubjectProtocol) |
|
if err = s.DB.Where("sid = ? ", sid).Last(item).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("s.DB.Where(sid = ? , %d).Last(%v) error(%v)", sid, item, err) |
|
return |
|
} |
|
//item有值 |
|
if item.ID > 0 { |
|
if params.Tags != "" { |
|
if item.Tags != params.Tags { |
|
if err = s.dao.AddTags(c, params.Tags, metadata.String(c, metadata.RemoteIP)); err != nil { |
|
log.Error("s.AddTags(%s) error(%v)", params.Tags, err) |
|
return |
|
} |
|
} |
|
} |
|
upProtectData := map[string]interface{}{ |
|
"Protocol": params.Protocol, |
|
"Types": params.Types, |
|
"Pubtime": params.Pubtime, |
|
"Deltime": params.Deltime, |
|
"Editime": params.Editime, |
|
"Hot": params.Hot, |
|
"BgmID": params.BgmID, |
|
"Oids": params.Oids, |
|
"ScreenSet": params.ScreenSet, |
|
"PasterID": params.PasterID, |
|
"Tags": params.Tags, |
|
} |
|
if err = s.DB.Model(&model.ActSubjectProtocol{}).Where("id = ?", item.ID).Update(upProtectData).Error; err != nil { |
|
log.Error("s.DB.Model(&model.ActSubjectProtocol{}).Where(id = ?, %d).Update(%v) error(%v)", item.ID, upProtectData, err) |
|
return |
|
} |
|
} else { |
|
protectDtata := &model.ActSubjectProtocol{ |
|
Protocol: params.Protocol, |
|
Types: params.Types, |
|
Pubtime: params.Pubtime, |
|
Deltime: params.Deltime, |
|
Editime: params.Editime, |
|
Hot: params.Hot, |
|
BgmID: params.BgmID, |
|
Oids: params.Oids, |
|
ScreenSet: params.ScreenSet, |
|
PasterID: params.PasterID, |
|
Sid: sid, |
|
} |
|
if err = s.DB.Create(protectDtata).Error; err != nil { |
|
log.Error("s.DB.Create(%v) error(%v)", protectDtata, err) |
|
return |
|
} |
|
} |
|
if actSubject.Type == model.ONLINEVOTE { |
|
onlineData.Sid = sid |
|
output := new(model.ActTimeConfig) |
|
if err = s.DB.Where("sid = ?", sid).Last(output).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("s.DB.Where(sid = ?, %d).Last(%v) error(%v)", sid, output, err) |
|
return |
|
} |
|
if output.ID > 0 { |
|
if err = s.DB.Model(&model.ActTimeConfig{}).Where("id = ?", output.ID).Update(onlineData).Error; err != nil { |
|
log.Error("s.DB.Model(&model.ActTimeConfig{}).Where(id = ?, %d).Update(%v) error(%v)", output.ID, onlineData, err) |
|
return |
|
} |
|
} |
|
|
|
} |
|
res = sid |
|
return |
|
} |
|
|
|
// SubProtocol . |
|
func (s *Service) SubProtocol(c context.Context, sid int64) (res *model.ActSubjectProtocol, err error) { |
|
res = &model.ActSubjectProtocol{} |
|
if err = s.DB.Where("sid = ?", sid).First(res).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("s.DB.Where(sid = %d ) error(%v)", sid, err) |
|
} |
|
return |
|
} |
|
|
|
// TimeConf . |
|
func (s *Service) TimeConf(c context.Context, sid int64) (res *model.ActTimeConfig, err error) { |
|
res = new(model.ActTimeConfig) |
|
if err = s.DB.Where("sid = ?", sid).First(res).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("actSrv.DB.Where(sid = ?, %d) error(%v)", sid, err) |
|
} |
|
return |
|
}
|
|
|