diff --git a/app/Console/Commands/CreateTodayOrderItems.php b/app/Console/Commands/CreateTodayOrderItems.php new file mode 100644 index 0000000..7f62a92 --- /dev/null +++ b/app/Console/Commands/CreateTodayOrderItems.php @@ -0,0 +1,69 @@ +whereIn("status", [Orders::STATUS_ONGOING]) + ->whereRaw("DATEDIFF(`from_date`, now()) <= 0") + ->whereDoesntHave("orderItems", function ($query) { + $query->whereRaw("DATEDIFF(`service_date`, now()) = 0"); + }) + ->orderBy("id") + ->limit($threshold) + ->get(); + + foreach ($unGeneratedOrders as $order) { + $service_date = date("Y-m-d"); + if (Carbon::parse($service_date)->greaterThan($order->to_date)) { + DB::table((new Orders())->getTable())->where("id", $order->id)->update([ + "to_date" => $service_date, + "updated_at" => date("Y-m-d H:i:s") + ]); + } + (new OrderItems())->createItem($order->id, $service_date); + } + return true; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index e06d5d7..926f002 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,9 +29,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { //$schedule->command('inspire')->hourly(); - $schedule->call(function () { - (new Orders())->generateTodayOrderItems(); - })->everyMinute(); + $schedule->command('order-items:create-daily')->everyMinute(); $schedule->call(function () { (new OrderItems())->autoCheckout(true); @@ -39,12 +37,6 @@ class Kernel extends ConsoleKernel ->timezone('Asia/Shanghai') ->between('00:00', '21:59'); - $schedule->call(function () { - (new OrderItems())->autoCheckout(); - })->everyMinute() - ->timezone('Asia/Shanghai') - ->between('22:00', '23:59'); - //通知公告发送,短信及微信模板消息 $schedule->call(function () { (new Notifications())->sendSchedule(); diff --git a/app/Models/Orders.php b/app/Models/Orders.php index fbc4514..99b16c6 100755 --- a/app/Models/Orders.php +++ b/app/Models/Orders.php @@ -301,54 +301,6 @@ class Orders extends SoftDeletesModel return $price; } - public function autoCheckout() - { - $threshold = 50; - $orders = $this::whereIn("status", [self::STATUS_ONGOING]) - //已经开始 - ->whereRaw("DATEDIFF(`from_date`, now()) <= 0") - //今日结束 - ->whereRaw("DATEDIFF(`to_date`, now()) = 0") - //设定了自动结单的 - ->where("auto_checkout", 1) - //今日子订单已生成 - ->whereHas("orderItems", function ($query) { - $query->whereRaw("DATEDIFF(`service_date`, now()) = 0"); - }) - ->orderBy("id") - ->limit($threshold) - ->get(); - - foreach ($orders as $order) { - //todo:自动结算订单 - } - } - - public function generateTodayOrderItems() - { - $threshold = 50; - DB::enableQueryLog(); - if ($this->id) { - $unGeneratedOrders = (new Orders())->whereDoesntHave("orderItems", function ($query) { - $query->whereRaw("DATEDIFF(`service_date`, now()) = 0"); - })->where("id", $this->id)->get(); - } else { - //获取正在进行中的订单,即使已经到了截止日,只要状态是在进行中的都继续生成 - $unGeneratedOrders = (new Orders())->whereIn("status", [self::STATUS_ONGOING]) - ->whereRaw("DATEDIFF(`from_date`, now()) <= 0") - ->whereDoesntHave("orderItems", function ($query) { - $query->whereRaw("DATEDIFF(`service_date`, now()) = 0"); - }) - ->orderBy("id") - ->limit($threshold) - ->get(); - } - foreach ($unGeneratedOrders as $order) { - $service_date = date("Y-m-d"); - (new OrderItems())->createItem($order->id, $service_date); - } - } - public function requestFactorsToOrderFactors() { $request_factors = (array)json_decode(request()->factors, true);