1、AI视频彩铃增加临时表的记录和数据检测;
This commit is contained in:
parent
69748b530b
commit
1b1f0ed785
|
@ -72,6 +72,22 @@ type MgOrder struct {
|
||||||
IsOneHourCancel int `json:"is_one_hour_cancel"` // 是否1小时内退订 1-是 其他-否
|
IsOneHourCancel int `json:"is_one_hour_cancel"` // 是否1小时内退订 1-是 其他-否
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MgOrderLog 订单管理表对应的结构体
|
||||||
|
type MgOrderLog struct {
|
||||||
|
Model
|
||||||
|
ProductID int64 `json:"product_id"` // 产品ID
|
||||||
|
ChannelCode string `gorm:"size:255" json:"channel_code"` // 渠道编码
|
||||||
|
OrderSerial string `gorm:"size:255;not null" json:"order_serial"` // 订单流水号
|
||||||
|
SubscribeTime *time.Time `json:"subscribe_time"` // 订阅时间
|
||||||
|
PhoneNumber string `gorm:"size:20;not null" json:"phone_number"` // 手机号
|
||||||
|
SM4PhoneNumber string `gorm:"size:255" json:"sm4_phone_number"` // SM4加密手机号
|
||||||
|
ExternalOrderID string `gorm:"size:255" json:"external_order_id"` // 外部平台订单号(如咪咕等)
|
||||||
|
ChannelTradeNo string `gorm:"size:255" json:"channel_trade_no"` // 渠道订单号
|
||||||
|
State int `gorm:"size:255" json:"state"` // 用户订阅状态 1-订阅成功 2-已取消订阅
|
||||||
|
UnsubscribeTime *time.Time `json:"unsubscribe_time"` // 取消订阅时间
|
||||||
|
IsOneHourCancel int `json:"is_one_hour_cancel"` // 是否1小时内退订 1-是 其他-否
|
||||||
|
}
|
||||||
|
|
||||||
type MgOrderCopy struct {
|
type MgOrderCopy struct {
|
||||||
Model
|
Model
|
||||||
ProductID int64 `json:"product_id"` // 产品ID
|
ProductID int64 `json:"product_id"` // 产品ID
|
||||||
|
|
|
@ -199,7 +199,7 @@ func Login(channelCode, loginType, callBackUrl, msisdn string) (LoginResponse, e
|
||||||
return respData, nil
|
return respData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckMusicOrderState 定时任务,检查咪咕音乐的订单是否有退订
|
// CheckMusicOrderState 定时任务,检查咪咕音乐的订单是否有退订(回调接口记录的订单)
|
||||||
func CheckMusicOrderState() {
|
func CheckMusicOrderState() {
|
||||||
logger.Info("****** CheckMusicOrderState start ******")
|
logger.Info("****** CheckMusicOrderState start ******")
|
||||||
fmt.Println("****** CheckMusicOrderState start ******")
|
fmt.Println("****** CheckMusicOrderState start ******")
|
||||||
|
@ -210,7 +210,7 @@ func CheckMusicOrderState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询订单列表中未退订的用户,查询其是否退订;如果退订,则更新退订时间
|
// 查询订单列表中未退订的用户,查询其是否退订;如果退订,则更新退订时间
|
||||||
var orderList []MgOrder
|
var orderList []MgOrderLog
|
||||||
|
|
||||||
err := database.Db.Where("state = 1").
|
err := database.Db.Where("state = 1").
|
||||||
Where("product_id = ?", MusicProductID).
|
Where("product_id = ?", MusicProductID).
|
||||||
|
@ -244,7 +244,7 @@ func CheckMusicOrderState() {
|
||||||
logger.Info("****** CheckMusicOrderState end ******")
|
logger.Info("****** CheckMusicOrderState end ******")
|
||||||
}
|
}
|
||||||
|
|
||||||
func attemptLogin(token *string, order MgOrder) bool {
|
func attemptLogin(token *string, order MgOrderLog) bool {
|
||||||
for j := 0; j < MaxRetries; j++ {
|
for j := 0; j < MaxRetries; j++ {
|
||||||
resp, err := Login(order.ChannelCode, LoginType, "", order.PhoneNumber)
|
resp, err := Login(order.ChannelCode, LoginType, "", order.PhoneNumber)
|
||||||
if err != nil || resp.ResCode != "000000" {
|
if err != nil || resp.ResCode != "000000" {
|
||||||
|
@ -267,7 +267,122 @@ func attemptLogin(token *string, order MgOrder) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkSubscriptionStatus(token string, order MgOrder) bool {
|
func checkSubscriptionStatus(token string, order MgOrderLog) bool {
|
||||||
|
for j := 0; j < MaxRetries; j++ {
|
||||||
|
resp, err := MonthlySubscriptionQuery(token, ServiceId, order.ChannelCode)
|
||||||
|
if err != nil || resp.ResCode != "000000" {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("MonthlySubscriptionQuery failed:", err.Error())
|
||||||
|
logger.Error("MonthlySubscriptionQuery failed:", err.Error())
|
||||||
|
} else {
|
||||||
|
fmt.Println("MonthlySubscriptionQuery failed, MonthlySubscriptionResp:", resp.ResCode)
|
||||||
|
logger.Error("MonthlySubscriptionQuery failed, MonthlySubscriptionResp:", resp.ResCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
if j < MaxRetries-1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.Status == "0" {
|
||||||
|
return true
|
||||||
|
} else if resp.Status == "1" {
|
||||||
|
if order.State == SubscribeOK {
|
||||||
|
subscribeTime := order.CreatedAt
|
||||||
|
unsubTime := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
cancelFlag := 0
|
||||||
|
|
||||||
|
if IsWithinOneHourCancel(subscribeTime, unsubTime) {
|
||||||
|
cancelFlag = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
err = database.Db.Table("mg_order").Where("order_serial = ?", order.OrderSerial).Updates(map[string]interface{}{
|
||||||
|
"state": UnsubscribeOK,
|
||||||
|
"is_one_hour_cancel": cancelFlag,
|
||||||
|
"unsubscribe_time": unsubTime,
|
||||||
|
"updated_at": time.Now(),
|
||||||
|
}).Error
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Failed to update order:", err.Error())
|
||||||
|
logger.Error("Failed to update order:", err.Error())
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckAIMusicOrderState 定时任务,检查咪咕音乐的订单是否有退订(悠然同步的订单)
|
||||||
|
func CheckAIMusicOrderState() {
|
||||||
|
logger.Info("****** CheckMusicOrderState start ******")
|
||||||
|
fmt.Println("****** CheckMusicOrderState start ******")
|
||||||
|
if database.Db == nil {
|
||||||
|
logger.Error("Database connection is nil")
|
||||||
|
fmt.Println("Database connection is nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询订单列表中未退订的用户,查询其是否退订;如果退订,则更新退订时间
|
||||||
|
var orderList []MgOrder
|
||||||
|
|
||||||
|
err := database.Db.Where("state = 1").
|
||||||
|
Where("product_id = ?", MusicProductID).
|
||||||
|
Order("created_at desc").
|
||||||
|
Find(&orderList).Error
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("query mg_order err:", err.Error())
|
||||||
|
logger.Error("query mg_order err:", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("orderList size is:", len(orderList))
|
||||||
|
logger.Info("orderList size is:", len(orderList))
|
||||||
|
|
||||||
|
for _, order := range orderList {
|
||||||
|
var token string
|
||||||
|
|
||||||
|
// 登录接口调用
|
||||||
|
if !attemptLoginAI(&token, order) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 订阅状态查询
|
||||||
|
if !checkSubscriptionStatusAI(token, order) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("****** CheckMusicOrderState end ******")
|
||||||
|
logger.Info("****** CheckMusicOrderState end ******")
|
||||||
|
}
|
||||||
|
|
||||||
|
func attemptLoginAI(token *string, order MgOrder) bool {
|
||||||
|
for j := 0; j < MaxRetries; j++ {
|
||||||
|
resp, err := Login(order.ChannelCode, LoginType, "", order.PhoneNumber)
|
||||||
|
if err != nil || resp.ResCode != "000000" {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Login failed:", err.Error())
|
||||||
|
logger.Error("Login failed:", err.Error())
|
||||||
|
} else {
|
||||||
|
fmt.Println("Login failed, loginResp:", resp)
|
||||||
|
logger.Error("Login failed, loginResp:", resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
if j < MaxRetries-1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
*token = resp.Token
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkSubscriptionStatusAI(token string, order MgOrder) bool {
|
||||||
for j := 0; j < MaxRetries; j++ {
|
for j := 0; j < MaxRetries; j++ {
|
||||||
resp, err := MonthlySubscriptionQuery(token, ServiceId, order.ChannelCode)
|
resp, err := MonthlySubscriptionQuery(token, ServiceId, order.ChannelCode)
|
||||||
if err != nil || resp.ResCode != "000000" {
|
if err != nil || resp.ResCode != "000000" {
|
||||||
|
|
|
@ -94,13 +94,20 @@ func run() error {
|
||||||
s := gocron.NewScheduler()
|
s := gocron.NewScheduler()
|
||||||
|
|
||||||
if config.ApplicationConfig.Name == "migu_music_admin_server" { // 咪咕音乐
|
if config.ApplicationConfig.Name == "migu_music_admin_server" { // 咪咕音乐
|
||||||
// 咪咕音乐订阅数据检测
|
// 咪咕音乐订阅数据检测(悠然回传)
|
||||||
err := s.Every(1).Day().At("00:30").Do(models.CheckMusicOrderState)
|
err := s.Every(1).Day().At("00:30").Do(models.CheckAIMusicOrderState)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("err:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 咪咕音乐订阅数据检测(回调接口记录订单)
|
||||||
|
err = s.Every(1).Day().At("04:00").Do(models.CheckMusicOrderState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("err:", err)
|
fmt.Println("err:", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 每小时更新1次历史汇总数据
|
// 每小时更新1次历史汇总数据
|
||||||
|
//err := s.Every(1).Day().At("10:03").Do(models.UpdateHistoricalSummaryCache)
|
||||||
err := s.Every(1).Hour().Do(models.UpdateHistoricalSummaryCache)
|
err := s.Every(1).Hour().Do(models.UpdateHistoricalSummaryCache)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("err:", err)
|
fmt.Println("err:", err)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user