| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 | 
							- <?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'];
 
-                 //下单
 
-                 $payTest = config('param.pay_test');
 
-                 $orderAmount = $payTest == 1 ? 0.01 : $data['order_amount'];
 
-                 $paramsData = [
 
-                     'type'      => $payType,
 
-                     'orderid'   => $data['out_trade_no'],
 
-                     'title'     => '购买套餐',
 
-                     'amount'    => $orderAmount,
 
-                     '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=微信
 
-                 $params['pay_order_id'] = $payOrderId;
 
-                 $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;
 
-             $resData['template_ids'] = config('param.wechat_template_ids');//微信消息模版ID
 
-             $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();
 
-             $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.00,//套餐价格
 
-                 'status'          => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
 
-                 'pay_time'        => $time,
 
-                 'paytype'         => $orderPayType,//支付方式:1=线下,2=余额,3=微信
 
-                 'total_fee'       => isset($package['price']) ? $package['price'] : 0.00,//支付总额
 
-                 'createtime'      => $time,//下单时间
 
-                 'updatetime'      => $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;
 
-     }
 
-     
 
-     /**
 
-      * 获取车辆预计下次保养时间
 
-      * @return void
 
-      */
 
-     public function getCarNextDate($params=[])
 
-     {
 
-         $result = [
 
-             'status' => 1,
 
-             'msg' => '获取成功',
 
-             'data' => [],
 
-         ];
 
-         try {
 
-             $userId = isset($params['user_id']) ? $params['user_id'] : 0;
 
-             $companyId = isset($params['company_id']) ? $params['company_id'] : 0;
 
-             $carId = isset($params['car_id']) ? $params['car_id'] : [];
 
-             $orderWhere['user_id'] = $userId;
 
-             $orderWhere['company_id'] = $companyId;
 
-             $orderWhere['user_car_id'] = ['in',$carId];
 
-             $orderWhere['servicetype_id'] = 2;
 
-             $orderWhere['status'] = 3;//状态:2=待处理,3=已完成,4=已取消
 
-             $order = Db::name('order')->field('id,user_car_id,next_date')->where($orderWhere)->group('user_car_id')->order('finish_time desc')->select();
 
-             $row = [];
 
-             if (!empty($order)) {
 
-                 foreach ($order as $key => $value) {
 
-                     $row[$value['user_car_id']]['next_date'] = $value['next_date'];
 
-                 }
 
-             }
 
-             $result['data'] = $row;
 
-         } catch (Exception $e) {
 
-             $result['status'] = 0;
 
-             $result['msg'] = $e->getMessage();
 
-         }
 
-         return $result;
 
-     }
 
- }
 
 
  |