Eric0718 2 years ago
parent
commit
d91a2ab006

+ 2 - 2
controller/BaseController.go

@@ -10,12 +10,12 @@ import (
 
 type baseController struct {
 	beego.Controller
-	x *xorm.Engine
+	engine *xorm.Engine
 	i18n.Locale
 }
 
 func (p *baseController) Prepare() {
-	p.x = dbUtil.Engine
+	p.engine = dbUtil.Engine
 	al := p.Ctx.Request.Header.Get("Accept-Language")
 	if al == "en-US" {
 		p.Lang = al

+ 0 - 2
controller/TxResponse.go

@@ -17,10 +17,8 @@ type ObjectResp struct {
 func TxObjectResponse(o beego.Controller, i interface{}) {
 	o.Data["json"] = ObjectResp{Response: Response{Errcode: 0, Msg: "操作成功"}, Data: i}
 	o.ServeJSON()
-	return
 }
 func ErrResponse(o beego.Controller, i interface{}) {
 	o.Data["json"] = ObjectResp{Response: Response{Errcode: 1001, Msg: "操作失败"}, Data: i}
 	o.ServeJSON()
-	return
 }

+ 0 - 0
controller/rewards.go → controller/calculate.go


+ 0 - 5
controller/participate.go

@@ -1,5 +0,0 @@
-package controller
-
-func (uc *UserController) Participate() {
-
-}

+ 83 - 42
controller/reinput.go

@@ -1,57 +1,98 @@
 package controller
 
-func (uc *UserController) Reinput(user string) error {
-	/*
-		available,err := GetAvailableReinput(user)
-		if err != nil{
-			return err
-		}
-		if available < 100 {
-			return error.News("no available reinput balance!")
-		}
+import (
+	"ktogame/models"
+)
 
-		left :=  available % 100
+func (uc *UserController) Reinput(user string) {
+	var ui models.UserInfo
+	ok, err := uc.engine.Id(user).Get(&ui)
+	if err != nil {
+		ErrResponse(uc.Controller, err)
+		return
+	}
+	if !ok {
+		ErrResponse(uc.Controller, "db get failed!")
+		return
+	}
+	if ui.AvailableReinput < ModBase*Decimals {
+		ErrResponse(uc.Controller, "no available reinput balance")
+		return
+	}
 
-		reinputValue := available - left
+	///update availableReinput by left in db
+	///update totalReinput
+	left := uint64(ui.AvailableReinput) % (ModBase * Decimals)
+	reinputValue := ui.AvailableReinput - float64(left)
+	ui.AvailableReinput = float64(left)
+	ui.TotalReinputed += reinputValue
+	if ui.TotalReinputed >= CommunityLimit*Decimals {
+		ui.State = CommunityUsers
+	}
+	_, err = uc.engine.ID(user).Cols("available_reinput").Update(&ui)
+	if err != nil {
+		ErrResponse(uc.Controller, err)
+		return
+	}
+	_, err = uc.engine.ID(user).Cols("total_reinput").Update(&ui)
+	if err != nil {
+		ErrResponse(uc.Controller, err)
+		return
+	}
+	///update Recommendation Rewards
+	rewards := reinputValue * 10 / 100
+	a_rewards := rewards * 60 / 100
+	a_reinput := rewards * 40 / 100
 
-		///update availableReinput by left in db
-		if updateAvailableReinput(left) != nil{
-			return err
+	///update direct recommend rewards
+	if ui.Direct != -1 {
+		var dui models.UserInfo
+		ok, err := uc.engine.Id(ui.Direct).Get(&dui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
+			return
 		}
-
-		///update totalReinput
-		if totalReinput(reinputValue){
-			return err
+		if !ok {
+			ErrResponse(uc.Controller, "db get failed!")
+			return
 		}
-
-		///update Recommendation Rewards
-
-		///get Relationship of invitation
-		directer ,err := getRelationship(user)
-		if err != nil{
+		dui.AvailableClaim = a_rewards
+		dui.AvailableReinput = a_reinput
+		_, err = uc.engine.ID(dui.Addr).Cols("available_claim").Update(&dui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
 			return
 		}
-		///update direct recommend rewards
-		if updateRecommendationRewards(directer,reinputValue * 10 /100){
-			return err
+		_, err = uc.engine.ID(dui.Addr).Cols("available_reinput").Update(&dui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
+			return
 		}
-
-		///update indirect recommend rewards
-		indirecter ,err := getRelationship(directer)
-		if err != nil{
+	}
+	///update indirect recommend rewards
+	if ui.Indirect != -1 {
+		var idui models.UserInfo
+		ok, err := uc.engine.Id(ui.Indirect).Get(&idui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
 			return
 		}
-		if updateRecommendationRewards(indirecter,reinputValue * 10 /100){
-			return err
+		if !ok {
+			ErrResponse(uc.Controller, "db get failed!")
+			return
+		}
+		idui.AvailableClaim = a_rewards
+		idui.AvailableReinput = a_reinput
+		_, err = uc.engine.ID(idui.Addr).Cols("available_claim").Update(&idui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
+			return
+		}
+		_, err = uc.engine.ID(idui.Addr).Cols("available_reinput").Update(&idui)
+		if err != nil {
+			ErrResponse(uc.Controller, err)
+			return
 		}
-	*/
-	return nil
-}
-
-func (uc *UserController) GetAvailableReinput(user string) (uint64, error) {
-	ok, err := uc.x.Get(user)
-	if !ok {
-		return 0, err
 	}
-	return 0, nil
+	TxObjectResponse(uc.Controller, "success")
 }

+ 11 - 0
controller/types.go

@@ -3,3 +3,14 @@ package controller
 type UserController struct {
 	baseController
 }
+
+const (
+	Decimals         = 100000000000
+	ParticipateValue = 1030
+	ModBase          = 100
+	CommunityLimit   = 1000
+
+	CommonUser     = 0
+	OfficialUser   = 1
+	CommunityUsers = 2
+)

+ 15 - 3
models/blockData.go → models/tables.go

@@ -6,13 +6,25 @@ import (
 	"github.com/ethereum/go-ethereum/common"
 )
 
-type RewardDetails struct {
+type UserInfo struct {
 	Id               int64
 	Addr             string
+	Direct           int
+	Indirect         int
+	TeamMembers      string
 	AvailableClaim   float64 `xorm:"Decimal"`
-	Claimed          float64 `xorm:"Decimal"`
+	TotalClaimed     float64 `xorm:"Decimal"`
 	AvailableReinput float64 `xorm:"Decimal"`
-	Reinputed        float64 `xorm:"Decimal"`
+	TotalReinputed   float64 `xorm:"Decimal"`
+	State            int
+	OpTime           string
+}
+
+type UserTxs struct {
+	Id     int64
+	Addr   string
+	Hash   string
+	OpTime string
 }
 
 type AddrBill struct {

+ 0 - 1
util/ktoFunction.go

@@ -93,7 +93,6 @@ func listenKto() {
 					continue
 				}
 				for _, l := range evm.Logs {
-
 					th := l.Topics[0].Hex()
 					method := dbUtil.TopsMap[th]
 					addr := l.Address.String()