7
7
package logic
8
8
9
9
import (
10
+ "errors"
11
+ "fmt"
10
12
"model"
11
13
12
14
. "db"
@@ -25,14 +27,37 @@ func (self UserRichLogic) Add(ctx context.Context) error {
25
27
}
26
28
27
29
// IncrUserRich 增加或减少用户财富
28
- func (UserRichLogic ) IncrUserRich (user * model.User , typ , award int , desc string ) {
30
+ func (self UserRichLogic ) IncrUserRich (user * model.User , typ , award int , desc string ) {
31
+ var (
32
+ total int64 = - 1
33
+ err error
34
+ )
35
+
36
+ if award > 0 && typ == model .MissionTypeReplied {
37
+ // 老用户,因为之前的主题被人回复而增加财富,自动帮其领取初始资本
38
+ total , err = MasterDB .Where ("uid=?" , user .Uid ).Count (new (model.UserBalanceDetail ))
39
+ if err != nil {
40
+ logger .Errorln ("IncrUserRich count error:" , err )
41
+ return
42
+ }
43
+ }
44
+
29
45
session := MasterDB .NewSession ()
30
46
defer session .Close ()
31
-
32
47
session .Begin ()
33
48
34
- user .Balance += award
35
- _ , err := session .Where ("uid=?" , user .Uid ).Cols ("balance" ).Update (user )
49
+ var initialAward int
50
+ if total == 0 {
51
+ initialAward , err = self .autoCompleteInitial (session , user )
52
+ if err != nil {
53
+ logger .Errorln ("IncrUserRich autoCompleteInitial error:" , err )
54
+ session .Rollback ()
55
+ return
56
+ }
57
+ }
58
+
59
+ user .Balance += initialAward + award
60
+ _ , err = session .Where ("uid=?" , user .Uid ).Cols ("balance" ).Update (user )
36
61
if err != nil {
37
62
logger .Errorln ("IncrUserRich update error:" , err )
38
63
session .Rollback ()
@@ -81,3 +106,25 @@ func (UserRichLogic) add(session *xorm.Session, balanceDetail *model.UserBalance
81
106
_ , err := session .Insert (balanceDetail )
82
107
return err
83
108
}
109
+
110
+ func (UserRichLogic ) autoCompleteInitial (session * xorm.Session , user * model.User ) (int , error ) {
111
+ mission := & model.Mission {}
112
+ _ , err := session .Where ("id=?" , model .InitialMissionId ).Get (mission )
113
+ if err != nil {
114
+ return 0 , err
115
+ }
116
+ if mission .Id == 0 {
117
+ return 0 , errors .New ("初始资本任务不存在!" )
118
+ }
119
+
120
+ balanceDetail := & model.UserBalanceDetail {
121
+ Uid : user .Uid ,
122
+ Type : model .MissionTypeInitial ,
123
+ Num : mission .Fixed ,
124
+ Balance : mission .Fixed ,
125
+ Desc : fmt .Sprintf ("获得%s %d 铜币" , model .BalanceTypeMap [mission .Type ], mission .Fixed ),
126
+ }
127
+ _ , err = session .Insert (balanceDetail )
128
+
129
+ return mission .Fixed , err
130
+ }
0 commit comments