|
@@ -2,19 +2,31 @@
|
|
|
package credit
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"github.com/go-xweb/xweb"
|
|
|
. "gopkg.in/mgo.v2/bson"
|
|
|
+ "log"
|
|
|
. "qfw/coreconfig"
|
|
|
"qfw/util"
|
|
|
+ mogo "qfw/util/mongodb"
|
|
|
"qfw/util/rpc"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
)
|
|
|
|
|
|
-var rc rpc.RpcCall
|
|
|
-var replay *int
|
|
|
+var Rc rpc.RpcCall
|
|
|
+var Replay *int
|
|
|
+var CreditA map[string]uint64
|
|
|
|
|
|
func init() {
|
|
|
util.ReadConfig(&SysConfig)
|
|
|
- rc = rpc.RpcCall{Addr: SysConfig.CreditRpc}
|
|
|
+ tmp := strings.Split(SysConfig.CreditA, ",")
|
|
|
+ CreditA = make(map[string]uint64)
|
|
|
+ for _, v := range tmp {
|
|
|
+ n, _ := strconv.Atoi(v[1:])
|
|
|
+ CreditA[v] = uint64(n)
|
|
|
+ }
|
|
|
+ Rc = rpc.RpcCall{Addr: SysConfig.CreditRpc}
|
|
|
//添加模块解析
|
|
|
xweb.AddAction(&Credit{})
|
|
|
}
|
|
@@ -26,15 +38,44 @@ type Credit struct {
|
|
|
|
|
|
//增加积分
|
|
|
func (c *Credit) IncreditAjaxRqe() error {
|
|
|
+ result := false
|
|
|
userId := c.GetSession("userId").(string)
|
|
|
+ num := c.GetSession("credit_a").(uint64)
|
|
|
code := c.GetString("code")
|
|
|
- num, _ := c.GetInt("num")
|
|
|
- param := make(map[string]interface{})
|
|
|
- err := rc.InCreadit(&rpc.CreditData{Code: code, Uid: userId, Num: int(num), OtherParam: param}, replay)
|
|
|
- result := false
|
|
|
- if err == nil {
|
|
|
- result = true
|
|
|
+ b := AIsHasDo(code, num)
|
|
|
+ if !b {
|
|
|
+ param := make(map[string]interface{})
|
|
|
+ err := Rc.InCreadit(&rpc.CreditData{Code: code, Uid: userId, Num: int(num), OtherParam: param}, Replay)
|
|
|
+ if err == nil {
|
|
|
+ num, r := UpuserCreditA(code, userId, uint64(num))
|
|
|
+ c.Session().Set("credit_a", num)
|
|
|
+ result = r
|
|
|
+ } else {
|
|
|
+ log.Println(err)
|
|
|
+ }
|
|
|
}
|
|
|
c.ServeJson(M{"result": result})
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+func AIsHasDo(code string, num uint64) bool {
|
|
|
+ b := false
|
|
|
+ var ret uint64
|
|
|
+ if tmp, ok := CreditA[code]; ok {
|
|
|
+ ret = 1 << (tmp - 1)
|
|
|
+ }
|
|
|
+ if num&ret > 0 {
|
|
|
+ b = true
|
|
|
+ }
|
|
|
+ return b
|
|
|
+}
|
|
|
+
|
|
|
+func UpuserCreditA(code, userId string, num uint64) (uint64, bool) {
|
|
|
+ var ret uint64
|
|
|
+ if tmp, ok := CreditA[code]; ok {
|
|
|
+ ret = 1 << (tmp - 1)
|
|
|
+ }
|
|
|
+ num = num + ret
|
|
|
+ b := mogo.Update("user", `{"_id":"`+userId+`"}`, `{"$set":{"credit_a":`+fmt.Sprint(num)+`}}`, true, false)
|
|
|
+ return num, b
|
|
|
+}
|