go-common/app/interface/main/account/service/vip/vip.go
2019-04-22 18:49:16 +08:00

184 lines
4.4 KiB
Go

package vip
import (
"context"
"strconv"
"go-common/app/interface/main/account/conf"
"go-common/app/interface/main/account/dao/vip"
"go-common/app/interface/main/account/model"
mrl "go-common/app/service/main/relation/model"
rlrpc "go-common/app/service/main/relation/rpc/client"
resmdl "go-common/app/service/main/resource/model"
rscrpc "go-common/app/service/main/resource/rpc/client"
v1 "go-common/app/service/main/vip/api"
vipmod "go-common/app/service/main/vip/model"
viprpc "go-common/app/service/main/vip/rpc/client"
"go-common/library/log"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// Service .
type Service struct {
// conf
c *conf.Config
// http
vipDao *vip.Dao
// vip rpc
vipRPC *viprpc.Service
relationRPC *rlrpc.Service
resourceRPC *rscrpc.Service
// vip service
vipgRPC v1.VipClient
}
// New create service instance and return.
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
vipDao: vip.New(c),
vipRPC: viprpc.New(c.RPCClient2.Vip),
relationRPC: rlrpc.New(c.RPCClient2.Relation),
resourceRPC: rscrpc.New(c.RPCClient2.Resource),
}
vipgRPC, err := v1.NewClient(c.VipClient)
if err != nil {
panic(err)
}
s.vipgRPC = vipgRPC
return
}
// OrderStatus .
func (s *Service) OrderStatus(c context.Context, arg *vipmod.ArgDialog) (res *vipmod.OrderResult, err error) {
if res, err = s.vipRPC.OrderPayResult(c, arg); err != nil {
return
}
if res == nil || res.Dialog == nil {
log.Warn("s.vipRPC.OrderPayResult(%+v) get nil", arg)
return
}
if res.Dialog.Follow {
var (
f *mrl.Following
ferr error
ip = metadata.String(c, metadata.RemoteIP)
ar = &mrl.ArgRelation{Mid: arg.Mid, Fid: s.c.Vipproperty.OfficialMid, RealIP: ip}
)
if f, ferr = s.relationRPC.Relation(c, ar); ferr != nil {
log.Error("s.Relation(%+v) err(%v)", ar, ferr)
return
}
if f == nil {
return
}
// 如果已经关注就隐藏关注模块
res.Dialog.Follow = !f.Following()
}
return
}
//Unfrozen user unfrozen vip
func (s *Service) Unfrozen(c context.Context, mid int64) (err error) {
if err = s.vipRPC.Unfrozen(c, mid); err != nil {
err = errors.WithStack(err)
return
}
return
}
//FrozenTime get frozen time
func (s *Service) FrozenTime(c context.Context, mid int64) (stime int64, err error) {
if stime, err = s.vipRPC.SurplusFrozenTime(c, mid); err != nil {
err = errors.WithStack(err)
return
}
return
}
// ResourceBanner .
func (s *Service) ResourceBanner(c context.Context, arg *model.ArgResource) (res []*resmdl.Banner, err error) {
resID := ""
if model.IsIPhone(arg.Plat) {
resID = model.ResourceBannerIPhone
}
if model.IsAndroid(arg.Plat) {
resID = model.ResourceBannerAndroid
}
if model.IsIPad(arg.Plat) {
resID = model.ResourceBannerIPad
}
var argb = &resmdl.ArgBanner{
Plat: arg.Plat,
Build: arg.Build,
MID: arg.MID,
ResIDs: resID,
Channel: "master",
IP: metadata.String(c, metadata.RemoteIP),
Buvid: arg.Buvid,
Network: arg.Network,
MobiApp: arg.MobiApp,
Device: arg.Device,
}
bs, err := s.resourceRPC.Banners(c, argb)
if err != nil || bs == nil {
log.Error("s.resourceRPC.Banners(%v) error(%+v) or bs is nil", argb, err)
return
}
if len(bs.Banner) > 0 {
var rid int
rid, err = strconv.Atoi(resID)
if err != nil {
err = errors.WithStack(err)
return
}
res = bs.Banner[rid]
}
return
}
// ResourceBuy .
func (s *Service) ResourceBuy(c context.Context, arg *model.ArgResource) (res []*resmdl.Banner, err error) {
resID := ""
if model.IsIPhone(arg.Plat) {
resID = model.ResourceBuyIPhone
}
if model.IsAndroid(arg.Plat) {
resID = model.ResourceBuyAndroid
}
if model.IsIPad(arg.Plat) {
resID = model.ResourceBuyIPad
}
log.Info("ResourceBuy resID(%s) arg(%+v)", resID, arg)
var argb = &resmdl.ArgBanner{
Plat: arg.Plat,
Build: arg.Build,
MID: arg.MID,
ResIDs: resID,
Channel: "master",
IP: metadata.String(c, metadata.RemoteIP),
Buvid: arg.Buvid,
Network: arg.Network,
MobiApp: arg.MobiApp,
Device: arg.Device,
}
bs, err := s.resourceRPC.Banners(c, argb)
if err != nil || bs == nil {
log.Error("s.resourceRPC.Banners(%v) error(%+v) or bs is nil", argb, err)
return
}
log.Info("s.resourceRPC.Banners(%+v)", bs.Banner)
if len(bs.Banner) > 0 {
var rid int
rid, err = strconv.Atoi(resID)
if err != nil {
err = errors.WithStack(err)
return
}
res = bs.Banner[rid]
}
return
}