|
@@ -0,0 +1,788 @@
|
|
|
+<?php
|
|
|
+/**
|
|
|
+ * 佩奇拼图活动(由萌鸡快跑活动改写)
|
|
|
+ * @author xusong
|
|
|
+ * @version 0.0.1
|
|
|
+ * @datetime 2019.07.25
|
|
|
+ */
|
|
|
+namespace Home\Logic\Activityv2;
|
|
|
+
|
|
|
+class MengbaoLogic extends BaseLogic
|
|
|
+{
|
|
|
+
|
|
|
+ private $act_id;
|
|
|
+ private $uid;
|
|
|
+ private $userinfo;
|
|
|
+ private $activityinfo;
|
|
|
+ private $vip_level;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * [_initialize 前置操作-继承公共前置方法]
|
|
|
+ * @author Devil
|
|
|
+ * @blog http://gong.gg/
|
|
|
+ * @version 0.0.1
|
|
|
+ * @datetime 2016-12-03T12:39:08+0800
|
|
|
+ */
|
|
|
+ public function _initialize() {
|
|
|
+ // 调用父类前置方法
|
|
|
+ parent::_initialize();
|
|
|
+ $this->uid = trim(I('uid'));
|
|
|
+
|
|
|
+ if(!$this->userinfo = M('iptv_users')->where(['uid'=>$this->uid])->find()){
|
|
|
+ $this->responseError('uid 参数非法');
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->act_id = (int)I('act_id');
|
|
|
+ if(!$this->activityinfo = M('Activity_v2')->where(['id'=>$this->act_id])->find()){
|
|
|
+ $this->responseError('act_id 参数非法');
|
|
|
+ }
|
|
|
+ //检查vip鉴权方式
|
|
|
+ $this->vip_level = I('is_vip') >= 0 ? I('is_vip') : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getMengbaoList()
|
|
|
+ {
|
|
|
+ $page = I('page',1);
|
|
|
+ $limit = I('limit',8);
|
|
|
+ $count = M('activity_mengbao')->count();
|
|
|
+
|
|
|
+ $maxPage = ceil($count/$limit);
|
|
|
+
|
|
|
+ if( ($page < 1) || ($page > $maxPage)){
|
|
|
+ $this->responseError('没有更多萌宝资料!', -3, $error);
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = M('activity_mengbao')->field('id as mengbao_id,name,age,image,media_id,media_num,score')->order('score desc , id asc')->limit(($page-1)*$limit,$limit)->select();
|
|
|
+
|
|
|
+ foreach ($data as $key=>$value) {
|
|
|
+ $data[$key]['image'] = __MY_URL__.$value['image'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->responseSuccess($data,'萌宝资料');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取活动状态
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function getActStatus()
|
|
|
+ {
|
|
|
+ //开始时间结束时间未作限制
|
|
|
+ if($this->activityinfo['is_enable'] == 1){
|
|
|
+ $this->responseSuccess(1, "请求成功!");
|
|
|
+ }else{
|
|
|
+ $this->responseSuccess(-1, "请求成功!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交用户资料
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function setUserInfo()
|
|
|
+ {
|
|
|
+ $phone = trim(I('phone'));
|
|
|
+ if (empty($phone)) {
|
|
|
+ $this->responseError('参数错误!');
|
|
|
+ }
|
|
|
+ //检测手机号码是否正确
|
|
|
+ if (!preg_match('/^1[345789]\d{9}$/ims', $phone)) {
|
|
|
+ $this->responseError('手机号填写有误!');
|
|
|
+ }
|
|
|
+ //更新用户活动手机号码
|
|
|
+ $where = array(
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ );
|
|
|
+ if ($id = M('activity_user_v2')->where($where)->getField('id')){
|
|
|
+ $update['user_phone']= $phone;
|
|
|
+ $update['updated_at']= date('Y-m-d H:i:s');
|
|
|
+ if(M('activity_user_v2')->where(['id'=>$id])->save($update)===false){
|
|
|
+ Writelog(M()->getLastSql(),'sql','prize');
|
|
|
+ $this->responseError("更新失败!");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $insert_data = array(
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ 'user_phone'=>$phone,
|
|
|
+ 'created_at'=>date('Y-m-d H:i:s'),
|
|
|
+ 'updated_at'=>date('Y-m-d H:i:s')
|
|
|
+ );
|
|
|
+ if(!M('activity_user_v2')->add($insert_data)){
|
|
|
+ Writelog(M()->getLastSql(),'sql','prize');
|
|
|
+ $this->responseError("登记失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->responseSuccess(0, "登记成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ public function vote()
|
|
|
+ {
|
|
|
+ $score = I('score',1);
|
|
|
+ $mengbao_id = I('mengbao_id');
|
|
|
+ $remain_vote_chance = $this->_getVoteChance();
|
|
|
+
|
|
|
+ if(($remain_chance = $remain_vote_chance - $score) < 0){
|
|
|
+ $this->responseError('您没有足够的投票次数,投票失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新萌宝获得总票数
|
|
|
+ M('activity_mengbao')->where(['id'=>$mengbao_id])->setInc('score',$score);
|
|
|
+
|
|
|
+ $where = [
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'created_at'=>['gt','2020-01-15'],
|
|
|
+ 'product_id'=>'365',
|
|
|
+ 'pay_result'=>0
|
|
|
+ ];
|
|
|
+ $is_year_vip = M('iptv_order')->where($where)->find();
|
|
|
+
|
|
|
+ if($is_year_vip){
|
|
|
+ //已投票数
|
|
|
+ $vip_vote = M('activity_vip_vote')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->field('id,num')->find();
|
|
|
+ $alrady_vip_vote = $vip_vote['num'] ? : 0;
|
|
|
+ //剩余数
|
|
|
+ $remain_vip_vote = 200 - $alrady_vip_vote;
|
|
|
+
|
|
|
+ $diff = $remain_vip_vote - $score;
|
|
|
+
|
|
|
+ if($diff >= 0){
|
|
|
+ M('activity_vip_vote')->where(['id'=>$vip_vote['id']])->setInc('num',$diff);
|
|
|
+ }else{
|
|
|
+ M('activity_vip_vote')->where(['id'=>$vip_vote['id']])->save(['num'=>200]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //插入
|
|
|
+ $insert_data = [
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ 'uid' =>$this->uid,
|
|
|
+ 'num' =>$score,
|
|
|
+ 'mengbao_id'=>$mengbao_id,
|
|
|
+ 'created_at'=>date('Y-m-d H:i:s'),
|
|
|
+ 'date' =>date('Ymd')
|
|
|
+ ];
|
|
|
+ M('activity_vote')->add($insert_data);
|
|
|
+
|
|
|
+ $this->responseSuccess(['num'=>$remain_chance],'投票成功,去参与抽奖吧');
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取剩余投票次数
|
|
|
+ */
|
|
|
+ public function _getVoteChance()
|
|
|
+ {
|
|
|
+ if($this->vip_level >= 1){
|
|
|
+ $vote = 10;
|
|
|
+ }else{
|
|
|
+ $vote = 5;
|
|
|
+ }
|
|
|
+
|
|
|
+ $add = 0;
|
|
|
+ $where = [
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'created_at'=>['gt','2020-01-15'],
|
|
|
+ 'product_id'=>'365',
|
|
|
+ 'pay_result'=>0
|
|
|
+ ];
|
|
|
+ $is_year_vip = M('iptv_order')->where($where)->find();
|
|
|
+
|
|
|
+ if($is_year_vip){
|
|
|
+ $num = M('activity_vip_vote')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->getField('num');
|
|
|
+
|
|
|
+ if($num === null){
|
|
|
+ $insert = [
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'num'=>0,
|
|
|
+ 'created_at'=>date('Y-m-d H:i:s')
|
|
|
+ ];
|
|
|
+ M('activity_vip_vote')->add($insert);
|
|
|
+ }
|
|
|
+ $add = 200 - $num;
|
|
|
+ }
|
|
|
+
|
|
|
+ $vote += $add;
|
|
|
+
|
|
|
+ //查看当前已投票次数
|
|
|
+ $alreay_num = M('activity_vote')->where(['date'=>date('Ymd'),'uid'=>$this->uid,'act_id'=>$this->act_id])->sum('num');
|
|
|
+
|
|
|
+ //查看当前应有票数
|
|
|
+ if($vote <= $alreay_num){
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $vote > $alreay_num ? $vote - $alreay_num : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取剩余投票次数
|
|
|
+ */
|
|
|
+ public function getVoteChance()
|
|
|
+ {
|
|
|
+ $data['num'] = $this->_getVoteChance();
|
|
|
+ $this->responseSuccess($data,'投票剩余次数');
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交用户资料
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function setUserInfoByphone()
|
|
|
+ {
|
|
|
+ $phone = trim(I('phone'));
|
|
|
+ $address = trim(I('address'));
|
|
|
+ $receiver = trim(I('receiver'));
|
|
|
+ if (!($phone && $address && $receiver)) {
|
|
|
+ $this->responseError('参数错误!');
|
|
|
+ }
|
|
|
+ //检测手机号码是否正确
|
|
|
+ if (!preg_match('/^1[345789]\d{9}$/ims', $phone)) {
|
|
|
+ $this->responseError('手机号填写有误!');
|
|
|
+ }
|
|
|
+ //更新用户活动手机号码
|
|
|
+ $where = array(
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ );
|
|
|
+ if ($id = M('activity_user_v2')->where($where)->getField('id')){
|
|
|
+ $update['user_phone']= $phone;
|
|
|
+ $update['address'] = $address;
|
|
|
+ $update['receiver'] = $receiver;
|
|
|
+ $update['updated_at'] = date('Y-m-d H:i:s');
|
|
|
+ if(M('activity_user_v2')->where(['id'=>$id])->save($update)===false){
|
|
|
+ Writelog(M()->getLastSql(),'sql','prize');
|
|
|
+ $this->responseError("更新失败!");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $insert_data = array(
|
|
|
+ 'uid'=>$this->uid,
|
|
|
+ 'act_id'=>$this->act_id,
|
|
|
+ 'user_phone'=>$phone,
|
|
|
+ 'address'=>$address,
|
|
|
+ 'receiver'=>$receiver,
|
|
|
+ 'created_at'=>date('Y-m-d H:i:s'),
|
|
|
+ 'updated_at'=>date('Y-m-d H:i:s'),
|
|
|
+ );
|
|
|
+ if(!M('activity_user_v2')->add($insert_data)){
|
|
|
+ Writelog(M()->getLastSql(),'sql','prize');
|
|
|
+ $this->responseError("登记失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->responseSuccess(0, "登记成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 活动规则说明
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function getActivityInfo()
|
|
|
+ {
|
|
|
+// //获取活动规则信息
|
|
|
+ $data['act'] = $this->activityinfo;
|
|
|
+ $data['act']['info'] = explode('######', $this->activityinfo['introduce']);
|
|
|
+ $data['act']['info'][0] = mb_substr(htmlspecialchars_decode($data['act']['info'][0]), 0, -3) ;
|
|
|
+ $data['act']['info'][1] = mb_substr(htmlspecialchars_decode($data['act']['info'][1]), 4);
|
|
|
+ //获取当前活动的手机号码
|
|
|
+ $user_phone = M('activity_user_v2')->where(['act_id'=>$this->act_id,'uid'=>$this->uid])->getField('user_phone');
|
|
|
+ if ($user_phone) {
|
|
|
+ $data['user']['user_phone'] = $user_phone;
|
|
|
+ }
|
|
|
+ //获取奖品信息
|
|
|
+ $prizes_tmp = json_decode($this->activityinfo['prize_list'],TRUE);
|
|
|
+ foreach ($prizes_tmp as $key => $v) {
|
|
|
+ $prizes[$v['prize_id']] = $v;
|
|
|
+ if($v['prize_status'] == 0 || $v['prize_status'] == -1){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $prize_list[] = ['id'=>$v['prize_id'],'prize_name'=>$v['prize_name'],'prize_img'=>$v['prize_img']];
|
|
|
+ }
|
|
|
+ // var_dump($prizes);die;
|
|
|
+ $data['prizes'] = $prize_list;
|
|
|
+ //获取中奖信息
|
|
|
+ $data['rank'] = $this->prizelog('localhost');
|
|
|
+ unset($data['act']['prize_list']);
|
|
|
+ unset($data['act']['prize_rule']);
|
|
|
+ //获取当前用户中奖信息
|
|
|
+ $map['act_id'] = $this->act_id;
|
|
|
+ $map['uid'] = $this->uid;
|
|
|
+ $map['rule_id'] = array("neq", 0);
|
|
|
+ //$data['my_prizes'] = M('prize_log_v2')->field('prize_id,prize_name')->where($map)->select();
|
|
|
+ $my_prizes = M('prize_log_v2')->field('created_at,prize_id')->where($map)->select() ? : array();
|
|
|
+ if($my_prizes){
|
|
|
+ foreach ($my_prizes as $k=>$value) {
|
|
|
+ $my_prizes[$k]['prize_name'] = $prizes[$value['prize_id']]['prize_name'];
|
|
|
+ $data['my_prizes'][] = ['prize_id'=>$value['prize_id'],'prize_name'=>$prizes[$value['prize_id']]['prize_name']];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取用户剩余中奖次数
|
|
|
+ $data['remain_chance'] = $this->_getUserChance();
|
|
|
+ $this->responseSuccess($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户当日抽奖次数
|
|
|
+ * @param [type] $uid [description]
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function _getUserChance()
|
|
|
+ {
|
|
|
+ $map['uid'] = $this->uid;
|
|
|
+ $map['act_id'] = $this->act_id;
|
|
|
+ $map['date'] = date('Ymd');
|
|
|
+ $chance = M('prize_log_v2')->where($map)->count();
|
|
|
+
|
|
|
+ if(($this->activityinfo['is_test'] == 1) && (I('is_test') == 1)){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($chance){
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ //是否参与了投票
|
|
|
+ $bool = M('activity_vote')->where([$map])->find();
|
|
|
+
|
|
|
+ if($bool){
|
|
|
+ return 1;
|
|
|
+ }else{
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户剩余抽奖次数
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ public function getPrizeNum()
|
|
|
+ {
|
|
|
+ $remain_chance = $this->_getUserChance();
|
|
|
+ if($remain_chance == 0){
|
|
|
+ $this->responseSuccess(['num'=>0],'您今天的抽奖次数用完了');
|
|
|
+ }
|
|
|
+ if($remain_chance == 1){
|
|
|
+ $this->responseSuccess(['num'=>1],'您今天的剩余次数');
|
|
|
+ }
|
|
|
+ if($remain_chance == -1){
|
|
|
+ $this->responseSuccess(['num'=>-1],'参与投票,即可抽奖');
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 所有中奖记录查询
|
|
|
+ */
|
|
|
+ public function prizelog($model = ''){
|
|
|
+ $error[] = ['error' => 'error'];
|
|
|
+ $where['pl.act_id'] = $this->act_id;
|
|
|
+ $where['pl.prize_status'] = 1;
|
|
|
+ $data = M('prize_log_v2')->alias('pl')
|
|
|
+ ->join(array('left join '.C("DB_PREFIX").'activity_user_v2 as iu on iu.uid = pl.uid and iu.act_id = '.$this->act_id))
|
|
|
+ ->where($where)
|
|
|
+ ->order('pl.id desc')
|
|
|
+ ->field('pl.prize_id,pl.created_at,pl.uid,iu.user_phone')
|
|
|
+ ->select();
|
|
|
+ $prizes = json_decode($this->activityinfo['prize_list'],TRUE);
|
|
|
+ foreach ($prizes as $value) {
|
|
|
+ $prize_list[$value['prize_id']] = $value;
|
|
|
+ }
|
|
|
+ if($data){
|
|
|
+ foreach ($data as $key=>$value) {
|
|
|
+ $data[$key]['prize_name'] = $prize_list[$value['prize_id']]['prize_name'];
|
|
|
+ $data[$key]['prize_img'] = __MY_URL__.$prize_list[$value['prize_id']]['prize_img'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //增加虚拟中奖信息
|
|
|
+ $default_data = $this->getPrizeDefault();
|
|
|
+
|
|
|
+ if($data || $default_data){
|
|
|
+ if($data){
|
|
|
+ foreach ($data as $k=>$v){
|
|
|
+ if($v['user_phone']){
|
|
|
+ $data[$k]['user_phone'] = substr_replace($v['user_phone'],'****',3,4);
|
|
|
+ }else {
|
|
|
+ $data[$k]['user_phone'] = substr_replace($v['uid'],'****',6);
|
|
|
+ }
|
|
|
+ unset($data[$k]['uid']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if($data && $default_data){
|
|
|
+ $data = array_merge($default_data,$data);
|
|
|
+ }else{
|
|
|
+ $data = $data ? : $default_data;
|
|
|
+ }
|
|
|
+ array_multisort(array_column($data,'created_at'),SORT_DESC,$data);
|
|
|
+ if($model == 'localhost'){
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+ $this->responseSuccess($data, '查询成功!');
|
|
|
+ }else{
|
|
|
+ if($model == 'localhost'){
|
|
|
+ return array();
|
|
|
+ }
|
|
|
+ $this->responseError('没有抽奖记录!', -3, $error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 我的中奖记录查询
|
|
|
+ */
|
|
|
+ public function userPrizelog(){
|
|
|
+ $error[] = ['error' => 'error'];
|
|
|
+ //获取用户
|
|
|
+ if($user_phone = M('activity_user_v2')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->getField('user_phone')){
|
|
|
+ $phone_staus = 1;//填过
|
|
|
+ }else{
|
|
|
+ $phone_staus = 2;//填过
|
|
|
+ }
|
|
|
+ $where = array();
|
|
|
+ $where['pl.prize_status'] = 1;
|
|
|
+ $where['pl.uid'] = $this->uid;
|
|
|
+ $where['pl.act_id'] = $this->act_id;
|
|
|
+ $data = M('prize_log_v2')->alias('pl')
|
|
|
+ ->where($where)
|
|
|
+ ->order('pl.id desc')
|
|
|
+ ->field('pl.prize_id,pl.created_at')
|
|
|
+ ->select();
|
|
|
+// echo M()->getLastSql();die;
|
|
|
+ $prizes = json_decode($this->activityinfo['prize_list'],TRUE);
|
|
|
+ foreach ($prizes as $value) {
|
|
|
+ $prize_list[$value['prize_id']] = $value;
|
|
|
+ }
|
|
|
+
|
|
|
+ $flag = $data ? 1 : 0;
|
|
|
+ if($flag){
|
|
|
+ if($data){
|
|
|
+ foreach ($data as $k => $v){
|
|
|
+ $data[$k]['prize_name'] = $prize_list[$v['prize_id']]['prize_name'];
|
|
|
+ $data[$k]['prize_object'] = 'real';
|
|
|
+ $data[$k]['show_image'] = $prize_list[$v['prize_id']]['prize_img'] ? __MY_URL__.$prize_list[$v['prize_id']]['prize_img']:null;
|
|
|
+ unset($data[$k]['prize_id']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $return_data = array(
|
|
|
+ 'my_prizes'=>$data,
|
|
|
+ 'user_phone'=>['phone_status'=>$phone_staus,'user_phone'=>$user_phone ? :''],
|
|
|
+ 'prize_status'=>$data ? 'real' : 'vitual'
|
|
|
+ );
|
|
|
+ $this->responseSuccess($return_data, '查询成功!');
|
|
|
+ }else{
|
|
|
+ $this->responseError('没有抽奖记录!', -3, $error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 抽奖
|
|
|
+ */
|
|
|
+ public function prize(){
|
|
|
+ $error[] = ['error' => 'error'];
|
|
|
+
|
|
|
+ $chance = $this->_getUserChance();
|
|
|
+
|
|
|
+
|
|
|
+ if($chance == 0){
|
|
|
+ $this->responseError('您今天的抽奖次数用完了');
|
|
|
+ }
|
|
|
+ if($chance == -1){
|
|
|
+ $this->responseSuccess('参与投票,即可抽奖');
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始抽奖
|
|
|
+ $prize_data = $this->_get_prize();
|
|
|
+ unset($prize_data['yes']['rule_id']);
|
|
|
+ $this->responseSuccess($prize_data, '抽奖成功!');
|
|
|
+ }
|
|
|
+
|
|
|
+ private function _get_prize() {
|
|
|
+ $result = $this->getPrizeSetDeatil();
|
|
|
+// var_dump($result);die;
|
|
|
+ $this->_writePrizeLog($result);
|
|
|
+ $res = array();
|
|
|
+ $res['yes']['prize_name'] = $result['prize_name']; //中奖项
|
|
|
+ $res['yes']['prize_status'] = $result['prize_object'] ? : 'none';
|
|
|
+ $res['yes']['prize_img'] = $result['prize_img'] ? __MY_URL__.$result['prize_img'] : '';
|
|
|
+ $res['yes']['rule_id'] = $result['rule_id'];
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param desc 写入抽奖日志
|
|
|
+ * @param type $result
|
|
|
+ */
|
|
|
+ private function _writePrizeLog(&$result) {
|
|
|
+ $log_data['uid'] = $this->uid;
|
|
|
+ $log_data['prize_id'] = $result['prize_id'];
|
|
|
+ $log_data['is_vip'] = $this->vip_level;
|
|
|
+ $log_data['act_id'] = $this->act_id;
|
|
|
+ $log_data['created_at'] = date('Y-m-d H:i:s');
|
|
|
+ $log_data['date'] = date('Ymd');
|
|
|
+ $log_data['rule_id'] = $result['rule_id'];
|
|
|
+ $log_data['prize_status'] = $result['prize_status'];
|
|
|
+ if(!M('prize_log_v2')->add($log_data)){
|
|
|
+ Writelog(M()->getLastSql(),'sql','activity');
|
|
|
+ $this->responseError('系统繁忙抽奖失败', -1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回中奖的信息
|
|
|
+ */
|
|
|
+ private function getPrizeSetDeatil()
|
|
|
+ {
|
|
|
+ $prize_list = json_decode($this->activityinfo['prize_list'],TRUE);//获取奖项设置
|
|
|
+ if($prize_list){
|
|
|
+ foreach ($prize_list as $row) {
|
|
|
+ $limit_sales[$row['prize_id']] = $row;
|
|
|
+ if($row['prize_level']== 0){
|
|
|
+ $impossible_prize = ['prize_id'=>$row['prize_id'],'prize_name'=>$row['prize_name'],'rule_id'=>0,'prize_img'=>'','prize_status'=>0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取所有规则
|
|
|
+ $rules = json_decode($this->activityinfo['prize_rule'],TRUE);
|
|
|
+ if(!$rules){
|
|
|
+ return $impossible_prize;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(I('run')!='complate'){
|
|
|
+ return $impossible_prize;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果中了一次实物奖就不允许中第二次
|
|
|
+ $map = array(
|
|
|
+ 'act_id'=> $this->act_id,
|
|
|
+ 'uid'=> $this->uid,
|
|
|
+ 'prize_status'=>1,
|
|
|
+ );
|
|
|
+ if(M('Prize_log_v2')->where($map)->find()){
|
|
|
+ return $impossible_prize;
|
|
|
+ }
|
|
|
+
|
|
|
+ $swithc_no = '';
|
|
|
+ foreach ($rules as $value) {
|
|
|
+ if($value['rule_status'] == 0){
|
|
|
+ $swithc_no = $swithc_no. 0;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //1.检查是否符合身份
|
|
|
+ if(FALSE === $this->_checkRuleRole($value['rule_role'])){
|
|
|
+ $swithc_no = $swithc_no. 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //2.检查中奖日期设置
|
|
|
+ if(FALSE === $this->_checkRuleDate($value['rule_date'])){
|
|
|
+ $swithc_no = $swithc_no. 2;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //3.检查时段设置
|
|
|
+ if(FALSE === $this->_checkRuleHour($value['rule_hour'])){
|
|
|
+ $swithc_no = $swithc_no. 3;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //4.概率摇奖
|
|
|
+ if(FALSE === $this->_getRandNum($value['rule_probability'])){
|
|
|
+ $swithc_no = $swithc_no. 4;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //5.查询是否超出当前规则下的出奖数
|
|
|
+ if(FALSE === $this->_checkCurrentRuleSale($value)){
|
|
|
+ $swithc_no = $swithc_no. 5;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //6.查询是否超出奖品总数
|
|
|
+ if(FALSE === $this->_checkGolabRule($value,$limit_sales)){
|
|
|
+ $swithc_no = $swithc_no. 6;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ //8.如果中了一次实物奖就不允许中第二次
|
|
|
+ if('real'== $limit_sales[$value['rule_prize_id']]['prize_object']){
|
|
|
+ if(M('Prize_log_v2')->where(['act_id'=>$this->act_id,'uid'=>$this->uid,'prize_status'=>1])->find()){
|
|
|
+ $swithc_no = $swithc_no. 8;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Writelog('uid: '.$this->uid.'跳出关卡: '.$swithc_no,'switch','activityv2');
|
|
|
+ $prize = $limit_sales[$value['rule_prize_id']];
|
|
|
+ $prize['rule_id'] = $value['rule_id'];
|
|
|
+ $prize['prize_status'] = 1;
|
|
|
+ return $prize;
|
|
|
+ }
|
|
|
+ Writelog('uid: '.$this->uid.'跳出关卡: '.$swithc_no,'switch','activityv2');
|
|
|
+ return $impossible_prize;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取转盘信息
|
|
|
+ */
|
|
|
+ public function prizeData(){
|
|
|
+ $error[] = ['error' => 'error'];
|
|
|
+ $data = array();
|
|
|
+ $data['userp']['prize_num'] = $this->_getUserChance();
|
|
|
+ $data['userp']['user_phone'] = $this->userinfo['user_phone'] ? :$this->userinfo['uid'];
|
|
|
+ //转盘信息
|
|
|
+ $turn_data = json_decode($this->activityinfo['prize_list'],TRUE);
|
|
|
+ if($turn_data){
|
|
|
+ foreach ($turn_data as $k => $v){
|
|
|
+ if($v['prize_status'] == 0){
|
|
|
+ unset($turn_data[$k]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if($v['prize_img']){
|
|
|
+ $turn_data[$k]['prize_img'] = __MY_URL__.$v['prize_img'];
|
|
|
+ }
|
|
|
+ unset($turn_data[$k]['prize_num']);
|
|
|
+ unset($turn_data[$k]['prize_level']);
|
|
|
+ unset($turn_data[$k]['prize_status']);
|
|
|
+ }
|
|
|
+ $data['prize_data'] = $turn_data;
|
|
|
+ }else{
|
|
|
+ $this->responseError('获取失败!', -1, $error);
|
|
|
+ }
|
|
|
+ $this->responseSuccess($data, '查询成功!');
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getPrizeDefault()
|
|
|
+ {
|
|
|
+ $map['pd.act_id'] = $this->act_id;
|
|
|
+ $prizes = json_decode($this->activityinfo['prize_list'],true);
|
|
|
+ foreach ($prizes as $key=>$v){
|
|
|
+ $prize_list[$v['prize_id']] = $v;
|
|
|
+ }
|
|
|
+// var_dump($prize_list);die;
|
|
|
+ $data = M('prize_default_v2')->where(['act_id'=>$this->act_id])->select();
|
|
|
+ if($data){
|
|
|
+ foreach ($data as $value) {
|
|
|
+ $return_data[] = array(
|
|
|
+ 'created_at'=>$value['prize_date'],
|
|
|
+ 'prize_name'=>$prize_list[$value['prize_id']]['prize_name'],
|
|
|
+ 'prize_img'=>$prize_list[$value['prize_id']]['prize_img'] ? __MY_URL__.$prize_list[$value['prize_id']]['prize_img']:'',
|
|
|
+ 'user_phone'=>substr_replace($value['phone'],'****',3,4),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $return_data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc 检查中奖规则关于身份设置
|
|
|
+ */
|
|
|
+ private function _checkRuleRole($rule_role)
|
|
|
+ {
|
|
|
+ $role = $this->vip_level ? '会员' : '普通用户';
|
|
|
+ if(FALSE !== strpos($rule_role, '不限')){
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ if($rule_role != '虚拟用户'){
|
|
|
+ if(in_array($role, explode(',', $rule_role))){
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @desc 检查中奖规则关于日期
|
|
|
+ */
|
|
|
+ private function _checkRuleDate($rule_date)
|
|
|
+ {
|
|
|
+ if(FALSE !== strpos($rule_date,'每日')){
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ //时间段
|
|
|
+ if(strpos($rule_date,'至')){
|
|
|
+ $date = explode('至', $rule_date);
|
|
|
+ if((time()>=strtotime($date[0])) && time()< strtotime($date[1])){
|
|
|
+ return TRUE;
|
|
|
+ }else{
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(date('Y-m-d') == $rule_date){
|
|
|
+ return TRUE;
|
|
|
+ }else{
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc 检查中奖规则关于时间段
|
|
|
+ */
|
|
|
+ private function _checkRuleHour($rule_hour)
|
|
|
+ {
|
|
|
+ $hour = explode('至', $rule_hour);
|
|
|
+ if((date('H:i')>= trim($hour[0])) && (date('H:i')< trim($hour[1]))){
|
|
|
+ return TRUE;
|
|
|
+ }else{
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @desc 概率摇奖
|
|
|
+ * @param type $rule_probability
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ private function _getRandNum($rule_probability)
|
|
|
+ {
|
|
|
+ if($rule_probability == 0){
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ $tmp = explode('/', $rule_probability);
|
|
|
+ $rand_array = range(1, $tmp[1]);
|
|
|
+ shuffle($rand_array);
|
|
|
+ $get_randnum = array_slice($rand_array, 0, $tmp[0]);
|
|
|
+ Writelog('uid: '.$this->uid.'抽签: '.json_encode($get_randnum),'switch','activityv2');
|
|
|
+ if(in_array($tmp[0], $get_randnum)){
|
|
|
+ return TRUE;
|
|
|
+ }else{
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @desc 查询符合当前规则
|
|
|
+ */
|
|
|
+ private function _checkCurrentRuleSale(&$rule)
|
|
|
+ {
|
|
|
+ //查询当前规则下的中奖数,如果为-1则无限制
|
|
|
+ if($rule['rule_num'] == -1){
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ if((FALSE!==strpos($rule['rule_date'],'至')) && ($rule['rule_cycle']=='total')){
|
|
|
+ $rule_date = explode('至', $rule['rule_date']);
|
|
|
+ $where['rule_id'] = $rule['rule_id'];
|
|
|
+ $where['act_id'] = $this->act_id;
|
|
|
+ $where['date'] = ['between',[date('Ymd', strtotime($rule_date[0])),date('Ymd', strtotime($rule_date[1]))]];
|
|
|
+ $countNum = M('Prize_log_v2')->where($where)->count();
|
|
|
+ Writelog('当前1:'.$countNum.'规则:'.$rule['rule_num'],'info','activityv2');
|
|
|
+ return $countNum >= $rule['rule_num'] ? FALSE : TRUE;
|
|
|
+ }else{
|
|
|
+ $where['date'] = date('Ymd');
|
|
|
+ $where['rule_id'] = $rule['rule_id'];
|
|
|
+ $where['act_id'] = $this->act_id;
|
|
|
+ $countNum = M('Prize_log_v2')->where($where)->count();
|
|
|
+ Writelog('当前2:'.$countNum.'规则:'.$rule['rule_num'],'info','activityv2');
|
|
|
+// echo M()->getLastSql();die;
|
|
|
+ return $countNum >= $rule['rule_num'] ? FALSE : TRUE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc 不能超过奖品总数
|
|
|
+ */
|
|
|
+ private function _checkGolabRule(&$rule,&$limit_sales)
|
|
|
+ {
|
|
|
+ if($limit_sales[$rule['rule_prize_id']]['prize_num'] == -1){
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ $countNum = M('Prize_log_v2')->where(['prize_id'=>$rule['rule_prize_id'],'act_id'=>$this->act_id])->count();
|
|
|
+// echo M()->getLastSql();die;
|
|
|
+ Writelog('当前3:'.$countNum.'总量:'.$limit_sales[$rule['rule_prize_id']]['prize_num'],'info','activityv2');
|
|
|
+ return $countNum >= $limit_sales[$rule['rule_prize_id']]['prize_num'] ? FALSE : TRUE;
|
|
|
+ }
|
|
|
+}
|