mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 03:11:46 +08:00 
			
		
		
		
	fix: order surplus issue
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user