Преглед на файлове

【Add】增加标签排除范围

liuxiangxin преди 2 месеца
родител
ревизия
00f536f3c5

+ 5 - 0
app/Http/Controllers/Admin/LotteryRecruitment.php

@@ -89,8 +89,10 @@ class LotteryRecruitment extends Auth{
             $data['end_time']		= $data['end_time'] ? strtotime($data['end_time']) : 0;
             $cityIds				= request('city_ids',[]);
 			$tagScope				= request('tag_scope',[]);
+            $tagExcept				= request('tag_except',[]);
 			$data['city_ids']		= implode(',',$cityIds);
 			$data['tag_scope']		= implode(',',$tagScope);
+            $data['tag_except']		= implode(',',$tagExcept);
 			$data['status']			= 1;
             // 如果操作失败
             if( $data['max_reward'] > $data['lucky_num'] )  return json_send(['code'=>'error','msg'=>'中奖次数不能大于抽奖次数']);
@@ -149,8 +151,10 @@ class LotteryRecruitment extends Auth{
             $data['end_time']		= $data['end_time'] ? strtotime($data['end_time']) : 0;
             $cityIds				= request('city_ids',[]);
 			$tagScope				= request('tag_scope',[]);
+            $tagExcept				= request('tag_except',[]);
 			$data['city_ids']		= implode(',',$cityIds);
 			$data['tag_scope']		= implode(',',$tagScope);
+            $data['tag_except']		= implode(',',$tagExcept);
             // 如果操作失败
             if( $data['max_reward'] > $data['lucky_num'] )  return json_send(['code'=>'error','msg'=>'中奖次数不能大于抽奖次数']);
             // 写入数据表
@@ -167,6 +171,7 @@ class LotteryRecruitment extends Auth{
 		// 获取城市ID
 		$oldData['city_ids']		= explode(',',$oldData['city_ids']);
 		$oldData['tag_scope']		= explode(',',$oldData['tag_scope']);
+        $oldData['tag_except']		= explode(',',$oldData['tag_except']);
 		// 获取列表
 		$cityList					= $City->getCityList();
 		// 标签列表

+ 27 - 8
app/Http/Controllers/Api/Lottery/Recruitment.php

@@ -43,14 +43,15 @@ class Recruitment extends Api{
 		if( $data['start_time'] > $custom['insert_time'] || $data['end_time'] < $custom['insert_time'] ) return json_send(['code'=>'error','msg'=>'账号不在活动范围','data'=>['error'=>'不在活动时间内注册']]);
 		// 如果城市限制并且不在在城市范围内,不允许参加
 		if ( $data['city_ids'] && !in_array($custom['city_id'],explode(',',$data['city_ids'])) ) return json_send(['code'=>'error','msg'=>'账号不在城市范围,请核对您的城市','data'=>['error'=>'不在标签范围内']]);
+		// 是否需要获取用户标签
+		$tags							= $data['tag_scope'] || $data['tag_except'] ? $WeiBanTags->getTags($uid) : [];
+		// 获取用户的标签
+		$tags 							= $tags ? array_column($tags,'name') : [];
 		// 判断是不是可以参与
 		if( $data['tag_scope'] )		{
 			// 解析数组
 			$data['tag_scope']			= explode(',',$data['tag_scope']);
-			// 查询用户标签
-			$tags						= $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
-			// 获取用户的标签
-			$tags 						= array_column($tags,'name');
+			// 计算交集
 			$intersect					= count(array_intersect($data['tag_scope'],$tags));
 			// 判断标签是否必须同时满足
 			if( $data['tag_scope_type'] == 1  )	{
@@ -61,8 +62,15 @@ class Recruitment extends Api{
 				if( !$intersect ) 		return json_send(['code'=>'error','msg'=>'账号不在标签范围','data'=>['error'=>'不在标签范围内']]);
 			}
 		}
-		// 默认可以参加活动
-		$data['allow_join']				= 1;
+		// 判断是不是可以参与
+		if( $data['tag_except'] )		{
+			// 解析数组
+			$data['tag_except']			= explode(',',$data['tag_except']);
+			// 计算交集
+			$intersect					= count(array_intersect($data['tag_except'],$tags));
+			// 如果存在交集,在排除范围,即不可参与
+			if( $intersect )			return json_send(['code'=>'error','msg'=>'账号不在范围','data'=>['error'=>'在标签排除范围内']]);
+		}
 		// 奖品
 		$reward 						= $RecruitmentReward->getListByLottery($data['id']);
 		// 活动暂无奖品
@@ -94,6 +102,8 @@ class Recruitment extends Api{
 			// 奖项
 			$data['reward_list'][]		= ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
 		}
+		// 默认可以参加活动
+		$data['allow_join']				= 1;
 		// 返回结果
 		return							json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
 	}
@@ -145,8 +155,15 @@ class Recruitment extends Api{
 				if( !$intersect ) 		return json_send(['code'=>'error','msg'=>'账号不在标签范围','data'=>['error'=>'不在标签范围内']]);
 			}
 		}
-		// 默认可以参加活动
-		$data['allow_join']				= 1;
+		// 判断是不是可以参与
+		if( $data['tag_except'] )		{
+			// 解析数组
+			$data['tag_except']			= explode(',',$data['tag_except']);
+			// 计算交集
+			$intersect					= count(array_intersect($data['tag_except'],$tags));
+			// 如果存在交集,在排除范围,即不可参与
+			if( $intersect )			return json_send(['code'=>'error','msg'=>'账号在不可参与范围','data'=>['error'=>'账号在标签排除范围内']]);
+		}
 		// 奖品
 		$reward 						= $RecruitmentReward->getListByLottery($data['id']);
 		// 活动暂无奖品
@@ -249,6 +266,8 @@ class Recruitment extends Api{
 			foreach ($reward as $value) 	{
 				$rewardList[]				= ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
 			}
+			// 默认可以参加活动
+			$data['allow_join']				= 1;
 			// 返回结果
 			return							json_send(['code'=>'success','msg'=>'抽奖成功','data'=>['reward_list'=>$rewardList,'reward_index'=>$rewardIndex,'join_num'=>$data['join_num']-1]]);
 			// 异常处理

+ 1 - 1
app/Models/Lottery/Recruitment.php

@@ -68,7 +68,7 @@ class Recruitment extends Model
         // 不存在数据
         if ( !$list ) {
             // 从数据库获取数据
-            $data              = $this->query()->where([['status','=',0]])->get(['id','name','logo','rule','freq','lucky_num','tag_scope_type','max_reward','status','start_time','end_time','tag_scope','city_ids']);
+            $data              = $this->query()->where([['status','=',0]])->get(['id','name','logo','status','start_time','end_time','rule','freq','lucky_num','max_reward','tag_scope_type','tag_scope','tag_except','city_ids']);
             // 是否有数据
             $data              = $data ? $data->toArray() : [];
             // 循环处理数据

+ 14 - 2
resources/views/admin/lottery_recruitment/add.blade.php

@@ -49,7 +49,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<option value="1" >且</option>
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">标签范围(标签存在延迟,请慎用)</label>
 		<select name="tag_scope[]" class="form-control selectpicker" data-max-options="10" data-live-search="true" data-live-search-placeholder="搜索标签" data-none-results-text="未搜索到 {0}" title="选择标签" multiple>
 			@foreach ($tagList as $group=>$tags)
@@ -61,7 +61,19 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
+		<label class="control-label">排除标签(标签存在延迟,请慎用)</label>
+		<select name="tag_except[]" class="form-control selectpicker" data-max-options="10" data-live-search="true" data-live-search-placeholder="搜索标签" data-none-results-text="未搜索到 {0}" title="排除标签" multiple>
+			@foreach ($tagList as $group=>$tags)
+			<optgroup label="{{$group}}">
+				@foreach ($tags as $tag)
+				<option value="{{$tag}}" >{{$tag}}</option>
+				@endforeach
+			</optgroup>
+			@endforeach
+		</select>
+	</div>
+	<div class="form-group col-sm-2">
 		<label class="control-label">活动城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-max-options="20" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
 			@foreach ($cityList as $group)

+ 12 - 0
resources/views/admin/lottery_recruitment/edit.blade.php

@@ -61,6 +61,18 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">排除标签(标签存在延迟,请慎用)</label>
+		<select name="tag_except[]" class="form-control selectpicker" data-max-options="10" data-live-search="true" data-live-search-placeholder="搜索标签" data-none-results-text="未搜索到 {0}" title="排除标签" multiple>
+			@foreach ($tagList as $group=>$tags)
+			<optgroup label="{{$group}}">
+				@foreach ($tags as $tag)
+				<option value="{{$tag}}" @if(in_array($tag,$oldData['tag_except'])) selected @endif >{{$tag}}</option>
+				@endforeach
+			</optgroup>
+			@endforeach
+		</select>
+	</div>
 	<div class="form-group col-sm-3">
 		<label class="control-label">活动城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-max-options="20" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>