/
vip.go
127 lines (119 loc) · 3.08 KB
/
vip.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package service
import (
"context"
"time"
"go-common/app/admin/main/vip/model"
"go-common/library/database/sql"
"go-common/library/ecode"
"go-common/library/log"
xtime "go-common/library/time"
"github.com/pkg/errors"
)
// Drawback Drawback
func (s *Service) Drawback(c context.Context, days int, mid int64, usename, remark string) (err error) {
var (
userInfo *model.VipUserInfo
history *model.VipChangeHistory
ot time.Time
tx *sql.Tx
affected int64
)
if userInfo, err = s.dao.SelVipUserInfo(c, mid); err != nil {
return
}
if userInfo == nil {
err = ecode.VipUserInfoNotExit
return
}
ct := time.Now()
overdueTIme := userInfo.VipOverdueTime
ot = overdueTIme.Time().AddDate(0, 0, -days)
if ot.Before(ct) {
ot = ct
userInfo.VipStatus = model.VipStatusOverTime
}
userInfo.VipOverdueTime = xtime.Time(ot.Unix())
if userInfo.AnnualVipOverdueTime.Time().After(ot) && userInfo.VipType == model.AnnualVip {
userInfo.VipType = model.Vip
userInfo.AnnualVipOverdueTime = xtime.Time(ot.Unix())
}
history = new(model.VipChangeHistory)
history.Mid = mid
history.ChangeTime = xtime.Time(time.Now().Unix())
history.Days = -days
history.ChangeType = model.ChangeTypeSystemDrawback
history.OperatorID = usename
history.Remark = remark
if tx, err = s.dao.BeginTran(context.TODO()); err != nil {
return
}
defer func() {
if err == nil {
if err = tx.Commit(); err != nil {
tx.Rollback()
}
} else {
tx.Rollback()
}
}()
if affected, err = s.dao.UpdateVipUserInfo(tx, userInfo); err != nil {
return
}
if affected > 0 {
if _, err = s.dao.InsertVipChangeHistory(tx, history); err != nil {
return
}
if err = s.dao.DelBcoinSalary(tx, mid, userInfo.VipOverdueTime); err != nil {
return
}
}
return
}
// ExchangeVipByDays exchange vip days
//func (s *Service) exchangeVip(c context.Context, tx *sql.Tx, mid, batchID, unit int, remark, username string) (hv *inModel.HandlerVip, err error) {
// var r = new(inModel.VipChangeBo)
// if mid == 0 {
// err = ecode.VipMidErr
// return
// }
// if len(remark) == 0 || len(remark) > 200 {
// err = ecode.VipRemarkErr
// return
// }
// r.BatchID = int64(batchID)
// r.ChangeType = model.ChangeTypeSystem
// r.Remark = remark
// r.OperatorID = username
// r.Days = int32(unit)
// r.Mid = int64(mid)
// log.Info("%+v ", r)
// if hv, err = s.vipRPC.UpdateVipWithHistory(context.TODO(), r); err != nil {
// fmt.Printf("rpc %+v err(%+v) \n", hv, err)
// log.Error("rpc %+v err(%+v) ", hv, err)
// return
// }
// return
//}
// HistoryPage history page.
func (s *Service) HistoryPage(c context.Context, u *model.UserChangeHistoryReq) (res []*model.VipChangeHistory, count int, err error) {
if count, err = s.dao.HistoryCount(c, u); err != nil {
log.Error("%+v", err)
return
}
if count == 0 {
return
}
if res, err = s.dao.HistoryList(c, u); err != nil {
log.Error("%+v", err)
return
}
return
}
// VipInfo .
func (s *Service) VipInfo(c context.Context, mid int64) (res *model.VipUserInfo, err error) {
if res, err = s.dao.SelVipUserInfo(c, mid); err != nil {
err = errors.WithStack(err)
return
}
return
}