Просмотр исходного кода

wesmiler 报恩寺项目提交

wesmiler 4 лет назад
Родитель
Сommit
4db45605e3
2 измененных файлов с 99 добавлено и 2 удалено
  1. 1 1
      app/Services/ConfigService.php
  2. 98 1
      app/Services/MemberService.php

+ 1 - 1
app/Services/ConfigService.php

@@ -79,7 +79,7 @@ class ConfigService extends BaseService
         $cacheKey = "caches:config:groups:{$groupId}";
         $datas = RedisService::get($cacheKey);
         if($datas){
-            //return $datas;
+            return $datas;
         }
         $datas = $this->model::where(['config_group_id'=> $groupId, 'status'=> 1])
             ->select('title','code','value')

+ 98 - 1
app/Services/MemberService.php

@@ -15,6 +15,7 @@ use App\Models\CityModel;
 use App\Models\FansModel;
 use App\Models\MemberModel;
 use App\Models\SiyuanModel;
+use App\Models\TradeModel;
 use SimpleSoftwareIO\QrCode\Facades\QrCode;
 
 /**
@@ -259,7 +260,103 @@ class MemberService extends BaseService
         }
     }
 
-    public function inviteAward($userId, $inviteId){
+    public function inviteAward($userId, $inviteId, $nickname=''){
+        // 验证当前用户是否已经奖励过
+        $cacheKey = "caches:invite:u{$userId}_s{$inviteId}";
+        $check = TradeModel::where(['user_id'=> $userId,'type'=> 6,'source_uid'=> $inviteId,'status'=>1,'mark'=> 1])->value('id');
+        if($check){
+            RedisService::set($cacheKey.':error_catched', ['error'=>'当前奖励已发放','date'=> date('Y-m-d H:i:s')], 7200);
+            return false;
+        }
+
+        // 验证当前邀请用户是否账户有效
+        $inviteInfo = $this->model::where(['id'=> $inviteId,'mark'=> 1,'status'=> 1])
+            ->select(['id','openid','nickname','score','coupon','merits_num'])
+            ->first();
+
+        if(!$inviteInfo){
+            RedisService::set($cacheKey.':error_invite', ['error'=>'当前邀请用户状态异常','date'=> date('Y-m-d H:i:s')], 7200);
+            return false;
+        }
+
+        // 是否到达人数限制
+        $curTime = strtotime(date('Y-m-d'));
+        $inviteConfig = ConfigService::make()->getConfigByGroup(14);
+        $inviteLimit = isset($inviteConfig['invite_limit'])? $inviteConfig['invite_limit']['value'] : 0;
+        $checkCount = TradeModel::where(['user_id'=> $userId,'type'=> 6,'status'=>1,'mark'=> 1])
+            ->where('create_time','>=',$curTime)
+            ->count('id');
+        if($inviteLimit>0 && $checkCount>=$inviteLimit){
+            RedisService::set($cacheKey.':error_limit', ['error'=>'今日奖励已到达限制人数:'.$inviteLimit,'date'=> date('Y-m-d H:i:s')], 7200);
+            return false;
+        }
+
+        // 奖励花灯券
+        \DB::beginTransaction();
+        $coupon = isset($inviteConfig['invite_give_coupon'])? intval($inviteConfig['invite_give_coupon']['value']) : 0;
+        if($coupon>0){
+            // 账户
+            if(!$this->model::where(['id'=> $inviteId])->increment('coupon', $coupon)){
+                \DB::rollBack();
+                RedisService::set($cacheKey.':error_coupon', ['error'=>'奖励花灯券账户更新失败:'.$coupon,'date'=> date('Y-m-d H:i:s')], 7200);
+                return false;
+            }
+
+            $data = [
+                'user_id'=> $inviteId,
+                'source_uid'=> $userId,
+                'type'=> 6,
+                'coin_type'=> 1,
+                'pay_type'=> 4,
+                'money'=> $coupon,
+                'change_type'=> 1,
+                'balance'=> $inviteInfo->coupon,
+                'create_time'=> time(),
+                'remark'=> "邀请用户[{$nickname}],奖励{$coupon}花灯券",
+                'status'=> 1,
+            ];
+            if(!TradeModel::insertGetId($data)){
+                \DB::rollBack();
+                RedisService::set($cacheKey.':error_acccount_coupon', ['error'=>'奖励花灯券账户明细处理失败','data'=> $data,'date'=> date('Y-m-d H:i:s')], 7200);
+                return false;
+            }
+        }
+
+
+        // 奖励功德值
+        $giveGd = isset($inviteConfig['invite_give_gd'])? intval($inviteConfig['invite_give_gd']['value']) : 0;
+        if($giveGd>0){
+            // 账户
+            if(!$this->model::where(['id'=> $inviteId])->increment('merits_num', $giveGd)){
+                \DB::rollBack();
+                RedisService::set($cacheKey.':error_gd', ['error'=>'奖励功德值账户更新失败:'.$giveGd,'date'=> date('Y-m-d H:i:s')], 7200);
+                return false;
+            }
+
+            $data = [
+                'user_id'=> $inviteId,
+                'source_uid'=> $userId,
+                'type'=> 6,
+                'coin_type'=> 4,
+                'pay_type'=> 4,
+                'money'=> $giveGd,
+                'change_type'=> 1,
+                'balance'=> $inviteInfo->merits_num,
+                'create_time'=> time(),
+                'remark'=> "邀请用户[{$nickname}],奖励{$giveGd}功德值",
+                'status'=> 1,
+            ];
+            if(!TradeModel::insertGetId($data)){
+                \DB::rollBack();
+                RedisService::set($cacheKey.':error_acccount_gd', ['error'=>'奖励花灯券账户明细处理失败','data'=> $data,'date'=> date('Y-m-d H:i:s')], 7200);
+                return false;
+            }
+        }
+
+        // 奖励积分
+
 
+        \DB::commit();
+        return true;
     }
 }