Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"associate_outer_test.go",
"coupon_test.go",
"manager_test.go",
"panel_test.go",
"vip_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/account/conf:go_default_library",
"//app/interface/main/account/model:go_default_library",
"//app/service/main/vip/model:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"associate.go",
"associate_limit.go",
"associate_outer.go",
"coupon.go",
"manager.go",
"panel.go",
"privilege.go",
"resource.go",
"tips.go",
"vip.go",
"welfare.go",
],
importpath = "go-common/app/interface/main/account/service/vip",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/account/conf:go_default_library",
"//app/interface/main/account/dao/vip:go_default_library",
"//app/interface/main/account/model:go_default_library",
"//app/service/main/coupon/model:go_default_library",
"//app/service/main/relation/model:go_default_library",
"//app/service/main/relation/rpc/client:go_default_library",
"//app/service/main/resource/model:go_default_library",
"//app/service/main/resource/rpc/client:go_default_library",
"//app/service/main/vip/api:go_default_library",
"//app/service/main/vip/model:go_default_library",
"//app/service/main/vip/rpc/client:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata:go_default_library",
"//library/sync/errgroup:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,84 @@
package vip
import (
"context"
"encoding/json"
"go-common/app/interface/main/account/model"
vol "go-common/app/service/main/vip/model"
v1 "go-common/app/service/main/vip/api"
)
// BindInfoByMid bind info by mid[bilibili->third].
func (s *Service) BindInfoByMid(c context.Context, a *model.ArgBindInfo) (res *v1.BindInfoByMidReply, err error) {
return s.vipgRPC.BindInfoByMid(c, &v1.BindInfoByMidReq{
Mid: a.Mid,
AppId: a.AppID,
})
}
// CreateAssociateOrder create associate order.
func (s *Service) CreateAssociateOrder(c context.Context, req *model.ArgCreateAssociateOrder) (res map[string]interface{}, err error) {
var p *v1.CreateAssociateOrderReply
if p, err = s.vipgRPC.CreateAssociateOrder(c, &v1.CreateAssociateOrderReq{
Mid: req.Mid,
Month: req.Month,
Platform: req.Platform,
MobiApp: req.MobiApp,
Device: req.Device,
AppId: req.AppID,
AppSubId: req.AppSubID,
OrderType: int32(req.OrderType),
Dtype: int32(req.Dtype),
ReturnUrl: req.ReturnURL,
CouponToken: req.CouponToken,
Bmid: req.Bmid,
PanelType: req.PanelType,
Build: req.Build,
IP: req.IP,
}); err != nil {
return
}
json.Unmarshal([]byte(p.PayParam), &res)
return
}
// AssociatePanel associate panel.
func (s *Service) AssociatePanel(c context.Context, req *vol.ArgAssociatePanel) (res []*v1.AssociatePanelInfo, err error) {
var reply *v1.AssociatePanelReply
if reply, err = s.vipgRPC.AssociatePanel(c, &v1.AssociatePanelReq{
Mid: req.Mid,
SortTp: int32(req.SortTP),
IP: req.IP,
MobiApp: req.MobiApp,
Device: req.Device,
Platform: req.Platform,
PanelType: req.PanelType,
Build: req.Build,
}); err != nil {
return
}
res = reply.List
return
}
// EleRedPackages ele red packages.
func (s *Service) EleRedPackages(c context.Context) (res []*v1.ModelEleRedPackage, err error) {
var reply *v1.EleRedPackagesReply
if reply, err = s.vipgRPC.EleRedPackages(c, &v1.EleRedPackagesReq{}); err != nil {
return
}
res = reply.List
return
}
// EleSpecailFoods ele speacail foods.
func (s *Service) EleSpecailFoods(c context.Context) (res []*v1.ModelEleSpecailFoods, err error) {
var reply *v1.EleSpecailFoodsReply
if reply, err = s.vipgRPC.EleSpecailFoods(c, &v1.EleSpecailFoodsReq{}); err != nil {
return
}
res = reply.List
return
}

View File

@@ -0,0 +1,65 @@
package vip
import (
"time"
"go-common/library/ecode"
"go-common/library/log"
)
// ActivityTimeLimit activity time limit.
func (s *Service) ActivityTimeLimit(mid int64) error {
if len(s.c.Vipproperty.AssociateWhiteMidMap) > 0 && mid != 0 {
for _, v := range s.c.Vipproperty.AssociateWhiteMidMap {
if v == mid {
return nil
}
}
}
now := time.Now().Unix()
if s.c.Vipproperty.ActStartTime > now {
return ecode.VipActivityNotStart
}
if s.c.Vipproperty.ActEndTime < now {
return ecode.VipActivityHadEnd
}
return nil
}
// ActivityWhiteIPLimit act ip limit.
func (s *Service) ActivityWhiteIPLimit(appkey string, ip string) error {
var (
whiteips []string
ok bool
)
if whiteips, ok = s.c.Vipproperty.AssociateWhiteIPMap[appkey]; !ok {
log.Error("act ip limit appkey(%s) ip(%s)", appkey, ip)
return ecode.VipWhiteIPListErr
}
for _, v := range whiteips {
if v == ip {
return nil
}
}
log.Error("act ip limit appkey(%s) ip(%s)", appkey, ip)
return ecode.VipWhiteIPListErr
}
// ActivityWhiteOutOpenIDLimit act out open id limit.
func (s *Service) ActivityWhiteOutOpenIDLimit(openid string) error {
if len(s.c.Vipproperty.AssociateWhiteOutOpenIDMap) > 0 && openid != "" {
for _, v := range s.c.Vipproperty.AssociateWhiteOutOpenIDMap {
if v == openid {
return nil
}
}
}
now := time.Now().Unix()
if s.c.Vipproperty.ActStartTime > now {
return ecode.VipActivityNotStart
}
if s.c.Vipproperty.ActEndTime < now {
return ecode.VipActivityHadEnd
}
return nil
}

View File

@@ -0,0 +1,100 @@
package vip
import (
"bytes"
"context"
"go-common/app/interface/main/account/model"
v1 "go-common/app/service/main/vip/api"
"go-common/library/log"
)
// ElemeOAuthURI get ele oauth uri.
func (s *Service) ElemeOAuthURI(c context.Context, csrf string) string {
var buf bytes.Buffer
buf.WriteString(s.c.Vipproperty.EleOAuthURI)
buf.WriteString("?consumer_key=")
buf.WriteString(s.c.Vipproperty.EleConsumerKey)
buf.WriteString("&scope=user_basic_info&redirect_uri=")
buf.WriteString(s.c.Vipproperty.EleOAuthCallBackURI)
buf.WriteString("&state=")
buf.WriteString(csrf)
return buf.String()
}
// OpenIDByAuthCode third get open_id by auth code.
func (s *Service) OpenIDByAuthCode(c context.Context, a *model.ArgAuthCode) (res *model.OpenIDResp, err error) {
var (
data *model.OAuth2InfoResp
r *v1.RegisterOpenIDReply
)
//oauth2 token.
if data, err = s.vipDao.OAuth2ByCode(c, a); err != nil {
return
}
res = new(model.OpenIDResp)
if r, err = s.vipgRPC.RegisterOpenID(c, &v1.RegisterOpenIDReq{Mid: data.Mid, AppId: a.APPID}); err != nil {
return
}
res.OpenID = r.OpenId
return
}
// OpenAuthCallBack open auth callback[third->bilibili].
func (s *Service) OpenAuthCallBack(c context.Context, a *model.ArgOpenAuthCallBack) (uri string) {
var (
ret = "0"
err error
)
if _, err = s.vipgRPC.OpenAuthCallBack(c, &v1.OpenAuthCallBackReq{
Mid: a.Mid,
ThirdCode: a.ThirdCode,
AppId: a.AppID,
}); err != nil {
log.Error("vipSvc.OpenAuthCallBack(%+v) err(%+v)", a, err)
ret = "1"
}
uri = s.c.Vipproperty.ActivityURI + "?bind_ret=" + ret
return
}
// BilibiliPrizeGrant vip prize grant.
func (s *Service) BilibiliPrizeGrant(c context.Context, a *model.ArgBilibiliPrizeGrant) (res *v1.BilibiliPrizeGrantReply, err error) {
return s.vipgRPC.BilibiliPrizeGrant(c, &v1.BilibiliPrizeGrantReq{
PrizeKey: a.PrizeKey,
UniqueNo: a.UniqueNo,
OpenId: a.OpenID,
AppId: a.AppID,
})
}
// BilibiliVipGrant vip grant.
func (s *Service) BilibiliVipGrant(c context.Context, a *model.ArgBilibiliVipGrant) (err error) {
_, err = s.vipgRPC.BilibiliVipGrant(c, &v1.BilibiliVipGrantReq{
OpenId: a.OpenID,
AppId: a.AppID,
OutOpenId: a.OutOpenID,
OutOrderNo: a.OutOrderNO,
Duration: a.Duration,
})
return
}
// OpenBindByOutOpenID associate user bind by out_open_id [third -> bilibili].
func (s *Service) OpenBindByOutOpenID(c context.Context, a *model.ArgBind) (err error) {
_, err = s.vipgRPC.OpenBindByOutOpenID(c, &v1.OpenBindByOutOpenIDReq{
OpenId: a.OpenID,
OutOpenId: a.OutOpenID,
AppId: a.AppID,
})
return
}
// UserInfoByOpenID get userinfo by open_id.
func (s *Service) UserInfoByOpenID(c context.Context, a *model.ArgUserInfoByOpenID) (res *v1.UserInfoByOpenIDReply, err error) {
return s.vipgRPC.UserInfoByOpenID(c, &v1.UserInfoByOpenIDReq{
OpenId: a.OpenID,
Ip: a.IP,
AppId: a.AppID,
})
}

View File

@@ -0,0 +1,60 @@
package vip
import (
"context"
"fmt"
"go-common/app/interface/main/account/model"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
// go test -test.v -test.run TestServiceOpenIDByAuthCode
func TestServiceOpenIDByAuthCode(t *testing.T) {
Convey("TestServiceOpenIDByAuthCode", t, func() {
res, err := s.OpenIDByAuthCode(context.TODO(), &model.ArgAuthCode{})
fmt.Println("res", res)
So(err, ShouldBeNil)
})
}
// go test -test.v -test.run TestServiceOpenAuthCallBack
func TestServiceOpenAuthCallBack(t *testing.T) {
Convey("TestServiceOpenAuthCallBack", t, func() {
err := s.OpenAuthCallBack(context.TODO(), &model.ArgOpenAuthCallBack{})
So(err, ShouldBeNil)
})
}
// go test -test.v -test.run TestServiceBilibiliPrizeGrant
func TestServiceBilibiliPrizeGrant(t *testing.T) {
Convey("TestServiceBilibiliPrizeGrant", t, func() {
res, err := s.BilibiliPrizeGrant(context.TODO(), &model.ArgBilibiliPrizeGrant{
PrizeKey: "coupon_ele_1",
UniqueNo: "1x",
OpenID: "e11303e8c26268a6cbdc2dc7fce55199",
AppID: 32,
})
fmt.Println("res:", res)
So(err, ShouldBeNil)
})
}
func TestServiceOpenBindByOutOpenID(t *testing.T) {
Convey("TestServiceOpenBindByOutOpenID", t, func() {
err := s.OpenBindByOutOpenID(context.TODO(), &model.ArgBind{
AppID: 32,
OutOpenID: "o8f999ad5d724b4a2ljbp7cm",
OpenID: "e11303e8c26268a6cbdc2dc7fce55199",
})
So(err, ShouldBeNil)
})
}
func TestServiceElemeOAuthURI(t *testing.T) {
Convey("TestServiceElemeOAuthURI", t, func() {
url := s.ElemeOAuthURI(context.TODO(), "state")
fmt.Println("url-------", url)
So(url, ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,47 @@
package vip
import (
"context"
"go-common/app/interface/main/account/model"
col "go-common/app/service/main/coupon/model"
v1 "go-common/app/service/main/vip/api"
vipml "go-common/app/service/main/vip/model"
)
// CouponBySuitID coupon by suit id.
func (s *Service) CouponBySuitID(c context.Context, mid int64, sid int64) (res *col.CouponAllowancePanelInfo, err error) {
res, err = s.vipRPC.CouponBySuitIDV2(c, &vipml.ArgCouponPanelV2{Mid: mid, Sid: sid})
return
}
// CouponBySuitIDV2 get coupon by mid and suit info.
func (s *Service) CouponBySuitIDV2(c context.Context, a *model.ArgCouponBySuitID) (res *v1.CouponBySuitIDReply, err error) {
return s.vipgRPC.CouponBySuitID(c, &v1.CouponBySuitIDReq{
Mid: a.Mid,
Sid: a.Sid,
MobiApp: a.MobiApp,
Device: a.Device,
Platform: a.Platform,
PanelType: a.PanelType,
Build: a.Build,
})
}
// CouponsForPanel coupon for panel.
func (s *Service) CouponsForPanel(c context.Context, mid int64, sid int64, platform string) (res *col.CouponAllowancePanelResp, err error) {
res, err = s.vipRPC.CouponsForPanel(c, &vipml.ArgCouponPanel{Mid: mid, Sid: sid, Platform: vipml.PlatformByName[platform]})
return
}
// CouponsForPanelV2 coupon for panel.
func (s *Service) CouponsForPanelV2(c context.Context, mid int64, sid int64) (res *col.CouponAllowancePanelResp, err error) {
res, err = s.vipRPC.CouponsForPanelV2(c, &vipml.ArgCouponPanelV2{Mid: mid, Sid: sid})
return
}
// CancelUseCoupon coupon cancel use.
func (s *Service) CancelUseCoupon(c context.Context, arg *vipml.ArgCancelUseCoupon) (err error) {
err = s.vipDao.CancelUseCoupon(c, arg)
return
}

View File

@@ -0,0 +1,17 @@
package vip
import (
"context"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
// go test -test.v -test.run TestServiceCouponsForPanel
func TestServiceCouponsForPanel(t *testing.T) {
Convey("TestServiceCouponsForPanel", t, func() {
res, err := s.CouponsForPanel(context.TODO(), int64(1), int64(96), "pc")
t.Logf("%v", res)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,14 @@
package vip
import (
"context"
"go-common/app/interface/main/account/model"
)
// ManagerInfo manager info.
func (s *Service) ManagerInfo(c context.Context) (res *model.ManagerResp, err error) {
res = new(model.ManagerResp)
res.JointlyInfo, err = s.vipRPC.Jointly(c)
return
}

View File

@@ -0,0 +1,17 @@
package vip
import (
"context"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
// go test -test.v -test.run TestServiceManagerInfo
func TestServiceManagerInfo(t *testing.T) {
Convey("TestServiceManagerInfo", t, func() {
res, err := s.ManagerInfo(context.TODO())
t.Logf("res %+v", res)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,220 @@
package vip
import (
"context"
"go-common/app/interface/main/account/model"
vipv1 "go-common/app/service/main/vip/api"
vipml "go-common/app/service/main/vip/model"
"go-common/library/log"
"go-common/library/net/metadata"
"go-common/library/sync/errgroup"
"github.com/pkg/errors"
)
// VipPanel .
func (s *Service) VipPanel(c context.Context, mid int64, a *model.VipPanelRes) (res *vipml.VipPirceResp, err error) {
ip := metadata.String(c, metadata.RemoteIP)
res, err = s.vipRPC.VipPanelInfo2(c, &vipml.ArgPanel{Mid: mid, SortTp: a.SortTP, IP: ip, Device: a.Device, MobiApp: a.MobiApp, Platform: a.Platform, PanelType: a.PanelType, SubType: a.SubType, Month: a.Month, Build: a.Build})
return
}
// VipPanel5 .
func (s *Service) VipPanel5(c context.Context, mid int64, a *model.VipPanelRes) (res *vipml.VipPirceResp5, err error) {
ip := metadata.String(c, metadata.RemoteIP)
res, err = s.vipRPC.VipPanelInfo5(c, &vipml.ArgPanel{Mid: mid, SortTp: a.SortTP, IP: ip, Device: a.Device, MobiApp: a.MobiApp, Platform: a.Platform, PanelType: a.PanelType, SubType: a.SubType, Month: a.Month, Build: a.Build})
return
}
// VipPanelV2 vip panel v2.
func (s *Service) VipPanelV2(c context.Context, a *model.ArgVipPanel) (res *model.VipPanelResp, err error) {
var (
g errgroup.Group
p *vipml.VipPirceResp5
ts []*vipml.TipsResp
)
res = new(model.VipPanelResp)
g.Go(func() (err error) {
if p, err = s.vipRPC.VipPanelInfo5(c, &vipml.ArgPanel{
Mid: a.Mid,
SortTp: a.SortTP,
IP: a.IP,
Device: a.Device,
MobiApp: a.MobiApp,
Platform: a.Platform,
PanelType: a.PanelType,
Build: a.Build,
}); err != nil || p == nil {
log.Error("s.vipRPC.VipPanelInfo2(%+v) error(%v)", a, err)
return
}
res.Vps = p.Vps
res.CodeSwitch = p.CodeSwitch
res.GiveSwitch = p.GiveSwitch
res.Privileges = p.Privileges
return
})
g.Go(func() (err error) {
if ts, err = s.vipRPC.Tips(c, &vipml.ArgTips{
Version: a.Build,
Platform: a.Platform,
Position: vipml.PanelPosition,
}); err != nil {
log.Error("s.vipRPC.Tips(%+v) error(%v)", a, err)
}
if len(ts) == 0 {
return
}
res.TipInfo = ts[0]
return
})
g.Go(func() (err error) {
if res.UserInfo, err = s.vipRPC.PanelExplain(c, &vipml.ArgPanelExplain{
Mid: a.Mid,
}); err != nil {
log.Error("s.vipRPC.PanelExplain(%+v) error(%v)", a, err)
}
return
})
if err = g.Wait(); err != nil {
err = errors.WithStack(err)
}
return
}
// VipPanelV8 vip panel v8
func (s *Service) VipPanelV8(c context.Context, a *model.ArgVipPanel) (res *model.VipPanelV8Resp, err error) {
var (
g errgroup.Group
p *vipml.VipPirceResp5
ts []*vipml.TipsResp
)
res = new(model.VipPanelV8Resp)
g.Go(func() (err error) {
if p, err = s.vipRPC.VipPanelInfo5(c, &vipml.ArgPanel{
Mid: a.Mid,
SortTp: a.SortTP,
IP: a.IP,
Device: a.Device,
MobiApp: a.MobiApp,
Platform: a.Platform,
PanelType: a.PanelType,
Build: a.Build,
}); err != nil || p == nil {
log.Error("s.vipRPC.VipPanelInfo2(%+v) error(%v)", a, err)
return
}
res.Vps = p.Vps
res.CodeSwitch = p.CodeSwitch
res.GiveSwitch = p.GiveSwitch
res.Privileges = p.Privileges
res.CouponInfo = p.CouponInfo
res.CouponSwith = p.CouponSwith
return
})
g.Go(func() (err error) {
if ts, err = s.vipRPC.Tips(c, &vipml.ArgTips{
Version: a.Build,
Platform: a.Platform,
Position: vipml.PanelPosition,
}); err != nil {
log.Error("s.vipRPC.Tips(%+v) error(%v)", a, err)
}
if len(ts) == 0 {
return
}
res.TipInfo = ts[0]
return
})
g.Go(func() (err error) {
if res.UserInfo, err = s.vipRPC.PanelExplain(c, &vipml.ArgPanelExplain{
Mid: a.Mid,
}); err != nil {
log.Error("s.vipRPC.PanelExplain(%+v) error(%v)", a, err)
}
return
})
g.Go(func() (err error) {
if res.AssociateVips, err = s.vipRPC.AssociateVips(c, &vipml.ArgAssociateVip{
Platform: a.Platform,
Device: a.Device,
MobiApp: a.MobiApp,
}); err != nil {
log.Error("s.vipRPC.AssociateVips(%+v) error(%v)", a, err)
}
return
})
if err = g.Wait(); err != nil {
err = errors.WithStack(err)
}
return
}
// VipPanelV9 vip panel v9
func (s *Service) VipPanelV9(c context.Context, a *model.ArgVipPanel) (res *model.VipPanelRespV9, err error) {
var (
p *vipv1.VipUserPanelReply
ts []*vipml.TipsResp
)
eg, ec := errgroup.WithContext(c)
res = new(model.VipPanelRespV9)
eg.Go(func() (err error) {
if p, err = s.vipgRPC.VipUserPanel(ec, &vipv1.VipUserPanelReq{
Mid: a.Mid,
SortTp: int32(a.SortTP),
Ip: a.IP,
Device: a.Device,
MobiApp: a.MobiApp,
Platform: a.Platform,
PanelType: a.PanelType,
Build: a.Build,
}); err != nil || p == nil {
log.Error("s.vipRPC.VipPanelInfo2(%+v) error(%v)", a, err)
return
}
res.Vps = p.PriceList
res.CodeSwitch = p.CodeSwitch
res.GiveSwitch = p.GiveSwitch
res.Privileges = p.Privileges
res.Coupon = p.Coupon
res.CouponSwith = p.CouponSwitch
return
})
eg.Go(func() (err error) {
if ts, err = s.vipRPC.Tips(ec, &vipml.ArgTips{
Version: a.Build,
Platform: a.Platform,
Position: vipml.PanelPosition,
}); err != nil {
log.Error("s.vipRPC.Tips(%+v) error(%v)", a, err)
}
if len(ts) == 0 {
return
}
res.TipInfo = ts[0]
return
})
eg.Go(func() (err error) {
if res.UserInfo, err = s.vipRPC.PanelExplain(ec, &vipml.ArgPanelExplain{
Mid: a.Mid,
}); err != nil {
log.Error("s.vipRPC.PanelExplain(%+v) error(%v)", a, err)
}
return
})
eg.Go(func() (err error) {
if res.AssociateVips, err = s.vipRPC.AssociateVips(ec, &vipml.ArgAssociateVip{
Platform: a.Platform,
Device: a.Device,
MobiApp: a.MobiApp,
}); err != nil {
log.Error("s.vipRPC.AssociateVips(%+v) error(%v)", a, err)
}
return
})
if err = eg.Wait(); err != nil {
err = errors.WithStack(err)
}
return
}

View File

@@ -0,0 +1,46 @@
package vip
import (
"context"
"fmt"
"testing"
"go-common/app/interface/main/account/model"
. "github.com/smartystreets/goconvey/convey"
)
// go test -test.v -test.run TestServiceVipPanelV2
func TestServiceVipPanelV2(t *testing.T) {
Convey("TestServiceVipPanelV2", t, func() {
res, err := s.VipPanelV2(context.TODO(), &model.ArgVipPanel{
Platform: "ios",
MobiApp: "mobi_app",
Device: "phone",
Build: 1000000,
Mid: 476853,
})
t.Logf("res %+v", res)
t.Logf("vps %+v", res.Vps)
t.Logf("Privileges %+v", res.Privileges)
t.Logf("TipInfo %+v", res.TipInfo)
t.Logf("UserInfo %+v", res.UserInfo)
So(err, ShouldBeNil)
})
}
// go test -test.v -test.run TestServiceVipPanelV8
func TestServiceVipPanelV8(t *testing.T) {
Convey("TestServiceVipPanelV8", t, func() {
res, err := s.VipPanelV8(context.Background(), &model.ArgVipPanel{
Platform: "android",
MobiApp: "android",
Device: "android",
})
fmt.Println("res,err", res, err)
fmt.Println("res:", res)
fmt.Println("res.AssociateVips:", res.AssociateVips)
fmt.Println("res.Vps:", res.Vps)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,19 @@
package vip
import (
"context"
"go-common/app/service/main/vip/model"
)
// PrivilegebySid privilege by sid.
func (s *Service) PrivilegebySid(c context.Context, arg *model.ArgPrivilegeBySid) (res *model.PrivilegesResp, err error) {
res, err = s.vipRPC.PrivilegeBySid(c, arg)
return
}
// PrivilegebyType privilege by type.
func (s *Service) PrivilegebyType(c context.Context, arg *model.ArgPrivilegeDetail) (res []*model.PrivilegeDetailResp, err error) {
res, err = s.vipRPC.PrivilegeByType(c, arg)
return
}

View File

@@ -0,0 +1,81 @@
package vip
import (
"context"
"go-common/app/interface/main/account/model"
vipmod "go-common/app/service/main/vip/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// CodeOpen .
func (s *Service) CodeOpen(c context.Context, mid int64, code, token, verify string) (codeInfo *model.ResourceCode, err error) {
var (
codeResp *model.ResourceCodeResq
)
if codeResp, err = s.vipDao.CodeOpen(c, mid, code, token, verify); err != nil {
err = errors.WithStack(err)
return
}
codeInfo = codeResp.Data
return
}
//CodeOpeneds sel code opened
func (s *Service) CodeOpeneds(c context.Context, arg *model.CodeInfoReq, ip string) (resp []*vipmod.CodeInfoResp, err error) {
if err = s.checkIP(arg.Appkey, ip); err != nil {
err = errors.WithStack(err)
return
}
if resp, err = s.vipDao.CodeOpeneds(c, arg, ip); err != nil {
err = errors.WithStack(err)
}
return
}
func (s *Service) checkIP(appkey, ip string) (err error) {
var (
strings []string
ok bool
)
if strings, ok = s.c.Vipproperty.CodeOpenwhiteIPMap[appkey]; !ok {
log.Error("checkIP s.c.Vipproperty.CodeOpenwhiteIPMap empty(%s)", appkey)
err = ecode.VipWhiteIPListErr
return
}
for _, v := range strings {
if v == ip {
return
}
}
log.Error("checkIP fail(%s, %s)", appkey, ip)
err = ecode.VipWhiteIPListErr
return
}
// CodeVerify .
func (s *Service) CodeVerify(c context.Context) (token *model.Token, err error) {
if token, err = s.vipDao.CodeVerify(c); err != nil {
err = errors.WithStack(err)
}
return
}
//UseBatch use resource batch
func (s *Service) UseBatch(c context.Context, arg *vipmod.ArgUseBatch) (err error) {
ip := metadata.String(c, metadata.RemoteIP)
if err = s.checkIP(arg.Appkey, ip); err != nil {
err = errors.WithStack(err)
return
}
if err = s.vipRPC.ResourceBatchOpenVip(c, arg); err != nil {
err = errors.WithStack(err)
return
}
return
}

View File

@@ -0,0 +1,40 @@
package vip
import (
"context"
"go-common/app/interface/main/account/model"
vipmol "go-common/app/service/main/vip/model"
"github.com/pkg/errors"
)
// Tips vip tips info.
func (s *Service) Tips(c context.Context, req *model.TipsReq) (res *vipmol.TipsResp, err error) {
var rs []*vipmol.TipsResp
arg := &vipmol.ArgTips{
Platform: req.Platform,
Version: req.Version,
Position: req.Position,
}
if rs, err = s.vipRPC.Tips(c, arg); err != nil {
err = errors.WithStack(err)
}
if len(rs) > 0 {
res = rs[0]
}
return
}
// TipsV2 vip tips info v2.
func (s *Service) TipsV2(c context.Context, req *model.TipsReq) (res []*vipmol.TipsResp, err error) {
arg := &vipmol.ArgTips{
Platform: req.Platform,
Version: req.Version,
Position: req.Position,
}
if res, err = s.vipRPC.Tips(c, arg); err != nil {
err = errors.WithStack(err)
}
return
}

View File

@@ -0,0 +1,183 @@
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
}

View File

@@ -0,0 +1,98 @@
package vip
import (
"context"
"flag"
"testing"
"go-common/app/interface/main/account/conf"
"go-common/app/interface/main/account/model"
vipmod "go-common/app/service/main/vip/model"
. "github.com/smartystreets/goconvey/convey"
)
var (
s *Service
)
func init() {
flag.Set("conf", "../../cmd/account-interface-example.toml")
var err error
if err = conf.Init(); err != nil {
panic(err)
}
s = New(conf.Conf)
}
func TestService_CodeOpen(t *testing.T) {
Convey("code open", t, func() {
codeInfo, err := s.CodeOpen(context.TODO(), 123, "7b6e2263b8355928", "fd09f95433ed4c579f03ca7112b843ab", "45tn")
t.Logf("%v", codeInfo)
So(err, ShouldBeNil)
})
}
func TestService_CodeVerify(t *testing.T) {
Convey("code verify", t, func() {
_, err := s.CodeVerify(context.TODO())
So(err, ShouldBeNil)
})
}
// go test -test.v -test.run TestServiceTips
func TestServiceTips(t *testing.T) {
Convey("TestServiceTips", t, func() {
req := &model.TipsReq{
Version: int64(6000),
Platform: "ios",
}
res, err := s.Tips(context.TODO(), req)
t.Logf("data(+%v)", res)
So(err, ShouldBeNil)
})
}
func TestService_CodeOpeneds(t *testing.T) {
Convey("test service code opened", t, func() {
arg := new(model.CodeInfoReq)
resp, err := s.CodeOpeneds(context.TODO(), arg, "127.0.0.1")
t.Logf("data(%+v)", resp)
So(err, ShouldBeNil)
})
}
func TestService_Unfrozen(t *testing.T) {
Convey("test unfrozen", t, func() {
err := s.Unfrozen(context.TODO(), 10001)
So(err, ShouldBeNil)
})
}
func TestService_FrozenTime(t *testing.T) {
Convey("test frozen time", t, func() {
ctime, err := s.FrozenTime(context.TODO(), 10001)
t.Logf("%+v", ctime)
So(err, ShouldBeNil)
})
}
func TestService_checkIp(t *testing.T) {
Convey("test check ip", t, func() {
err := s.checkIP("b2cf4e9dbe9fd2e3", "111.203.12.97")
So(err, ShouldBeNil)
err = s.checkIP("b2cf4e9dbe9fd2e31", "111.203.12.97")
So(err, ShouldNotBeNil)
})
}
func TestService_OrderStatus(t *testing.T) {
Convey("TestService_OrderStatus", t, func() {
arg := &vipmod.ArgDialog{OrderNo: "1"}
res, err := s.OrderStatus(context.Background(), arg)
So(err, ShouldBeNil)
So(res, ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,63 @@
package vip
import (
"context"
"go-common/app/service/main/vip/api"
"go-common/library/log"
)
// WelfareList get welfare list
func (s *Service) WelfareList(c context.Context, tid, recommend, pn, ps int64) (res *v1.WelfareReply, err error) {
welfareReq := &v1.WelfareReq{Tid: tid, Recommend: recommend, Ps: ps, Pn: pn}
if res, err = s.vipgRPC.WelfareList(c, welfareReq); err != nil {
log.Error("vipSvc.WelfareList(%+v) err(%+v)", welfareReq, err)
}
return
}
// WelfareTypeList get welfare type list
func (s *Service) WelfareTypeList(c context.Context) (res *v1.WelfareTypeReply, err error) {
welfareTypeReq := &v1.WelfareTypeReq{}
if res, err = s.vipgRPC.WelfareTypeList(c, welfareTypeReq); err != nil {
log.Error("vipSvc.WelfareTypeList err(%+v)", err)
}
return
}
// WelfareInfo get welfare info
func (s *Service) WelfareInfo(c context.Context, wid, mid int64) (res *v1.WelfareInfoReply, err error) {
welfareInfoReq := &v1.WelfareInfoReq{Id: wid, Mid: mid}
if res, err = s.vipgRPC.WelfareInfo(c, welfareInfoReq); err != nil {
log.Error("vipSvc.WelfareInfo(%+v) err(%+v)", wid, err)
}
return
}
// WelfareReceive receive welfare
func (s *Service) WelfareReceive(c context.Context, wid, mid int64) (res *v1.WelfareReceiveReply, err error) {
welfareReceiveReq := &v1.WelfareReceiveReq{Wid: wid, Mid: mid}
if res, err = s.vipgRPC.WelfareReceive(c, welfareReceiveReq); err != nil {
log.Error("vipSvc.WelfareReceive(%+v) err(%+v)", wid, err)
}
return
}
// MyWelfare get my welfare
func (s *Service) MyWelfare(c context.Context, mid int64) (res *v1.MyWelfareReply, err error) {
myWelfareReq := &v1.MyWelfareReq{Mid: mid}
if res, err = s.vipgRPC.MyWelfare(c, myWelfareReq); err != nil {
log.Error("vipSvc.MyWelfare err(%+v)", err)
}
return
}