浏览代码

update: order discount

v2board 2 年之前
父节点
当前提交
398ab4d005
共有 1 个文件被更改,包括 11 次插入26 次删除
  1. 11 26
      app/Services/OrderService.php

+ 11 - 26
app/Services/OrderService.php

@@ -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');
     }