mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 01:11:46 +08:00 
			
		
		
		
	update: order discount
This commit is contained in:
		| @@ -184,41 +184,26 @@ class OrderService | ||||
|         $order->surplus_order_ids = array_column($orderModel->get()->toArray(), 'id'); | ||||
|     } | ||||
|  | ||||
|     private function orderIsUsed(Order $order):bool | ||||
|     { | ||||
|         $month = self::STR_TO_TIME[$order->period]; | ||||
|         $orderExpireDay = strtotime('+' . $month . ' month', $order->created_at); | ||||
|         if ($orderExpireDay < time()) return true; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     private function getSurplusValueByPeriod(User $user, Order $order) | ||||
|     { | ||||
|         $orderModel = Order::where('user_id', $user->id) | ||||
|             ->where('period', '!=', 'reset_price') | ||||
|             ->where('status', 3); | ||||
|         $orders = $orderModel->get(); | ||||
|         $orderSurplusMonth = 0; | ||||
|         $orderSurplusAmount = 0; | ||||
|         $userSurplusMonth = ($user->expired_at - time()) / 2678400; | ||||
|         $orderAmountSum = 0; | ||||
|         $orderMonthSum = 0; | ||||
|         foreach ($orders as $k => $item) { | ||||
|             // 兼容历史余留问题 | ||||
|             if ($item->period === 'onetime_price') continue; | ||||
|             if ($this->orderIsUsed($item)) continue; | ||||
|             $orderSurplusMonth = $orderSurplusMonth + self::STR_TO_TIME[$item->period]; | ||||
|             $orderSurplusAmount = $orderSurplusAmount + ($item['total_amount'] + $item['balance_amount'] + $item['surplus_amount'] - $item['refund_amount']); | ||||
|         } | ||||
|         if (!$orderSurplusMonth || !$orderSurplusAmount) return; | ||||
|         $monthUnitPrice = $orderSurplusAmount / $orderSurplusMonth; | ||||
|         // 如果用户过期月大于订单过期月 | ||||
|         if ($userSurplusMonth > $orderSurplusMonth) { | ||||
|             $orderSurplusAmount = $orderSurplusMonth * $monthUnitPrice; | ||||
|         } else { | ||||
|             $orderSurplusAmount = $userSurplusMonth * $monthUnitPrice; | ||||
|         } | ||||
|         if (!$orderSurplusAmount) { | ||||
|             return; | ||||
|             $orderMonthSum = self::STR_TO_TIME[$item->period] + $orderMonthSum; | ||||
|             $orderAmountSum = $orderAmountSum + ($item['total_amount'] + $item['balance_amount'] + $item['surplus_amount'] - $item['refund_amount']); | ||||
|         } | ||||
|         $expiredAtByOrder = strtotime("+{$orderMonthSum} month", $orders[0]->created_at); | ||||
|         if ($expiredAtByOrder < time()) return; | ||||
|         $orderSurplusSecond = $expiredAtByOrder - time(); | ||||
|         $orderRangeSecond = $expiredAtByOrder - $orders[0]->created_at; | ||||
|         $avgPrice = $orderAmountSum / $orderRangeSecond; | ||||
|         $orderSurplusAmount = $avgPrice * $orderSurplusSecond; | ||||
|         if (!$orderSurplusSecond || !$orderSurplusAmount) return; | ||||
|         $order->surplus_amount = $orderSurplusAmount > 0 ? $orderSurplusAmount : 0; | ||||
|         $order->surplus_order_ids = array_column($orders->toArray(), 'id'); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user