摘要:最近網(wǎng)站實(shí)行用戶(hù)積分過(guò)期制度,只保留用戶(hù)近三月積分,三月前未使用積分進(jìn)行扣除平臺(tái)用戶(hù)量比較大,感覺(jué)這樣做會(huì)出問(wèn)題,有沒(méi)有好的解決方法服務(wù)器代碼如下近三月使用積分扣除用戶(hù)過(guò)期積分添加過(guò)期積分扣除日志總過(guò)期積分過(guò)期積分未消費(fèi)完應(yīng)扣
最近網(wǎng)站實(shí)行用戶(hù)積分過(guò)期制度,只保留用戶(hù)近三月積分,三月前未使用積分進(jìn)行扣除
*平臺(tái)用戶(hù)量比較大,感覺(jué)這樣做會(huì)出問(wèn)題,有沒(méi)有好的解決方法?(windows iis服務(wù)器)
代碼如下:
ignore_user_abort(); set_time_limit(0); do{ $this->del_score(); sleep(24*3600); }while (true); private function del_score() { $date = to_date(to_timespan(to_date(TIME_UTC)." -3 month"),"Y-m-d"); // 近三月使用積分 $user_scores = $GLOBALS["db"]->getAll("SELECT user_id,sum(score) as score FROM ".DB_PREFIX."user_score_log WHERE score<0 AND create_time_ymd > "".$date."" GROUP BY user_id"); // 扣除用戶(hù)過(guò)期積分 $update_sql = "UPDATE ".DB_PREFIX."user SET score = score - CASE id "; // 添加過(guò)期積分扣除日志 $insert_sql = "INSERT INTO ".DB_PREFIX."user (`user_id`, `score`, `account_score`, `mome`, `type`, `create_time`, `create_time_ymd`, `create_time_ym`, `create_time_y`) VALUES "; foreach ($user_scores as $k => $v) { // 總過(guò)期積分 $old_account_score = $GLOBALS["db"]->getOne("SELECT account_score FROM ".DB_PREFIX."user_score_log WHERE user_id=".$v["user_id"]." AND create_time_ymd<=".$date." ORDER BY id DESC LIMIT 1"); if($old_account_score > abs($v["score"])) // 過(guò)期積分未消費(fèi)完 { $arr[$v["user_id"]] = $v["score"]; // 應(yīng)扣除積分 $score = intval($account_score - abs($v["score"])); $update_sql .= sprintf("WHEN %d THEN %d ", $v["user_id"], $score); // 賬戶(hù)現(xiàn)有積分 $account_score = $GLOBALS["db"]->getOne("SELECT score - {$score} FROM ".DB_PREFIX."user WHERE id=".$v["user_id"]); $create_time = TIME_UTC; $create_time_ymd = to_date(TIME_UTC,"Y-m-d"); $create_time_ym = to_date(TIME_UTC,"Ym"); $create_time_y = to_date(TIME_UTC,"Y"); $insert_sql .= "(".$v["user_id"].",-".$score.",".$account_score.","積分到期未使用部分扣除",26,".$create_time.","".$create_time_ymd."","".$create_time_ym."","".$create_time_y.""),"; } continue; } $ids = implode(",", array_keys($arr)); $update_sql .= " END WHERE id IN ($ids)"; $insert_sql = substr($insert_sql, 0, -1); $GLOBALS["db"]->query($update_sql); $GLOBALS["db"]->query($insert_sql); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22116.html
摘要:在軟件項(xiàng)目中,定時(shí)器也被應(yīng)用到了各方各面,本文將從項(xiàng)目入手,講述定時(shí)器,本文的例子都以為例。定時(shí)器總類(lèi)定時(shí)器有兩種對(duì)應(yīng)重復(fù)任務(wù)和一次性任務(wù)。 在大規(guī)模分布式系統(tǒng)中,每個(gè)業(yè)務(wù)都可能是集群,每個(gè)業(yè)務(wù)機(jī)都會(huì)產(chǎn)生定時(shí)任務(wù),不同的業(yè)務(wù)會(huì)有不同的任務(wù)管理需求,統(tǒng)一的任務(wù)調(diào)度和管理變得非常有必要。 定時(shí)如何準(zhǔn)確,大量的定時(shí)被同時(shí)觸發(fā)怎么辦? 定時(shí)結(jié)束的時(shí)候,怎么通知業(yè)務(wù)機(jī)去處理呢? 某臺(tái)業(yè)務(wù)機(jī)下線...
摘要:在軟件項(xiàng)目中,定時(shí)器也被應(yīng)用到了各方各面,本文將從項(xiàng)目入手,講述定時(shí)器,本文的例子都以為例。定時(shí)器總類(lèi)定時(shí)器有兩種對(duì)應(yīng)重復(fù)任務(wù)和一次性任務(wù)。 在大規(guī)模分布式系統(tǒng)中,每個(gè)業(yè)務(wù)都可能是集群,每個(gè)業(yè)務(wù)機(jī)都會(huì)產(chǎn)生定時(shí)任務(wù),不同的業(yè)務(wù)會(huì)有不同的任務(wù)管理需求,統(tǒng)一的任務(wù)調(diào)度和管理變得非常有必要。 定時(shí)如何準(zhǔn)確,大量的定時(shí)被同時(shí)觸發(fā)怎么辦? 定時(shí)結(jié)束的時(shí)候,怎么通知業(yè)務(wù)機(jī)去處理呢? 某臺(tái)業(yè)務(wù)機(jī)下線...
摘要:導(dǎo)語(yǔ)之前寫(xiě)過(guò)使用的進(jìn)行定時(shí)任務(wù),實(shí)際上也可以執(zhí)行定時(shí)任務(wù)。需求是統(tǒng)計(jì)每日訪問(wèn)的數(shù),雖然數(shù)據(jù)表中有數(shù)據(jù),為了演示,新建監(jiān)聽(tīng)器統(tǒng)計(jì)。記錄這篇文章中介紹了實(shí)現(xiàn)了事件監(jiān)聽(tīng)器,在此基礎(chǔ)上進(jìn)行擴(kuò)展。 導(dǎo)語(yǔ) 之前寫(xiě)過(guò)使用 Linux 的進(jìn)行定時(shí)任務(wù),實(shí)際上 laravel 也可以執(zhí)行定時(shí)任務(wù)。需求是統(tǒng)計(jì)每日訪問(wèn)的 IP 數(shù),雖然數(shù)據(jù)表中有數(shù)據(jù),為了演示,新建監(jiān)聽(tīng)器統(tǒng)計(jì)。 記錄 IP 這篇文章中介紹了...
閱讀 2760·2019-08-30 15:53
閱讀 529·2019-08-29 17:22
閱讀 1058·2019-08-29 13:10
閱讀 2314·2019-08-26 13:45
閱讀 2758·2019-08-26 10:46
閱讀 3206·2019-08-26 10:45
閱讀 2512·2019-08-26 10:14
閱讀 474·2019-08-23 18:23