Преглед изворни кода

【Add】答题活动增加周期频率以及中奖次数上限

liuxiangxin пре 3 месеци
родитељ
комит
bf0d9202f9

+ 6 - 2
app/Http/Controllers/Admin/LotteryRiddle.php

@@ -126,7 +126,7 @@ class LotteryRiddle extends Auth{
      * 添加
      *
      * */
-    public function add(Request $request,Model $Model,City $City,WeiBanTags $WeiBanTags){
+    public function add(Request $request,Model $Model){
         if( request()->isMethod('post') ){
             // 验证参数
             $request->scene('add')->validate();
@@ -134,6 +134,8 @@ class LotteryRiddle extends Auth{
             $data['logo']			= request('logo','');
             $data['name']			= request('name','');
             $data['rule']			= request('rule','');
+            $data['freq']			= request('freq',0);
+            $data['max_reward']		= request('max_reward',0);
             $data['start_time']		= request('start_time','');
             $data['end_time']		= request('end_time','');
             $data['start_time']		= $data['start_time'] ? strtotime($data['start_time']) : 0;
@@ -158,7 +160,7 @@ class LotteryRiddle extends Auth{
      * 修改
      *
      * */
-    public function edit(Request $request,Model $Model,City $City,WeiBanTags $WeiBanTags){
+    public function edit(Request $request,Model $Model){
         // 接收参数
         $id							= request('id',0);
         // 查询用户
@@ -171,6 +173,8 @@ class LotteryRiddle extends Auth{
             $data['logo']			= request('logo','');
             $data['name']			= request('name','');
             $data['rule']			= request('rule','');
+            $data['freq']			= request('freq',0);
+            $data['max_reward']		= request('max_reward',0);
             $data['start_time']		= request('start_time','');
             $data['end_time']		= request('end_time','');
             $data['start_time']		= $data['start_time'] ? strtotime($data['start_time']) : 0;

+ 2 - 0
app/Http/Controllers/Admin/RiddleActive.php

@@ -134,6 +134,7 @@ class RiddleActive extends Auth{
 			$data['logo']			= request('logo','');
 			$data['name']			= request('name','');
 			$data['rule']			= request('rule','');
+			$data['freq']			= request('freq',0);
 			$data['join_total']		= request('join_total',0);
 			$data['join_share']		= request('join_share',0);
 			$data['lottery_id']		= request('lottery_id',0);
@@ -190,6 +191,7 @@ class RiddleActive extends Auth{
 			$data['logo']			= request('logo','');
 			$data['name']			= request('name','');
 			$data['rule']			= request('rule','');
+			$data['freq']			= request('freq',0);
 			$data['join_total']		= request('join_total',0);
 			$data['join_share']		= request('join_share',0);
 			$data['lottery_id']		= request('lottery_id',0);

+ 16 - 8
app/Http/Controllers/Api/Lottery/Riddle.php

@@ -74,7 +74,7 @@ class Riddle extends Api{
 		// 接口验签
 		// $this->verify_sign();
 		// 检查登录
-		$uid							= $this->checkLogin();
+		$uid							= 2;//$this->checkLogin();
 		// 获取活动
 		$lotteryId						= request('lottery_id',0);
 		// 如果存在的话
@@ -87,6 +87,7 @@ class Riddle extends Api{
 		$data							= $Model->getOne($lotteryId);
 		// 如果存在的话
 		if( !$data )					return json_send(['code'=>'error','msg'=>'活动不存在或未开始','data'=>$data]);
+		dd($data);
 		// 活动时间判断
 		if( $data['start_time'] > time() ) return json_send(['code'=>'error','msg'=>'活动暂未开始','data'=>$data]);
 		// 活动时间判断
@@ -113,13 +114,20 @@ class Riddle extends Api{
 				DB::rollBack();
 				return 						json_send(['code'=>'error','msg'=>'抽奖次数扣减失败','data'=>['error'=>'抽奖次数扣减失败']]);
 			}
-            //查询用户是否已中过奖
-            $rewardData						= $RiddleRecord->query()->where(['lottery_id'=>$data['id'],'custom_uid'=>$uid])->first();
-            $rewardIndex                    = 0;
-            if (!$rewardData)				{
-                // 获取奖励结果
-                $rewardIndex 				= $RiddleReward->getRewardResult($reward);
-            }
+			// 查询条件
+			$map							= [];
+			// 判断周期
+			if( !empty($data['freq']) )		{
+				if( $data['freq'] == 1 )	$map = [['insert_time','>=',now()->startOfDay()->getTimestamp()],['insert_time','<=',now()->endOfDay()->getTimestamp()]];
+				if( $data['freq'] == 2 )	$map = [['insert_time','>=',now()->startOfWeek()->getTimestamp()],['insert_time','<=',now()->endOfWeek()->getTimestamp()]];
+				if( $data['freq'] == 3 )	$map = [['insert_time','>=',now()->startOfMonth()->getTimestamp()],['insert_time','<=',now()->endOfMonth()->getTimestamp()]];
+			}
+			// 是否限制中奖次数字段,没有默认中奖一次
+			$data['max_reward']				= isset($data['max_reward']) ? 1 : $data['max_reward'];
+			// 限制中奖则获取中奖次数
+			$rewarTotal						= $data['max_reward'] ? $RiddleRecord->query()->where(['lottery_id'=>$data['id'],'custom_uid'=>$uid])->where($map)->count() : 0;
+			// 中奖上限以后不再中奖
+			$rewardIndex                    = ($data['max_reward'] && $rewarTotal >= $data['max_reward']) ? 0 : $RiddleReward->getRewardResult($reward);
 			// 如果中奖,下标不是0
             if( $rewardIndex )				{
                 // 获取奖品

+ 13 - 5
app/Http/Controllers/Api/Riddle/Active.php

@@ -67,11 +67,19 @@ class Active extends Api{
 			// 如果不能参与
 			if( !$data['allow_join'] )	return json_send(['code'=>'error','msg'=>'账号不在活动城市','data'=>['error'=>'账号不在活动城市']]);
 		}
-		// 获取参与次数
-		$joinTotal						= $ActiveRecord->query()->where([['active_id','=',$id],['custom_uid','=',$uid]])->count();
-		// 获取答题次数
-		$shareTotal						= $ActiveShare->query()->where([['active_id','=',$id],['custom_uid','=',$uid]])->count();
-		// 计算答题次数
+		// 查询条件
+		$map							= [];
+		// 判断周期
+		if( !empty($data['freq']) )		{
+			if( $data['freq'] == 1 )	$map = [['insert_time','>=',now()->startOfDay()->getTimestamp()],['insert_time','<=',now()->endOfDay()->getTimestamp()]];
+			if( $data['freq'] == 2 )	$map = [['insert_time','>=',now()->startOfWeek()->getTimestamp()],['insert_time','<=',now()->endOfWeek()->getTimestamp()]];
+			if( $data['freq'] == 3 )	$map = [['insert_time','>=',now()->startOfMonth()->getTimestamp()],['insert_time','<=',now()->endOfMonth()->getTimestamp()]];
+		}
+		// 获取已参与次数
+		$joinTotal						= $ActiveRecord->query()->where([['active_id','=',$id],['custom_uid','=',$uid]])->where($map)->count();
+		// 获取已分享次数
+		$shareTotal						= $ActiveShare->query()->where([['active_id','=',$id],['custom_uid','=',$uid]])->where($map)->count();
+		// 计算总答题次数
 		$data['join_total']				= $data['join_total'] + ( $shareTotal >= $data['join_share'] ? $data['join_share'] : $shareTotal);
 		// 计算剩余参与次数
 		$data['join_last']				= $data['join_total'] - $joinTotal;

+ 10 - 2
app/Http/Controllers/Api/Riddle/ActiveShare.php

@@ -27,8 +27,16 @@ class ActiveShare extends Api{
 		$data			                = $Active->getOne($activeId);
 		// 如果存在的话
 		if( !$data )					return json_send(['code'=>'error','msg'=>'活动已下线或不存在','data'=>'']);
-		// 获取答题次数
-		$shareTotal						= $Model->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
+		// 查询条件
+		$map							= [];
+		// 判断周期
+		if( !empty($data['freq']) )		{
+			if( $data['freq'] == 1 )	$map = [['insert_time','>=',now()->startOfDay()->getTimestamp()],['insert_time','<=',now()->endOfDay()->getTimestamp()]];
+			if( $data['freq'] == 2 )	$map = [['insert_time','>=',now()->startOfWeek()->getTimestamp()],['insert_time','<=',now()->endOfWeek()->getTimestamp()]];
+			if( $data['freq'] == 3 )	$map = [['insert_time','>=',now()->startOfMonth()->getTimestamp()],['insert_time','<=',now()->endOfMonth()->getTimestamp()]];
+		}
+		// 获取已分享次数
+		$shareTotal						= $Model->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->where($map)->count();
 		// 计算剩余分享次数
 		$data['share_last']				= ($data['join_share'] - $shareTotal <= 0 ? 0 : $data['join_share'] - $shareTotal);
 		// 如果次数不够

+ 13 - 5
app/Http/Controllers/Api/Riddle/Answer.php

@@ -34,11 +34,19 @@ class Answer extends Api{
 		$data			                = $Active->getOne($activeId);
 		// 如果存在的话
 		if( !$data )					return json_send(['code'=>'error','msg'=>'活动已下线或不存在','data'=>'']);
-		// 获取参与次数
-		$joinTotal						= $ActiveRecord->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
-		// 获取答题次数
-		$shareTotal						= $ActiveShare->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->count();
-		// 计算答题次数
+		// 查询条件
+		$map							= [];
+		// 判断周期
+		if( !empty($data['freq']) )		{
+			if( $data['freq'] == 1 )	$map = [['insert_time','>=',now()->startOfDay()->getTimestamp()],['insert_time','<=',now()->endOfDay()->getTimestamp()]];
+			if( $data['freq'] == 2 )	$map = [['insert_time','>=',now()->startOfWeek()->getTimestamp()],['insert_time','<=',now()->endOfWeek()->getTimestamp()]];
+			if( $data['freq'] == 3 )	$map = [['insert_time','>=',now()->startOfMonth()->getTimestamp()],['insert_time','<=',now()->endOfMonth()->getTimestamp()]];
+		}
+		// 获取已参与次数
+		$joinTotal						= $ActiveRecord->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->where($map)->count();
+		// 获取已分享次数
+		$shareTotal						= $ActiveShare->query()->where([['active_id','=',$activeId],['custom_uid','=',$uid]])->where($map)->count();
+		// 计算总答题次数
 		$data['join_total']				= $data['join_total'] + ( $shareTotal >= $data['join_share'] ? $data['join_share'] : $shareTotal);
 		// 计算剩余参与次数
 		$data['join_last']				= $data['join_total'] - $joinTotal;

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

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

+ 1 - 1
app/Models/Riddle/Active.php

@@ -68,7 +68,7 @@ class Active extends Model
         // 不存在数据
         if ( !$list ) {
             // 从数据库获取数据
-            $data              = $this->query()->where(['status'=>0])->get(['id','name','logo','rule as active_rule','lottery_id','join_total','join_share','status','start_time','end_time','tag_scope','city_ids'])->toArray();
+            $data              = $this->query()->where([['status','=',0]])->get(['id','name','logo','lottery_id','freq','join_total','join_share','status','start_time','end_time','tag_scope','city_ids','rule as active_rule'])->toArray();
             // 循环处理数据
             $list              = [];
             // 进行更新

+ 13 - 0
resources/views/admin/lottery_riddle/add.blade.php

@@ -25,6 +25,19 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">结束时间</label>
 		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="" />
 	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">周期频率</label>
+		<select name="freq" class="form-control" >
+			<option value="0" >活动期间</option>
+			<option value="1" >按日</option>
+			<option value="2" >按周</option>
+			<option value="3" >按月</option>
+		</select>
+	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">中奖次数</label>
+		<input class="form-control" required="required" type="number" placeholder="中奖次数,0不限制" name="max_reward"  value="1" />
+	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">活动规则</label>
 		<textarea class="form-control" name="rule" rows="10" placeholder="请输入活动规则" ></textarea>

+ 13 - 0
resources/views/admin/lottery_riddle/edit.blade.php

@@ -25,6 +25,19 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">结束时间</label>
 		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="{{date('Y-m-d H:i',$oldData['end_time'])}}" />
 	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">周期频率</label>
+		<select name="freq" class="form-control" >
+			<option value="0" @if( $oldData['freq'] == 0 ) selected @endif >活动期间</option>
+			<option value="1" @if( $oldData['freq'] == 1 ) selected @endif >按日</option>
+			<option value="2" @if( $oldData['freq'] == 2 ) selected @endif >按周</option>
+			<option value="3" @if( $oldData['freq'] == 3 ) selected @endif >按月</option>
+		</select>
+	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">中奖次数</label>
+		<input class="form-control" required="required" type="number" placeholder="中奖次数,0不限制" name="max_reward"  value="{{$oldData['max_reward']}}" />
+	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">活动规则</label>
 		<textarea class="form-control" name="rule" rows="10" placeholder="请输入活动规则" >{{$oldData['rule']}}</textarea>

+ 19 - 10
resources/views/admin/riddle_active/add.blade.php

@@ -8,7 +8,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">活动首图 [1180*490]</label>
 		<div id="logo">
 			<a id="logo-image" href="#" data-toggle="image" class="img-thumb">
-				<img src="{{path_compat('')}}" width="120" />
+				<img src="{{path_compat('')}}" height="120" />
 			</a>
 			<input type="hidden" name="logo" value="" id="input-logo" />
 		</div>
@@ -17,6 +17,23 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">活动名称</label>
 		<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="" />
 	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">开始时间</label>
+		<input class="form-control" required="required" type="datetime-local" placeholder="开始时间"  name="start_time" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">结束时间</label>
+		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="" />
+	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">周期频率</label>
+		<select name="freq" class="form-control" >
+			<option value="0" >活动期间</option>
+			<option value="1" >按日</option>
+			<option value="2" >按周</option>
+			<option value="3" >按月</option>
+		</select>
+	</div>
 	<div class="form-group col-sm-3">
 		<label class="control-label">参与次数</label>
 		<input class="form-control" required="required" type="number" placeholder="默认参与答题次数"  name="join_total" value="" />
@@ -30,14 +47,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<input class="form-control" required="required" type="number" placeholder="灯谜抽奖活动的ID" name="lottery_id" value="" />
 	</div>
 	<div class="form-group col-sm-4">
-		<label class="control-label">开始时间</label>
-		<input class="form-control" required="required" type="datetime-local" placeholder="开始时间"  name="start_time" value="" />
-	</div>
-	<div class="form-group col-sm-4">
-		<label class="control-label">结束时间</label>
-		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="" />
-	</div>
-	<div class="form-group col-sm-5">
 		<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)
@@ -49,7 +58,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-5">
+	<div class="form-group col-sm-4">
 		<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)

+ 19 - 10
resources/views/admin/riddle_active/edit.blade.php

@@ -8,7 +8,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">活动首图 [1180*490]</label>
 		<div id="logo">
 			<a id="logo-image" href="#" data-toggle="image" class="img-thumb">
-				<img src="{{path_compat($oldData['logo'])}}" width="120" />
+				<img src="{{path_compat($oldData['logo'])}}" height="120" />
 			</a>
 			<input type="hidden" name="logo" value="{{$oldData['logo']}}" id="input-logo" />
 		</div>
@@ -17,6 +17,23 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">活动名称</label>
 		<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
 	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">开始时间</label>
+		<input class="form-control" required="required" type="datetime-local" placeholder="开始时间"  name="start_time" value="{{date('Y-m-d H:i',$oldData['start_time'])}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">结束时间</label>
+		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="{{date('Y-m-d H:i',$oldData['end_time'])}}" />
+	</div>
+	<div class="form-group col-sm-4">
+		<label class="control-label">周期频率</label>
+		<select name="freq" class="form-control" >
+			<option value="0" @if( $oldData['freq'] == 0 ) selected @endif >活动期间</option>
+			<option value="1" @if( $oldData['freq'] == 1 ) selected @endif >按日</option>
+			<option value="2" @if( $oldData['freq'] == 2 ) selected @endif >按周</option>
+			<option value="3" @if( $oldData['freq'] == 3 ) selected @endif >按月</option>
+		</select>
+	</div>
 	<div class="form-group col-sm-3">
 		<label class="control-label">参与次数</label>
 		<input class="form-control" required="required" type="number" placeholder="默认参与答题次数"  name="join_total" value="{{$oldData['join_total']}}" />
@@ -30,14 +47,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<input class="form-control" required="required" type="number" placeholder="灯谜抽奖活动的ID" name="lottery_id" value="{{$oldData['lottery_id']}}" />
 	</div>
 	<div class="form-group col-sm-4">
-		<label class="control-label">开始时间</label>
-		<input class="form-control" required="required" type="datetime-local" placeholder="开始时间"  name="start_time" value="{{date('Y-m-d H:i',$oldData['start_time'])}}" />
-	</div>
-	<div class="form-group col-sm-4">
-		<label class="control-label">结束时间</label>
-		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="{{date('Y-m-d H:i',$oldData['end_time'])}}" />
-	</div>
-	<div class="form-group col-sm-5">
 		<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)
@@ -49,7 +58,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-5">
+	<div class="form-group col-sm-4">
 		<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)