diff --git a/api/v1/sqs/aws-sqs.go b/api/v1/sqs/aws-sqs.go index c5cee64..345bf1f 100644 --- a/api/v1/sqs/aws-sqs.go +++ b/api/v1/sqs/aws-sqs.go @@ -19,6 +19,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sqs" "go.uber.org/zap" + "gorm.io/datatypes" ) func ProcessSqsMessage() { @@ -252,6 +253,56 @@ func processMessage(svc *sqs.SQS, queueURL string, msg *sqs.Message) { global.GVA_LOG.Info("Processing SqsActionSaveBonus", zap.String("msgId", msgId)) } else if sqsMessage.Action == awssqs.SqsActionGenDepositDailyClaim { global.GVA_LOG.Info("Processing SqsActionGenDepositDailyClaim", zap.String("msgId", msgId)) + } else if sqsMessage.Action == awssqs.SqsActionUserBehaviorRegister || + sqsMessage.Action == awssqs.SqsActionUserBehaviorLogin || + sqsMessage.Action == awssqs.SqsActionUserBehaviorEditPassword || + sqsMessage.Action == awssqs.SqsActionUserBehaviorEditPayPassword || + sqsMessage.Action == awssqs.SqsActionUserBehaviorUpdateWallet { + + global.GVA_LOG.Info("Processing SqsActionUserBehavior", zap.String("msgId", msgId), zap.String("action", sqsMessage.Action.GetName())) + var req awssqs.SqsActionUserBehaviorContent + err = json.Unmarshal([]byte(sqsMessage.Content), &req) + if err != nil { + processErr = err + } else { + log := awssqs.SqsUserBehaviorLog{ + ActionId: int32(sqsMessage.Action), + Userno: req.Userno, + Ip: req.Ip, + Phone: req.Phone, + } + if req.Header != "" { + log.Header = datatypes.JSON([]byte(req.Header)) + } + err = global.GVA_DB.Create(&log).Error + if err != nil { + processErr = err + global.GVA_LOG.Error("Save SqsUserBehaviorLog error", zap.Error(err)) + } + } + } else if sqsMessage.Action == awssqs.SqsActionWalletBalanceChange { + global.GVA_LOG.Info("Processing SqsActionWalletBalanceChange", zap.String("msgId", msgId)) + var req awssqs.SqsActionWalletBalanceChangeContent + err = json.Unmarshal([]byte(sqsMessage.Content), &req) + if err != nil { + processErr = err + } else { + log := awssqs.SqsWalletBalanceChangeLog{ + Userno: req.Userno, + Amount: req.Amount, + SourceType: req.SourceType, + SourceId: req.SourceId, + GameId: req.GameId, + BeforeBalance: req.BeforeBalance, + AfterBalance: req.AfterBalance, + RecordNo: req.RecordNo, + } + err = global.GVA_DB.Create(&log).Error + if err != nil { + processErr = err + global.GVA_LOG.Error("Save SqsWalletBalanceChangeLog error", zap.Error(err)) + } + } } else { global.GVA_LOG.Warn("Unknown action", zap.String("action", string(sqsMessage.Action)), diff --git a/initialize/gorm_biz.go b/initialize/gorm_biz.go index 6814111..316cd2b 100644 --- a/initialize/gorm_biz.go +++ b/initialize/gorm_biz.go @@ -2,13 +2,18 @@ package initialize import ( "bygdata/global" + "bygdata/model/awssqs" ) func bizModel() error { db := global.GVA_DB - err := db.AutoMigrate() + err := db.AutoMigrate( + &awssqs.SqsUserBehaviorLog{}, + &awssqs.SqsWalletBalanceChangeLog{}, + ) if err != nil { return err } return nil } + diff --git a/model/awssqs/sqs.go b/model/awssqs/sqs.go index 28fdfb0..e55f6e7 100644 --- a/model/awssqs/sqs.go +++ b/model/awssqs/sqs.go @@ -36,6 +36,14 @@ const ( SqsActionInviteBonusCheck = SqsAction(110) SqsActionGenDepositDailyClaim = SqsAction(120) SqsActionDeductWithdrawLimitAfterTransfer = SqsAction(130) // 回收后才结算,扣除稽核流水 + + // 用户行为日志 + SqsActionUserBehaviorRegister = SqsAction(200) // 注册 + SqsActionUserBehaviorLogin = SqsAction(201) // 登录 + SqsActionUserBehaviorEditPassword = SqsAction(202) // 修改登录密码 + SqsActionUserBehaviorEditPayPassword = SqsAction(203) // 修改支付密码 + SqsActionUserBehaviorUpdateWallet = SqsAction(204) // 更新钱包地址(绑定钱包/银行卡) + SqsActionWalletBalanceChange = SqsAction(205) // 用户账户余额变更(充值、提现、游戏交易) ) var SqsActionMap = map[SqsAction]struct { @@ -56,6 +64,13 @@ var SqsActionMap = map[SqsAction]struct { SqsActionInviteBonusCheck: {Id: 110, Name: "SqsActionInviteBonus"}, SqsActionGenDepositDailyClaim: {Id: 120, Name: "SqsActionGenDepositDailyClaim"}, SqsActionDeductWithdrawLimitAfterTransfer: {Id: 130, Name: "SqsActionDeductWithdrawLimitAfterTransfer"}, + + SqsActionUserBehaviorRegister: {Id: 200, Name: "SqsActionUserBehaviorRegister"}, + SqsActionUserBehaviorLogin: {Id: 201, Name: "SqsActionUserBehaviorLogin"}, + SqsActionUserBehaviorEditPassword: {Id: 202, Name: "SqsActionUserBehaviorEditPassword"}, + SqsActionUserBehaviorEditPayPassword: {Id: 203, Name: "SqsActionUserBehaviorEditPayPassword"}, + SqsActionUserBehaviorUpdateWallet: {Id: 204, Name: "SqsActionUserBehaviorUpdateWallet"}, + SqsActionWalletBalanceChange: {Id: 205, Name: "SqsActionWalletBalanceChange"}, } type SqsActionRegisterContent struct { @@ -115,6 +130,26 @@ type SqsActionDeductWithdrawLimitAfterTransferContent struct { SourceType int32 `json:"sourceType"` // WalletRecordSourceType } +// SqsActionUserBehaviorContent 用户行为日志:注册、登录、修改密码、修改支付密码、更新钱包地址 +type SqsActionUserBehaviorContent struct { + Userno string `json:"userno"` + Ip string `json:"ip"` + Header string `json:"header"` + Phone string `json:"phone,omitempty"` // 手机号(注册时有值) +} + +// 用户账户余额变更:充值、提现、游戏交易 +type SqsActionWalletBalanceChangeContent struct { + Userno string `json:"userno"` + Amount string `json:"amount"` // 变更金额(正=加,负=减) + SourceType int32 `json:"sourceType"` // WalletRecordSourceType + SourceId string `json:"sourceId"` // 订单号/actionId等 + GameId string `json:"gameId"` // 游戏ID(游戏交易时有值) + BeforeBalance string `json:"beforeBalance"` // 变更前余额 + AfterBalance string `json:"afterBalance"` // 变更后余额 + RecordNo string `json:"recordNo"` // 账变流水号 +} + func (m SqsMessage) Json() (string, error) { marshal, err := json.Marshal(m) if err != nil { diff --git a/model/awssqs/sqs_log.go b/model/awssqs/sqs_log.go new file mode 100644 index 0000000..9df48a9 --- /dev/null +++ b/model/awssqs/sqs_log.go @@ -0,0 +1,37 @@ +package awssqs + +import ( + "bygdata/global" + + "gorm.io/datatypes" +) + +type SqsUserBehaviorLog struct { + global.GVA_MODEL2 + ActionId int32 `json:"actionId" gorm:"column:action_id;comment:行为ID;index"` + Userno string `json:"userno" gorm:"column:userno;comment:用户号;index"` + Ip string `json:"ip" gorm:"column:ip;comment:IP地址"` + Header datatypes.JSON `json:"header" gorm:"column:header;comment:请求头(key-value)"` + Phone string `json:"phone" gorm:"column:phone;comment:手机号"` +} + +func (SqsUserBehaviorLog) TableName() string { + return "byl_data.sqs_user_behavior_log" +} + +type SqsWalletBalanceChangeLog struct { + global.GVA_MODEL2 + Userno string `json:"userno" gorm:"column:userno;comment:用户号;index"` + Amount string `json:"amount" gorm:"column:amount;comment:变更金额"` + SourceType int32 `json:"sourceType" gorm:"column:source_type;comment:来源类型"` + SourceId string `json:"sourceId" gorm:"column:source_id;comment:来源ID;index"` + GameId string `json:"gameId" gorm:"column:game_id;comment:游戏ID"` + BeforeBalance string `json:"beforeBalance" gorm:"column:before_balance;comment:变更前余额"` + AfterBalance string `json:"afterBalance" gorm:"column:after_balance;comment:变更后余额"` + RecordNo string `json:"recordNo" gorm:"column:record_no;comment:账变流水号"` +} + +func (SqsWalletBalanceChangeLog) TableName() string { + return "byl_data.sqs_wallet_balance_change_log" +} +