摘要:最近网站实行用户积分过期制度,只保留用户近三月积分,三月前未使用积分进行扣除平台用户量比较大,感觉这样做会出问题,有没有好的解决方法服务器代码如下近三月使用积分扣除用户过期积分添加过期积分扣除日志总过期积分过期积分未消费完应扣
最近网站实行用户积分过期制度,只保留用户近三月积分,三月前未使用积分进行扣除
*平台用户量比较大,感觉这样做会出问题,有没有好的解决方法?(windows iis服务器)
代码如下:
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"); // 扣除用户过期积分 $update_sql = "UPDATE ".DB_PREFIX."user SET score = score - CASE id "; // 添加过期积分扣除日志 $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) { // 总过期积分 $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"])) // 过期积分未消费完 { $arr[$v["user_id"]] = $v["score"]; // 应扣除积分 $score = intval($account_score - abs($v["score"])); $update_sql .= sprintf("WHEN %d THEN %d ", $v["user_id"], $score); // 账户现有积分 $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); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22116.html
摘要:在软件项目中,定时器也被应用到了各方各面,本文将从项目入手,讲述定时器,本文的例子都以为例。定时器总类定时器有两种对应重复任务和一次性任务。 在大规模分布式系统中,每个业务都可能是集群,每个业务机都会产生定时任务,不同的业务会有不同的任务管理需求,统一的任务调度和管理变得非常有必要。 定时如何准确,大量的定时被同时触发怎么办? 定时结束的时候,怎么通知业务机去处理呢? 某台业务机下线...
摘要:在软件项目中,定时器也被应用到了各方各面,本文将从项目入手,讲述定时器,本文的例子都以为例。定时器总类定时器有两种对应重复任务和一次性任务。 在大规模分布式系统中,每个业务都可能是集群,每个业务机都会产生定时任务,不同的业务会有不同的任务管理需求,统一的任务调度和管理变得非常有必要。 定时如何准确,大量的定时被同时触发怎么办? 定时结束的时候,怎么通知业务机去处理呢? 某台业务机下线...
摘要:导语之前写过使用的进行定时任务,实际上也可以执行定时任务。需求是统计每日访问的数,虽然数据表中有数据,为了演示,新建监听器统计。记录这篇文章中介绍了实现了事件监听器,在此基础上进行扩展。 导语 之前写过使用 Linux 的进行定时任务,实际上 laravel 也可以执行定时任务。需求是统计每日访问的 IP 数,虽然数据表中有数据,为了演示,新建监听器统计。 记录 IP 这篇文章中介绍了...
阅读 2726·2019-08-30 15:53
阅读 463·2019-08-29 17:22
阅读 941·2019-08-29 13:10
阅读 2251·2019-08-26 13:45
阅读 2723·2019-08-26 10:46
阅读 3174·2019-08-26 10:45
阅读 2473·2019-08-26 10:14
阅读 430·2019-08-23 18:23