IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> thinkphp6 购物车生成订单信息 -> 正文阅读

[移动开发]thinkphp6 购物车生成订单信息

在生成订单前需要验证是否登录、如果没有登录跳转到登录页面

//验证是否登录
        if (!session('?user')){
            //登陆成功后返回的地址
            session('back_url','getOrderInfo');
            return redirect('login');
        }

在登录是检测缓存中是否有要返回的路径、如果有则返回

      //记录用户信息
          session('user',$res);
          $back_url = session('back_url') ? : 'index';
          return redirect($back_url);

创建订单

/**
     * 创建订单
     * @param $address_id
     * @return array
     * @throws Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public static function createOrder($address_id){
        //判断是否有库存
        //查询购买商品信息
        $goods_info = \app\home\model\Cart::with(['Goods','specGoods'])->where('user_id',session('user.id'))->where('is_selected',1)->select()->toArray();
        foreach ($goods_info as $val){
            if ($val['number'] > $val['store_count'] - $val['store_frozen']){
                throw new Exception('库存不足,请稍后购买');
            }
        }
        //判断是否登录
        if (!session('?user')){
            throw new Exception('请登录');
        }
        //生成订单号
        $order_number = date('YmdHis').rand(1000,9999);
        //查询用户选择的地址
        $address_info = Address::find($address_id)->toArray();
        //计算商品总价格
        $total_price = 0;
        foreach($goods_info as $val){
            $total_price += $val['price'] * $val['number'];
        }
        //开启事物
        Db::startTrans();
        try {
            //添加订单基本信息
            $data = [
                'order_sn' => $order_number,
                'user_id' => session('user.id'),
                'consignee' => $address_info['consignee'],
                'address' => $address_info['area'].$address_info['address'],
                'phone' => $address_info['phone'],
                'goods_price' => $total_price,
                'order_amount' => $total_price,
                'shipping' => $total_price,
                'create_time' => time()
            ];
            $resulf = \app\home\model\Order::create($data);
            if (!$resulf){
                throw new Exception('订单信息添加失败');
            }
            //订单商品信息
            $add_order_goods = [];
            foreach($goods_info as $val){
                $add_order_goods[] = [
                    'order_id' => $resulf['id'],
                    'goods_id' => $val['id'],
                    'spec_goods_id' => $val['spec_goods_id'],
                    'number' => $val['number'],
                    'goods_name' => $val['goods_name'],
                    'goods_logo' => $val['goods_logo'],
                    'goods_price' => $val['price'],
                    'spec_value_names' => $val['value_names'],
                    'create_time' => time()
                ];
                $store_update[] = [
                    'id' => $val['id'],
                    'store_count' => $val['store_count'] - $val['number'],   //库存 - 购买数量
                    'store_frozen' => $val['store_frozen'] + $val['number'],  //冻结库存 + 购买数量
                    'update_time' => time()
                ];
            }
            //商品订单信息入库
            $goods_resulf = (new OrderGoods())->saveAll($add_order_goods);
            if (!$goods_resulf){
                throw new Exception('下单失败');
            }
            //修改商品的库存和冻结库存
            $store_resulf = (new SpecGoods())->saveAll($store_update);
            if (!$store_resulf){
                throw new Exception('下单失败');
            }
            //清空购买的商品信息(购物车)
            $delcartgoods = \app\home\model\Cart::destroy(array_column($goods_info,'id'));
            if (!$delcartgoods){
                throw new Exception('下单失败');
            }
            //提交事务
            Db::commit();
            return [
                'order_number' => $order_number,
                'price' => $total_price
            ];
        }catch (Exception $exception){
            //回滚事务
            Db::rollback();
            throw new Exception($exception->getMessage());
        }
    }

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:41:49  更:2022-03-15 22:43:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:26:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码