checkLogin(); // 接收参数 $limit = request('limit',10); $time = time(); $where = [ ['custom_uid','=',$uid], ['start_time','<=',$time], ['end_time','>=',$time], ]; // 查询活动 $Paginator = $CustomRedpacket::query()->where($where)->paginate($limit); // 获取数据 $data['total'] = $Paginator->total(); $data['current_page'] = $Paginator->currentPage(); $data['per_page'] = $Paginator->perPage(); $data['last_page'] = $Paginator->lastPage(); $list = $Paginator->items(); // 判断活动 if( !$list ) return json_send(['code'=>'error','msg'=>'您没有红包可领取']); $data = []; foreach ($list as $key=>$v){ $data['data'][$key]['money'] = $v['money']; $data['data'][$key]['custom_redpacket_id'] = $v['id']; $data['data'][$key]['status'] = $v['status']; switch ($v['status']){ case 0: $data['data'][$key]['state'] = '待领取'; break; case 1: $data['data'][$key]['state'] = '已领取'; break; } } // 返回成功 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]); } /** * 领取红包 /api/redpacket/get_redpacket * * * */ public function get_redpacket(Request $request,Model $Model,CustomRedpacket $CustomRedpacket,CustomAmountRecord $CustomAmountRecord,CustomAmount $CustomAmount){ // 验证参数 $request->scene('get_redpacket')->validate(); // 检查登录 $uid = $this->checkLogin(); // 接收参数 $customRedpacketId = request('custom_redpacket_id',0); // 查询红包信息 $info = $CustomRedpacket::query()->where(['id'=>$customRedpacketId,'custom_uid'=>$uid])->first(); // 判断是否可以领取 if( !$info ) return json_send(['code'=>'error','msg'=>'红包不存在']); // 判断是否可以领取 if( $info['status'] ) return json_send(['code'=>'error','msg'=>'红包已领取']); // 时间 if( $info['start_time'] > time() ) return json_send(['code'=>'error','msg'=>'还没到发放时间哦']); // 时间 if( $info['end_time'] <= time() ) return json_send(['code'=>'error','msg'=>'发放时间已经结束了']); DB::beginTransaction(); try { // 获取余额信息 $amountInfo = $CustomAmount::query()->where(['custom_uid'=>$uid])->first(); if(!$amountInfo){ $result = $CustomAmountRecord::query()->insert(['custom_uid'=>$uid,'insert_time'=>time(),'update_time'=>time()]); if (!$result){ return json_send(['code'=>'error','msg'=>'提现失败','data'=>['error'=>'提现失败']]); } $balance = 0; }else{ $balance = $amountInfo['amount']; } //加入用户余额 $result = $CustomAmount::query()->where(['custom_uid'=>$uid])->increment('amount',$info['money']); if (!$result) return json_send(['code'=>'error','msg'=>'领取红包失败']); //写入余额记录 $recordInfo = [ 'transfer_bill_no' => $info['id'], 'prefix' => 1, 'amount' => $info['money'], 'buy_type' => 1, 'pay_type' => 1, 'balance' => $balance, 'insert_time' => time(), 'update_time' => time(), ]; $resultId = $CustomAmountRecord::query()->insertGetId($recordInfo); if (!$resultId){ DB::rollBack(); return json_send(['code'=>'error','msg'=>'领取红包失败']); } //修改用户红包记录状态 $result = $CustomRedpacket::query()->where(['id'=>$info['id']])->update(['status'=>1,'update_time'=>time(),'amount_record_id'=>$resultId]); if (!$result){ DB::rollBack(); return json_send(['code'=>'error','msg'=>'领取红包失败']); } DB::commit(); }catch (\Exception $e){ // 回退数据 DB::rollBack(); return json_send(['code'=>'error','msg'=>'领取红包失败','data'=>$e->getMessage()]); } // 返回成功 return json_send(['code'=>'success','msg'=>'领取成功']); } }