public function killsec_user_order_clear() { $db_instance = new DB('activity_killsec_instance', 'killsec'); $db_user = new DB('activity_killsec_user', 'killsec'); $redisKillsec = new RedisKillsec(); $instance_list = $db_instance->where("status!=" . self::KILLSEC_STATUS_FINISH)->select(); // var_dump( $instance_list ); if ($instance_list) { foreach ($instance_list as $k => $v) { $total = $v['killsec_count']; if ($v['status'] == self::KILLSEC_STATUS_PREVIEW) { //开始前2分钟生成token if (strtotime($v['start_time']) - 2 * 60 <= time()) { //更新实例表状态 $db_instance->where(array('instance_id' => $v['instance_id'], 'status' => self::KILLSEC_STATUS_PREVIEW))->data(array('status' => self::KILLSEC_STATUS_GOING))->update(); //生成token $redisKillsec->save_token($v['activity_id'], $redisKillsec->create_token($v['killsec_count'])); } } elseif ($v['status'] == self::KILLSEC_STATUS_GOING) { $user_list = $db_user->where(array('instance_id' => $v['instance_id']))->select(); // var_dump( $user_list ); $pay_count = 0; $order_userIds = array(); $payment_userIds = array(); $user_count = count($user_list); if ($user_list && $user_count > 0) { foreach ($user_list as $sk => $sv) { if (empty($sv['order_time'])) { if (time() - strtotime($sv['join_time']) - self::ORDER_WAIT_TIME > 0) { //ORDER_WAIT_TIME后没下单 $order_userIds[] = $sv['user_id']; } } elseif (empty($sv['pay_time'])) { if (time() - strtotime($sv['join_time']) - self::PAYMENT_WAIT_TIME > 0) { //PAYMENT_WAIT_TIME后没支付 $payment_userIds[] = $sv['user_id']; } } elseif (!empty($sv['pay_time'])) { $pay_count += 1; } } } $userIds = $order_userIds + $payment_userIds; $count = count($userIds); if ($count > 0) { //删除过期用户 $db_user->in("user_id", $userIds)->delete(); //更新参与数量 $db_instance->where(array('instance_id' => $v['instance_id']))->data(array('join_count' => $user_count - $count))->update(); //补充token $redisKillsec->save_token($v['activity_id'], $redisKillsec->create_token($count)); } else { //更新参与数量 $db_instance->where(array('instance_id' => $v['instance_id']))->data(array('join_count' => $user_count))->update(); } if ($pay_count == $total) { //秒杀完成 $db_instance->where(array('instance_id' => $v['instance_id'], 'status' => self::KILLSEC_STATUS_GOING))->data(array('status' => self::KILLSEC_STATUS_FINISH))->update(); } } } } echo 'ok'; }
public function del() { $user_id = $_POST['user_id']; $activity_id = $_POST['activity_id']; if (!$user_id || !$activity_id) { die('却少参数'); } $db = new DB('activity_killsec_user', 'killsec'); $db->where(array('user_id' => $user_id))->delete(); $redisKillsec = new RedisKillsec(); //补充token $redisKillsec->save_token($activity_id, $redisKillsec->create_token(1)); }