<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>秒殺活動</title>
</head>
<body>
<script src="./jquery.js"></script>
<script type="text/javascript">
$.extend($.fn,{
//懶人建站 http://www.51xuediannao.com/
fnTimeCountDown:function(d){
this.each(function(){
var $this = $(this);
var o = {
hm: $this.find(".hm"),
sec: $this.find(".sec"),
mini: $this.find(".mini"),
hour: $this.find(".hour"),
day: $this.find(".day"),
month:$this.find(".month"),
year: $this.find(".year")
};
var f = {
haomiao: function(n){
if(n < 10)return "00" + n.toString();
if(n < 100)return "0" + n.toString();
return n.toString();
},
zero: function(n){
var _n = parseInt(n, 10);//解析字符串,返回整數
if(_n > 0){
if(_n <= 9){
_n = "0" + _n
}
return String(_n);
}else{
return "00";
}
},
dv: function(){
//d = d || Date.UTC(2050, 0, 1); //如果未定義時間,則我們設定倒計時日期是2050年1月1日
var _d = $this.data("end") || d;
var now = new Date(),
endDate = new Date(_d);
//現在將來秒差值
//alert(future.getTimezoneOffset());
var dur = (endDate - now.getTime()) / 1000 , mss = endDate - now.getTime() ,pms = {
hm:"000",
sec: "00",
mini: "00",
hour: "00",
day: "00",
month: "00",
year: "0"
};
if(mss > 0){
pms.hm = f.haomiao(mss % 1000);
pms.sec = f.zero(dur % 60);
pms.mini = Math.floor((dur / 60)) > 0? f.zero(Math.floor((dur / 60)) % 60) : "00";
pms.hour = Math.floor((dur / 3600)) > 0? f.zero(Math.floor((dur / 3600)) % 24) : "00";
pms.day = Math.floor((dur / 86400)) > 0? f.zero(Math.floor((dur / 86400)) % 30) : "00";
//月份,以實際平均每月秒數計算
pms.month = Math.floor((dur / 2629744)) > 0? f.zero(Math.floor((dur / 2629744)) % 12) : "00";
//年份,按按迴歸年365天5時48分46秒算
pms.year = Math.floor((dur / 31556926)) > 0? Math.floor((dur / 31556926)) : "0";
}else{
pms.year=pms.month=pms.day=pms.hour=pms.mini=pms.sec="00";
pms.hm = "000";
//alert('結束了');
return;
}
return pms;
},
ui: function(){
if(o.hm){
o.hm.html(f.dv().hm);
}
if(o.sec){
o.sec.html(f.dv().sec);
}
if(o.mini){
o.mini.html(f.dv().mini);
}
if(o.hour){
o.hour.html(f.dv().hour);
}
if(o.day){
o.day.html(f.dv().day);
}
if(o.month){
o.month.html(f.dv().month);
}
if(o.year){
o.year.html(f.dv().year);
}
if(!parseInt(o.hour.html()) && !parseInt(o.mini.html()) && !parseInt(o.sec.html()))
{
// alert(123213);
$('#btn').removeAttr('disabled');
$('#box').html(' <P style="font-size:.8em;line-height:2em;">秒殺開始!</P>');
}
setTimeout(f.ui, 1);
}
};
f.ui();
});
}
});
</script>
<div id='box' style="background:rgb(183,17,41); margin-bottom: 50px; WIDTH: 100%; color:#fff;FONT-FAMILY: arial; TEXT-ALIGN: center;">
<P style="font-size:.8em;line-height:2em;">距活動開始還有:</P>
<div id="fnTimeCountDown" data-end="<?php echo $list['time']?>">
<span class="hour">00</span>時
<span class="mini">00</span>分
<span class="sec">00</span>秒
</div>
</div>
<script type="text/javascript">
$("#fnTimeCountDown").fnTimeCountDown("2017/03/09 9:00:00");
</script>
<center>
<div><img src="123.jpg" alt="" width="400px" height="300px"><br>
名稱:<?php echo $list['goods_name']?><br>
價格:<span id="price"><?php echo $list['price']?></span>元
</div>
<button id="btn" goods="<?php echo $list['id']?>" disabled="">秒殺</button>
</center>
</body>
</html>
<script>
$(function(){
if(!parseInt($('.hour').html()) && !parseInt($('.mini').html()) && !parseInt($('.sec').html()))
{
$('#btn').removeAttr('disabled');
$('#box').html(' <P style="font-size:.8em;line-height:2em;">秒殺開始!</P>');
}
$('#btn').click(function(){
var goods_id = $(this).attr('goods');
$.ajax({
type:"post",
url:"miaosha.php",
data:"goods_id="+goods_id,
dataType:'json',
success:function(msgs)
{
// alert(msgs);
if(msgs.code == 0)
{
alert(msgs.msg)
}
if(msgs.code == 1)
{
alert(msgs.msg)
}
if(msgs.code == 2)
{
alert(msgs.msg)
}
}
})
})
})
</script>
public function kill_du(Request $request)
{
//商品id
$goods_id = $request->get('goods_id');
$attr = $request->get('attr');
// print_r($attr);die;
$redis = new \redis();
$redis->connect('127.0.0.1',6379);
$kill_info = $redis->lRange('kill_goods'.$goods_id,0,-1);
// var_dump($kill_info);die;
//new一個session;
$session = new Session();
$user_info = $session->get('users');
// print_r($user_info);die;
if(empty($user_info) && !isset($user_info))
{
return json_encode(['code'=>3,'msg'=>"請先登錄!"]);die;
}
if(isset($kill_info) )
{
//秒殺時間
$kill_time = $redis->get('kill_time'.$goods_id);
//開始時間
$start_time = strtotime(explode('_',$kill_time)[0]);
//結束時間
$end_time = strtotime(explode('_',$kill_time)[1]);
$time = time()+ 8 * 60 * 60;
// echo $start_time.'-'.$time.'-'.$end_time;
if($time> $start_time && $time < $end_time)
{
$num = $redis->get('kill_num'.$goods_id);
$size = $redis->lSize("kill_goods".$goods_id);
// echo $num.'-'.$size;
if($size-1 < $num)
{
if(in_array($user_info['user_id'],$kill_info))
{
return json_encode(['code'=>5,'msg'=>"每個人只能秒殺一件商品!"]);
}
$redis->rpush('kill_goods'.$goods_id,$user_info['user_id'].'-'.$attr);
return json_encode(['code'=>1,'msg'=>"秒殺成功,請在活動結束後查看訂單!"]);
}
else
{
return json_encode(['code'=>2,'msg'=>"商品已經售完!"]);
}
}
else
{
return json_encode(['code'=>4,'msg'=>"不在活動時間!"]);
}
}
else
{
return json_encode(['code'=>0,'msg'=>"該商品沒有加入秒殺活動!"]);
}
}
生成訂單
/**
* 生成唯一訂單號
* @return string
*/
public function actionBuild_order_no(){
return 'kill_'.date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}
/**
* 訂單生成
* @return json
*/
public function actionGetodrer()
{
//獲取活動商品id訂單
$goods_id = \Yii::$app->request->get('goods_id');
$act_id = \Yii::$app->request->get('act_id');
$redis = new \redis();
$res = $redis->connect('127.0.0.1',6379);
if(!$res)
{
return json_encode(['code'=>0,'msg'=>"服務器錯誤!"]);
}
$kill_info = $redis->lRange('kill_goods'.$goods_id,0,-1);
$kill_price = $redis->get("kill_price".$goods_id);;
// var_dump($kill_price);die;
$order_num =count($kill_info)-1;
$num = 0;
if(isset($kill_info) && !empty($kill_info))
{
foreach($kill_info as $k => $v)
{
if(!empty($v))
{
$kill = explode('-',$v);
$user_id = $kill[0];
$goods_attr = $kill[1];
\Yii::$app->db->createCommand()->insert('man_order_info',[
'user_id'=>$user_id,
'goods_attr'=>$goods_attr,
'goods_amount'=>$kill_price,
'add_time'=>time(),
'goods_id'=>$goods_id,
'order_sn'=>$this->actionBuild_order_no(),
])->execute();
$num++;
}
}
$actObj = new Man_activity();
$act = $actObj::find()->where(['act_id'=>$act_id])->one();
$act->order_do = "1";
$result = $act->save();
if($result)
{
$redis->delete('kill_goods'.$goods_id);
return json_encode(['code'=>1,'msgs'=>"應生成".$order_num."條訂單,共生成".$num."條訂單!"]);
}
else
{
return json_encode(['code'=>2,'msgs'=>"應生成".$order_num."條訂單,共生成".$num."條訂單!"]);
}
}
else
{
return json_encode(['code'=>0,'msgs'=>"無需生成訂單!"]);
}
}