Commit 7c1de849 authored by shajiaiming's avatar shajiaiming

Merge branch 'feature/redpacket' into 'develop'

红包状态 See merge request !59
parents bcd909ce a8937fd6
...@@ -2,7 +2,6 @@ package models ...@@ -2,7 +2,6 @@ package models
import ( import (
"bwallet/pkg/setting" "bwallet/pkg/setting"
"fmt"
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
) )
...@@ -140,7 +139,6 @@ func GetChain(id int) (*Chain, error) { ...@@ -140,7 +139,6 @@ func GetChain(id int) (*Chain, error) {
* @return * @return
*/ */
func AddChain(data map[string]interface{}) (error) { func AddChain(data map[string]interface{}) (error) {
fmt.Println(data)
chain := Chain{ chain := Chain{
Platform: data["platform"].(string), Platform: data["platform"].(string),
Address: data["address"].(string), Address: data["address"].(string),
......
...@@ -2,7 +2,6 @@ package models ...@@ -2,7 +2,6 @@ package models
import ( import (
"bwallet/pkg/setting" "bwallet/pkg/setting"
"fmt"
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"time" "time"
) )
...@@ -85,7 +84,6 @@ func GetManagers(pageNum, pageSize int, maps interface{}) ([]*Manager, error) { ...@@ -85,7 +84,6 @@ func GetManagers(pageNum, pageSize int, maps interface{}) ([]*Manager, error) {
delete(maps.(map[string]interface{}),"uid") delete(maps.(map[string]interface{}),"uid")
} }
} }
fmt.Println(maps)
err := db.Where(maps).Where("uid <> ?", uid).Order("uid desc").Offset(pageNum).Limit(pageSize).Find(&manager).Error err := db.Where(maps).Where("uid <> ?", uid).Order("uid desc").Offset(pageNum).Limit(pageSize).Find(&manager).Error
if err != nil && err != gorm.ErrRecordNotFound { if err != nil && err != gorm.ErrRecordNotFound {
return nil, err return nil, err
......
...@@ -50,7 +50,7 @@ func ExistByPacketInfoId(packet_id string) (bool, error) { ...@@ -50,7 +50,7 @@ func ExistByPacketInfoId(packet_id string) (bool, error) {
func GetRedPackets(maps interface{}) ([]*RedPacket, error) { func GetRedPackets(maps interface{}) ([]*RedPacket, error) {
var redPackets []*RedPacket var redPackets []*RedPacket
err := db.Debug().Where(maps).Find(&redPackets).Error err := db.Where(maps).Find(&redPackets).Error
if err != nil && err != gorm.ErrRecordNotFound { if err != nil && err != gorm.ErrRecordNotFound {
return nil, err return nil, err
} }
...@@ -58,6 +58,16 @@ func GetRedPackets(maps interface{}) ([]*RedPacket, error) { ...@@ -58,6 +58,16 @@ func GetRedPackets(maps interface{}) ([]*RedPacket, error) {
return redPackets, nil return redPackets, nil
} }
func GetRedPacketsForReceive() ([]*RedPacket, error) {
var redPackets []*RedPacket
status_map := [] int{1, 2, 4}
if err := db.Where("status in (?)", status_map).Find(&redPackets).Error; err != nil {
return nil, err
}
return redPackets, nil
}
func AddRedPacket(data map[string]interface{}) (error) { func AddRedPacket(data map[string]interface{}) (error) {
redPacket := RedPacket{ redPacket := RedPacket{
PacketId: data["packet_id"].(string), PacketId: data["packet_id"].(string),
......
...@@ -2,17 +2,26 @@ package cron ...@@ -2,17 +2,26 @@ package cron
import ( import (
"bwallet/service/coin_gas_service" "bwallet/service/coin_gas_service"
"bwallet/service/red_packet_service"
"github.com/robfig/cron" "github.com/robfig/cron"
) )
var c *cron.Cron var c *cron.Cron
func Setup(){ func Setup() {
c = cron.New() c = cron.New()
c.AddFunc("* * * * * *", func() { c.AddFunc("* * * * * *", func() {
coin_gas_service.TokenView() coin_gas_service.TokenView()
}) })
c.AddFunc("* * * * * *", func() {
red_packet_service.UpdateReceive()
})
c.AddFunc("* * * * * *", func() {
red_packet_service.UpdateInfo()
})
c.Start() c.Start()
} }
...@@ -3,11 +3,8 @@ package app ...@@ -3,11 +3,8 @@ package app
import ( import (
"bwallet/pkg/errno" "bwallet/pkg/errno"
"bwallet/pkg/handler" "bwallet/pkg/handler"
"bwallet/pkg/util"
"bwallet/service/red_packet_service" "bwallet/service/red_packet_service"
"bwallet/validate_service" "bwallet/validate_service"
"github.com/Unknwon/com"
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"strings" "strings"
) )
...@@ -46,23 +43,20 @@ func AddRedPacket(c *gin.Context) { ...@@ -46,23 +43,20 @@ func AddRedPacket(c *gin.Context) {
} }
func GetRedPackets(c *gin.Context) { func GetRedPackets(c *gin.Context) {
valid := validation.Validation{} red_packet := validate_service.RedPacketReq{}
c.ShouldBindJSON(&red_packet)
live_id := com.StrTo(c.DefaultQuery("live_id", "0")).MustInt()
valid.Required(live_id, "live_id").Message("直播间参数不能为空")
//user_id := com.StrTo(c.DefaultQuery("user_id", "0")).MustInt()
//valid.Required(user_id, "user_id").Message("用户参数不能为空")
if valid.HasErrors() { if ok, errors := validate_service.ValidateInputs(red_packet); !ok {
handler.SendResponse(c, valid.Errors[0], nil) for _, err := range errors {
handler.SendResponse(c, errno.ErrBind, strings.Join(err, " "))
return return
} }
}
RedPacketService := red_packet_service.RedPacket{ RedPacketService := red_packet_service.RedPacket{
LiveId: int32(live_id), LiveId: int32(red_packet.LiveId),
PageNum: util.GetPage(c), UserId: red_packet.UserId,
PageSize: util.GetLimit(c), Status: 1,
} }
info, err := RedPacketService.GetRedPackets() info, err := RedPacketService.GetRedPackets()
......
...@@ -51,7 +51,7 @@ func InitRouter() *gin.Engine { ...@@ -51,7 +51,7 @@ func InitRouter() *gin.Engine {
client.GET("/fees/recommended", app.GetTransactionGas) client.GET("/fees/recommended", app.GetTransactionGas)
client.GET("/tokenview/explore", app.Explore) client.GET("/tokenview/explore", app.Explore)
client.GET("/red-packets", app.GetRedPackets) client.POST("/red-packets", app.GetRedPackets)
client.POST("/red-packet", app.AddRedPacket) client.POST("/red-packet", app.AddRedPacket)
api := r.Group("/api") api := r.Group("/api")
......
...@@ -2,11 +2,13 @@ package red_packet_service ...@@ -2,11 +2,13 @@ package red_packet_service
import ( import (
"bwallet/models" "bwallet/models"
"bwallet/pkg/util"
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"strings"
) )
type RedPacketInfoResult struct { type RedPacketInfoResult struct {
...@@ -39,16 +41,46 @@ type RedPacketInfoResp struct { ...@@ -39,16 +41,46 @@ type RedPacketInfoResp struct {
Error RedPacketInfoError Error RedPacketInfoError
} }
type RedPacketReceiveDetailResp struct {
Id int32
Result RedPacketReceiveDetailResult
Error RedPacketInfoError
}
type RedPacketReceiveDetailResult struct {
Rows []RedPacketReceiveDetailRowResult `json:"rows"`
}
type RedPacketReceiveDetailRowResult struct {
Id int32 `json:"id"`
UserId string `json:"user_id"`
UserName string `json:"user_name"`
UserMobile string `json:"user_mobile"`
PlatformId string `json:"platform_id"`
CoinId int32 `json:"coin_id"`
CoinName string `json:"coin_name"`
Amount float32 `json:"amount"`
Status uint8 `json:"status"`
CreateAt int32 `json:"create_at"`
}
type Params struct {
PacketId string `json:"packet_id"`
}
type RedPacketInfoReq struct {
Method string `json:"method"`
Params Params `json:"params"`
}
type RedPacket struct { type RedPacket struct {
PacketId string `json:"packet_id"` PacketId string `json:"packet_id"`
LiveId int32 `json:"live_id"` LiveId int32 `json:"live_id"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Receive string `json:"receive"` Receive string `json:"receive"`
UserId int32 `json:"user_id"`
Status uint8 `json:"status"`
RedPacketInfo RedPacketInfoResp RedPacketInfo RedPacketInfoResp
PageNum int
PageSize int
} }
type RedPacketResp struct { type RedPacketResp struct {
...@@ -59,6 +91,7 @@ type RedPacketResp struct { ...@@ -59,6 +91,7 @@ type RedPacketResp struct {
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
UserName string `json:"user_name"` UserName string `json:"user_name"`
UserMobile string `json:"user_mobile"` UserMobile string `json:"user_mobile"`
ReceiveStatus uint8 `json:"receive_status"`
} }
func (r *RedPacket) ExistByPacketInfoId() (bool, error) { func (r *RedPacket) ExistByPacketInfoId() (bool, error) {
...@@ -73,6 +106,9 @@ func (r *RedPacket) GetRedPackets() ([]*RedPacketResp, error) { ...@@ -73,6 +106,9 @@ func (r *RedPacket) GetRedPackets() ([]*RedPacketResp, error) {
var redPacketResp = []*RedPacketResp{} var redPacketResp = []*RedPacketResp{}
for _, val := range redPacketsInfo { for _, val := range redPacketsInfo {
if strings.Contains(util.ToString(val.Receive), util.ToString(r.UserId)) {
continue
}
tmp := &RedPacketResp{} tmp := &RedPacketResp{}
tmp.CoinName = val.CoinName tmp.CoinName = val.CoinName
tmp.Amount = val.Amount tmp.Amount = val.Amount
...@@ -89,7 +125,14 @@ func (r *RedPacket) GetRedPackets() ([]*RedPacketResp, error) { ...@@ -89,7 +125,14 @@ func (r *RedPacket) GetRedPackets() ([]*RedPacketResp, error) {
func (r *RedPacket) Add() error { func (r *RedPacket) Add() error {
url := "https://redback.biqianbao.net/red-packet" url := "https://redback.biqianbao.net/red-packet"
var jsonStr = []byte(`{"method": "Info","params": {"packet_id": "fbbad00c-a91f-4eb3-88a1-cab02b1be26f"},"id":123}`)
var params RedPacketInfoReq
params.Method = "Info"
params.Params.PacketId = r.PacketId
jsonStr, err := json.Marshal(params)
if err != nil {
return err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
...@@ -106,7 +149,6 @@ func (r *RedPacket) Add() error { ...@@ -106,7 +149,6 @@ func (r *RedPacket) Add() error {
var redPacketResp RedPacketInfoResp var redPacketResp RedPacketInfoResp
err = json.Unmarshal(body, &redPacketResp) err = json.Unmarshal(body, &redPacketResp)
if err != nil { if err != nil {
fmt.Println(err)
return err return err
} }
if redPacketResp.Error.Code != 0 { if redPacketResp.Error.Code != 0 {
...@@ -145,23 +187,122 @@ func (r *RedPacket) Add() error { ...@@ -145,23 +187,122 @@ func (r *RedPacket) Add() error {
func (r *RedPacket) Edit() error { func (r *RedPacket) Edit() error {
return models.EditRedPacket(r.getMaps(), map[string]interface{}{ return models.EditRedPacket(r.getMaps(), map[string]interface{}{
//"user_id": r.RedPacketInfo.UserId, "remain": r.RedPacketInfo.Result.Remain,
//"user_name": r.RedPacketInfo.UserName, "status": r.RedPacketInfo.Result.Status,
//"user_mobile": r.RedPacketInfo.UserMobile, "update_at": r.RedPacketInfo.Result.UpdateAt,
//"platform_id": r.RedPacketInfo.PlatformId, })
//"type": r.RedPacketInfo.Type, }
//"coin_id": r.RedPacketInfo.CoinId,
//"coin_name": r.RedPacketInfo.CoinName, func UpdateReceive() error {
//"amount": r.RedPacketInfo.Amount, redPacketsInfo, err := models.GetRedPacketsForReceive()
//"size": r.RedPacketInfo.Size, if err != nil {
//"to": r.RedPacketInfo.To, return err
//"remain": r.RedPacketInfo.Remain, }
//"status": r.RedPacketInfo.Status, url := "https://redback.biqianbao.net/red-packet"
//"remark": r.RedPacketInfo.Remark, for _, val := range redPacketsInfo {
//"create_at": r.RedPacketInfo.CreateAt, var params RedPacketInfoReq
//"update_at": r.RedPacketInfo.UpdateAt, params.Method = "ReceiveDetail"
//"expires_at": r.RedPacketInfo.ExpiresAt, params.Params.PacketId = val.PacketId
jsonStr, _ := json.Marshal(params)
if err != nil {
continue
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
continue
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
var redPacketReceiveDetailResp RedPacketReceiveDetailResp
err = json.Unmarshal(body, &redPacketReceiveDetailResp)
if err != nil {
continue
}
if redPacketReceiveDetailResp.Error.Code != 0 {
continue
}
var receive = []int{20063}
for _, item := range redPacketReceiveDetailResp.Result.Rows {
receive = append(receive, util.ToInt(item.UserId))
}
jsonString, err := json.Marshal(receive)
if err != nil {
continue
}
maps := make(map[string]interface{})
maps["packet_id"] = val.PacketId
models.EditRedPacket(maps, map[string]interface{}{
"receive": string(jsonString),
}) })
}
return nil
}
func UpdateInfo() error {
maps := make(map[string]interface{})
maps["status"] = 1
redPacketsInfo, err := models.GetRedPackets(maps)
if err != nil {
return err
}
url := "https://redback.biqianbao.net/red-packet"
for _, val := range redPacketsInfo {
var params RedPacketInfoReq
params.Method = "Info"
params.Params.PacketId = val.PacketId
jsonStr, _ := json.Marshal(params)
if err != nil {
continue
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
continue
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
var redPacketInfoResp RedPacketInfoResp
err = json.Unmarshal(body, &redPacketInfoResp)
if err != nil {
continue
}
var redPacketResp RedPacketInfoResp
err = json.Unmarshal(body, &redPacketResp)
if err != nil {
return err
}
if redPacketResp.Error.Code != 0 {
fmt.Println(redPacketResp.Error.Message)
}
if val.UpdateAt != redPacketResp.Result.UpdateAt {
redPacket := map[string]interface{}{
"remain": redPacketResp.Result.Remain,
"status": redPacketResp.Result.Status,
"update_at": redPacketResp.Result.UpdateAt,
}
condition := make(map[string]interface{})
condition["id"] = val.ID
models.EditRedPacket(condition, redPacket)
}
}
return nil
} }
func (r *RedPacket) getMaps() (map[string]interface{}) { func (r *RedPacket) getMaps() (map[string]interface{}) {
...@@ -171,12 +312,8 @@ func (r *RedPacket) getMaps() (map[string]interface{}) { ...@@ -171,12 +312,8 @@ func (r *RedPacket) getMaps() (map[string]interface{}) {
maps["live_id"] = r.LiveId maps["live_id"] = r.LiveId
} }
//if r.RedPacketInfo.UserId != 0 { if r.Status != 0 {
// maps["user_id"] = r.RedPacketInfo.UserId maps["status"] = r.Status
//} }
//
//if r.RedPacketInfo.Status != 0 {
// maps["status"] = r.RedPacketInfo.Status
//}
return maps return maps
} }
...@@ -5,3 +5,8 @@ type RedPacket struct { ...@@ -5,3 +5,8 @@ type RedPacket struct {
LiveId int32 `json:"live_id" validate:"required"` LiveId int32 `json:"live_id" validate:"required"`
Avatar string `json:"avatar" validate:"omitempty"` Avatar string `json:"avatar" validate:"omitempty"`
} }
type RedPacketReq struct {
LiveId int32 `json:"live_id" validate:"required"`
UserId int32 `json:"user_id" validate:"required"`
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment