package activity import ( "f5" "fmt" "jccommon" "main/constant" "main/mt" "q5" "strings" "github.com/gin-gonic/gin" ) type StackingApi struct { } func (this *StackingApi) ExpectedDaily(c *gin.Context) { accountAddress := strings.ToLower(c.Param("account_address")) rspObj := struct { ErrCode int32 `json:"errcode"` ErrMsg string `json:"errmsg"` ContributionPoint string `json:"contribution_point"` }{} nowTime := f5.GetApp().GetRealSeconds() { sql := ` SELECT * FROM t_nft WHERE token_type <> ? AND last_lock_address = ? AND last_lock_time <= ? AND owner_address IN ( ` params := []string{ q5.ToString(jccommon.NFT_TYPE_GOLD_BULLION), accountAddress, q5.ToString(nowTime), } { lockMetas := []*mt.Contract{} mt.Table.Contract.Traverse(func(ele *mt.Contract) bool { if ele.GetName() == jccommon.CONTRACT_NAME_NFTLock { q5.AppendSlice(&lockMetas, ele) } return true }) if len(lockMetas) <= 0 { c.JSON(200, rspObj) return } inited := false for _, lockMeta := range lockMetas { if !inited { inited = true sql += "?" } else { sql += ",?" } q5.AppendSlice(¶ms, lockMeta.GetAddress()) } sql += ")" } f5.GetGoStyleDb().RawQuery( constant.BCNFT_DB, sql, params, func(err error, ds *f5.DataSet) { if err != nil { c.JSON(200, rspObj) return } nfts := []*jccommon.NftStacking{} for ds.Next() { p := new(jccommon.NftStacking) p.NetId = q5.ToInt32(ds.GetByName("net_id")) p.ContractAddress = ds.GetByName("contract_address") p.TokenType = q5.ToInt32(ds.GetByName("token_type")) p.TokenId = ds.GetByName("token_id") p.ItemId = q5.ToInt32(ds.GetByName("item_id")) p.Quality = q5.ToInt32(ds.GetByName("quality")) q5.AppendSlice(&nfts, p) } rspObj.ContributionPoint = fmt.Sprintf("%.2f", (jccommon.CalcContributionScore(nfts))) c.JSON(200, rspObj) }) } } func (sa *StackingApi) ContributionQuery(c *gin.Context) { accountAddress := strings.ToLower(c.Param("account_address")) rspObj := struct { ErrCode int32 `json:"errcode"` ErrMsg string `json:"errmsg"` Rows []struct { Date int32 `json:"date"` ContributionPoint string `json:"contribution_point"` } }{} { sql := `SELECT * FROM t_staking_daily_settlement WHERE account_address = ? ORDER BY settle_date DESC` params := []string{ accountAddress, } f5.GetGoStyleDb().RawQuery( constant.BCNFT_DB, sql, params, func(err error, ds *f5.DataSet) { if err != nil { c.JSON(200, rspObj) return } obj := struct { Date int32 `json:"date"` ContributionPoint string `json:"contribution_point"` }{} for ds.Next() { contributionPoint := q5.ToFloat64(ds.GetByName("contribution")) if contributionPoint > 0.00001 { obj.Date = q5.SafeToInt32(ds.GetByName("settle_date")) obj.ContributionPoint = ds.GetByName("contribution") rspObj.Rows = append(rspObj.Rows, obj) } } }) } c.JSON(200, rspObj) } func (sa *StackingApi) DiamondRecordQuery(c *gin.Context) { accountAddress := strings.ToLower(c.Param("account_address")) type Record struct { Date int32 `json:"date"` Amount string `json:"amount"` Type int32 `json:"type"` From string `json:"from"` } rspObj := struct { ErrCode int32 `json:"errcode"` ErrMsg string `json:"errmsg"` Rows []*Record `json:"rows"` }{} { sql := `SELECT * FROM t_diamond_consume_product WHERE idx > 0 AND (account_id = ? OR passport_address = ?)` params := []string{ accountAddress, accountAddress, } f5.GetGoStyleDb().RawQuery( constant.GAME_DB, sql, params, func(err error, ds *f5.DataSet) { if err != nil { return } for ds.Next() { obj := new(Record) obj.Date = q5.SafeToInt32(ds.GetByName("createtime")) obj.Amount = ds.GetByName("amount") obj.Type = 1 obj.From = accountAddress rspObj.Rows = append(rspObj.Rows, obj) } }) } { sql := `SELECT pay_time, diamond + present_diamond, account_address FROM t_recharge_order WHERE idx > 0 AND passport_address = ? AND pay_status = 1` params := []string{ accountAddress, } f5.GetGoStyleDb().RawQuery( constant.BCNFT_DB, sql, params, func(err error, ds *f5.DataSet) { if err != nil { return } for ds.Next() { obj := new(Record) obj.Date = q5.SafeToInt32(ds.GetByName("pay_time")) obj.Amount = ds.GetByIndex(1) obj.From = ds.GetByIndex(2) obj.Type = 0 rspObj.Rows = append(rspObj.Rows, obj) } }) } q5.Sort(rspObj.Rows, func(a *Record, b *Record) bool { return a.Date > b.Date }) c.JSON(200, rspObj) }