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,55 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"service.go",
"vip.go",
],
importpath = "go-common/app/job/main/card/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/job/main/card/conf:go_default_library",
"//app/job/main/card/dao:go_default_library",
"//app/job/main/card/model:go_default_library",
"//app/service/main/card/api/grpc/v1:go_default_library",
"//app/service/main/card/model:go_default_library",
"//app/service/main/vip/model:go_default_library",
"//library/log:go_default_library",
"//library/queue/databus: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"],
)
go_test(
name = "go_default_test",
srcs = ["vip_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/job/main/card/conf:go_default_library",
"//app/job/main/card/model:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)

View File

@@ -0,0 +1,64 @@
package service
import (
"context"
"sync"
"go-common/app/job/main/card/conf"
"go-common/app/job/main/card/dao"
cardCli "go-common/app/service/main/card/api/grpc/v1"
"go-common/library/queue/databus"
)
const (
_updateAction = "update"
_tableUserInfo = "vip_user_info"
)
// Service struct
type Service struct {
c *conf.Config
waiter *sync.WaitGroup
dao *dao.Dao
vipConsumer *databus.Databus
// card service
cardRPC cardCli.CardClient
}
// New init
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
waiter: new(sync.WaitGroup),
}
cardRPC, err := cardCli.NewClient(c.CardRPC)
if err != nil {
panic(err)
}
s.cardRPC = cardRPC
if c.Databus.Vip != nil {
s.vipConsumer = databus.New(c.Databus.Vip)
s.waiter.Add(1)
go s.vipchangeproc()
}
return s
}
// Ping Service
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Close Service
func (s *Service) Close() {
if s.c.Databus.Vip != nil {
s.vipConsumer.Close()
}
s.dao.Close()
}
// Wait wait all chan close
func (s *Service) Wait() {
s.waiter.Wait()
}

View File

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

View File

@@ -0,0 +1,45 @@
package service
import (
"context"
"flag"
"testing"
"time"
"go-common/app/job/main/card/conf"
"go-common/app/job/main/card/model"
. "github.com/smartystreets/goconvey/convey"
)
var (
c = context.TODO()
s *Service
)
func init() {
var (
err error
)
flag.Set("conf", "../cmd/test.toml")
if err = conf.Init(); err != nil {
panic(err)
}
c = context.Background()
if s == nil {
s = New(conf.Conf)
}
time.Sleep(time.Second)
}
// go test -test.v -test.run TestChangeEquipTime
func TestChangeEquipTime(t *testing.T) {
Convey("TestChangeEquipTime ", t, func() {
So(s.ChangeEquipTime(c, &model.VipReq{
Mid: 1,
VipType: 2,
VipStatus: 1,
VipOverdueTime: time.Now().Unix(),
}), ShouldBeNil)
})
}