You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.9 KiB

package lottery_ticket
import (
"github.com/gin-gonic/gin"
"github.com/shopspring/decimal"
"log"
"recook/internal/api/mobile/lottery_ticket/logic"
"recook/internal/dbc"
"recook/internal/libs/lottery"
"recook/internal/model/lottery_ticket"
"recook/tools"
"strconv"
)
type Notify struct {
}
// @Style 彩票回调
func (n *Notify) Ticket(c *gin.Context) {
wAction := c.PostForm("wAction")
wMessage := c.PostForm("wMessage")
// 转码
data := string(lottery.Lottery.GbkToUtf8([]byte(wMessage)))
// 验签
log.Println(data)
switch wAction {
case "101":
n.issue(data)
case "104":
n.bet(data)
case "108":
n.bonus(data)
}
c.String(200, lottery.Lottery.CallbackSuccess(wAction))
}
// @Style 期数回调
func (n *Notify) issue(jsonData string) {
issue, err := lottery.Lottery.CallbackIssue(jsonData)
if err != nil {
log.Println(err)
return
}
info := lottery_ticket.Lottery{}
dbc.DB.First(&info, "code = ?", issue.LotId)
if info.Id > 0 {
if issue.Status == "1" {
if info.NowNumber == issue.Number {
// 已处理
// 更新期数状态
status, _ := strconv.Atoi(issue.Status)
salesMoney, _ := decimal.NewFromString(issue.SalesMoney)
bonusMoney, _ := decimal.NewFromString(issue.BonusMoney)
dbc.DB.Model(&lottery_ticket.LotteryIssue{}).Where("lottery_id = ? and number = ?", info.Id, issue.Number).Updates(lottery_ticket.LotteryIssue{
StartTime: tools.StrToSecond(issue.StartTime),
StopTime: tools.StrToSecond(issue.StopTime),
OfficialStartTime: tools.StrToSecond(issue.OfficialStartTime),
OfficialStopTime: tools.StrToSecond(issue.OfficialStopTime),
Status: status,
BonusCode: issue.BonusCode,
SalesMoney: salesMoney,
BonusMoney: bonusMoney,
})
return
}
status, _ := strconv.Atoi(issue.Status)
salesMoney, _ := decimal.NewFromString(issue.SalesMoney)
bonusMoney, _ := decimal.NewFromString(issue.BonusMoney)
dbc.DB.Create(lottery_ticket.LotteryIssue{
LotteryId: info.Id,
Number: issue.Number,
StartTime: tools.StrToSecond(issue.StartTime),
StopTime: tools.StrToSecond(issue.StopTime),
OfficialStartTime: tools.StrToSecond(issue.OfficialStartTime),
OfficialStopTime: tools.StrToSecond(issue.OfficialStopTime),
Status: status,
BonusCode: issue.BonusCode,
SalesMoney: salesMoney,
BonusMoney: bonusMoney,
})
} else {
// 更新期数状态
status, _ := strconv.Atoi(issue.Status)
salesMoney, _ := decimal.NewFromString(issue.SalesMoney)
bonusMoney, _ := decimal.NewFromString(issue.BonusMoney)
dbc.DB.Model(&lottery_ticket.LotteryIssue{}).Where("lottery_id = ? and number = ?", info.Id, issue.Number).Updates(lottery_ticket.LotteryIssue{
StartTime: tools.StrToSecond(issue.StartTime),
StopTime: tools.StrToSecond(issue.StopTime),
OfficialStartTime: tools.StrToSecond(issue.OfficialStartTime),
OfficialStopTime: tools.StrToSecond(issue.OfficialStopTime),
Status: status,
BonusCode: issue.BonusCode,
SalesMoney: salesMoney,
BonusMoney: bonusMoney,
})
}
}
}
// @Style 投注回调处理
func (n *Notify) bet(jsonData string) {
betS, err := lottery.Lottery.CallbackBet(jsonData)
if err != nil {
log.Println("ticket callback error:", err)
return
}
if len(betS) > 0 {
ticketInfo := lottery_ticket.LotteryTicket{}
dbc.DB.First(&ticketInfo, "order_id = ?", betS[0].OrderId)
if ticketInfo.Status == 1 {
logic.LotteryLogic.BetHandel(betS)
}
}
}
// @Style 反奖通知
func (n *Notify) bonus(jsonData string) {
bonus, err := lottery.Lottery.CallbackBonus(jsonData)
if err != nil {
log.Println(err)
return
}
info := lottery_ticket.Lottery{}
dbc.DB.First(&info, "code = ?", bonus.Issue.LotId)
if info.Id > 0 {
logic.LotteryLogic.BonusHandel(info, bonus)
}
}