go-common/app/interface/main/account/service/usersuit/pendant.go

275 lines
8.1 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package usersuit
import (
"context"
"math"
"go-common/app/interface/main/account/model"
cmdl "go-common/app/service/main/coin/model"
memmdl "go-common/app/service/main/member/model"
usmdl "go-common/app/service/main/usersuit/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
)
// Equip user pendant equip.
func (s *Service) Equip(c context.Context, mid, pid int64, status int8, source int64) (err error) {
return s.usRPC.Equip(c, &usmdl.ArgEquip{Mid: mid, Pid: pid, Status: status, Source: source})
}
// Equipment get pendant current equipment
func (s *Service) Equipment(c context.Context, mid int64) (equipPHP *model.EquipPHP, err error) {
var equip *usmdl.PendantEquip
ip := metadata.String(c, metadata.RemoteIP)
if equip, err = s.usRPC.Equipment(c, &usmdl.ArgEquipment{Mid: mid, IP: ip}); err != nil {
log.Error("s.usRPC.Equipment(%d) error(%v)", mid, err)
return
}
var coin float64
if coin, err = s.coinRPC.UserCoins(c, &cmdl.ArgCoinInfo{Mid: mid}); err != nil {
log.Error("s.coinRPC.UserCoins(%d) error(%v)", mid, err)
return
}
var base *memmdl.BaseInfo
if base, err = s.memRPC.Base(c, &memmdl.ArgMemberMid{Mid: mid, RemoteIP: ip}); err != nil {
log.Error("s.memRPC.Base(%d) error(%v)", mid, err)
return
}
equipPHP = &model.EquipPHP{
Coins: coin,
FaceURL: base.Face,
}
if equip == nil || equip.Pendant == nil {
log.Info("s.Equipment(%d) usequip(%+v) or usequip.Pendant(%+v) is nil", equip, equip.Pendant)
return
}
equipPHP.Pid = equip.Pid
equipPHP.Image = model.FormatImgURL(mid, equip.Pendant.Image)
equipPHP.ImageModel = model.FormatImgURL(mid, equip.Pendant.ImageModel)
return
}
// Pendant return pendant info.
func (s *Service) Pendant(c context.Context, pid int64) (pendantPHP *model.PendantPHP, err error) {
var pendant *usmdl.Pendant
ip := metadata.String(c, metadata.RemoteIP)
if pendant, err = s.dao.Pendant(c, pid, ip); err != nil {
log.Error("s.dao.Group(%d) error(%v)", pid, err)
return
}
pendantPHP = &model.PendantPHP{}
pendantPHP.Name = pendant.Name
pendantPHP.Pid = pendant.ID
pendantPHP.Image = model.FormatImgURL(pid, pendant.Image)
pendantPHP.ImageModel = model.FormatImgURL(pid, pendant.ImageModel)
return
}
// Group return pendant group info.
func (s *Service) Group(c context.Context, mid int64) (groupPHP []*model.GroupPHP, err error) {
var groups []*usmdl.PendantGroupInfo
ip := metadata.String(c, metadata.RemoteIP)
if groups, err = s.dao.Group(c, ip); err != nil {
log.Error("s.dao.Group(%d) error(%v)", mid, err)
return
}
for _, g := range groups {
if g.ID == 30 || g.ID == 31 {
continue
}
for _, p := range g.SubPendant {
p.BCoin = p.BCoin / 100
p.Image = model.FormatImgURL(mid, p.Image)
p.ImageModel = model.FormatImgURL(mid, p.ImageModel)
}
gh := &model.GroupPHP{}
gh.Name = g.Name
gh.Count = g.Number
gh.Pendant = g.SubPendant
groupPHP = append(groupPHP, gh)
}
return
}
// GroupEntry return vip pendant.
func (s *Service) GroupEntry(c context.Context, mid int64) (entryPHP []*model.GroupEntryPHP, err error) {
var group *usmdl.PendantGroupInfo
ip := metadata.String(c, metadata.RemoteIP)
if group, err = s.dao.GroupEntry(c, ip); err != nil {
log.Error("s.dao.GroupEntry(%d) error(%v)", mid, ip)
return
}
if group == nil {
log.Info("s.dao.GroupEntry(%d) result value is nil", mid)
return
}
for _, p := range group.SubPendant {
entry := &model.GroupEntryPHP{}
entry.Pid = p.ID
entry.Name = p.Name
entry.Money = p.Point
entry.Image = model.FormatImgURL(mid, p.Image)
entry.ImageModel = model.FormatImgURL(mid, p.ImageModel)
entryPHP = append(entryPHP, entry)
}
return
}
// GroupVIP return vip pendant.
func (s *Service) GroupVIP(c context.Context, mid int64) (vipPHP []*model.GroupVipPHP, err error) {
var group *usmdl.PendantGroupInfo
ip := metadata.String(c, metadata.RemoteIP)
if group, err = s.dao.GroupVip(c, ip); err != nil {
log.Error("s.dao.GroupVip(%d) error(%v)", mid, ip)
return
}
if group == nil {
log.Info("s.dao.GroupEntry(%d) result value is nil", mid)
return
}
for _, p := range group.SubPendant {
vip := &model.GroupVipPHP{}
vip.Pid = p.ID
vip.Name = p.Name
vip.Money = 0
vip.MoneyType = 3
vip.Expire = 2678400
vip.Image = model.FormatImgURL(mid, p.Image)
vip.ImageModel = model.FormatImgURL(mid, p.ImageModel)
vipPHP = append(vipPHP, vip)
}
return
}
// VipGet pc vip install pendant.
func (s *Service) VipGet(c context.Context, mid, pid int64, activated int8) (err error) {
err = s.Equip(c, mid, pid, int8(activated), usmdl.EquipFromVIP)
return
}
// CheckOrder check order by oid.
func (s *Service) CheckOrder(c context.Context, mid int64, orderID string) (err error) {
var hs []*usmdl.PendantOrderInfo
ip := metadata.String(c, metadata.RemoteIP)
if hs, _, err = s.dao.OrderHistory(c, mid, 1, 0, orderID, ip); err != nil {
log.Error("s.dao.OrderHistory(%d) error(%v)", mid, err)
return
}
if len(hs) == 0 {
err = ecode.PendantOrderNotFound
log.Info("s.dao.OrderHistory(%d) orderID(%d) error(%v)", mid, orderID, err)
return
}
if hs[0].Stauts != 1 {
err = ecode.PendantOrderNotFound
log.Info("s.dao.OrderHistory(%d) orderID(%d) order not complete", mid, orderID, err)
return
}
return
}
// Order pay pandent by coin/bcoin/point.
func (s *Service) Order(c context.Context, mid, pid, timeLength int64, moneyType int8) (res interface{}, err error) {
var payInfo *usmdl.PayInfo
ip := metadata.String(c, metadata.RemoteIP)
if payInfo, err = s.dao.Order(c, mid, pid, timeLength, moneyType, ip); err != nil {
log.Error("s.dao.Order(%d) error(%v)", mid, err)
return
}
if payInfo != nil {
payInfo.PayURL = "https://pay.bilibili.com" + payInfo.PayURL
res = payInfo
return
}
if moneyType == 2 {
log.Info("s.dao.Order(%d) pid(%d) buy type with point", mid, pid)
s.Equip(c, mid, pid, 2, usmdl.EquipFromPackage)
}
var pkgs []*usmdl.PendantPackage
if pkgs, err = s.dao.Packages(c, mid, ip); err != nil {
log.Error("s.dao.Packages(%d) error(%v)", mid, err)
return
}
var pendant *usmdl.PendantPackage
for _, pkg := range pkgs {
if pkg.Pid == pid {
pendant = pkg
}
}
if pendant != nil {
res = &struct {
Msg string `json:"msg"`
Expire int64 `json:"expire"`
}{
Msg: "您已成功购买" + pendant.Pendant.Name,
Expire: pendant.Expires,
}
}
return
}
// My get my pandent
func (s *Service) My(c context.Context, mid int64) (my []*model.MyPHP, err error) {
var equip *usmdl.PendantEquip
ip := metadata.String(c, metadata.RemoteIP)
if equip, err = s.usRPC.Equipment(c, &usmdl.ArgEquipment{Mid: mid, IP: ip}); err != nil {
log.Error("s.usRPC.Equipment(%d) error(%v)", mid, err)
return
}
var pkgs []*usmdl.PendantPackage
if pkgs, err = s.dao.Packages(c, mid, ip); err != nil {
log.Error("s.dao.Packages(%d) error(%v)", mid, err)
return
}
for _, pkg := range pkgs {
m := &model.MyPHP{}
m.Pid = pkg.Pid
m.Name = pkg.Pendant.Name
m.MoneyType = int8(pkg.Type)
m.Image = model.FormatImgURL(mid, pkg.Pendant.Image)
m.ImageModel = model.FormatImgURL(mid, pkg.Pendant.ImageModel)
m.Expire = pkg.Expires
m.IsOnline = 1
if equip != nil && equip.Pid == pkg.Pid {
m.IsActivated = 1
}
my = append(my, m)
}
return
}
// MyHistory get my pandent buy history.
func (s *Service) MyHistory(c context.Context, mid, page int64) (res map[string]interface{}, err error) {
var (
hs []*usmdl.PendantOrderInfo
myhs []*model.MyHistoryPHP
count map[string]int64
ip = metadata.String(c, metadata.RemoteIP)
)
if hs, count, err = s.dao.OrderHistory(c, mid, page, 0, "", ip); err != nil {
log.Error("s.dao.OrderHistory(%d) error(%v)", mid, err)
return
}
if len(hs) == 0 {
log.Info("s.dao.OrderHistory(%d) result len eq(0)", mid)
return
}
for _, h := range hs {
my := &model.MyHistoryPHP{}
my.Pid = h.Pid
my.Image = model.FormatImgURL(mid, h.Image)
my.Name = h.Name
my.BuyTime = h.BuyTime
my.PayID = h.PayID
my.Cost = h.Cost
my.TimeLength = h.TimeLength
myhs = append(myhs, my)
}
res = make(map[string]interface{})
count["page_count"] = int64(math.Ceil(float64(count["result_count"]) / float64(count["page_size"])))
res["page"] = count
res["result"] = myhs
return
}