From 0975288b86d870ee40323139a7cfa82e9320b552 Mon Sep 17 00:00:00 2001 From: Leufolium Date: Thu, 11 Apr 2024 15:46:01 +0800 Subject: [PATCH] by Robin at 20240411 --- api/consts/status.go | 6 +++++ .../zonemoment/proto/not_null_def_api.go | 8 +++++++ api/proto/zonemoment/proto/zonemoment_api.go | 15 ++++++++++++ app/mix/controller/init.go | 1 + app/mix/controller/zonemoment_api.go | 12 ++++++++++ app/mix/dao/mongo.go | 23 ++++++++++++++++--- app/mix/service/apiservice.go | 21 +++++++++++++++++ app/mix/service/logic/zonemoment.go | 3 ++- dbstruct/zonemoment.go | 1 + 9 files changed, 86 insertions(+), 4 deletions(-) diff --git a/api/consts/status.go b/api/consts/status.go index 9e7332fa..279b19df 100644 --- a/api/consts/status.go +++ b/api/consts/status.go @@ -208,3 +208,9 @@ const ( IsUnreadZoneMomentExist_No = 0 //否 IsUnreadZoneMomentExist_Yes = 1 //是 ) + +// 是否置顶 +const ( + IsHeaded_No = 0 //否 + IsHeaded_Yes = 1 //是 +) diff --git a/api/proto/zonemoment/proto/not_null_def_api.go b/api/proto/zonemoment/proto/not_null_def_api.go index 83747332..69d8a599 100644 --- a/api/proto/zonemoment/proto/not_null_def_api.go +++ b/api/proto/zonemoment/proto/not_null_def_api.go @@ -80,3 +80,11 @@ func (p *ApiListByZidReq) ProvideNotNullValue() (params []*validator.JsonParam) return } + +func (p *ApiHeadReq) ProvideNotNullValue() (params []*validator.JsonParam) { + params = make([]*validator.JsonParam, 0) + + params = append(params, validator.NewInt64SliceParam("请确认待审批动态的ids!", p.ZoneMomentIds)) + + return +} diff --git a/api/proto/zonemoment/proto/zonemoment_api.go b/api/proto/zonemoment/proto/zonemoment_api.go index 7708341d..67b3052f 100644 --- a/api/proto/zonemoment/proto/zonemoment_api.go +++ b/api/proto/zonemoment/proto/zonemoment_api.go @@ -131,3 +131,18 @@ type ApiZoneMomentThumbsUpResp struct { base.BaseResponse Data *ApiZoneMomentThumbsUpData `json:"data"` } + +// op 置顶 +type ApiHeadReq struct { + base.BaseRequest + ZoneMomentIds []int64 `json:"zone_moment_ids"` + OpType int64 `json:"op_type"` +} + +type ApiHeadData struct { +} + +type ApiHeadResp struct { + base.BaseResponse + Data *ApiHeadData `json:"data"` +} diff --git a/app/mix/controller/init.go b/app/mix/controller/init.go index 1597fc4f..86569ef9 100644 --- a/app/mix/controller/init.go +++ b/app/mix/controller/init.go @@ -226,6 +226,7 @@ func Init(r *gin.Engine) { apiZoneMomentGroup.POST("list_by_creater_mid", middleware.JSONParamValidator(zonemomentproto.ApiListByCreaterMidReq{}), middleware.JwtAuthenticator(), ApiGetZoneMomentListByCreaterMid) apiZoneMomentGroup.POST("list_by_zid", middleware.JSONParamValidator(zonemomentproto.ApiListByZidReq{}), middleware.JwtAuthenticator(), ApiGetZoneMomentListByZid) apiZoneMomentGroup.POST("thumbs_up", middleware.JSONParamValidator(zonemomentproto.ApiZoneMomentThumbsUpReq{}), middleware.JwtAuthenticator(), ApiZoneMomentThumbsUpMoment) + apiZoneMomentGroup.POST("head", middleware.JSONParamValidator(zonemomentproto.ApiHeadReq{}), middleware.JwtAuthenticator(), ApiHeadZoneMoment) // 空间对话 apiZoneSessionGroup := r.Group("/api/zone_session", PrepareToC()) diff --git a/app/mix/controller/zonemoment_api.go b/app/mix/controller/zonemoment_api.go index 02de15d7..8014adab 100644 --- a/app/mix/controller/zonemoment_api.go +++ b/app/mix/controller/zonemoment_api.go @@ -172,3 +172,15 @@ func ApiZoneMomentThumbsUpMoment(ctx *gin.Context) { ReplyOk(ctx, nil) } + +func ApiHeadZoneMoment(ctx *gin.Context) { + req := ctx.MustGet("client_req").(*zonemomentproto.ApiHeadReq) + ec := service.DefaultService.ApiHeadZoneMoment(ctx, req) + if ec != errcode.ErrCodeZoneMomentSrvOk { + logger.Error("ApiHeadZoneMoment fail, req: %v, ec: %v", util.ToJson(req), ec) + ReplyErrCodeMsg(ctx, ec) + return + } + + ReplyOk(ctx, nil) +} diff --git a/app/mix/dao/mongo.go b/app/mix/dao/mongo.go index e6d7a8f4..28cd24fb 100644 --- a/app/mix/dao/mongo.go +++ b/app/mix/dao/mongo.go @@ -4059,6 +4059,7 @@ func (m *Mongo) GetZoneMomentListByZid(ctx *gin.Context, req *zonemomentproto.Op if req.Status != nil { query["status"] = util.DerefInt64(req.Status) } + ctClause := qmgo.M{} if req.CtLowerBound != nil { ctClause["$gt"] = util.DerefInt64(req.CtLowerBound) @@ -4066,9 +4067,16 @@ func (m *Mongo) GetZoneMomentListByZid(ctx *gin.Context, req *zonemomentproto.Op if req.CtUpperBound != nil { ctClause["$lte"] = util.DerefInt64(req.CtUpperBound) } - if len(ctClause) != 0 { - query["ct"] = ctClause - } + + orClause := make([]qmgo.M, 0) + orClause = append(orClause, qmgo.M{ + "is_headed": consts.IsHeaded_Yes, + }) + orClause = append(orClause, qmgo.M{ + "priority_in_zone": ctClause, + }) + + query["$or"] = orClause err := col.Find(ctx, query).Sort("-priority_in_zone").Skip(int64(req.Offset)).Limit(int64(req.Limit)).All(&list) if err == qmgo.ErrNoSuchDocuments { err = nil @@ -4216,6 +4224,15 @@ func (m *Mongo) IncZoneMomentPriorityByIds(ctx *gin.Context, ids []int64, increm "priority_in_zone": increment, }, } + if increment == consts.ZoneMomentPriorityInZone_Increment { + up["$set"] = qmgo.M{ + "is_headed": consts.IsHeaded_Yes, + } + } else { + up["$set"] = qmgo.M{ + "is_headed": consts.IsHeaded_No, + } + } _, err := col.UpdateAll(ctx, query, up) return err } diff --git a/app/mix/service/apiservice.go b/app/mix/service/apiservice.go index bf2611ef..16d48b3f 100644 --- a/app/mix/service/apiservice.go +++ b/app/mix/service/apiservice.go @@ -2634,6 +2634,27 @@ func (s *Service) ApiGetZoneMomentListByCreaterMid(ctx *gin.Context, req *zonemo return } +func (s *Service) ApiHeadZoneMoment(ctx *gin.Context, req *zonemomentproto.ApiHeadReq) (ec errcode.ErrCode) { + ec = errcode.ErrCodeZoneMomentSrvOk + + incr := int64(0) + if req.OpType == consts.ZoneMomentHead_Head { + incr = consts.ZoneMomentPriorityInZone_Increment + } else { + incr = consts.ZoneMomentPriorityInZone_Decrement + } + + // 更新动态的状态 + err := _DefaultZoneMoment.OpIncPriorityByIds(ctx, req.ZoneMomentIds, incr) + if err != nil { + logger.Error("_DefaultZoneMoment OpIncPriorityByIds fail, req: %v, err: %v", util.ToJson(req), err) + ec = errcode.ErrCodeZoneMomentSrvFail + return + } + + return +} + func (s *Service) ApiZoneMomentThumbsUpMoment(ctx *gin.Context, req *zonemomentproto.ApiZoneMomentThumbsUpReq) (ec errcode.ErrCode) { ec = errcode.ErrCodeZoneMomentSrvOk diff --git a/app/mix/service/logic/zonemoment.go b/app/mix/service/logic/zonemoment.go index 6c930bfe..b9d01cf6 100644 --- a/app/mix/service/logic/zonemoment.go +++ b/app/mix/service/logic/zonemoment.go @@ -36,7 +36,8 @@ func (p *ZoneMoment) OpCreate(ctx *gin.Context, req *zonemomentproto.OpCreateReq req.ZoneMoment.Ct = goproto.Int64(time.Now().Unix()) req.ZoneMoment.Ut = goproto.Int64(time.Now().Unix()) req.ZoneMoment.DelFlag = goproto.Int64(consts.Exist) - req.ZoneMoment.PriorityInZone = req.ZoneMoment.Ct // 优先级默认按创建时间 + req.ZoneMoment.PriorityInZone = req.ZoneMoment.Ct // 优先级默认按创建时间 + req.ZoneMoment.IsHeaded = goproto.Int64(consts.IsHeaded_No) // 未置顶 err = p.store.CreateZoneMoment(ctx, req.ZoneMoment) if err != nil { logger.Error("CreateZoneMoment fail, err: %v", err) diff --git a/dbstruct/zonemoment.go b/dbstruct/zonemoment.go index a26adc32..867e3a50 100644 --- a/dbstruct/zonemoment.go +++ b/dbstruct/zonemoment.go @@ -28,6 +28,7 @@ type ZoneMoment struct { ManuallyReviewOpinion *string `json:"manually_review_opinion" bson:"manually_review_opinion"` // 人工复审意见 ManuallyReviewOperator *int64 `json:"manually_review_operator" bson:"manually_review_operator"` // 人工复审操作人 PriorityInZone *int64 `json:"priority_in_zone" bson:"priority_in_zone"` // 优先级 + IsHeaded *int64 `json:"is_headed" bson:"is_headed"` // 是否已置顶 Ct *int64 `json:"ct" bson:"ct"` // 创建时间 Ut *int64 `json:"ut" bson:"ut"` // 更新时间 DelFlag *int64 `json:"del_flag" bson:"del_flag"` // 删除标记