针对laravel框架
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MiaoController extends Controller
{
//秒杀前的准备
//一个PHP脚本,将未来要秒杀的商品保存在我的redis服务器中
public function before(){
$arrs = DB::select("select id,stock from goods");
$data = json_decode(json_encode($arrs),true);
$redis=new \Redis();
$redis->connect('127.0.0.1',6379);
$redis->select(10); // 不写此语句,默认是0号数据库
// 循环(遍历)所有商品
foreach ($data as $key => $value) {
// 给每个商品在redis中创建一个对应的列表,这个列表的键名是 goods+id值
for($i=1;$i<=$value['stock'];$i++){
$redis->lpush('goods'.$value['id'],$i); // 键是 goods1 goods2 goods3等
}
}
}
//秒杀中
public function index(){
$data = DB::select("select * from goods");
return view("miao_index",['data'=>$data]);
}
//算出距离秒杀结束还有多少时分秒
public function daojishi(){
$arrs = DB::select("select * from goods");
$data = json_decode(json_encode($arrs),true);
// 计算倒计时
foreach($data as $key=>$value){
$startTime=time();
$endTime=$value['endtime'];
$remainTime=$endTime-$startTime; // 开始时间和结束时间之间相差的秒数
$hour=floor($remainTime/3600); // 1小时是3600秒,所有的秒数除以3600秒,是不就转换成小时了
$minute=floor(($remainTime-$hour*3600)/60); // 分钟
$second=$remainTime-$hour*3600-$minute*60; // 秒
$data[$key]['hour']=$hour;
$data[$key]['minute']=$minute;
$data[$key]['second']=$second;
}
return $data;
}
//秒杀后
public function miao_hou(Request $request){
$id = $request->get("id");
$redis=new \Redis();
$redis->connect('127.0.0.1',6379);
$redis->select(10); // 不写此语句,默认是0号数据库
$key='goods'.$id; // redis键名
if($redis->llen($key)>0){
$redis->lpop($key); // 从队列中移除一个元素
// 库存减1composer -vvv require alibabacloud/sdk
//$sql=DB::update("update goods set stock=stock-1 where id=$id");
// 向order表中添加记录————生成订单
$order_id=date('Ymd',time()).md5(rand(100,999)); // 订单号,你可以随便生成
$addtime=time();
//$sql1=DB::insert("insert into order(order_id,goods_id,addtime) values('$order_id',$id,$addtime)");
// 如果库存减1执行成功,则进一步向订单表中添加记录记录,同时向前台返回提示信息
//if($sql){
//if($sql1){// 向订单表中添加记录
return ['code'=>1,'msg'=>'秒杀成功!']; // 向前台返回数据
//}
//}
}else{
return ['code'=>0,'id'=>$id,'msg'=>'秒杀结束!'];
}
}
}
视图层
<html>
<head>
<title></title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
</head>
<body>
@foreach($data as $value)
<div style='float:left;margin-right:20px;'>
<p>
<span id="h{{$value->id}}"></span> 时
<span id="m{{$value->id}}"></span> 分
<span id="s{{$value->id}}"></span> 秒
</p>
<p><img src="{{$value->path}}" width='280' height='200'></p>
<p>{{$value->name}}</p>
<p>{{$value->price}}</p>
<p><input type='button' value='抢购' id="{{$value->id}}"></p>
<p>库存:<?php
$con = new MySQLi("localhost","root","root","test");
$sql = "select stock from goods";
$result = $con->query($sql);
$str = "";
foreach($result as $k => $v){
$str .=implode(',',$v) . '-';
}
$str =substr($str ,0, strlen($str) -1);
echo $str;
?></p>
</div>
@endforeach
</body>
</html>
<script>
// 倒计时
$(document).ready(function(){
// 计时器
window.setInterval(function(){
$.ajax({
url:'http://127.0.0.1:8001/daojishi',
type:'get',
dataType:'json',
success:function(data){
for(var i=0;i<data.length;i++){
id=data[i]['id']; // 商品ID
$('#h'+id).text(data[i]['hour']);
$('#m'+id).text(data[i]['minute']);
$('#s'+id).text(data[i]['second']);
}
}
});
},1000); // 每秒(1000毫米)执行一次代码
// 抢购按钮加单击事件
$("input[type=button]").click(function(){
var id=$(this).attr('id');
$.ajax({
url:'http://127.0.0.1:8001/miaoshahou',
type:'get',
dataType:'json',
data:{'id':id},
success:function(data){
if(data['code']==1){
alert(data['msg']);
}else{
alert(data['msg']);
}
}
});
});
});
</script>
数据库
$table->string('name');
$table->string('price');
$table->string('stock');
$table->string('starttime');
$table->string('endtime');