多个用户同时兑换商品,tp5 redis队列

王亚方 2022-07-24 21:52:23

后台添加商品,加入商品库存的队列

$redis = new Redis();
$redis = $redis->handler();
for($i = 1;$i<=$params['stock'];$i++) {
    $redis->lpush('goods_id'.$id.'_stock',1);
}

后台编辑商品,修改商品库存的队列

$old_row = $this->model->get($ids);//商品对象
if($old_row['stock'] > $params['stock']) {
    $redis = new Redis();
    $redis = $redis->handler();
    if($redis->lLen('goods_id'.$ids.'_stock') == 0) {
        for($i = 1;$i<=$params['stock'];$i++) {
            $redis->lpush('goods_id'.$ids.'_stock',1);
        }
    } else {
        $count = $old_row['stock'] - $params['stock'];
        $redis->lrem('goods_id'.$ids.'_stock', 1, $count);
    }
} else {
    $redis = new Redis();
    $redis = $redis->handler();
    if($redis->lLen('goods_id'.$ids.'_stock') == 0) {
        for($i = 1;$i<=$params['stock'];$i++) {
            $redis->lpush('goods_id'.$ids.'_stock',1);
        }
    } else {
        $count = $params['stock'] - $old_row['stock'];
        if($count) {
            for($i = 1;$i<=$count;$i++) {
                $redis->lpush('goods_id'.$ids.'_stock',1);
            }
        }
    }

}

api兑换商品接口:先判断商品库存数量是否为0,是直接提示库存不足;不为零删除一个队列,修改商品库存。

public function exchange()
{
    if (!$this->request->isPost()) {
        $this->request_error();
    }
    $param = $this->request->post();
    $goodsObj = (new Goods())->get($param['id']);
    
    $redis = new Redis();
    $redis = $redis->handler();
    if($redis->lLen('goods_id'.$goodsObj['id'].'_stock') == 0) {
        $this->error('库存不足');
    }
    $redis->rpop('goods_id'.$goodsObj['id'].'_stock');

    $user_id = $this->auth->id;
    $create_data = [
        'user_id'=>$user_id,
        'goods_id'=>$param['id'],
        'remarks'=>isset($param['remarks']) ? $param['remarks'] : '',
        'createtime'=>time(),
        'coin'=>$goodsObj['coin'],
    ];
    $result = (new Exchange())->allowField(true)->save($create_data);
    $goodsObj->stock = $redis->lLen('goods_id'.$goodsObj['id'].'_stock');
    if ($result) {
        if($goodsObj['category_id'] == 1) {
            $handle_result = (new Handle())->handle(10,$user_id,$goodsObj['coin']);
            if($handle_result['code'] == 1) {
                $goodsObj->save();
                $this->success('操作成功');
            } else {
                $this->success($handle_result['msg']);
            }
        } else {
            $handle_result = (new Handle())->handle(11,$user_id,$goodsObj['coin']);
            if($handle_result['code'] == 1) {
                $goodsObj->save();
                $this->success('操作成功');
            } else {
                $this->success($handle_result['msg']);
            }
        }

    } else {
        $this->error('操作失败');
    }
}

参考网址:https://blog.csdn.net/weixin_29580355/article/details/116508117?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165855670916781683922143%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165855670916781683922143&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-116508117-null-null.142

...全文
421 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-大数据 发布问题, 以便更快地解决您的疑问

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧