lip 1 週間 前
コミット
5693dfc39d
2 ファイル変更36 行追加31 行削除
  1. 3 2
      app/Models/UserLogin.php
  2. 33 29
      app/Services/BalanceLogService.php

+ 3 - 2
app/Models/UserLogin.php

@@ -6,6 +6,7 @@ class UserLogin extends BaseModel
 {
     protected $table = 'user_login';
     protected $fillable = ['user_id', 'login_ip'];
+    protected $hidden = [];
 
     // 获取用户未登录天数(最后第二次未登录的天数)
     public static function getNotLoginDays($memberId)
@@ -17,8 +18,8 @@ class UserLogin extends BaseModel
         if (date('Y-m-d', strtotime($list[0]['created_at'])) != date('Y-m-d')) {
             return 0;
         }
-        $diff = strtotime($list[1]['created_at']) - strtotime($list[0]['created_at']);
+        $diff = strtotime($list[0]['created_at']) - strtotime($list[1]['created_at']);
         $days = ceil($diff / 86400);
-        return $days;
+        return abs($days);
     }
 }

+ 33 - 29
app/Services/BalanceLogService.php

@@ -141,9 +141,20 @@ class BalanceLogService extends BaseService
         if (in_array($change_type, static::$computeBackFlowChangeTypes)) {
             BackflowService::updateOrCreate((string)$memberId, floatval($amount));
         }
+        
+        $data = [];
+        $data['member_id'] = $memberId;
+        $data['amount'] = $amount;
+        $data['before_balance'] = $before_balance;
+        $data['after_balance'] = $after_balance;
+        $data['change_type'] = $change_type;
+        $data['related_id'] = $related_id;
+        $data['remark'] = $remark;
+        if ($room_id) $data['room_id'] = $room_id;
+        $result = static::$MODEL::create($data);
 
         //充值返现活动
-        if ($change_type == '充值' || $change_type == '三方充值') {
+        if ( in_array($change_type, ['充值','人工充值','三方充值'])) {
             $user = User::where('member_id', $memberId)->first();
             //充值更新用户等级
             $total_recharge = self::getTotalRecharge($memberId);
@@ -154,28 +165,27 @@ class BalanceLogService extends BaseService
                 $user->save();
             }
 
+            $remark_amount = bcadd($amount, 0, 2);
             //返现比例(给邀请人返现)
             $rate = Config::where('field', 'recharge_rate')->first()->val ?? 0;
-            $add_amount = bcmul($amount, $rate, 10);
-            $add_amount = bcmul($add_amount, 100, 2);
+            $add_amount = bcmul($amount, $rate/100, 2);
             if ($add_amount > 0) {
                 //被邀请人每次充值,都给邀请人返现,直接可用余额
                 $agent_user_code = $user->agent_user_code;
                 if (!empty($agent_user_code)) {
-                    $agent_member_id = User::where('agent_user_code', $agent_user_code)->first()->member_id;
+                    $agent_member_id = User::where('user_code', $agent_user_code)->first()->member_id;
                     if (!empty($agent_member_id)) {
                         $balanceData = WalletService::updateBalance($agent_member_id, $add_amount);
-                        BalanceLogService::addLog($agent_member_id, $add_amount, $balanceData['before_balance'], $balanceData['after_balance'], '充值返现', $related_id, '被邀请人:'.$memberId."充值金额为:{$amount}");
+                        BalanceLogService::addLog($agent_member_id, $add_amount, $balanceData['before_balance'], $balanceData['after_balance'], '充值返现', $related_id, '被邀请人:'.$memberId."充值金额为:{$remark_amount}");
                     }
                 }
             }
 
+            $walletInfo = Wallet::where('member_id', $memberId)->first();
             //即充即送-返彩活动
             $bonusAmount = self::calculateRechargeBonus($amount,$memberId, $related_id);
             if ($bonusAmount > 0) {
-                $walletInfo = Wallet::where('member_id', $memberId)->first();
-                
-                return static::$MODEL::create([
+                static::$MODEL::create([
                     'type' => 2,
                     'member_id' => $memberId,
                     'amount' => $bonusAmount,
@@ -183,15 +193,16 @@ class BalanceLogService extends BaseService
                     'after_balance' => bcadd($walletInfo->frozen_balance, $bonusAmount, 2),
                     'change_type' => '即充即送',
                     'related_id' => $related_id,
-                    'remark' => '充值金额为:'.$amount,
+                    'remark' => '充值金额为:'.$remark_amount,
                 ]);
+                $walletInfo->frozen_balance = bcadd($walletInfo->frozen_balance, $bonusAmount, 2);
             }
 
             //老用户回归-返彩活动
             $bonusAmount = self::calculateUserReturnRechargeBonus($amount,$memberId, $level, $related_id);
+            
             if ($bonusAmount > 0) {
-                $walletInfo = Wallet::where('member_id', $memberId)->first();
-                return static::$MODEL::create([
+                static::$MODEL::create([
                     'type' => 2,
                     'member_id' => $memberId,
                     'amount' => $bonusAmount,
@@ -199,21 +210,14 @@ class BalanceLogService extends BaseService
                     'after_balance' => bcadd($walletInfo->frozen_balance, $bonusAmount, 2),
                     'change_type' => '老用户回归',
                     'related_id' => $related_id,
-                    'remark' => '充值金额为:'.$amount,
+                    'remark' => '充值金额为:'.$remark_amount,
                 ]);
+                $walletInfo->frozen_balance = bcadd($walletInfo->frozen_balance, $bonusAmount, 2);
             }
+            $walletInfo->save();
         }
-
-        $data = [];
-        $data['member_id'] = $memberId;
-        $data['amount'] = $amount;
-        $data['before_balance'] = $before_balance;
-        $data['after_balance'] = $after_balance;
-        $data['change_type'] = $change_type;
-        $data['related_id'] = $related_id;
-        $data['remark'] = $remark;
-        if ($room_id) $data['room_id'] = $room_id;
-        return static::$MODEL::create($data);
+        
+        return $result;
     }
 
     /**
@@ -229,9 +233,9 @@ class BalanceLogService extends BaseService
      * @param float $totalAmount 历史累计充值金额
      * @return int 等级(1-5)
      */
-    public function calculateLevel(float $totalAmount): int
+    public static function calculateLevel(float $totalAmount): int
     {
-        $levelList = Level::orderBy('recharge', 'desc')->select()->toArray();
+        $levelList = Level::orderBy('recharge', 'desc')->get()->toArray();
         foreach ($levelList as $item) {
             if ($totalAmount >= $item['recharge']) {
                 return $item['level'];
@@ -356,10 +360,9 @@ class BalanceLogService extends BaseService
             return false;
         }
         $params = $activity->params ? json_decode($activity->params, true) : [];
-        if (!$params || !empty($params['reward_ratio'])) {
+        if (!$params || empty($params['reward_ratio'])) {
             return false;
         }
-
         // 规则1:单笔最低金额
         if (isset($params['min_recharge_amount']) && $amount < $params['min_recharge_amount']) {
             return false;
@@ -372,7 +375,7 @@ class BalanceLogService extends BaseService
                 ->whereBetween('created_at', [date('Y-m-d 00:00:00'), date('Y-m-d 23:59:59')])
                 ->whereIn('change_type', ['充值','三方充值'])
                 ->count();
-            if ($dailyOrder > $params['limit']) {
+            if ($dailyOrder > $params['reward_limit_count']) {
                 return false;
             }
         }
@@ -403,7 +406,7 @@ class BalanceLogService extends BaseService
             return false;
         }
         $params = $activity->params ? json_decode($activity->params, true) : [];
-        if (!$params || !empty($params['no_login_days']) || !empty($params['reward_rules'])) {
+        if (!$params || empty($params['no_login_days']) || empty($params['reward_rules'])) {
             return false;
         }
 
@@ -414,6 +417,7 @@ class BalanceLogService extends BaseService
 
         // 规则2:多少天未登录
         $noLoginDays = UserLogin::getNotLoginDays($memberId);
+        
         if ($noLoginDays < $params['no_login_days']) {
             return false;
         }