where('disabled',0)->value('open_auto_pay'); if($open_auto_pay=='0' || $open_auto_pay=='2'){ Log::info('未启用自动支付'); return null; } Activity::where('is_ing',1)->where('disabled',0)->update(['open_auto_pay'=>2]); Log::info('开始自动支付'); $orders = Order::whereIn('pay_status', [0, 1])->where('is_deleted', 0)->get(); foreach ($orders as $key => $val) { DB::beginTransaction(); try { if (!in_array($val->pay_status, ['0', '1']) || $val->is_deleted == '1') { DB::commit(); continue; //订单状态改变,不支付 } $user_id = $val->user_id; $user = User::where('id', $user_id)->lockForUpdate()->first(); if ($user->money <= 0) { $user->save(); DB::commit(); continue; //账户没钱,不支付 } if ($val->money - $val->pay_money == $val->no_pay_money) { $no_pay_money = $val->no_pay_money; } else { $no_pay_money = $val->money - $val->pay_money; } if ($no_pay_money <= 0) { DB::commit(); continue; //没有未支付金额,不支付 } if ($user->money >= $no_pay_money) { $user->money = $user->money - $no_pay_money; $pay_money = $no_pay_money;//支付金额 } else { $pay_money = $user->money;//支付金额 $user->money = 0; } //<<<<<<< HEAD // $user->save(); // // //订单变更 // $order = Order::where('id', $val->id)->first(); // $order->pay_money += $pay_money; // $order->no_pay_money = $order->money - $order->pay_money; // if ($order->pay_money == $order->money) { // $order->pay_status = '2';//全部支付 // } elseif ($order->pay_money > 0 && $order->pay_money < $order->money) { // $order->pay_status = '1';//部分支付 // } elseif ($order->pay_money == 0) { // $order->pay_status = '0';//未支付 // } elseif ($order->pay_money > $order->money) { // $order->pay_status = '3';//需部分退款 // $order->wait_back_money = $order->pay_money - $order->money; // } // $order->save(); // // DB::commit(); // Log::info('自动支付已完成'); // // }catch(Exception $e){ // DB::rollBack(); // Log::info('订单号:'.$order->order_num.',自动支付失败'); //======= if (!$user->save()) { throw new \Exception('1'); } //支付日志 $remark = '系统自动支付'; $userpay = new UserPay(); $userpay->user_id = $user_id; $userpay->pay_money = $pay_money; $userpay->op_name = '系统自动支付'; $userpay->type = 1;//支付 $userpay->remark = $remark . ',订单编号为' . $val->order_num; $userpay->order_num = $val->order_num; $userpay->pay_num = $this->pay_num($user_id); $userpay->user_money = $user->money; if (!$userpay->save()) { throw new \Exception('2'); } //订单变更 $order = Order::where('id', $val->id)->sharedLock()->first(); if ($order->pay_status == 2) { Log::error('订单编号为:' . $order->order_num . '的订单已经支付'); throw new \Exception('1'); } if ($order->pay_money != $val->pay_money) { Log::error('订单编号为:' . $order->order_num . '的订单已经部分支付'); throw new \Exception('1'); } $order->pay_money += $pay_money; $order->no_pay_money = $order->money - $order->pay_money; if ($order->pay_money == $order->money) { $order->pay_status = '2';//全部支付 } elseif ($order->pay_money > 0 && $order->pay_money < $order->money) { $order->pay_status = '1';//部分支付 } elseif ($order->pay_money == 0) { $order->pay_status = '0';//未支付 } elseif ($order->pay_money > $order->money) { $order->pay_status = '3';//需部分退款 $order->wait_back_money = $order->pay_money - $order->money; } if (!$order->save()) { throw new \Exception('1'); } // if($user->openid){ // $mes['openid']=$user->openid; // $mes['data']=[ // 'first' => '您的订单:'.$order->order_num.'已扣款成功', // 'keyword1' => '-'.number_format($pay_money, 2), // 'keyword2' => number_format($user->money, 2), // 'keyword3' => date("Y-m-d H:i"), // 'keyword4' => '自动扣款', // 'remark' => '点击链接进入系统,查看详情', // ]; // event(new OrderPay($mes)); // } DB::commit(); Log::info('订单编号为' . $val->order_num . '已经自动支付已完成'); } catch (Exception $e) { DB::rollBack(); Log::info('自动支付失败' . $e); } } Activity::where('is_ing',1)->where('disabled',0)->update(['open_auto_pay'=>1]); Log::info('自动支付结束'); } //支付单号 public function pay_num($user_id) { $num = date('Ymd', time()) . '100000' . str_pad($user_id, 6, 0, STR_PAD_LEFT) . rand(11111, 99999); $count = UserPay::where('pay_num', $num)->count(); if ($count > 0) { $num = $this->pay_num($user_id); return $num; } return $num; } }