237 lines
6.7 KiB
Go
237 lines
6.7 KiB
Go
package discount_area_ser
|
|
|
|
import (
|
|
"91porn-server/common"
|
|
"91porn-server/common/cachev2"
|
|
"91porn-server/common/constant/redisconst"
|
|
sli "91porn-server/common/slice"
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/discount_area_mod"
|
|
"91porn-server/models/v/discount_area_video_mod"
|
|
"91porn-server/models/v/vidmod"
|
|
"github.com/shopspring/decimal"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
"time"
|
|
)
|
|
|
|
func AddDiscountArea(req *discount_area_mod.WebDiscountAreaAddReq) (err error) {
|
|
now := time.Now()
|
|
model := &discount_area_mod.DiscountArea{
|
|
Title: req.Title,
|
|
Desc: req.Desc,
|
|
Discount: int(req.Discount),
|
|
Status: int(req.Status),
|
|
SortCode: int(req.SortCode),
|
|
RecommendNum: int(req.RecommendNum),
|
|
UpdatedAt: now,
|
|
CreatedAt: now,
|
|
}
|
|
//最多10个
|
|
if model.RecommendNum > 10 {
|
|
model.RecommendNum = 10
|
|
}
|
|
err = discount_area_mod.AddDiscountArea(model)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 删除缓存
|
|
cachev2.Classes().AutoListKey(redisconst.DiscountArea).AutoClear(true, nil)
|
|
return
|
|
}
|
|
|
|
func UpdateDiscountArea(req *discount_area_mod.WebDiscountAreaUpdateReq) (err error) {
|
|
var maxRecomment uint = 10
|
|
if req.RecommendNum != nil && *req.RecommendNum > 10 {
|
|
req.RecommendNum = &maxRecomment
|
|
}
|
|
objId, err := primitive.ObjectIDFromHex(req.Id)
|
|
if err != nil {
|
|
return
|
|
}
|
|
update, err := common.ToBsonM(req.WebDiscountAreaUpdateData)
|
|
if err != nil {
|
|
return
|
|
}
|
|
update["updateAt"] = time.Now()
|
|
err = discount_area_mod.UpdateDiscountArea(objId, update)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 删除缓存
|
|
cachev2.Classes().AutoListKey(redisconst.DiscountArea).AutoClear(true, nil)
|
|
return
|
|
}
|
|
|
|
// DeleteDiscountArea 删除折扣专区
|
|
func DeleteDiscountArea(id string) (err error) {
|
|
objId, err := primitive.ObjectIDFromHex(id)
|
|
if err != nil {
|
|
return
|
|
}
|
|
update := bson.M{
|
|
"status": 2,
|
|
"updateAt": time.Now(),
|
|
}
|
|
err = discount_area_mod.UpdateDiscountArea(objId, update)
|
|
if err != nil {
|
|
return
|
|
}
|
|
// 删除缓存
|
|
cachev2.Classes().AutoListKey(redisconst.DiscountArea).AutoClear(true, nil)
|
|
return
|
|
}
|
|
|
|
// GetDiscountAreaVids 获取专区下的视频
|
|
func GetDiscountAreaVids(req *discount_area_mod.WebDiscountAreaVidsReq) (list []discount_area_mod.WebDiscountAreaVideo, total int64, err error) {
|
|
filter := bson.M{}
|
|
if req.DiscountAreaId != "" {
|
|
discountAreaId, _ := primitive.ObjectIDFromHex(req.DiscountAreaId)
|
|
filter["discountAreaId"] = discountAreaId
|
|
}
|
|
if req.Vid != "" {
|
|
videoID, _ := primitive.ObjectIDFromHex(req.Vid)
|
|
filter["videoID"] = videoID
|
|
}
|
|
opts := options.Find().SetSort(bson.D{{Key: "createdAt", Value: -1}}).SetSkip(int64(req.Skip())).SetLimit(int64(req.Limit()))
|
|
discountAreaVideoList, total, err := discount_area_video_mod.GetListByCond(filter, opts)
|
|
if err != nil {
|
|
return
|
|
}
|
|
vids := []primitive.ObjectID{}
|
|
discountAreaIds := []primitive.ObjectID{}
|
|
// 获取视频信息
|
|
for _, v := range discountAreaVideoList {
|
|
vids = append(vids, v.VideoID)
|
|
discountAreaIds = append(discountAreaIds, v.DiscountAreaId)
|
|
}
|
|
|
|
videoList, err := vidmod.GetVideoListByIDsNoStatus(sli.RemoveRepObjectID(vids))
|
|
if err != nil {
|
|
return
|
|
}
|
|
videoMap := make(map[primitive.ObjectID]vidmod.VideoModel)
|
|
for _, video := range videoList {
|
|
videoMap[video.ID] = *video
|
|
}
|
|
discountAreaList, err := discount_area_mod.GetNoStatusDiscountAreaByIds(sli.RemoveRepObjectID(discountAreaIds))
|
|
if err != nil {
|
|
return
|
|
}
|
|
discountAreaMap := make(map[primitive.ObjectID]discount_area_mod.DiscountArea)
|
|
for _, discountArea := range discountAreaList {
|
|
discountAreaMap[discountArea.ID] = discountArea
|
|
}
|
|
|
|
for _, v := range discountAreaVideoList {
|
|
discountAreaVideo := discount_area_mod.WebDiscountAreaVideo{
|
|
Id: v.ID,
|
|
VideoID: v.VideoID,
|
|
DiscountAreaId: v.DiscountAreaId,
|
|
CreatedAt: v.CreatedAt,
|
|
UpdatedAt: v.UpdatedAt,
|
|
}
|
|
if video, ok := videoMap[v.VideoID]; ok {
|
|
discountAreaVideo.Title = video.Title
|
|
discountAreaVideo.Cover = video.Cover
|
|
discountAreaVideo.PublisherID = video.PublisherID
|
|
discountAreaVideo.OriginalPrice = video.Coins
|
|
}
|
|
if discountArea, ok := discountAreaMap[v.DiscountAreaId]; ok {
|
|
discountAreaVideo.DiscountAreaTitle = discountArea.Title
|
|
discountAreaVideo.DiscountedPrice = decimal.NewFromInt(int64(discountArea.Discount)).Shift(-2).
|
|
Mul(decimal.NewFromInt(discountAreaVideo.OriginalPrice)).Round(0).IntPart()
|
|
}
|
|
list = append(list, discountAreaVideo)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// DiscountAreaAddVid 折扣区新增视频
|
|
func DiscountAreaAddVid(req *discount_area_mod.WebDiscountAreaAddVidReq) (code stderr.Code) {
|
|
if req.DiscountAreaId.IsZero() || len(req.VIds) == 0 {
|
|
return stderr.ErrParamError
|
|
}
|
|
// 判断是否是视频
|
|
videoList, err := vidmod.GetVideoListByIDs(req.VIds)
|
|
if err != nil {
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
vids := []primitive.ObjectID{}
|
|
for _, v := range videoList {
|
|
// 不是视频,直接返回错误
|
|
if v.NewsType != vidmod.SP {
|
|
return stderr.NotAVideo
|
|
}
|
|
vids = append(vids, v.ID)
|
|
}
|
|
if len(vids) == 0 {
|
|
return
|
|
}
|
|
// 查询是否已经在其他折扣区,是的话则直接报错
|
|
list, err := discount_area_video_mod.GetDiscountAreaVideoByVids(vids)
|
|
if err != nil {
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
if len(list) > 0 {
|
|
// 不能一个视频同时在两个折扣区
|
|
return stderr.VideoInDiscountArea
|
|
}
|
|
now := time.Now()
|
|
batchAddVids := []discount_area_video_mod.DiscountAreaVideo{}
|
|
for _, vid := range vids {
|
|
batchAddVids = append(batchAddVids, discount_area_video_mod.DiscountAreaVideo{
|
|
DiscountAreaId: req.DiscountAreaId,
|
|
VideoID: vid,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
})
|
|
}
|
|
// 写入折扣区
|
|
err = discount_area_video_mod.BatchAdd(batchAddVids)
|
|
if err != nil {
|
|
return stderr.ErrDbInsertManyError
|
|
}
|
|
update := bson.M{}
|
|
update["discountAreaId"] = req.DiscountAreaId
|
|
update["updatedAt"] = time.Now()
|
|
_, err = vidmod.UpdateManyVideo(vids, update)
|
|
if err != nil {
|
|
return stderr.ErrDbUpdateError
|
|
}
|
|
|
|
return stderr.Success
|
|
}
|
|
|
|
// DiscountAreaDeleteVid 移除折扣区视频
|
|
func DiscountAreaDeleteVid(ids []primitive.ObjectID) (code stderr.Code) {
|
|
if len(ids) == 0 {
|
|
return stderr.ErrParamError
|
|
}
|
|
|
|
list, err := discount_area_video_mod.GetDiscountAreaVideoByIds(ids)
|
|
if err != nil {
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
vids := []primitive.ObjectID{}
|
|
for _, v := range list {
|
|
vids = append(vids, v.VideoID)
|
|
}
|
|
// 删除视频
|
|
err = discount_area_video_mod.DeleteDiscountAreaVideoByIds(ids)
|
|
if err != nil {
|
|
return stderr.ErrDbDeleteError
|
|
}
|
|
// 移除
|
|
update := bson.M{}
|
|
update["discountAreaId"] = nil
|
|
update["updatedAt"] = time.Now()
|
|
_, err = vidmod.UpdateManyVideo(vids, update)
|
|
if err != nil {
|
|
return stderr.ErrDbUpdateError
|
|
}
|
|
return stderr.Success
|
|
}
|