Merge branch 'feat-IRONFANS-250-Robin' into conf-250
This commit is contained in:
commit
42683cc4a0
|
@ -1,10 +1,7 @@
|
|||
package proto
|
||||
|
||||
import (
|
||||
"service/api/consts"
|
||||
"service/dbstruct"
|
||||
|
||||
goproto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
type ActivityHotOpVO struct {
|
||||
|
@ -31,13 +28,3 @@ func (vo *ActivityHotOpVO) CopyAccount(account *dbstruct.Account) *ActivityHotOp
|
|||
vo.UserId = account.GetUserId()
|
||||
return vo
|
||||
}
|
||||
|
||||
// 设置状态
|
||||
func (vo *ActivityHotOpVO) SetStatus(nt int64) *ActivityHotOpVO {
|
||||
if vo.ActivityHot.GetSt() > nt { // 开始时间晚于当前时间,则为未开始
|
||||
vo.ActivityHot.Status = goproto.Int64(consts.ActivityHotStatus_Waiting)
|
||||
} else if vo.ActivityHot.GetEt() < nt { // 结束时间早于当前时间,则为已过期
|
||||
vo.ActivityHot.Status = goproto.Int64(consts.ActivityHotStatus_Expired)
|
||||
}
|
||||
return vo
|
||||
}
|
||||
|
|
|
@ -7238,34 +7238,12 @@ func (m *Mongo) GetActivityHotList(ctx *gin.Context, req *activity_hot_proto.OpL
|
|||
"del_flag": 0,
|
||||
}
|
||||
|
||||
nt := time.Now().Unix()
|
||||
|
||||
if req.Uid != nil {
|
||||
query["mid"] = util.DerefInt64(req.Uid)
|
||||
}
|
||||
|
||||
if req.Status != nil {
|
||||
switch util.DerefInt64(req.Status) {
|
||||
// 正常或暂停
|
||||
case consts.ActivityHotStatus_Normal, consts.ActivityHotStatus_Paused:
|
||||
query["status"] = util.DerefInt64(req.Status)
|
||||
query["st"] = qmgo.M{
|
||||
"$lte": nt,
|
||||
}
|
||||
query["et"] = qmgo.M{
|
||||
"$gte": nt,
|
||||
}
|
||||
// 未开始,开始时间必须大于现在的时间(即晚于)
|
||||
case consts.ActivityHotStatus_Waiting:
|
||||
query["st"] = qmgo.M{
|
||||
"$gt": nt,
|
||||
}
|
||||
// 已失效,结束时间必须小于现在的时间(即早于)
|
||||
case consts.ActivityHotStatus_Expired:
|
||||
query["et"] = qmgo.M{
|
||||
"$lt": nt,
|
||||
}
|
||||
}
|
||||
query["status"] = util.DerefInt64(req.Status)
|
||||
}
|
||||
|
||||
err := col.Find(ctx, query).Sort("-priority").Skip(int64(req.Offset)).Limit(int64(req.Limit)).All(&list)
|
||||
|
@ -7276,11 +7254,12 @@ func (m *Mongo) GetActivityHotList(ctx *gin.Context, req *activity_hot_proto.OpL
|
|||
return list, err
|
||||
}
|
||||
|
||||
func (m *Mongo) GetActivityHotByMid(ctx *gin.Context, mid int64) (*dbstruct.ActivityHot, error) {
|
||||
func (m *Mongo) GetActivityHotByMidAndStatus(ctx *gin.Context, mid int64, status int64) (*dbstruct.ActivityHot, error) {
|
||||
one := &dbstruct.ActivityHot{}
|
||||
col := m.getColActivityHot()
|
||||
query := qmgo.M{
|
||||
"mid": mid,
|
||||
"status": status,
|
||||
"del_flag": 0,
|
||||
}
|
||||
err := col.Find(ctx, query).One(one)
|
||||
|
@ -7308,6 +7287,50 @@ func (m *Mongo) GetActivityHotListByIds(ctx *gin.Context, ids []int64) ([]*dbstr
|
|||
return list, err
|
||||
}
|
||||
|
||||
func (m *Mongo) StartActivityHotAtDueTime(ctx *gin.Context, nt int64) error {
|
||||
col := m.getColActivityHot()
|
||||
// 所有开始时间早于现在时间且是待开始状态的,转为推送中
|
||||
query := qmgo.M{
|
||||
"st": qmgo.M{
|
||||
"$lte": nt,
|
||||
},
|
||||
"status": consts.ActivityHotStatus_Waiting,
|
||||
"del_flag": 0,
|
||||
}
|
||||
set := qmgo.M{
|
||||
"status": consts.ActivityHotStatus_Normal,
|
||||
"ut": time.Now().Unix(),
|
||||
}
|
||||
up := qmgo.M{
|
||||
"$set": set,
|
||||
}
|
||||
_, err := col.UpdateAll(ctx, query, up)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *Mongo) EndActivityHotAtDueTime(ctx *gin.Context, nt int64) error {
|
||||
col := m.getColActivityHot()
|
||||
// 所有结束时间早于现在时间且未被关闭的,转为已失效
|
||||
query := qmgo.M{
|
||||
"et": qmgo.M{
|
||||
"$lte": nt,
|
||||
},
|
||||
"status": qmgo.M{
|
||||
"$ne": consts.ActivityHotStatus_Expired,
|
||||
},
|
||||
"del_flag": 0,
|
||||
}
|
||||
set := qmgo.M{
|
||||
"status": consts.ActivityHotStatus_Expired,
|
||||
"ut": time.Now().Unix(),
|
||||
}
|
||||
up := qmgo.M{
|
||||
"$set": set,
|
||||
}
|
||||
_, err := col.UpdateAll(ctx, query, up)
|
||||
return err
|
||||
}
|
||||
|
||||
// 活动banner表相关
|
||||
func (m *Mongo) CreateActivityBanner(ctx *gin.Context, activity_banner *dbstruct.ActivityBanner) error {
|
||||
col := m.getColActivityBanner()
|
||||
|
@ -7344,33 +7367,11 @@ func (m *Mongo) GetActivityBannerList(ctx *gin.Context, req *activity_banner_pro
|
|||
"del_flag": 0,
|
||||
}
|
||||
|
||||
nt := time.Now().Unix()
|
||||
|
||||
if req.Status != nil {
|
||||
switch util.DerefInt64(req.Status) {
|
||||
// 正常或暂停
|
||||
case consts.ActivityBannerStatus_Normal, consts.ActivityBannerStatus_Paused:
|
||||
query["status"] = util.DerefInt64(req.Status)
|
||||
query["st"] = qmgo.M{
|
||||
"$lte": nt,
|
||||
}
|
||||
query["et"] = qmgo.M{
|
||||
"$gte": nt,
|
||||
}
|
||||
// 未开始,开始时间必须大于现在的时间(即晚于)
|
||||
case consts.ActivityBannerStatus_Waiting:
|
||||
query["st"] = qmgo.M{
|
||||
"$gt": nt,
|
||||
}
|
||||
// 已失效,结束时间必须小于现在的时间(即早于)
|
||||
case consts.ActivityBannerStatus_Expired:
|
||||
query["et"] = qmgo.M{
|
||||
"$lt": nt,
|
||||
}
|
||||
}
|
||||
query["status"] = util.DerefInt64(req.Status)
|
||||
}
|
||||
|
||||
err := col.Find(ctx, query).Sort("-priority").Skip(int64(req.Offset)).Limit(int64(req.Limit)).All(&list)
|
||||
err := col.Find(ctx, query).Sort("-ct").Skip(int64(req.Offset)).Limit(int64(req.Limit)).All(&list)
|
||||
if err == qmgo.ErrNoSuchDocuments {
|
||||
err = nil
|
||||
return list, err
|
||||
|
@ -7409,3 +7410,47 @@ func (m *Mongo) GetActivityBannerListByIds(ctx *gin.Context, ids []int64) ([]*db
|
|||
}
|
||||
return list, err
|
||||
}
|
||||
|
||||
func (m *Mongo) StartActivityBannerAtDueTime(ctx *gin.Context, nt int64) error {
|
||||
col := m.getColActivityBanner()
|
||||
// 所有开始时间早于现在时间且是待开始状态的,转为推送中
|
||||
query := qmgo.M{
|
||||
"st": qmgo.M{
|
||||
"$lte": nt,
|
||||
},
|
||||
"status": consts.ActivityBannerStatus_Waiting,
|
||||
"del_flag": 0,
|
||||
}
|
||||
set := qmgo.M{
|
||||
"status": consts.ActivityBannerStatus_Normal,
|
||||
"ut": time.Now().Unix(),
|
||||
}
|
||||
up := qmgo.M{
|
||||
"$set": set,
|
||||
}
|
||||
_, err := col.UpdateAll(ctx, query, up)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *Mongo) EndActivityBannerAtDueTime(ctx *gin.Context, nt int64) error {
|
||||
col := m.getColActivityBanner()
|
||||
// 所有结束时间早于现在时间且未被关闭的,转为已失效
|
||||
query := qmgo.M{
|
||||
"et": qmgo.M{
|
||||
"$lte": nt,
|
||||
},
|
||||
"status": qmgo.M{
|
||||
"$ne": consts.ActivityBannerStatus_Expired,
|
||||
},
|
||||
"del_flag": 0,
|
||||
}
|
||||
set := qmgo.M{
|
||||
"status": consts.ActivityBannerStatus_Expired,
|
||||
"ut": time.Now().Unix(),
|
||||
}
|
||||
up := qmgo.M{
|
||||
"$set": set,
|
||||
}
|
||||
_, err := col.UpdateAll(ctx, query, up)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -822,9 +822,9 @@ func (l *AuthBusinessValidator) EnsureContactCustomerServiceIdsAreFromThisUser(m
|
|||
return l
|
||||
}
|
||||
|
||||
func (l *AuthBusinessValidator) EnsureActivityHotIsMidUnique(fun func(*gin.Context, int64) (*dbstruct.ActivityHot, error), mid int64) *AuthBusinessValidator {
|
||||
func (l *AuthBusinessValidator) EnsureActivityHotIsMidUnique(fun func(*gin.Context, int64, int64) (*dbstruct.ActivityHot, error), mid int64, status int64) *AuthBusinessValidator {
|
||||
l.oplist = append(l.oplist, func() {
|
||||
activityHot, err := fun(l.ctx, mid)
|
||||
activityHot, err := fun(l.ctx, mid, status)
|
||||
if err != nil {
|
||||
logger.Error("GetActivityHotByMid fail, err: %v", err)
|
||||
l.ec = errcode.ErrCodeActivityHotSrvFail
|
||||
|
|
|
@ -89,6 +89,7 @@ func (s *CronService) Init(c any) (exec xxl.Executor, err error) {
|
|||
exec.RegTask("push_notifications", s.PushNotifications)
|
||||
exec.RegTask("clear_veri_code_wrong_times", s.ClearVeriCodeWrongTimes)
|
||||
exec.RegTask("user_refund_audit_times", s.UserRefundAuditTimes)
|
||||
exec.RegTask("sync_activity", s.SyncActivityStatus)
|
||||
exec.LogHandler(customLogHandle)
|
||||
//注册任务handler
|
||||
|
||||
|
|
|
@ -88,3 +88,17 @@ func (p *ActivityBanner) GetByIds(ctx *gin.Context, ids []int64) ([]*dbstruct.Ac
|
|||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (p *ActivityBanner) Sync(ctx *gin.Context, nt int64) error {
|
||||
err := p.store.StartActivityBannerAtDueTime(ctx, nt)
|
||||
if err != nil {
|
||||
logger.Error("StartActivityBannerAtDueTime fail", err)
|
||||
return err
|
||||
}
|
||||
err = p.store.EndActivityBannerAtDueTime(ctx, nt)
|
||||
if err != nil {
|
||||
logger.Error("EndActivityBannerAtDueTime fail", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@ func (p *ActivityHot) OpList(ctx *gin.Context, req *activity_hot_proto.OpListReq
|
|||
return list, nil
|
||||
}
|
||||
|
||||
func (p *ActivityHot) GetByMid(ctx *gin.Context, id int64) (*dbstruct.ActivityHot, error) {
|
||||
one, err := p.store.GetActivityHotByMid(ctx, id)
|
||||
func (p *ActivityHot) GetByMidAndStatus(ctx *gin.Context, id int64, status int64) (*dbstruct.ActivityHot, error) {
|
||||
one, err := p.store.GetActivityHotByMidAndStatus(ctx, id, status)
|
||||
if err != nil {
|
||||
logger.Error("GetActivityHotByMid fail, id: %v, err: %v", id, err)
|
||||
return nil, err
|
||||
|
@ -88,3 +88,17 @@ func (p *ActivityHot) GetByIds(ctx *gin.Context, ids []int64) ([]*dbstruct.Activ
|
|||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (p *ActivityHot) Sync(ctx *gin.Context, nt int64) error {
|
||||
err := p.store.StartActivityHotAtDueTime(ctx, nt)
|
||||
if err != nil {
|
||||
logger.Error("StartActivityHotAtDueTime fail", err)
|
||||
return err
|
||||
}
|
||||
err = p.store.EndActivityHotAtDueTime(ctx, nt)
|
||||
if err != nil {
|
||||
logger.Error("EndActivityHotAtDueTime fail", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -1501,7 +1501,7 @@ func (s *Service) OpCreateActivityHotBusinessValidate(ctx *gin.Context, req *act
|
|||
ec = errcode.ErrCodeActivityHotSrvOk
|
||||
|
||||
resultList := businessvalidator.NewAuthBusinessValidator(ctx, req).
|
||||
EnsureActivityHotIsMidUnique(_DefaultActivityHot.GetByMid, req.ActivityHot.GetMid()).
|
||||
EnsureActivityHotIsMidUnique(_DefaultActivityHot.GetByMidAndStatus, req.ActivityHot.GetMid(), consts.ActivityHotStatus_Normal).
|
||||
EnsureZoneExist(_DefaultZone.GetByMid, req.ActivityHot.GetMid()).
|
||||
Validate().
|
||||
Collect()
|
||||
|
|
|
@ -5626,16 +5626,5 @@ func (s *Service) OpGetActivityBannerList(ctx *gin.Context, req *activity_banner
|
|||
ec = errcode.ErrCodeActivityBannerSrvFail
|
||||
return
|
||||
}
|
||||
|
||||
// 当前时间
|
||||
nt := time.Now().Unix()
|
||||
|
||||
for _, v := range list {
|
||||
if v.GetSt() > nt { // 开始时间晚于当前时间,则为未开始
|
||||
v.Status = goproto.Int64(consts.ActivityHotStatus_Waiting)
|
||||
} else if v.GetEt() < nt { // 结束时间早于当前时间,则为已过期
|
||||
v.Status = goproto.Int64(consts.ActivityHotStatus_Expired)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -2482,11 +2482,8 @@ func (s *Service) utilFillActivityHotOpVO(ctx *gin.Context, list []*dbstruct.Act
|
|||
return make([]*activity_hot_proto.ActivityHotOpVO, 0), err
|
||||
}
|
||||
|
||||
// 当前时间
|
||||
nt := time.Now().Unix()
|
||||
|
||||
for _, v := range list {
|
||||
vo := activity_hot_proto.NewActivityHotOpVO().CopyActivityHot(v).CopyAccount(acctMp[v.GetMid()]).SetStatus(nt)
|
||||
vo := activity_hot_proto.NewActivityHotOpVO().CopyActivityHot(v).CopyAccount(acctMp[v.GetMid()])
|
||||
volist = append(volist, vo)
|
||||
}
|
||||
return volist, nil
|
||||
|
|
|
@ -686,3 +686,20 @@ func (s *CronService) UserRefundAuditTimes(ctx context.Context, param *xxl.RunRe
|
|||
}
|
||||
return "user_refund_audit_times collection has been "
|
||||
}
|
||||
|
||||
func (s *CronService) SyncActivityStatus(ctx context.Context, param *xxl.RunReq) (msg string) {
|
||||
logger.Info("task %v param: %v log_id: %v", param.ExecutorHandler, param.ExecutorParams, xxl.Int64ToStr(param.LogID))
|
||||
logger.Info("Sync activity status...")
|
||||
|
||||
nt := time.Now().Unix()
|
||||
if err := _DefaultActivityHot.Sync(&gin.Context{}, nt); err != nil {
|
||||
logger.Error("_DefaultActivityHot Sync fail: %v", err)
|
||||
return fmt.Sprintf("_DefaultActivityHot Sync fail: %v", err)
|
||||
}
|
||||
if err := _DefaultActivityBanner.Sync(&gin.Context{}, nt); err != nil {
|
||||
logger.Error("_DefaultActivityBanner Sync fail: %v", err)
|
||||
return fmt.Sprintf("_DefaultActivityBanner Sync fail: %v", err)
|
||||
}
|
||||
logger.Info("activity status sync success")
|
||||
return "activity status sync success"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue