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-是 其他-否
|
||||
}
|
||||
|
||||
// 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 {
|
||||
Model
|
||||
ProductID int64 `json:"product_id"` // 产品ID
|
||||
|
|
|
@ -199,7 +199,7 @@ func Login(channelCode, loginType, callBackUrl, msisdn string) (LoginResponse, e
|
|||
return respData, nil
|
||||
}
|
||||
|
||||
// CheckMusicOrderState 定时任务,检查咪咕音乐的订单是否有退订
|
||||
// CheckMusicOrderState 定时任务,检查咪咕音乐的订单是否有退订(回调接口记录的订单)
|
||||
func CheckMusicOrderState() {
|
||||
logger.Info("****** CheckMusicOrderState start ******")
|
||||
fmt.Println("****** CheckMusicOrderState start ******")
|
||||
|
@ -210,7 +210,7 @@ func CheckMusicOrderState() {
|
|||
}
|
||||
|
||||
// 查询订单列表中未退订的用户,查询其是否退订;如果退订,则更新退订时间
|
||||
var orderList []MgOrder
|
||||
var orderList []MgOrderLog
|
||||
|
||||
err := database.Db.Where("state = 1").
|
||||
Where("product_id = ?", MusicProductID).
|
||||
|
@ -244,7 +244,7 @@ func CheckMusicOrderState() {
|
|||
logger.Info("****** CheckMusicOrderState end ******")
|
||||
}
|
||||
|
||||
func attemptLogin(token *string, order MgOrder) bool {
|
||||
func attemptLogin(token *string, order MgOrderLog) bool {
|
||||
for j := 0; j < MaxRetries; j++ {
|
||||
resp, err := Login(order.ChannelCode, LoginType, "", order.PhoneNumber)
|
||||
if err != nil || resp.ResCode != "000000" {
|
||||
|
@ -267,7 +267,122 @@ func attemptLogin(token *string, order MgOrder) bool {
|
|||
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++ {
|
||||
resp, err := MonthlySubscriptionQuery(token, ServiceId, order.ChannelCode)
|
||||
if err != nil || resp.ResCode != "000000" {
|
||||
|
|
|
@ -94,13 +94,20 @@ func run() error {
|
|||
s := gocron.NewScheduler()
|
||||
|
||||
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 {
|
||||
fmt.Println("err:", err)
|
||||
}
|
||||
} else {
|
||||
// 每小时更新1次历史汇总数据
|
||||
//err := s.Every(1).Day().At("10:03").Do(models.UpdateHistoricalSummaryCache)
|
||||
err := s.Every(1).Hour().Do(models.UpdateHistoricalSummaryCache)
|
||||
if err != nil {
|
||||
fmt.Println("err:", err)
|
||||
|
|
Loading…
Reference in New Issue
Block a user