diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 260f72d9..6b666ac1 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -9,6 +9,14 @@ use Illuminate\Support\Facades\DB; class OrderService { + CONST STRTOTIME = [ + 'month_price' => 1, + 'quarter_price' => 3, + 'half_year_price' => 6, + 'year_price' => 12, + 'two_year_price' => 24, + 'three_year_price' => 36 + ]; public $order; public function __construct(Order $order) @@ -108,24 +116,31 @@ class OrderService $order->surplus_order_ids = json_encode(array_column($orderModel->get()->toArray(), 'id')); } + private function orderIsUsed(Order $order):bool + { + $month = self::STRTOTIME[$order->cycle]; + $orderExpireDay = strtotime('+'. $month . ' month', $order->created_at->timestamp); + if ($orderExpireDay < time()) return true; + return false; + } + private function getSurplusValueByCycle(User $user, Order $order) { - $strToMonth = [ - 'month_price' => 1, - 'quarter_price' => 3, - 'half_year_price' => 6, - 'year_price' => 12 - ]; $orderModel = Order::where('user_id', $user->id) ->where('cycle', '!=', 'reset_price') ->where('status', 3); + $orders = $orderModel->get(); $orderSurplusMonth = 0; $orderSurplusAmount = 0; $userSurplusMonth = ($user->expired_at - time()) / 2678400; - foreach ($orderModel->get() as $item) { + foreach ($orders as $k => $item) { // 兼容历史余留问题 if ($item->cycle === 'onetime_price') continue; - $orderSurplusMonth = $orderSurplusMonth + $strToMonth[$item->cycle]; + if ($this->orderIsUsed($item)) { + unset($orders[$k]); + continue; + } + $orderSurplusMonth = $orderSurplusMonth + self::STRTOTIME[$item->cycle]; $orderSurplusAmount = $orderSurplusAmount + ($item['total_amount'] + $item['balance_amount']); } if (!$orderSurplusMonth || !$orderSurplusAmount) return; @@ -140,7 +155,7 @@ class OrderService return; } $order->surplus_amount = $orderSurplusAmount > 0 ? $orderSurplusAmount : 0; - $order->surplus_order_ids = json_encode(array_column($orderModel->get()->toArray(), 'id')); + $order->surplus_order_ids = json_encode(array_column($orders->toArray(), 'id')); } public function success(string $callbackNo)