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

97 lines
2.6 KiB
Go

package service
import (
"context"
"encoding/json"
"time"
"go-common/app/job/main/card/model"
cardapi "go-common/app/service/main/card/api/grpc/v1"
cardmol "go-common/app/service/main/card/model"
vipmol "go-common/app/service/main/vip/model"
"go-common/library/log"
)
// ChangeEquipTime change vip equip time.
func (s *Service) ChangeEquipTime(c context.Context, v *model.VipReq) (err error) {
var res *cardapi.UserCardReply
if res, err = s.cardRPC.UserCard(c, &cardapi.UserCardReq{Mid: v.Mid}); err != nil {
return
}
if res.Res == nil ||
res.Res.Id == 0 ||
res.Res.CardType != cardmol.CardTypeVip {
return
}
var expire int64
switch {
case v.VipType == vipmol.NotVip || v.VipStatus == vipmol.Expire:
expire = time.Now().Unix()
case v.VipOverdueTime != res.Res.ExpireTime:
expire = v.VipOverdueTime
default:
}
if expire == 0 {
return
}
if err = s.dao.UpdateExpireTime(c, expire, v.Mid); err != nil {
return
}
err = s.dao.DelCacheEquip(c, v.Mid)
return
}
func (s *Service) vipchangeproc() {
defer s.waiter.Done()
msgs := s.vipConsumer.Messages()
var err error
for {
msg, ok := <-msgs
if !ok {
log.Warn("[service.dataConsume|vip] dataConsumer has been closed.")
return
}
if err = msg.Commit(); err != nil {
log.Error("msg.Commit err(%+v)", err)
}
log.Info("cur consumer vipchangeproc(%v)", string(msg.Value))
v := &model.MsgCanal{}
if err = json.Unmarshal([]byte(msg.Value), v); err != nil {
log.Error("json.Unmarshal(%v) err(%v)", v, err)
continue
}
if v.Table != _tableUserInfo || v.Action != _updateAction {
continue
}
n := new(model.VipUserInfoMsg)
if err = json.Unmarshal(v.New, n); err != nil {
log.Error("vipchangeproc json.Unmarshal val(%v) error(%v)", string(v.New), err)
continue
}
o := new(model.VipUserInfoMsg)
if err = json.Unmarshal(v.Old, o); err != nil {
log.Error("vipchangeproc json.Unmarshal val(%v) error(%v)", string(v.Old), err)
continue
}
if n.VipStatus == o.VipStatus &&
n.VipType == o.VipType &&
n.VipOverdueTime == o.VipOverdueTime {
continue
}
var duetime time.Time
if duetime, err = time.ParseInLocation("2006-01-02 15:04:05", n.VipOverdueTime, time.Local); err != nil {
log.Error("vipchangeproc ParseInLocation val(%s) error(%v)", n.VipOverdueTime, err)
continue
}
if err = s.ChangeEquipTime(context.Background(), &model.VipReq{
Mid: n.Mid,
VipType: n.VipType,
VipStatus: n.VipStatus,
VipOverdueTime: duetime.Unix(),
}); err != nil {
log.Error("ChangeEquipTime val(%+v) error(%v)", n, err)
continue
}
}
}