Browse Source

Merge branch 'master' of http://git.huxiukeji.com/lizhen/lanjingling

lizhen_gitee 1 year ago
parent
commit
7f2ed06031

+ 160 - 0
application/api/controller/Order.php

@@ -0,0 +1,160 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Db;
+use think\Exception;
+
+class Order extends Api
+{
+    protected $noNeedLogin = [];
+    protected $noNeedRight = '*';
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = Db::name('order');
+    }
+
+    /**
+     * 列表
+     * @return void
+     */
+    public function getList(){
+        try {
+            $status = input('status',0);//状态:1=待支付,2=待处理,3=已完成,4=已取消
+            $where['user_id'] = $this->auth->id;
+            if (!empty($status)) {
+                $where['status'] = $status;
+            }
+            $o = 'order';
+            $st = 'servicetype';
+            $field = $o.'.id,orderno,server_info,server_images,status,user_mobile,'.$o.'.user_car_number,'.
+                $o.'.createtime,cancel_time,cancel_reason,pay_fee,appen_fee,finish_time,'.$st.'.title as `service_title`,paytype';
+            $result = $this->model->alias($o)->field($field)
+                ->join($st,$st.'.id = '.$o.'.servicetype_id','LEFT')
+                ->where($where)->order($o.'.createtime desc')->autopage()->select();
+            if (!empty($result)) {
+                $statusArr  = [2=>'待处理',3=>'已完成',4=>'已取消'];
+                $paytypeArr = [1=>'线下',2=>'余额',3=>'微信'];
+                $timeArr = ['createtime','cancel_time','finish_time'];
+                foreach ($result as $key => &$value) {
+                    foreach ($timeArr as $k => $v) {
+                        $value[$v] = !empty($value[$v]) ? date('Y年m月d日 H:i:s', $value[$v]) : '';
+                    }
+                    $value['total_amounts'] = bcadd($value['pay_fee'],$value['appen_fee'],2);
+                    $value['status_text'] = isset($statusArr[$value['status']]) ? $statusArr[$value['status']] : '';
+                    $value['paytype_text'] = isset($paytypeArr[$value['paytype']]) ? $paytypeArr[$value['paytype']] : '';
+                }
+                $result = list_domain_image($result,['server_images']);
+            }
+
+            $this->success('获取成功', $result);
+        } catch (Exception $e) {
+            $this->error($e->getMessage());
+        }
+    }
+
+    /**
+     * 详情
+     * @return void
+     */
+    public function getInfo(){
+        try {
+            $id = input('id',0);
+            $payOrderId = input('pay_order_id',0);
+            if (!empty($payOrderId)) {
+                $orderWhere['pay_order_id'] = $payOrderId;
+                $order = Db::name('order')->field('id')->where($orderWhere)->find();
+                $id = isset($order['id']) ? $order['id'] : 0;
+            }
+            $o = 'order';
+            $st = 'servicetype';
+            $where[$o.'.user_id'] = $this->auth->id;
+            $where[$o.'.id'] = $id;
+            $field = $o.'.id,orderno,server_info,server_images,status,user_mobile,'.$o.'.user_car_number,'.
+                $o.'.createtime,cancel_time,cancel_reason,pay_fee,appen_fee,finish_time,'.$st.'.title as `service_title`,paytype';
+            $result = $this->model->alias($o)->field($field)
+                ->join($st,$st.'.id = '.$o.'.servicetype_id','LEFT')
+                ->where($where)->find();
+            if (!empty($result)) {
+                $statusArr  = [2=>'待处理',3=>'已完成',4=>'已取消'];
+                $paytypeArr = [1=>'线下',2=>'余额',3=>'微信'];
+                $timeArr = ['createtime','cancel_time','finish_time'];
+                foreach ($timeArr as $k => $v) {
+                    $result[$v] = !empty($result[$v]) ? date('Y年m月d日 H:i:s', $result[$v]) : '';
+                }
+                $result['total_amounts'] = bcadd($result['pay_fee'],$result['appen_fee'],2);
+                $result['status_text'] = isset($statusArr[$result['status']]) ? $statusArr[$result['status']] : '';
+                $result['paytype_text'] = isset($paytypeArr[$result['paytype']]) ? $paytypeArr[$result['paytype']] : '';
+                $orderAppenWhere['order_id'] = $id;
+                $orderAppen = Db::name('order_appen')->where($orderAppenWhere)->select();
+                $appenList = [];
+                if (!empty($orderAppen)) {
+                    foreach ($orderAppen as $key => $value) {
+                        $appenList[] = [
+                            'name' => $value['name'],
+                            'price' => $value['price'],
+                        ];
+                    }
+                }
+                $result['appen_list'] = $appenList;
+                $result = info_domain_image($result,['server_images']);
+            }
+
+            $this->success('获取成功', $result);
+        } catch (Exception $e) {
+            $this->error($e->getMessage());
+        }
+    }
+
+    /**
+     * 核销码
+     * @return void
+     */
+    public function writeOff()
+    {
+        try {
+            $id = $this->request->param('id',0);
+            $payOrderId = input('pay_order_id',0);
+            if (!empty($payOrderId)) {
+                $orderWhere['pay_order_id'] = $payOrderId;
+                $order = Db::name('order')->field('id')->where($orderWhere)->find();
+                $id = isset($order['id']) ? $order['id'] : 0;
+            }
+            $companyId = $this->auth->company_id;
+            $userId = $this->auth->id;
+            $where['id'] = $id;
+            $where['company_id'] = $companyId;
+            $where['user_id'] = $userId;
+            $where['status'] = 2;
+            $modelData = $this->model->where($where)->find();
+            if (empty($modelData)) {
+                throw new Exception('未找到相关信息');
+            }
+            //验证
+            if ($modelData['package_endtime'] < time()) {
+                //throw new Exception('已过期无法使用');
+            }
+            $text = 'hexiaoorder_'.$id;
+            $logo = '';
+            $filRoute = '/uploads/temp/';
+            $saveDir = ROOT_PATH.'public\uploads\temp'.DS;
+            $fileStr = md5('order_'.$id);
+            $localpng = $saveDir.$fileStr.'.png';
+            //验证存在直接返回
+            $userCouponsUrl = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$filRoute.$fileStr.'.png';
+            if (!file_exists($localpng)) {
+                build_qrcode($text, $logo, $saveDir,$fileStr);
+            }
+            $result = [
+                'url' => $userCouponsUrl,
+            ];
+            $this->success('获取成功',$result);
+        } catch (Exception $e) {
+            $this->error($e->getMessage());
+        }
+    }
+}

+ 58 - 174
application/api/controller/Pay.php

@@ -3,6 +3,7 @@
 namespace app\api\controller;
 
 use app\common\controller\Api;
+use app\common\service\OrderService;
 use think\Db;
 use addons\epay\library\Service;
 use think\Exception;
@@ -64,8 +65,6 @@ class Pay extends Api
         //验签
         $paytype = input('paytype','wechat');
         $func = input('func','order_notify_do');
-        $out_trade_no = 'O230606102813244205462';
-        $rs = $this->$func($out_trade_no);echo '<pre>';var_dump($rs);exit;
         $notify_file = $this->notify_log_start($paytype);
         $pay = Service::checkNotify($paytype);
         if (!$pay) {
@@ -356,6 +355,36 @@ class Pay extends Api
             Db::rollback();
             return false;
         }
+        //商家端金额更新
+        $companyWalletWhere['user_id'] = $orderInfo['company_id'];
+        $companyWalletRes = Db::name('company_wallet')->where($companyWalletWhere)->find();
+        $companyMoneyBefore = isset($companyWalletRes['money']) ? $companyWalletRes['money'] : 0.00;
+        $companyMoneyNew = bcadd($companyMoneyBefore,$orderInfo['order_amount'],2);
+        $companyMoneyData = [
+            'money' => $companyMoneyNew,
+        ];
+        $companyWalletRes = Db::name('company_wallet')->where($companyWalletWhere)->update($companyMoneyData);
+        if (!$companyWalletRes) {
+            Db::rollback();
+            return false;
+        }
+        //商家端记录日志
+        $companyMoneyLogData = [
+            'user_id'      => $orderInfo['user_id'],//用户ID
+            'log_type'     => 204,//日志类型
+            'before'       => $companyMoneyBefore,//之前余额
+            'change_value' => $orderInfo['order_amount'],//变动金额
+            'remain'       => $companyMoneyNew,//剩余金额
+            'table'        => 'pay_order',//数据来源
+            'table_id'     => $orderInfo['id'],//数据来源ID
+            'remark'       => '充值',//备注
+            'createtime'   => $time, //创建时间
+        ];
+        $companyMoneyLogRes = Db::name('company_money_log')->insertGetId($companyMoneyLogData);
+        if (!$companyMoneyLogRes) {
+            Db::rollback();
+            return false;
+        }
         //逻辑结束
 
         //状态
@@ -384,152 +413,30 @@ class Pay extends Api
             $carId = input('car_id','0');
             $uid = $this->auth->id;
             $companyId = $this->auth->company_id;
-            $time = time();
+            $miniOpenId = $this->auth->mini_openid;
             if (empty($id)) {
                 throw new Exception('请选择套餐');
             }
             if (empty($carId)) {
                 throw new Exception('请选择车辆');
             }
-            $userCarWhere['user_id'] = $uid;
-            $userCarWhere['id'] = $carId;
-            $userCar = Db::name('user_car')->where($userCarWhere)->find();
-            if (empty($userCar)) {
-                throw new Exception('未找到车辆信息');
-            }
-            $packageWhere['id'] = $id;
-            $packageWhere['status'] = 1;
-            $package = Db::name('package')->where($packageWhere)->find();
-            if (empty($package)) {
-                throw new Exception('未找到套餐信息');
-            }
-            if ($package['company_id'] != $companyId) {
-                throw new Exception('您绑定的门店和购买套餐门店不一致');
-            }
-            if ($pay_type == 'wallet') {//验证余额
-                $userWalletWhere['user_id'] = $uid;
-                $userWalletWhere['company_id'] = $companyId;
-                $userWallet = Db::name('user_wallet')->where($userWalletWhere)->find();
-                if (empty($userWallet)) {
-                    throw new Exception('钱包异常');
-                }
-                if ($userWallet['money'] < $package['price']) {
-                    throw new Exception('您的余额不足,请充值。');
-                }
-            }
-            $gift_amount = 0.00;
-            $order_amount = $package['price'];
-            $extData = ['car_id'=>$carId];
-            //创建订单
-            $data['company_id'] = $companyId;
-            $data['user_id'] = $uid;
-            $data['out_trade_no'] = createUniqueNo('O',$uid); // 数据库订单号加密
-            $data['order_amount'] = $order_amount;
-            $data['gift_amount'] = $gift_amount;
-            $data['createtime'] = time();
-            $data['pay_type'] = $pay_type;
-            $data['order_status'] = 0;
-            $data['table_name'] = 'package';
-            $data['table_id'] = $id;
-            $data['ext_data'] = json_encode($extData);
-
-            $orderid = Db::name('pay_order')->insertGetId($data);
-            if ($pay_type == 'wechat') {//微信支付
-                $openid = $this->auth->mini_openid;
-                $httpStr = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'];
-                //下单
-                $params = [
-                    'type'         => $pay_type,
-                    'orderid'      => $data['out_trade_no'],
-                    'title'        => '购买套餐',
-                    'amount'       => $data['order_amount'],
-                    'method'       => $platform,
-                    'openid'       => $openid,
-                    'notifyurl' => $httpStr.'/api/pay/order_notify_base/paytype/'.$pay_type.'/func/package_do',
-                    'returnurl' => '',
-                ];
-
-                $res = Service::submitOrder($params);
-            } else {//余额支付
-                //扣除钱包
-                $oldMoney = $userWallet['money'];
-                $newMoney = bcsub($oldMoney,$package['price'],2);
-                $userWalletData['money'] = $newMoney;
-                $userWalletData['updatetime'] = $time;
-
-                $userWalletWhere['user_id'] = $uid;
-                $userWalletWhere['company_id'] = $companyId;
-                $userWalletRes = Db::name('user_wallet')->where($userWalletWhere)->update($userWalletData);
-                if (!$userWalletRes) {
-                    throw new Exception('支付失败');
-                }
-                //余额明细记录
-                $userMoneyLogData = [
-                    'company_id' => $companyId,
-                    'user_id' => $uid,
-                    'log_type' => 103,//购买套餐
-                    'before' => $oldMoney,
-                    'change_value' => $package['price'],
-                    'remain' => $newMoney,
-                    'table' => 'pay_order',
-                    'table_id' => $orderid,
-                    'remark' => '订单消费',
-                    'createtime' => $time,
-                ];
-                $userMoneyLogRes = Db::name('user_money_log')->insertGetId($userMoneyLogData);
-                if (!$userMoneyLogRes) {
-                    throw new Exception('余额明细记录失败');
-                }
-                //生成订单
-                $time = time();
-                $packageWhere['id'] = $id;
-                $package = Db::name('package')->where($packageWhere)->find();
-                $days = isset($package['days']) ? $package['days'] : 0;
-                $packageEndtime = $time + 86400 * $days;
-                $userId = $uid;
-                $userWhere['id'] = $userId;
-                $user = Db::name('user')->where($userWhere)->find();
-                $userCarWhere['id'] = $carId;
-                $userCar = Db::name('user_car')->where($userCarWhere)->find();
-                //生成订单
-                $orderData = [
-                    'orderno'         => createUniqueNo('O', $userId),//订单号
-                    'ordertype'       => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
-                    'company_id'      => $companyId,//门店ID
-                    'user_id'         => $userId,//用户ID
-                    'user_name'       => isset($user['nickname']) ? $user['nickname'] : '',//用户姓名
-                    'user_car_id'     => isset($userCar['id']) ? $userCar['id'] : 0,//车辆ID
-                    'user_car_number' => isset($userCar['car_number']) ? $userCar['car_number'] : '',//用户车牌
-                    'user_mobile'     => isset($user['mobile']) ? $user['mobile'] : '',//用户手机
-                    'pre_order_id'    => 0,//预约单ID
-                    'package_id'      => isset($package['id']) ? $package['id'] : 0,//套餐ID
-                    'server_info'     => isset($package['info']) ? $package['info'] : '',//套餐内容
-                    'server_images'   => isset($package['images']) ? $package['images'] : '',//套餐图片
-                    'pay_fee'         => isset($package['price']) ? $package['price'] : 0,//套餐价格
-                    'package_endtime' => $packageEndtime,//套餐到期时间
-                    'status'          => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
-                    'pay_time'        => $time,
-                    'paytype'         => 2,//支付方式:1=线下,2=余额,3=微信
-                    'pay_fee'         => $order_amount,//支付总额
-                    'createtime'      => $time,//下单时间
-                    'pay_order_id'    => $orderid,//支付ID
-                ];
-                $orderRes = Db::name('order')->insertGetId($orderData);
-                $payOrderData['order_status'] = 1;
-                $payOrderWhere['id'] = $orderid;
-                $payOrderRes = Db::name('pay_order')->where($payOrderWhere)->update($payOrderData);
-                if (!$payOrderRes) {
-                    throw new Exception('支付失败');
-                }
+            $orderService = new OrderService();
+            $params = [
+                'pay_type' => $pay_type,
+                'platform' => $platform,
+                'package_id' => $id,
+                'car_id' => $carId,
+                'user_id' => $uid,
+                'company_id' => $companyId,
+                'mini_openid' => $miniOpenId,
+            ];
+            $orderRes = $orderService->orderPay($params);
+            if (!$orderRes['status']) {
+                throw new Exception($orderRes['msg']);
             }
-            $res['order_id'] = isset($orderRes) ? $orderRes : 0;
-            $res['pay_order_id'] = $orderid;
+            $res = $orderRes['data'];
             Db::commit();
-            if($pay_type == 'wechat'){
-                $this->success('操作成功',json_decode($res,true));
-            }else{
-                $this->success('操作成功',$res);
-            }
+            $this->success('操作成功',$res);
         } catch (Exception $e) {
             Db::rollback();
             $this->error($e->getMessage());
@@ -553,42 +460,19 @@ class Pay extends Api
             Db::rollback();
             return false;
         }
-        $time = time();
-        $packageWhere['id'] = $orderInfo['table_id'];
-        $package = Db::name('package')->where($packageWhere)->find();
-        $days = isset($package['days']) ? $package['days'] : 0;
-        $packageEndtime = $time + 86400 * $days;
-        $userId = $orderInfo['user_id'];
-        $userWhere['id'] = $userId;
-        $user = Db::name('user')->where($userWhere)->find();
+        $orderService = new OrderService();
         $extData = json_decode($orderInfo['ext_data'], true);
-        $userCarWhere['id'] = isset($extData['car_id']) ? $extData['car_id'] : 0;
-        $userCar = Db::name('user_car')->where($userCarWhere)->find();
-        //生成订单
-        $orderData = [
-            'orderno'         => createUniqueNo('O', $userId),//订单号
-            'ordertype'       => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
-            'company_id'      => $orderInfo['company_id'],//门店ID
-            'user_id'         => $userId,//用户ID
-            'user_name'       => isset($user['nickname']) ? $user['nickname'] : '',//用户姓名
-            'user_car_id'     => isset($userCar['id']) ? $userCar['id'] : 0,//车辆ID
-            'user_car_number' => isset($userCar['car_number']) ? $userCar['car_number'] : '',//用户车牌
-            'user_mobile'     => isset($user['mobile']) ? $user['mobile'] : '',//用户手机
-            'pre_order_id'    => 0,//预约单ID
-            'package_id'      => isset($package['id']) ? $package['id'] : 0,//套餐ID
-            'server_info'     => isset($package['info']) ? $package['info'] : '',//套餐内容
-            'server_images'   => isset($package['images']) ? $package['images'] : '',//套餐图片
-            'pay_fee'         => isset($package['price']) ? $package['price'] : 0,//套餐价格
-            'package_endtime' => $packageEndtime,//套餐到期时间
-            'status'          => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
-            'pay_time'        => $time,
-            'paytype'         => 3,//支付方式:1=线下,2=余额,3=微信
-            'pay_fee'         => $orderInfo['order_amount'],//支付总额
-            'createtime'      => $time,//下单时间
-            'pay_order_id'    => $orderInfo['id'],//支付ID
+        $carId = isset($extData['car_id']) ? $extData['car_id'] : 0;
+        $params = [
+            'package_id' => $orderInfo['table_id'],
+            'company_id' => $orderInfo['company_id'],
+            'user_id' => $orderInfo['user_id'],
+            'car_id' => $carId,
+            'pay_order_id' => $orderInfo['id'],
+            'order_paytype' => 3,//支付方式:1=线下,2=余额,3=微信
         ];
-        $orderRes = Db::name('order')->insertGetId($orderData);
-        if (!$orderRes) {
+        $orderRes = $orderService->addOrder($params);
+        if (!$orderRes['status']) {
             Db::rollback();
             return false;
         }

+ 1 - 1
application/common.php

@@ -1003,7 +1003,7 @@ if(!function_exists('build_qrcode')) {
         }
         $filename = $save_dir.time().rand(10000,99999).'.png';
         if (!empty($fileName)) {
-            $filename = $fileName.'png';
+            $filename = $save_dir.$fileName.'.png';
         }
         $QRcode::png($value,$filename, $errorCorrectionLevel, $matrixPointSize, 2);
         $QR = $filename;        //已经生成的原始二维码图片文件

+ 224 - 0
application/common/service/OrderService.php

@@ -0,0 +1,224 @@
+<?php
+namespace app\common\service;
+
+use addons\epay\library\Service;
+use think\Db;
+use think\Exception;
+
+class OrderService
+{
+    private $model =  null;
+
+    /**
+     * 初始化方法
+     */
+    public function __construct()
+    {
+        $this->model = Db::name('order');
+    }
+
+    /**
+     * 套餐支付
+     * @param $params
+     * @return array
+     */
+    public function orderPay($params=[])
+    {
+        $result = [
+            'status' => 1,
+            'msg' => '操作成功',
+            'data' => [],
+        ];
+        try {
+            $payType   = isset($params['pay_type']) ? $params['pay_type'] : 'wechat';
+            $platform  = isset($params['platform']) ? $params['platform'] : 'miniapp';
+            $userId    = isset($params['user_id']) ? $params['user_id'] : 0;
+            $carId     = isset($params['car_id']) ? $params['car_id'] : 0;
+            $companyId = isset($params['company_id']) ? $params['company_id'] : 0;
+            $packageId = isset($params['package_id']) ? $params['package_id'] : 0;
+            $miniOpenId = isset($params['mini_openid']) ? $params['mini_openid'] : '';
+
+            //验证车辆
+            $userCarWhere['user_id'] = $userId;
+            $userCarWhere['id'] = $carId;
+            $userCar = Db::name('user_car')->where($userCarWhere)->find();
+            if (empty($userCar)) {
+                throw new Exception('未找到车辆信息');
+            }
+            //验证套餐
+            $packageWhere['id'] = $packageId;
+            $packageWhere['status'] = 1;
+            $package = Db::name('package')->where($packageWhere)->find();
+            if (empty($package)) {
+                throw new Exception('未找到套餐信息');
+            }
+            if ($package['company_id'] != $companyId) {
+                throw new Exception('您绑定的门店和购买套餐门店不一致');
+            }
+            if ($payType == 'wallet') {//验证余额
+                $userWalletWhere['user_id'] = $userId;
+                $userWalletWhere['company_id'] = $companyId;
+                $userWallet = Db::name('user_wallet')->where($userWalletWhere)->find();
+                if (empty($userWallet)) {
+                    throw new Exception('钱包异常');
+                }
+                if ($userWallet['money'] < $package['price']) {
+                    throw new Exception('您的余额不足,请充值。');
+                }
+            }
+
+            $gift_amount = 0.00;
+            $order_amount = $package['price'];
+            $extData = ['car_id'=>$carId];
+            $time = time();
+            //创建订单
+            $data['company_id'] = $companyId;
+            $data['user_id'] = $userId;
+            $data['out_trade_no'] = createUniqueNo('O',$userId); // 数据库订单号加密
+            $data['order_amount'] = $order_amount;
+            $data['gift_amount'] = $gift_amount;
+            $data['createtime'] = time();
+            $data['pay_type'] = $payType;
+            $data['order_status'] = 0;
+            $data['table_name'] = 'package';
+            $data['table_id'] = $packageId;
+            $data['ext_data'] = json_encode($extData);
+
+            $payOrderId = Db::name('pay_order')->insertGetId($data);
+            //支付方式:wallet=钱包,wechat=微信
+            if ($payType == 'wechat') {//微信支付 记录日志,生成订单,商家端操作完成增加收入
+                $httpStr = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'];
+                //下单
+                $paramsData = [
+                    'type'      => $payType,
+                    'orderid'   => $data['out_trade_no'],
+                    'title'     => '购买套餐',
+                    'amount'    => $data['order_amount'],
+                    'method'    => $platform,
+                    'openid'    => $miniOpenId,
+                    'notifyurl' => $httpStr.'/api/pay/order_notify_base/paytype/'.$payType.'/func/package_do',
+                    'returnurl' => '',
+                ];
+
+                $resData = Service::submitOrder($paramsData);
+                $resData = json_decode($resData,true);
+            } else {//余额支付 扣减余额,记录日志,生成订单 商家端不变
+                //扣减金额
+                $oldMoney = $userWallet['money'];
+                $newMoney = bcsub($oldMoney,$package['price'],2);
+                $userWalletData['money'] = $newMoney;
+                $userWalletData['updatetime'] = $time;
+                $userWalletWhere['user_id'] = $userId;
+                $userWalletWhere['company_id'] = $companyId;
+                $userWalletRes = Db::name('user_wallet')->where($userWalletWhere)->update($userWalletData);
+                if (!$userWalletRes) {
+                    throw new Exception('支付失败');
+                }
+                //余额明细记录
+                $userMoneyLogData = [
+                    'company_id' => $companyId,
+                    'user_id' => $userId,
+                    'log_type' => 103,//购买套餐
+                    'before' => $oldMoney,
+                    'change_value' => $package['price'],
+                    'remain' => $newMoney,
+                    'table' => 'pay_order',
+                    'table_id' => $payOrderId,
+                    'remark' => '购买套餐',
+                    'createtime' => $time,
+                ];
+                $userMoneyLogRes = Db::name('user_money_log')->insertGetId($userMoneyLogData);
+                if (!$userMoneyLogRes) {
+                    throw new Exception('余额明细记录失败');
+                }
+                //生成订单
+                $params['order_paytype'] = 2;//支付方式:1=线下,2=余额,3=微信
+                $orderRes = $this->addOrder($params);
+                if (!$orderRes['status']) {
+                    throw new Exception($orderRes['msg']);
+                }
+                //更新支付状态
+                $payOrderData['order_status'] = 1;
+                $payOrderWhere['id'] = $payOrderId;
+                $payOrderRes = Db::name('pay_order')->where($payOrderWhere)->update($payOrderData);
+                if (!$payOrderRes) {
+                    throw new Exception('支付失败');
+                }
+            }
+            $resData['order_id'] = isset($orderRes['data']['order_id']) ? $orderRes['data']['order_id'] : 0;
+            $resData['pay_order_id'] = $payOrderId;
+            $result['data'] = $resData;
+        } catch (Exception $e) {
+            $result['status'] = 0;
+            $result['msg'] = $e->getMessage();
+        }
+        return $result;
+    }
+
+    /**
+     * 生成订单
+     * @return void
+     */
+    public function addOrder($params)
+    {
+        $result = [
+            'status' => 1,
+            'msg' => '操作成功',
+            'data' => [],
+        ];
+        try {
+            $packageId = isset($params['package_id']) ? $params['package_id'] : 0;
+            $companyId = isset($params['company_id']) ? $params['company_id'] : 0;
+            $userId    = isset($params['user_id']) ? $params['user_id'] : 0;
+            $carId     = isset($params['car_id']) ? $params['car_id'] : 0;
+            $payOrderId= isset($params['pay_order_id']) ? $params['pay_order_id'] : 0;
+            $orderPayType = isset($params['order_paytype']) ? $params['order_paytype'] : 3;//支付方式:1=线下,2=余额,3=微信
+            //生成订单
+            $time = time();
+            $packageWhere['id'] = $packageId;
+            $package = Db::name('package')->where($packageWhere)->find();
+            $days = isset($package['days']) ? $package['days'] : 0;
+            $packageEndtime = $time + 86400 * $days;
+            $userWhere['id'] = $userId;
+            $user = Db::name('user')->where($userWhere)->find();
+            $userCarWhere['id'] = $carId;
+            $userCar = Db::name('user_car')->where($userCarWhere)->find();
+            //生成订单
+            $orderData = [
+                'orderno'         => createUniqueNo('O', $userId),//订单号
+                'ordertype'       => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
+                'company_id'      => $companyId,//门店ID
+                'user_id'         => $userId,//用户ID
+                'user_name'       => isset($user['nickname']) ? $user['nickname'] : '',//用户姓名
+                'user_car_id'     => isset($userCar['id']) ? $userCar['id'] : 0,//车辆ID
+                'user_car_number' => isset($userCar['car_number']) ? $userCar['car_number'] : '',//用户车牌
+                'user_mobile'     => isset($user['mobile']) ? $user['mobile'] : '',//用户手机
+                'pre_order_id'    => 0,//预约单ID
+                'package_id'      => isset($package['id']) ? $package['id'] : 0,//套餐ID
+                'servicetype_id'  => isset($package['servicetype_id']) ? $package['servicetype_id'] : 0,//服务类型
+                'server_info'     => isset($package['info']) ? $package['info'] : '',//套餐内容
+                'server_images'   => isset($package['images']) ? $package['images'] : '',//套餐图片
+                'pay_fee'         => isset($package['price']) ? $package['price'] : 0,//套餐价格
+                'package_endtime' => $packageEndtime,//套餐到期时间
+                'status'          => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
+                'pay_time'        => $time,
+                'paytype'         => $orderPayType,//支付方式:1=线下,2=余额,3=微信
+                'pay_fee'         => isset($package['price']) ? $package['price'] : 0.00,//支付总额
+                'createtime'      => $time,//下单时间
+                'pay_order_id'    => $payOrderId,//支付ID
+            ];
+            $orderRes = Db::name('order')->insertGetId($orderData);
+            if (!$orderRes) {
+                throw new Exception('生成订单失败');
+            }
+            $result['data'] = [
+                'order_id' => $orderRes,
+                'pay_order_id' => $payOrderId,
+            ];
+        } catch (Exception $e) {
+            $result['status'] = 0;
+            $result['msg'] = $e->getMessage();
+        }
+        return $result;
+    }
+}