当前位置: 首页 > news >正文

临沂网站制作定制网络编程技术及应用

临沂网站制作定制,网络编程技术及应用,学 网站开发,找网站公司做网站的陷阱一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案(3种) 下单减库存 优点是库存和订单的强一致性,商品不会卖超,但是可能导致恶意下单&#xff…

一、商品秒杀涉及的知识点

  • 鉴权策略封装
  • 掊口访问频次限制
  • 小程序设计
  • 页面防抖
  • 接口调用
  • 订单创建事务使用
  • 超卖防御

二、订单库存系统方案(3种)

扣库存的集中方案

  1. 下单减库存 优点是库存和订单的强一致性,商品不会卖超,但是可能导致恶意下单,影响正常流程
  2. 支付减库存 优点是避免恶意下单,支付和库存强一致性,但是可能出现订单无法支付,商品库存不足等问题。
  3. 预扣库存 预扣库存是指用户请求之后预扣库存,生成订单,在时效内支付,否则订单失效,库存还原
  4. 代码:itshujia.com 或者wx搜:《IT书架》 回复:秒杀

三、小程序秒杀页面

  • 商品秒杀详情页面页面
  • 该商品秒杀时间未到,则上方进行提醒秒杀商品倒计时,并且立即抢购禁用(按钮置灰)

image.png

  • 商品秒杀时间开始,则把立即秒杀按钮禁用状态改为可以点击
  • 点击立即秒杀按钮要考虑页面防抖,不能重复在同一秒中重复发起N次网络请求
    image.png

四、小程序部分代码展示

  1. 小程序wxml代码
<view>商品秒杀页面</view>
<l-countdown time-type="second" time="{{expire_time}}" bind:linend="changeBtn" />
<l-card type="primary" full="{{true}}" image="{{goods.goods.goods_image}}" title="{{goods.goods.goods_name}}"><view>价格:{{goods.goods.goods_price}}</view><view><!-- <button disabled="true" bindtap="buyGoods" >抢购</button> --><l-button disabled="{{ btn_disable }}" bind:lintap="buyGoods" type="error" data-goods_id="{{ goods.goods.id }}">立即秒杀</l-button></view></l-card>
  1. 小程序js代码
// pages/goods_detail/goods_detail.js
import {debounce
} from "../../utils/util"Page({/*** 页面的初始数据*/data: {goods:{},expire_time:0,btn_disable:false},/*** 生命周期函数--监听页面加载*/onLoad: function (e) {//商品idlet goods_id = e.goods_id;this.getGoodsDetail(goods_id)},//获取商品详情getGoodsDetail(goods_id){var token = wx.getStorageSync('token')wx.request({url: 'http://www.zfw.com/api/v1/goods_detail?goods_id='+goods_id,header: {'Authorization': `Bearer ${token}`},success: res => {//当前的时间戳let now_time = Math.round(new Date().getTime() / 1000).toString();let expire_time = res.data.data.start_time-now_time;this.setData({goods:res.data.data,expire_time})if(expire_time > 0){this.setData({btn_disable:true})}console.log(this.data.goods)}})},//立即抢购   debounce此方法是引入的util工具类的页面防抖函数buyGoods:debounce(function (e) {let goods_id = e[0].currentTarget.dataset.goods_idvar token = wx.getStorageSync('token')wx.request({url: 'http://www.zfw.com/api/v1/snap_up',header: {'Authorization': `Bearer ${token}`},method:"POST",data:{goods_id},success: res => {let code = res.statusCode.toString()if (!code.startsWith('2')){wx.showToast({title: '异常!',icon:1})}if(res.data.errorCode == 0){wx.redirectTo({url: '/pages/order/order',})}else{wx.showToast({title: res.data.msg,})}console.log(res.data)}})}),changeBtn(){this.setData({btn_disable:false})}
})
  1. 小程序json代码,引入的自定义组件
{"usingComponents": {"l-card":"/miniprogram_npm/lin-ui/card","l-button":"/miniprogram_npm/lin-ui/button","l-countdown":"/miniprogram_npm/lin-ui/countdown"}
}

五、后台业务逻辑

要考虑订单超卖,这次代码使用的redis队列实现的

<?phpnamespace App\Http\Controllers\Api;use App\Http\Controllers\Controller;
use App\Models\Goods;
use Illuminate\Http\Request;
use App\Models\ActivityGoods;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
use Lcobucci\JWT\Exception;class GoodsController extends Controller
{//商品秒杀列表public function activityList(){$result = ActivityGoods::with(['goods'])->get();return response()->json(['errorCode' => 0, 'data' => $result, 'msg' => '查询成功']);}//商品秒杀列表public function goodsDetail(Request $request){$goods_id = $request->get('goods_id');$result = ActivityGoods::with(['goods'])->where('goods_id',$goods_id)->first();return response()->json(['errorCode' => 0, 'data' => $result, 'msg' => '查询成功']);}//同步库存public function syncStock(){//查出所有参与秒杀活动列表$result = ActivityGoods::with(['goods'])->get()->toArray();//进行把参与秒杀的商品写入到数据库foreach ($result as $val){//生成对应商品库存队列$goods = "activity_goods_".$val['goods_id'];for ($i=0; $i < $val['sku_nums']; $i++) {Redis::lpush($goods, 1);}}}//校验库存public function checkStock(Request $request){//获取token$token = explode(' ',$request->header('authorization'))[1];//进行查看$userInfo = Cache::get($token);//抢购用户id$userID = $userInfo->id;//商品id$goodsID = $request->input("goods_id");//对应商品库存队列$goods = "activity_goods_".$goodsID;//对应商品抢购成功用户集合 {1,3,4}$robSuccessUser = "success_user".$goodsID;//进行判断当前用户是否在抢成功的队列里面$result = Redis::sismember($robSuccessUser,$userID);//如果你在这里面,就抢完了if ($result) {//如果抢购成功 返回状态码,进行下单return response()->json(['errorCode' => 20000, 'data' => '', 'msg' => '已经抢购过了']);}//减库存,把队列里面的数据从左边 头$count = Redis::lpop($goods);if (!$count) {//如果抢购成功 返回状态码,进行下单return response()->json(['errorCode' => 20001, 'data' => '', 'msg' => '已经抢光了哦']);}//把当前这个秒杀的uid存储到中奖的队列里set$success = Redis::sadd($robSuccessUser, $userID);if(!$success){//已经在成功队列里了,加回库存,防止的是同个用户并发请求Redis::lpush($goods, 1);//如果抢购成功 返回状态码,进行下单return response()->json(['errorCode' => 20002, 'data' => '', 'msg' => '已经抢购过了']);}//如果抢购成功 返回状态码,进行下单return response()->json(['errorCode' => 0, 'data' => '', 'msg' => '秒杀成功']);}//创建订单public function createOrder(Request $request){//获取token$token = explode(' ',$request->header('authorization'))[1];//进行查看$userInfo = Cache::get($token);//抢购用户id$userID = $userInfo->id;//商品id$goodsID = $request->input("goods_id");//对应商品抢购成功用户集合 {1,3,4}$robSuccessUser = "success_user".$goodsID;//进行判断当前用户是否在抢成功的队列里面$result = Redis::sismember($robSuccessUser,$userID);//如果你在这里面,就抢完了if (!$result) {//如果抢购成功 返回状态码,进行下单return response()->json(['errorCode' => 20003, 'data' => '', 'msg' => '手慢了!']);}DB::beginTransaction();try{//减库存//生成订单DB::commit();//下单成功,跳转支付页面return response()->json(['errorCode' => 0, 'data' => '', 'msg' => '下单成功!']);}catch (\Exception $e){DB::rollBack();}}
}
http://www.yayakq.cn/news/434483/

相关文章:

  • 个人备案网站经营wordpress自定义分类模板下载
  • 网站百度权重查询网站微商城的建设运营实践和思考
  • 网站建设公司服wordpress删除分类
  • 在线充值网站怎么做图文制作app哪个好
  • 贺兰县住房和城乡建设局网站企业网站的技术维护内容主要包括
  • 临沂做拼多多网站如何组建商业网
  • 上海高端建站dnf做任务解制裁的网站
  • 技术支持 张家港网站建设徐州网站制作建设
  • 广州网站建设比较好的公司手机免费推广软件
  • 家居网站建设如何wordpress 需要缓存
  • 网站充值接口怎么做科技网络公司怎么取名字
  • 本手机原有微信网站西安SEO网站建设
  • python做的网站哪些泰州哪家网做网站
  • 乔拓云智能建站官网怎样做一个公司网站
  • 唐山网站制作公司设计网页的步骤和规范
  • 佛山新网站建设如何字号 wordpress
  • 百度站长平台网站验证企业网站管理系统信得过y湖南岚鸿怎么样
  • 在哪个网做免费网站好企业公司简介
  • 局网站内容建设考核百度网址大全旧版安装
  • 网站建设 做一个网站需要多少钱网站建设中什么是一栏
  • 广州市建设交易服务中心网站网页界面设计的要求
  • dede仿站免费的建设网站软件
  • 哈尔滨怎样快速建站网站建设公司专业网站科技开发
  • 山东电力建设第一工程有限公司网站注册深圳在线招聘最新消息
  • 网站建设 商业价值wordpress质感主题
  • 徐州网站建设模板视频音乐网站怎样建设
  • 计算机考试模拟网站怎么做怎么快速开发一个网站
  • wordpress如何改界面网络优化工程师有前途吗
  • 网站到期时间查询北京购物网站建设公司
  • 柳州正规网站建设加盟西安seo排名公司