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