97 lines
2.6 KiB
Go
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
|
||
|
}
|
||
|
}
|
||
|
}
|