@@ -100,4 +100,5 @@ func initTasks() { | |||||
jobs[taskMd.CornEggEnergyAutoCachingEggPointStatistics] = taskAutoCachingEggPointStatistics // 蛋蛋分统计落地页-缓存 | jobs[taskMd.CornEggEnergyAutoCachingEggPointStatistics] = taskAutoCachingEggPointStatistics // 蛋蛋分统计落地页-缓存 | ||||
jobs[taskMd.CornEggEnergyAutoUpdateUserAccess] = taskEggEnergyAutoUpdateUserAccess // es蛋蛋分记录-自动更新访问次数 | jobs[taskMd.CornEggEnergyAutoUpdateUserAccess] = taskEggEnergyAutoUpdateUserAccess // es蛋蛋分记录-自动更新访问次数 | ||||
jobs[taskMd.CornEggEnergyAutoDeleteTableAdvertisingCallback] = taskAutoDeleteTableAdvertisingCallback // 定时清除七天以前的广告回调数据 | jobs[taskMd.CornEggEnergyAutoDeleteTableAdvertisingCallback] = taskAutoDeleteTableAdvertisingCallback // 定时清除七天以前的广告回调数据 | ||||
jobs[taskMd.CornEggEnergyCoinFlow] = taskEggEnergyCoinFlow // 定时重置用户流水聚合信息 | |||||
} | } |
@@ -14,4 +14,5 @@ const ( | |||||
CornEggEnergyAutoCachingEggPointStatistics = "cron_egg_energy_auto_caching_egg_point_statistics" // 缓存蛋蛋分统计落地页 | CornEggEnergyAutoCachingEggPointStatistics = "cron_egg_energy_auto_caching_egg_point_statistics" // 缓存蛋蛋分统计落地页 | ||||
CornEggEnergyAutoUpdateUserAccess = "cron_egg_energy_auto_update_user_access" // 同步用户访问次数到es | CornEggEnergyAutoUpdateUserAccess = "cron_egg_energy_auto_update_user_access" // 同步用户访问次数到es | ||||
CornEggEnergyAutoDeleteTableAdvertisingCallback = "cron_egg_energy_auto_delete_table_advertising_callback" // 同步用户访问次数到es | CornEggEnergyAutoDeleteTableAdvertisingCallback = "cron_egg_energy_auto_delete_table_advertising_callback" // 同步用户访问次数到es | ||||
CornEggEnergyCoinFlow = "cron_egg_energy_coin_flow" // 定时重置用户流水聚合信息 | |||||
) | ) |
@@ -0,0 +1,78 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/utils" | |||||
"applet/app/utils/cache" | |||||
"fmt" | |||||
"xorm.io/xorm" | |||||
) | |||||
const AutoCachingTop100LockKey = "egg_energy_auto_caching_top100_lock_key" | |||||
const HeroListRedisRankKey = "EggEnergy:HomePage:HeroList:Rank:%d" // 1.kind | |||||
func AutoCachingTop100(engine *xorm.Engine) { | |||||
fmt.Println("egg_energy_auto_caching_top100...") | |||||
defer func() { | |||||
if err := recover(); err != nil { | |||||
fmt.Println(err) | |||||
return | |||||
} | |||||
}() | |||||
fmt.Println("----------------------------AutoCachingTop100_Begin-------------------------------") | |||||
getString, _ := cache.GetString(AutoCachingTop100LockKey) | |||||
if getString != "" { | |||||
fmt.Println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "上一次缓存前一百用户未执行完") | |||||
return | |||||
} | |||||
cache.SetEx(AutoCachingTop100LockKey, "running", 10*60) // 10 min | |||||
defer cache.Del(AutoCachingTop100LockKey) | |||||
for i := 1; i <= 3; i++ { | |||||
sql := "SELECT user_virtual_coin_flow_aggregation.*" + | |||||
"FROM `user_virtual_coin_flow_aggregation` " + | |||||
"WHERE 1=1" | |||||
switch i { | |||||
case 1: | |||||
sql += " ORDER BY user_virtual_coin_flow_aggregation.today_data" | |||||
case 2: | |||||
sql += " ORDER BY user_virtual_coin_flow_aggregation.this_week_data" | |||||
case 3: | |||||
sql += " ORDER BY user_virtual_coin_flow_aggregation.this_month_data" | |||||
} | |||||
sql += " Desc LIMIT %d, %d;" | |||||
sql = fmt.Sprintf(sql, 0, 100) | |||||
res, err := db.QueryNativeString(engine, sql) | |||||
if err != nil { | |||||
fmt.Println("AutoCachingTop100_Err ===================>" + err.Error()) | |||||
return | |||||
} | |||||
rankCacheKey := fmt.Sprintf(HeroListRedisRankKey, i) | |||||
for _, item := range res { | |||||
switch i { | |||||
case 1: | |||||
_, err = cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["today_data"]), item["uid"]) | |||||
if err != nil { | |||||
fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) | |||||
return | |||||
} | |||||
case 2: | |||||
_, err := cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["this_week_data"]), item["uid"]) | |||||
if err != nil { | |||||
fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) | |||||
return | |||||
} | |||||
case 3: | |||||
_, err := cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["this_month_data"]), item["uid"]) | |||||
if err != nil { | |||||
fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) | |||||
return | |||||
} | |||||
} | |||||
} | |||||
fmt.Println("----------------------------AutoCachingTop100_End-------------------------------") | |||||
} | |||||
} |
@@ -0,0 +1,26 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/cfg" | |||||
"applet/app/db" | |||||
"applet/app/utils/cache" | |||||
"testing" | |||||
) | |||||
func TestAutoCachingTop100(t *testing.T) { | |||||
dbcfg := cfg.DBCfg{ | |||||
Host: "119.23.182.117:3306", | |||||
Name: "egg", | |||||
User: "root", | |||||
Psw: "Fnuo123com@", | |||||
ShowLog: true, | |||||
MaxLifetime: 30, | |||||
MaxOpenConns: 100, | |||||
MaxIdleConns: 100, | |||||
Path: "tmp/%s.log", | |||||
} | |||||
db.InitDB(&dbcfg) | |||||
cache.NewRedis("127.0.0.1:6379") | |||||
AutoCachingTop100(db.Db) | |||||
} |
@@ -0,0 +1,66 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/utils/cache" | |||||
"fmt" | |||||
"time" | |||||
"xorm.io/xorm" | |||||
) | |||||
func EggEnergyCoinFlow(engine *xorm.Engine) { | |||||
fmt.Println(">>>>>>>>>>>>>>>>>>EggEnergyCoinFlow-----<<<<<<<<<<<<<<<<<<<") | |||||
var now = time.Now() | |||||
year, month, day := now.Date() | |||||
today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) | |||||
thisWeek := today.AddDate(0, 0, -int(today.Weekday())+1).Format("2006-01-02") | |||||
thisMonth := time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Format("2006-01-02") | |||||
//判断今天是否清空 | |||||
getString1, _ := cache.GetString("user_virtual_coin_flow_aggregation_today_data") | |||||
if getString1 != today.Format("2006-01-02") { | |||||
//go func() { | |||||
sql := "UPDATE `user_virtual_coin_flow_aggregation` SET today_data= '0.00'" | |||||
_, err := db.ExecuteOriginalSql(engine.Where(""), sql) | |||||
if err != nil { | |||||
fmt.Println("err:>>>>>>>>", err.Error()) | |||||
return | |||||
} | |||||
fmt.Println("success:update:day>>>>>>>>") | |||||
cache.Set("user_virtual_coin_flow_aggregation_today_data", today.Format("2006-01-02")) | |||||
//}() | |||||
} | |||||
//判断本周是否清空 | |||||
getString2, _ := cache.GetString("user_virtual_coin_flow_aggregation_this_week_data") | |||||
if getString2 != today.Format("2006-01-02") && thisWeek == today.Format("2006-01-02") { | |||||
//go func() { | |||||
sql := "UPDATE `user_virtual_coin_flow_aggregation` SET this_week_data= '0.00'" | |||||
_, err := db.ExecuteOriginalSql(engine.Where(""), sql) | |||||
if err != nil { | |||||
fmt.Println("err:>>>>>>>>", err.Error()) | |||||
return | |||||
} | |||||
fmt.Println("success:update:week>>>>>>>>") | |||||
cache.Set("user_virtual_coin_flow_aggregation_this_week_data", today.Format("2006-01-02")) | |||||
//}() | |||||
} | |||||
//判断本月是否清空 | |||||
getString3, _ := cache.GetString("user_virtual_coin_flow_aggregation_this_month_data") | |||||
if getString3 != today.Format("2006-01-02") && thisMonth == today.Format("2006-01-02") { | |||||
//go func() { | |||||
sql := "UPDATE `user_virtual_coin_flow_aggregation` SET this_month_data= '0.00'" | |||||
_, err := db.ExecuteOriginalSql(engine.Where(""), sql) | |||||
if err != nil { | |||||
fmt.Println("err:>>>>>>>>", err.Error()) | |||||
return | |||||
} | |||||
fmt.Println("success:update:month>>>>>>>>") | |||||
cache.Set("user_virtual_coin_flow_aggregation_this_month_data", today.Format("2006-01-02")) | |||||
//}() | |||||
} | |||||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>EggEnergyCoinFlow----end<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") | |||||
return | |||||
} |
@@ -0,0 +1,22 @@ | |||||
package task | |||||
import ( | |||||
"applet/app/task/svc" | |||||
"math/rand" | |||||
"time" | |||||
"xorm.io/xorm" | |||||
) | |||||
func taskEggEnergyCoinFlow(eg *xorm.Engine) { | |||||
for { | |||||
if len(ch) > workerNum { | |||||
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000))) | |||||
} else { | |||||
goto START | |||||
} | |||||
} | |||||
START: | |||||
ch <- 1 | |||||
svc.EggEnergyCoinFlow(eg) | |||||
<-ch | |||||
} |