public function create_killsec_instance() { $db_activity = new DB('activity_killsec', 'killsec'); $db_instance = new DB('activity_killsec_instance', 'killsec'); //秒杀前10分钟生成实例 $where = "status='" . self::STATUS_TRUE . "' and killsec_start_time >= '" . date('Y-m-d H:i:s', time()) . "' and killsec_start_time <= '" . date('Y-m-d H:i:s', time() + 10 * 60) . "'"; $result = $db_activity->where($where)->select(); //关闭已经过期的 $date = date('Y-m-d H:i:s'); $db_instance->where("close_time < '{$date}'")->data(array('status' => self::KILLSEC_STATUS_FINISH))->update(); //生成活动实例 if ($result) { foreach ($result as $k => $v) { //添加 $exist = $db_instance->where("activity_id='{$v['activity_id']}' and status!=" . self::KILLSEC_STATUS_FINISH)->select(); if (count($exist) == 0) { $data = array(); $data['activity_id'] = $v['activity_id']; $data['killsec_count'] = $v['killsec_count']; $data['killsec_price'] = $v['killsec_price']; $data['join_count'] = 0; $data['start_time'] = $v['killsec_start_time']; $data['close_time'] = $v['killsec_end_time']; $data['create_time'] = date('Y-m-d H:i:s', time()); $data['status'] = self::KILLSEC_STATUS_PREVIEW; $db_instance->data($data)->insert(); } else { //更新 $db_instance->where("activity_id='{$v['activity_id']}' and status!=" . self::KILLSEC_STATUS_FINISH)->data(array('close_time' => $v['killsec_end_time']))->update(); } } } echo 'ok'; }
public function create_activity() { $db = new DB('activity_killsec', 'killsec'); $str = 'abcdefghijklmnopqrstuvsyz'; $data = array(); $data['name'] = substr(str_shuffle($str), 0, 6); $data['killsec_price'] = mt_rand(39, 139); $data['killsec_count'] = mt_rand(5, 10); $data['activity_start_time'] = date('Y-m-d H:i:s', time() + 10 * 60); //创建10分钟后开始 $data['killsec_start_time'] = date('Y-m-d H:i:s', time() + 22 * 60); //创建22分钟后开始秒杀,即活动开始后12分钟 $data['killsec_end_time'] = date('Y-m-d H:i:s', time() + 52 * 60); //创建52分钟后结束秒杀,即秒杀开始后30分钟 $data['create_time'] = date('Y-m-d H:i:s', time()); $data['status'] = 1; //创建52分钟后结束秒杀,即秒杀开始后30分钟 $result = $db->data($data)->insert(); if ($result) { echo 'ok'; } else { echo 'fail'; } }
function status($key, $value) { $this->result[$key] = $value; } } class Api { function get($val, $key) { return $key . " = " . $val . " ... Done"; } } $DB = new DB(); $API = new Api(); $a = new GetterUnit(); $a->data = $DB->data(); $b = new SenderUnit(); $b->requestHandler(function ($key, $value) use($API) { return $API->get($value, $key); }); $a->responseHandler(function ($key, $value) use($DB) { return $DB->status($key, $value); }); $sync = new Sync($a, $b); // TEST 1 $sync->go(); print_r($DB->result); // TEST 2 $sync->syncHandler(function ($data, $sync) { foreach ($data as $key => $value) { $result = $sync->requestHandler($key, $value);
public function going($activity_id) { /* user_id int auto_increment primary key, instance_id tinyint(4), activity_id tinyint(4), join_time datetime, order_time datetime, pay_time datetime, create_time datetime, status tinyint(4) */ $db_activity = new DB('activity_killsec', 'killsec'); $db_instance = new DB('activity_killsec_instance', 'killsec'); $db_user = new DB('activity_killsec_user', 'killsec'); $redis = new RedisKillsec(); $activity_info = $db_activity->where(array('activity_id' => $activity_id))->select(); // var_dump( $activity_info ); if (!empty($activity_info)) { $activity_info = $activity_info[0]; $datetime = date('Y-m-d H:i:s', time()); if ($activity_info['activity_start_time'] > $datetime) { echo 'activity not start'; die; } if ($activity_info['killsec_end_time'] < $datetime) { echo 'killsec is over'; die; } if ($activity_info['killsec_start_time'] > $datetime) { echo 'killsec not start'; die; } $instance_id = $db_instance->where("activity_id='{$activity_id}' and status!=" . self::KILLSEC_STATUS_FINISH)->select('instance_id'); if ($instance_id) { $instance_id = $instance_id[0]['instance_id']; } else { $instance_id = 0; } $user_id = mt_rand(1000, 9999); $user_exist = $redis->get_user($activity_id, $user_id); if ($user_exist) { echo 'user exist'; } else { $number = $redis->getrand(); if ($number == 5) { $token = $redis->get_token($activity_id); if ($token) { //之前改用户不存在 //根据activity_id获取活动信息、实例信息 //模拟插入 $data['instance_id'] = $instance_id; $data['activity_id'] = $activity_info['activity_id']; $data['token'] = $token; $data['join_time'] = date("Y-m-d H:i:s"); $data['create_time'] = date("Y-m-d H:i:s"); $data['status'] = self::STATUS_TRUE; $db_user->data($data)->insert(); $redis->save_user($activity_id, $user_id); echo 'ok'; } else { echo 'token not exist'; } } else { echo 'getrand fail'; } } } else { echo 'not exist activity'; } }
public static function fetch_one_array($sql) { $query = self::query($sql); self::$data = self::fetch_array($query); return self::$data; }