Эх сурвалжийг харах

【Add】积分抽奖功能

liuxiangxin 6 сар өмнө
parent
commit
5d4561440c

+ 20 - 19
app/Http/Controllers/Api/Lottery/Score.php

@@ -23,7 +23,7 @@ class Score extends Api{
 	 * 
 	 * 
 	 * */
-	public function get_detail(Model $Model,Custom $Custom,ScoreReward $ScoreReward,WeiBanTags $WeiBanTags){
+	public function get_detail(Model $Model,Custom $Custom,ScoreReward $ScoreReward){
 		// 接口验签
 		// $this->verify_sign();
 		// 检查登录
@@ -42,28 +42,21 @@ class Score extends Api{
 		$reward 						= $ScoreReward->getListByLottery($data['id']);
 		// 活动暂无奖品
 		if( !$reward )					return json_send(['code'=>'error','msg'=>'活动暂未配置奖品','data'=>$data]);
-		// 通过活动ID,查询奖品
-		$data['rewardList']				= $reward;
 		// logo
 		$data['logo']					= $data['logo'] ? path_compat($data['logo']) : '';
 		// 判断用户是不是活动期间注册的以判断新老用户,获取对应积分
 		$data['need_score']				= ($custom['insert_time'] >= $data['start_time'] && $custom['insert_time'] <= $data['end_time']) ? $data['need_score'] : $data['need_old_score'];
-		// 默认可以参加活动
-		$data['allow_join']				= 1;
-		// 判断是不是可以参与
-		if( $data['tag_scope'] )		{
-			// 解析数组
-			$data['tag_scope']			= explode(',',$data['tag_scope']);
-			// 查询用户标签
-			$tags						= $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
-			// 标签范围限定时,默认不能参与
-			$data['allow_join'] 		= 0;
-			// 判断标签是不是存在
-			foreach ($tags as $value) 	{
-				// 标签范围内,允许参加
-				if( in_array($value['name'],$data['tag_scope']) )  $data['allow_join'] = 1;
-			}
+		// 通过活动ID,查询奖品
+		$data['reward_list']			= [];
+		// 奖品数据
+		foreach ($reward as $value) 	{
+			// 奖项
+			$data['reward_list'][]		= ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
 		}
+		// 时间处理
+		$data['start_date']				= date('Y-m-d H:i',$data['start_time']);
+		// 时间处理
+		$data['end_date']				= date('Y-m-d H:i',$data['end_time']);
 		// 删除不必要的数据
 		unset($data['need_old_score'],$data['tag_scope'],$data['city_ids']);
 		// 返回结果
@@ -177,8 +170,16 @@ class Score extends Api{
 			}
 			// 提交事务
 			DB::commit();
+			// 通过活动ID,查询奖品
+			$rewardList						= [];
+			// 奖品数据
+			foreach ($reward as $value) 	{
+				$rewardList[]				= ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
+			}
+			// 获取积分信息
+			$customScore					= $CustomScore->getCustomScore($uid);
 			// 返回结果
-			return							json_send(['code'=>'success','msg'=>'抽奖成功','data'=>['rewardList'=>$reward,'rewardIndex'=>$rewardIndex]]);
+			return							json_send(['code'=>'success','msg'=>'抽奖成功','data'=>['reward_list'=>$rewardList,'reward_index'=>$rewardIndex,'custom_score'=>$customScore]]);
 			// 异常处理
 		} catch (\Throwable $th) {
 			// 回退数据

+ 76 - 0
app/Http/Controllers/Api/Lottery/ScoreRecord.php

@@ -0,0 +1,76 @@
+<?php namespace App\Http\Controllers\Api\Lottery;
+
+use App\Http\Controllers\Api\Api;
+use App\Models\Lottery\ScoreRecord as Model;
+use App\Http\Requests\Api\Lottery\ScoreRecord as Request;
+use App\Models\CustomAddr;
+
+/**
+ * 积分抽奖记录
+ * 
+ * @author 刘相欣
+ * 
+ * */
+class ScoreRecord extends Api{
+
+	/**
+	 * 获取抽奖配置		/api/lottery_score_record/get_list
+	 * 
+	 * */
+	public function get_list(Request $request,Model $Model){
+		// 接口验签
+		// $this->verify_sign();
+		// 验证参数
+		$request->scene('get_list')->validate();
+		// 检查登录
+		$uid							= $this->checkLogin();
+		// 接受参数
+		$lotteryId						= request('lottery_id',0);
+		// 
+		$map							= [['custom_uid','=',$uid],['lottery_id','=',$lotteryId]];
+		// 获取客户城市的数据
+		$list			                = $Model->query()->where($map)->orderByDesc('id')->get(['id','reward_name','contact_addr','status','insert_time'])->toArray();
+		// 处理请求
+		foreach ($list as $key => $value ) {
+			// 处理数据
+			$value['insert_time'] 		= date('m/d H:i',$value['insert_time']);
+			$value['state'] 			= $Model->getRecordState($value['status'],'name');
+			// 重组数据
+			$list[$key]					= $value;
+		}
+		// 返回结果
+		return							json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]);
+	}
+
+
+	/**
+	 * 获取抽奖配置		/api/lottery_score_record/set_addr
+	 * 
+	 * */
+	public function set_addr(Request $request,Model $Model,CustomAddr $CustomAddr){
+		// 接口验签
+		// $this->verify_sign();
+		// 验证参数
+		$request->scene('set_addr')->validate();
+		// 检查登录
+		$uid							= $this->checkLogin();
+		// 接受参数
+		$id								= request('id',0);
+		$addrId							= request('addr_id',0);
+		// 获取地址
+		$addr							= $CustomAddr->getOne($addrId);
+		// 如果不存在数据
+		if( !$addr )					return json_send(['code'=>'error','msg'=>'地址有误,请核对','data'=>['error'=>'没有找到对应的地址']]);
+		// 重组数据
+		$addr							= ['status'=>1,'contact_name'=>$addr['contact_name'],'contact_shop'=>$addr['contact_shop'],'contact_phone'=>$addr['contact_phone'],'contact_province'=>$addr['contact_province'],'contact_city'=>$addr['contact_city'],'contact_area'=>$addr['contact_area'],'contact_addr'=>$addr['contact_addr'],'update_time'=>time()];
+		// 组合条件
+		$map							= [['custom_uid','=',$uid],['id','=',$id]];
+		// 获取客户城市的数据
+		$result			                = $Model->query()->where($map)->update($addr);
+		// 成功
+		if( !$result )					return json_send(['code'=>'error','msg'=>'地址填写失败','data'=>['error'=>'地址填写失败']]);
+		// 返回结果
+		return							json_send(['code'=>'success','msg'=>'获取成功','data'=>['id'=>$id]]);
+	}
+	
+}

+ 5 - 4
app/Http/Requests/Admin/LotteryScore.php

@@ -19,15 +19,16 @@ class LotteryScore extends BaseRequest
         return      [
             // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
             // 验证字段,验证规则,提示信息
-	        'name' 			    => 'required|unique:score_lottery,name,'.request('id',0),
+	        'name' 			    => 'required|unique:lottery_score,name,'.request('id',0),
 	        'id'                => 'required|integer|gt:0',
+            'logo'              => 'required',
         ];
     }
 
     // 场景列表
     protected   $scenes         = [
-		'add'  		            => ['name'],
-        'edit'  		        => ['id','name'],
+		'add'  		            => ['name','logo'],
+        'edit'  		        => ['id','name','logo'],
         'set_status'  		    => ['id'],
 	];
 
@@ -39,7 +40,7 @@ class LotteryScore extends BaseRequest
     public function messages()
     {
         return [
-            'logo.required'     => 'logo必填',
+            'logo.required'     => '首图必选',
             'name.required'     => '活动名称必填',
             'name.required'     => '活动名称已存在',
             'id.required'       => 'ID未知',

+ 56 - 0
app/Http/Requests/Api/Lottery/ScoreRecord.php

@@ -0,0 +1,56 @@
+<?php namespace App\Http\Requests\Api\Lottery;
+
+use App\Http\Requests\BaseRequest;
+
+/**
+ * 积分记录
+ * 
+ */
+class ScoreRecord extends BaseRequest
+{
+    /**
+     * 获取应用于请求的规则
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 编辑时排除ID
+        // 返回结果
+        return      [
+            // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
+            // 验证字段,验证规则,提示信息
+            // 'name'       => 'string|max:20',
+            'id'                => 'required|integer|gt:0',
+            'lottery_id'        => 'required|integer|gt:0',
+            'addr_id'           => 'required|integer|gt:0'
+        ];
+    }
+
+    // 场景列表
+    protected   $scenes         = [
+        'get_list'              => ['lottery_id'],
+        'set_addr'              => ['addr_id','id'],
+	];
+
+    /**
+     * 获取已定义验证规则的错误消息
+     *
+     * @return array
+     */
+    public function messages()
+    {
+        return [
+            'lottery_id.required'   	=> '请选择活动ID',
+            'lottery_id.integer'   	    => '活动ID有误',
+            'lottery_id.gt'   	        => '活动ID有误',
+            'id.required'   	        => '请选择奖品记录',
+            'id.integer'   	            => '奖品记录ID有误',
+            'id.gt'   	                => '奖品记录ID有误',
+            'addr_id.required'   	    => '请选择地址',
+            'addr_id.integer'   	    => '地址ID有误',
+            'addr_id.gt'   	            => '地址ID有误',
+        ];
+    }
+
+}

+ 2 - 2
app/Models/Lottery/Score.php

@@ -68,7 +68,7 @@ class Score extends Model
         // 不存在数据
         if ( !$list ) {
             // 从数据库获取数据
-            $data              = $this->query()->where([['status','=',0]])->get(['id','name','logo','need_score','need_old_score','status','start_time','end_time','tag_scope','city_ids']);
+            $data              = $this->query()->where([['status','=',0]])->get(['id','name','logo','need_score','need_old_score','rule','status','start_time','end_time','tag_scope','city_ids']);
             // 是否有数据
             $data              = $data ? $data->toArray() : [];
             // 循环处理数据
@@ -111,7 +111,7 @@ class Score extends Model
      */
     public function getOneByCity($cityId){
         // 获取列表数据
-        $list                   = $this->getList();
+        $list                   = $this->getList(true);
         // 列表数据不存在
         if( !$list )            return [];
         // 全国的码

+ 3 - 2
app/Models/Lottery/ScoreRecord.php

@@ -3,14 +3,14 @@
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use App\Models\Traits\Lottery\RewardType;
-
+use App\Models\Traits\Lottery\RecordState;
 /**
  * 抽奖记录模型
  * 
  */
 class ScoreRecord extends Model
 {
-    use HasFactory,RewardType;
+    use HasFactory,RewardType,RecordState;
 
     // 与模型关联的表名
     protected $table = 'lottery_score_record';
@@ -20,6 +20,7 @@ class ScoreRecord extends Model
     // const CREATED_AT = 'insert_time';
     // const UPDATED_AT = 'update_time';
 
+
     /**
      * 添加数据
      * 

+ 64 - 0
app/Models/Traits/Lottery/RecordState.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Models\Traits\Lottery;
+
+
+/**
+ * 记录状态
+ * 
+ */
+trait RecordState
+{
+
+    // 奖品类型
+    private     $state       =   ['0'=>[
+                                        'id'            =>0,
+                                        // 类型名称
+                                        'name'          =>'请填写地址',
+                                    ],'1'=>[
+                                        'id'            =>1,
+                                        // 类型名称
+                                        'name'          =>'进行中',
+                                    ],'2'=>[
+                                        'id'            =>2,
+                                        // 类型名称
+                                        'name'          =>'待发货',
+                                    ],'3'=>[
+                                        'id'            =>2,
+                                        // 类型名称
+                                        'name'          =>'已发货',
+                                    ],'8'=>[
+                                        'id'            =>8,
+                                        // 类型名称
+                                        'name'          =>'已完成',
+                                    ]];
+
+    /**
+     * 状态列表
+     * 
+     */
+    public function getRecordStateList(){
+        // 返回数据
+        return                  $this->state;
+    }
+
+    /**
+     * 获取状态值
+     * 
+     * @param int       $id         类型ID
+     * @param string    $field      字段
+     * 
+     */
+    public function getRecordState($id,$field=''){
+        // 获取数据
+        $list               = $this->getRecordStateList();
+        // 获取交易类型
+        $one                = isset($list[$id]) ? $list[$id] : [];
+        // 如果存在需要的字段
+        if( $field )        return isset($one[$field]) ? $one[$field] : null;
+        // 返回结果
+        return              $one;
+    }
+
+
+}

BIN
public/uploads/images/default/lottery_bg.png


BIN
public/uploads/images/default/lottery_record.png


+ 1 - 1
resources/views/admin/lottery_score/add.blade.php

@@ -5,7 +5,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @section('content')
 <form class="post-form" action="" method="post">
 	<div class="form-group col-sm-2">
-		<label class="control-label">活动Logo []</label>
+		<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('')}}" height="100" />

+ 2 - 2
resources/views/admin/lottery_score/edit.blade.php

@@ -5,12 +5,12 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @section('content')
 <form class="post-form" action="" method="post">
 	<div class="form-group col-sm-2">
-		<label class="control-label">活动Logo []</label>
+		<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'])}}" height="100" />
 			</a>
-			<input type="hidden" name="logo" value="" id="input-logo" />
+			<input type="hidden" name="logo" value="{{$oldData['logo']}}" id="input-logo" />
 		</div>
 	</div>
 	<div class="form-group col-sm-4">

+ 9 - 1
routes/api.php

@@ -125,4 +125,12 @@ Route::any('coupon/get_product',[\App\Http\Controllers\Api\Coupon::class,'get_pr
 // 获取积分抽奖配置
 Route::any('lottery_score/get_detail',[\App\Http\Controllers\Api\Lottery\Score::class,'get_detail']);
 // 进行抽奖
-Route::any('lottery_score/get_reward',[\App\Http\Controllers\Api\Lottery\Score::class,'get_reward']);
+Route::any('lottery_score/get_reward',[\App\Http\Controllers\Api\Lottery\Score::class,'get_reward']);
+
+/**
+ * 抽奖记录
+ */
+// 获取列表
+Route::any('lottery_score_record/get_list',[\App\Http\Controllers\Api\Lottery\ScoreRecord::class,'get_list']);
+// 设置地址
+Route::any('lottery_score_record/set_addr',[\App\Http\Controllers\Api\Lottery\ScoreRecord::class,'set_addr']);