165 lines
4.9 KiB
Go
165 lines
4.9 KiB
Go
|
package grpc
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
|
|||
|
"go-common/app/service/main/ugcpay-rank/api/v1"
|
|||
|
"go-common/app/service/main/ugcpay-rank/internal/conf"
|
|||
|
"go-common/app/service/main/ugcpay-rank/internal/model"
|
|||
|
"go-common/app/service/main/ugcpay-rank/internal/service"
|
|||
|
"go-common/app/service/main/ugcpay-rank/internal/service/rank"
|
|||
|
"go-common/library/log"
|
|||
|
"go-common/library/net/rpc/warden"
|
|||
|
|
|||
|
"github.com/golang/protobuf/ptypes/empty"
|
|||
|
)
|
|||
|
|
|||
|
// New Identify warden rpc server
|
|||
|
func New(cfg *warden.ServerConfig, s *service.Service) *warden.Server {
|
|||
|
w := warden.NewServer(cfg)
|
|||
|
v1.RegisterUGCPayRankServer(w.Server(), &UGCRankServer{s})
|
|||
|
ws, err := w.Start()
|
|||
|
if err != nil {
|
|||
|
panic(err)
|
|||
|
}
|
|||
|
return ws
|
|||
|
}
|
|||
|
|
|||
|
// UGCRankServer .
|
|||
|
type UGCRankServer struct {
|
|||
|
svr *service.Service
|
|||
|
}
|
|||
|
|
|||
|
var _ v1.UGCPayRankServer = &UGCRankServer{}
|
|||
|
|
|||
|
// RankElecAllAV .
|
|||
|
func (u *UGCRankServer) RankElecAllAV(ctx context.Context, req *v1.RankElecAVReq) (resp *v1.RankElecAVResp, err error) {
|
|||
|
if req.AVID <= 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
if req.RankSize <= 0 || req.RankSize > conf.Conf.Biz.ElecAVRankSize {
|
|||
|
req.RankSize = conf.Conf.Biz.ElecAVRankSize
|
|||
|
}
|
|||
|
r, err := u.svr.ElecTotalRankAV(ctx, req.UPMID, req.AVID, req.RankSize)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
resp = &v1.RankElecAVResp{
|
|||
|
AV: r,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// RankElecMonthAV .
|
|||
|
func (u *UGCRankServer) RankElecMonthAV(ctx context.Context, req *v1.RankElecAVReq) (resp *v1.RankElecAVResp, err error) {
|
|||
|
if req.AVID <= 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
if req.RankSize <= 0 || req.RankSize > conf.Conf.Biz.ElecAVRankSize {
|
|||
|
req.RankSize = conf.Conf.Biz.ElecAVRankSize
|
|||
|
}
|
|||
|
r, err := u.svr.ElecMonthRankAV(ctx, req.UPMID, req.AVID, req.RankSize)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
resp = &v1.RankElecAVResp{
|
|||
|
AV: r,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// RankElecMonthUP .
|
|||
|
func (u *UGCRankServer) RankElecMonthUP(ctx context.Context, req *v1.RankElecUPReq) (resp *v1.RankElecUPResp, err error) {
|
|||
|
if req.UPMID <= 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
if req.RankSize <= 0 || req.RankSize > conf.Conf.Biz.ElecUPRankSize {
|
|||
|
req.RankSize = conf.Conf.Biz.ElecUPRankSize
|
|||
|
}
|
|||
|
r, err := u.svr.ElecMonthRankUP(ctx, req.UPMID, req.RankSize)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
resp = &v1.RankElecUPResp{
|
|||
|
UP: r,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// RankElecMonth .
|
|||
|
func (u *UGCRankServer) RankElecMonth(ctx context.Context, req *v1.RankElecMonthReq) (resp *v1.RankElecMonthResp, err error) {
|
|||
|
var (
|
|||
|
up *model.RankElecUPProto
|
|||
|
av *model.RankElecAVProto
|
|||
|
)
|
|||
|
if req.RankSize <= 0 || req.RankSize > conf.Conf.Biz.ElecAVRankSize {
|
|||
|
req.RankSize = conf.Conf.Biz.ElecAVRankSize
|
|||
|
}
|
|||
|
if req.UPMID > 0 {
|
|||
|
if up, err = u.svr.ElecMonthRankUP(ctx, req.UPMID, req.RankSize); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
if req.AVID > 0 {
|
|||
|
if av, err = u.svr.ElecMonthRankAV(ctx, req.UPMID, req.AVID, req.RankSize); err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
resp = &v1.RankElecMonthResp{
|
|||
|
UP: up,
|
|||
|
AV: av,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// RankElecUpdateOrder .
|
|||
|
func (u *UGCRankServer) RankElecUpdateOrder(ctx context.Context, req *v1.RankElecUpdateOrderReq) (reply *empty.Empty, err error) {
|
|||
|
reply = &empty.Empty{}
|
|||
|
var (
|
|||
|
prs = make([]rank.PrepRank, 0)
|
|||
|
elecMonthlyPrepUPRank = rank.NewElecPrepUPRank(req.UPMID, conf.Conf.Biz.ElecUPRankSize, req.Ver, u.svr.Dao)
|
|||
|
// elecTotalPrepUPRank = rank.NewElecPrepUPRank(req.UPMID, conf.Conf.Biz.ElecUPRankSize, 0, u.svr.Dao) 因为敖厂长,所以不能及时更新up总榜,否则很容易db超时
|
|||
|
)
|
|||
|
prs = append(prs, elecMonthlyPrepUPRank)
|
|||
|
if req.AVID != 0 {
|
|||
|
elecMonthlyPrepAVRank := rank.NewElecPrepAVRank(req.AVID, conf.Conf.Biz.ElecAVRankSize, req.Ver, u.svr.Dao)
|
|||
|
elecTotalPrepAVRank := rank.NewElecPrepAVRank(req.AVID, conf.Conf.Biz.ElecAVRankSize, 0, u.svr.Dao)
|
|||
|
prs = append(prs, elecMonthlyPrepAVRank, elecTotalPrepAVRank)
|
|||
|
}
|
|||
|
// 更新缓存Prep_Rank
|
|||
|
u.svr.Asyncer.Do(ctx, func(ctx context.Context) {
|
|||
|
for _, pr := range prs {
|
|||
|
if theErr := u.svr.UpdateElecPrepRankFromOrder(ctx, pr, req.PayMID, req.Fee); theErr != nil {
|
|||
|
log.Error("update prep_rank failed, pr: %s, payMID: %d, fee: %d, err: %+v", pr, req.PayMID, req.Fee, theErr)
|
|||
|
continue
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// RankElecUpdateMessage .
|
|||
|
func (u *UGCRankServer) RankElecUpdateMessage(ctx context.Context, req *v1.RankElecUpdateMessageReq) (reply *empty.Empty, err error) {
|
|||
|
reply = &empty.Empty{}
|
|||
|
// 更新缓存Prep_Rank
|
|||
|
var (
|
|||
|
prs = make([]rank.PrepRank, 0)
|
|||
|
)
|
|||
|
if req.AVID != 0 {
|
|||
|
prs = append(prs, rank.NewElecPrepAVRank(req.AVID, conf.Conf.Biz.ElecAVRankSize, req.Ver, u.svr.Dao))
|
|||
|
prs = append(prs, rank.NewElecPrepAVRank(req.AVID, conf.Conf.Biz.ElecAVRankSize, 0, u.svr.Dao))
|
|||
|
}
|
|||
|
if req.UPMID != 0 {
|
|||
|
prs = append(prs, rank.NewElecPrepUPRank(req.UPMID, conf.Conf.Biz.ElecUPRankSize, req.Ver, u.svr.Dao))
|
|||
|
}
|
|||
|
u.svr.Asyncer.Do(ctx, func(ctx context.Context) {
|
|||
|
for _, pr := range prs {
|
|||
|
if theErr := u.svr.UpdateElecPrepRankFromMessage(ctx, pr, req.PayMID, req.Message, req.Hidden); theErr != nil {
|
|||
|
log.Error("update prep_rank failed, pr: %s, payMID: %d, message: %s, hidden: %t, err: %+v", pr, req.PayMID, req.Message, req.Hidden, theErr)
|
|||
|
continue
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
return
|
|||
|
}
|