Example #1
0
 public function update_win_info()
 {
     $id = $this->input['sendno'];
     if (!$id) {
         $this->errorOutput('请刷新后,再试!');
     }
     $user_id = $this->user['user_id'];
     if (!$user_id) {
         $this->errorOutput('请先登陆!');
     }
     $sql = "SELECT id,prize_id,lottery_id FROM " . DB_PREFIX . "win_info WHERE sendno = '{$id}' AND confirm = 0";
     $res = $this->db->query_first($sql);
     $wininfo_id = $res['id'];
     if (!$res || !$res['lottery_id']) {
         $this->errorOutput('网络超时,请刷新后,再试哦!');
     }
     $data = array();
     $sql = "SELECT score_limit,need_score,exchange_switch FROM " . DB_PREFIX . "lottery WHERE id = " . $res['lottery_id'];
     $data = $this->db->query_first($sql);
     if (empty($data)) {
         $this->errorOutput('活动异常,请稍后再试!');
     }
     if ($data['score_limit'] && $data['need_score']) {
         include_once ROOT_PATH . 'lib/class/members.class.php';
         $mem_obj = new members();
         //同步会员积分
         $credit_type = $mem_obj->get_trans_credits_type();
         if (!empty($credit_type)) {
             $res1 = '';
             $ac = 'sub_' . $credit_type['db_field'];
             $res1 = $mem_obj->{$ac}($user_id, $data['need_score'], $data['id'], APP_UNIQUEID, MOD_UNIQUEID, 'update_win_info', '抽奖扣除');
             if (!$res1) {
                 $this->errorOutput('您的积分不够啦,快去赚取积分吧!');
             }
         }
     }
     $address = $this->input['address'];
     $phone_num = $this->input['phone_num'];
     $ip = hg_getip();
     $up_data = array('device_token' => $this->input['device_token'], 'member_name' => $this->user['user_name'], 'member_id' => $user_id, 'confirm' => 1, 'status' => 1, 'ip' => $ip);
     if ($res['prize_id']) {
         $sql = "SELECT id,type,prize,seller_id,name FROM " . DB_PREFIX . "prize WHERE id = {$res['prize_id']}";
         $prize_res = $this->db->query_first($sql);
         if (!$prize_res['id']) {
             $this->errorOutput('请刷新后,再试~');
         }
         //锁止开关
         if (!$this->settings['lock_stock']) {
             $sql = "UPDATE " . DB_PREFIX . "prize SET prize_win = prize_win + 1 WHERE id = " . $res['prize_id'] . " AND prize_win < prize_num";
             $this->db->query($sql);
             //更新失败提示报错
             if (!$this->db->affected_rows()) {
                 $this->errorOutput('请刷新后,再试~');
             }
         }
         //兑换码
         $up_data['exchange_code'] = generateExchangeCode();
         if ($this->settings['App_qrcode']) {
             include_once ROOT_PATH . 'lib/class/qrcode.class.php';
             $qrcode_server = new qrcode();
             $exchange_url = $this->settings['exchange_url'] . '?send_no=' . $id;
             $data_qrcode = array('content' => $exchange_url);
             $qrcode = $qrcode_server->create($data_qrcode, -1);
             $up_data['exchange_qrcode'] = is_array($qrcode) ? hg_fetchimgurl($qrcode) : '';
         }
         $sync_fail_tag = false;
         if ($prize_res['type'] == 1) {
             $up_data['prize_type'] = 1;
             include_once ROOT_PATH . 'lib/class/members.class.php';
             $mem_obj = new members();
             //同步会员积分
             $credit_type = $mem_obj->get_trans_credits_type();
             if (!$credit_type['db_field']) {
                 $ac = 'add_' . $credit_type['db_field'];
                 $res1 = $mem_obj->{$ac}($user_id, intval($prize_res['prize']), $res['lottery_id'], APP_UNIQUEID, MOD_UNIQUEID, 'update_win_info', '抽奖加积分');
                 if (!$res1) {
                     $sync_fail_tag = true;
                 } else {
                     $up_data['provide_status'] = 1;
                 }
             } else {
                 $sync_fail_tag = true;
             }
         } else {
             if ($prize_res['type'] == 0) {
                 $up_data['prize_type'] = 2;
             }
         }
         if ($prize_res['seller_id']) {
             $up_data['seller_id'] = $prize_res['seller_id'];
         }
         //冗余奖品名称
         if ($prize_res['prize']) {
             $up_data['prize_name'] = $prize_res['prize'];
         } elseif ($prize_res['name']) {
             $up_data['prize_name'] = $prize_res['name'];
         }
     }
     if ($address) {
         $up_data['address'] = $address;
     }
     if ($phone_num) {
         $up_data['phone_num'] = $phone_num;
     }
     $sql = "UPDATE " . DB_PREFIX . "win_info SET ";
     foreach ($up_data as $k => $v) {
         $sql .= " {$k} = '{$v}',";
     }
     $sql = trim($sql, ',');
     $sql .= " WHERE sendno = '" . $id . "'";
     $this->db->query($sql);
     $affect = $this->db->affected_rows();
     if (!$affect) {
         $this->errorOutput('网络超时,请稍后再试~');
     }
     //锁止开关
     if ($this->settings['lock_stock']) {
         //删除库存锁止记录
         $sql = "DELETE FROM " . DB_PREFIX . "stock_lock WHERE send_no = '" . $id . "'";
         $this->db->query($sql);
     }
     //如果奖品是积分,同步会员积分
     if ($prize_res['type'] == 1 && intval($prize_res['prize']) && $sync_fail_tag) {
         //同步失败,记录失败记录
         $sync_fail = array('user_id' => $user_id, 'credits' => $prize_res['prize'], 'lottery_id' => $res['lottery_id'], 'wininfo_id' => $wininfo_id, 'create_time' => TIMENOW, 'update_time' => TIMENOW);
         $sql = " INSERT INTO " . DB_PREFIX . "sync_fail SET ";
         foreach ($sync_fail as $k => $v) {
             $sql .= " {$k} = '{$v}',";
         }
         $sql = trim($sql, ',');
         $this->db->query($sql);
         $this->errorOutput('网络繁忙,积分暂未同步,请稍后到会员中心查看!');
     }
     if ($this->input['tv_interact']) {
         return true;
     } else {
         $this->addItem('success');
         $this->output();
     }
 }
Example #2
0
 public function show()
 {
     $link_jump = intval($this->input['link_jump']);
     $user_id = intval($this->user['user_id']);
     if (!$user_id && !$link_jump) {
         $this->errorOutput('登录才能参加活动哦!');
     }
     $week_now = date('w', TIMENOW);
     $hour_now = date('His', TIMENOW);
     if ($week_now === '0') {
         $week_now = 7;
     }
     if ($this->input['sort_id']) {
         $con = ' AND sort_id = ' . $this->input['sort_id'];
     }
     //获取链接
     if ($link_jump) {
         $con .= ' AND link_switch = 1';
         $filed = 'link_switch,link_address,week_day,start_hour,end_hour,name,start_time,brief';
     } else {
         $filed = '*';
     }
     $orderby = ' ORDER BY start_time  DESC,order_id DESC';
     //查找最近的正在进行的活动
     $sql = "SELECT " . $filed . " FROM " . DB_PREFIX . "tv_interact WHERE status = 1 AND start_time <=" . TIMENOW . " AND (end_time+delay_time) > " . TIMENOW . $con . $orderby;
     $q = $this->db->query($sql);
     while ($r = $this->db->fetch_array($q)) {
         //$info[] = $r;
         if ($r['start_hour'] && $r['end_hour'] && ($hour_now > $r['end_hour'] || $hour_now < $r['start_hour'])) {
             continue;
         }
         if ($r['week_day']) {
             $r['week_day'] = explode(',', $r['week_day']);
             if (!empty($r['week_day']) && !in_array($week_now, $r['week_day'])) {
                 continue;
             }
         }
         $data = $r;
         break;
     }
     //hg_pre($info);
     //hg_pre($data,0);
     if ($link_jump) {
         $data_link['link_address'] = $data['link_address'] ? $data['link_address'] : '';
         $data_link['tip'] = $data['brief'] ? $data['brief'] : '';
         $data_link['link_switch'] = $data['link_switch'] ? $data['link_switch'] : '';
         $this->addItem($data_link);
         $this->output();
     }
     //开始的活动
     $start_flag = true;
     //没有在进行的活动,查询即将要开始的最近的活动
     if (!$data) {
         $orderby = ' ORDER BY start_time  ASC LIMIT 0,1';
         $sql = "SELECT * FROM " . DB_PREFIX . "tv_interact WHERE status = 1 AND start_time > " . TIMENOW . " AND (end_time+delay_time) > " . TIMENOW . $con . $orderby;
         $data = $this->db->query_first($sql);
         //未开始的活动
         $start_flag = false;
     }
     //hg_pre($res);
     if (!$data) {
         $data = array();
     } else {
         //正在进行的活动,验证参加活动限制
         if ($start_flag && $data['id']) {
             //限制用户参加活动次数
             if ($data['is_user_limit'] && $data['user_limit_num']) {
                 //查询用户参加此活动次数
                 $sql = "SELECT count(*) as total FROM " . DB_PREFIX . "win_info WHERE member_id = " . $user_id . " AND tv_interact_id = " . $data['id'];
                 $res = $this->db->query_first($sql);
                 //达到活动限制次数
                 if ($res['total'] >= $data['user_limit_num']) {
                     $this->errorOutput('您已达到活动参加最大次数!');
                 }
             }
             //有积分限制
             if ($data['score_limit']) {
                 $error_mes = '活动积分已经送完,下一时段活动再来吧!';
                 if ($data['score_min'] <= 0) {
                     if ($data['current_score'] >= $data['score_limit']) {
                         $this->errorOutput($error_mes);
                     }
                 } else {
                     if ($data['current_score'] > $data['score_limit'] - $data['score_min']) {
                         $this->errorOutput($error_mes);
                     }
                 }
             }
             //固定分值
             if ($data['score_min'] == $data['score_max']) {
                 $data['score'] = $data['score_min'];
             } else {
                 $score = mt_rand($data['score_min'], $data['score_max']);
                 if ($data['score_limit']) {
                     $last_score = $data['score_limit'] - $data['current_score'];
                     if ($last_score <= 0) {
                         $this->errorOutput('活动积分已经送完,下一时段活动再来吧!');
                     }
                     if ($data['score_min'] > 0) {
                         //如果随即分值大于  限定分值,返回最小值
                         if ($last_score < $data['score_min']) {
                             $this->errorOutput('活动积分已经送完,下一时段活动再来吧!');
                         }
                     }
                 }
                 $data['score'] = $score;
             }
             if ($data['score'] > 0) {
                 $sql = "UPDATE " . DB_PREFIX . "tv_interact SET ";
                 $sql .= "current_score = current_score + " . $data['score'];
                 $sql .= " WHERE id = " . $data['id'];
                 $this->db->query($sql);
             }
             //记录获奖记录
             $score_data = array('tv_interact_id' => $data['id'], 'member_id' => $user_id, 'red_bag' => $data['score'], 'create_time' => TIMENOW);
             $sql = " INSERT INTO " . DB_PREFIX . "win_info SET ";
             foreach ($score_data as $k => $v) {
                 $sql .= " {$k} = '{$v}',";
             }
             $sql = trim($sql, ',');
             $this->db->query($sql);
             //同步会员积分
             include_once ROOT_PATH . 'lib/class/members.class.php';
             $obj = new members();
             $credit_type = $obj->get_trans_credits_type();
             if (!empty($credit_type) && $data['score'] > 0) {
                 $ac = 'add_' . $credit_type['db_field'];
                 $res = $obj->{$ac}($user_id, $data['score'], $data['id'], APP_UNIQUEID, MOD_UNIQUEID, 'show', '电视互动奖励');
             }
         }
         if (!$data['score']) {
             $data['score'] = 0;
         }
         //开始的活动和未开始的活动都要更新感应人数
         $sql = "UPDATE " . DB_PREFIX . "tv_interact SET sense_num = sense_num + 1";
         if ($data['score'] > 0) {
             //$sql .= ",current_score = current_score + ". $data['score'];
         }
         $sql .= " WHERE id = " . $data['id'];
         $this->db->query($sql);
         if ($data['score'] < 0) {
             $sub_score = intval($data['score']);
             //同步会员积分
             if (!empty($credit_type)) {
                 $ac = 'sub_' . $credit_type['db_field'];
                 $res1 = $obj->{$ac}($user_id, $sub_score, $data['id'], APP_UNIQUEID, MOD_UNIQUEID, 'show', '电视互动扣除');
             }
         }
         //查询活动中奖记录
         if ($this->settings['need_win_info']) {
             $sql = "SELECT * FROM " . DB_PREFIX . "win_info WHERE tv_interact_id = " . $data['id'] . " AND red_bag > 0 ORDER BY create_time DESC LIMIT 0,4";
             $q = $this->db->query($sql);
             $info = array();
             $member_id = array();
             while ($r = $this->db->fetch_array($q)) {
                 $r['create_time'] = hg_tran_time_tv($r['create_time']);
                 if ($r['red_bag']) {
                     $r['red_bag'] = $r['red_bag'] . TV_SCORE_TYPE;
                 }
                 $info[] = $r;
                 $member_id[] = $r['member_id'];
             }
             if (!empty($member_id)) {
                 $member_id = implode(',', $member_id);
                 $member_info = array();
                 $member_info_tmp = array();
                 $member_info_tmp = $obj->get_member_info($member_id);
                 if (!empty($member_info_tmp)) {
                     foreach ($member_info_tmp as $val) {
                         $member_info[$val['member_id']]['avatar'] = $val['avatar'];
                         $member_info[$val['member_id']]['member_name'] = $val['member_name'];
                         $member_info[$val['member_id']]['phone_num'] = $val['mobile'];
                     }
                 }
             }
             if (!empty($info)) {
                 $win_info = array();
                 foreach ($info as $val) {
                     foreach ($val as $k => $v) {
                         if ($k == 'member_id' && $member_info[$v]) {
                             $val['member_name'] = $member_info[$v]['member_name'];
                             $val['phone_num'] = $member_info[$v]['phone_num'];
                             $val['avatar'] = $member_info[$v]['avatar'];
                         }
                     }
                     $win_info[] = $val;
                 }
                 $data['win_info'] = $win_info;
             }
         } else {
             $data['win_info'] = array();
         }
         //感应数+1
         $data['sense_num'] += 1;
         //标识活动开始还是未开始
         $data['start_flag'] = $start_flag;
         if ($data['indexpic']) {
             $data['indexpic'] = unserialize($data['indexpic']);
         }
         if ($data['un_start_icon']) {
             $data['un_start_icon'] = unserialize($data['un_start_icon']);
         }
         if ($data['sense_icon']) {
             $data['sense_icon'] = unserialize($data['sense_icon']);
         }
         if ($data['un_win_icon']) {
             $data['un_win_icon'] = unserialize($data['un_win_icon']);
         }
         if ($data['points_icon']) {
             $data['points_icon'] = unserialize($data['points_icon']);
         }
         if (!$data['brief']) {
             $data['brief'] = '当电视或者广播出现提示时,马上摇动您的手机获取积分换奖品吧!';
         }
         if (!$data['un_start_tip']) {
             $data['un_start_tip'] = '当前游戏未开始';
         }
         if (!$data['un_start_desc']) {
             $data['un_start_desc'] = '请在节目播发时按提示摇一摇';
         }
         if (!$data['sense_tip']) {
             $data['sense_tip'] = '恭喜你!';
         }
         if (!$data['sense_desc']) {
             $data['sense_desc'] = '摇到了';
         }
         $data['scores'] = $data['score'];
         $data['score_type'] = TV_SCORE_TYPE;
         //在获得奖励加上奖励类型
         $data['score'] = $data['score'] . TV_SCORE_TYPE;
         if ($data['scores'] == 0) {
             $data['sense_tip'] = $data['un_win_tip'] ? $data['un_win_tip'] : '很遗憾!';
             $data['sense_desc'] = $data['un_win_desc'] ? $data['un_win_desc'] : '下次再来吧!';
             $data['sense_icon'] = $data['un_win_icon'] ? $data['un_win_icon'] : '';
         } elseif ($data['scores'] < 0) {
             $data['sense_tip'] = $data['points_tip'] ? $data['points_tip'] : '您被扣了' . $data['score'];
             $data['sense_desc'] = $data['points_desc'] ? $data['points_desc'] : '您被扣了' . $data['score'];
             $data['sense_icon'] = $data['points_icon'] ? $data['points_icon'] : '';
         }
     }
     $this->addItem($data);
     $this->output();
 }
Example #3
0
 public function run()
 {
     if ($this->settings['sync_switch'] || !$this->settings['App_members']) {
         return false;
     }
     //查询中奖信息中失败记录
     /*$sql = "SELECT member_id,prize_name,lottery_id FROM " . DB_PREFIX . "win_info WHERE lottery_id = 10 AND prize_type=1 AND prize_name!=''";
     		$q = $this->db->query($sql);
     		
     		while ($r = $this->db->fetch_array($q))
     		{
     			//同步失败,记录失败记录
     			$sync_fail = array(
     				'user_id'		=> $r['member_id'],
     				'credits'		=> $r['prize_name'],
     				'lottery_id'	=> $r['lottery_id'],
     				'create_time'	=> TIMENOW,
     				'update_time'	=> TIMENOW,
     			);
     			
     			$sql = '';
     			$sql = " INSERT INTO " . DB_PREFIX . "sync_fail SET ";
     			foreach ($sync_fail AS $k => $v)
     			{
     				$sql .= " {$k} = '{$v}',";
     			}
     			$sql = trim($sql,',');
     			
     			$this->db->query($sql);
     		}
     		exit();*/
     $res = array();
     $sql = "SELECT * FROM " . DB_PREFIX . "sync_fail WHERE status = 0 ORDER BY update_time ASC LIMIT 0,1";
     $res = $this->db->query_first($sql);
     if (empty($res) || !$res['credits'] || !$res['user_id']) {
         return false;
     }
     include_once ROOT_PATH . 'lib/class/members.class.php';
     $mem_obj = new members();
     //同步会员积分
     $credit_type = $mem_obj->get_trans_credits_type();
     $res1 = '';
     if ($credit_type['db_field']) {
         $ac = 'add_' . $credit_type['db_field'];
         $res1 = $mem_obj->{$ac}($res['user_id'], $res['credits'], $res['lottery_id'], APP_UNIQUEID, MOD_UNIQUEID, 'update_win_info', '抽奖加积分');
     }
     $up_data = array('update_time' => TIMENOW);
     if ($res1) {
         $up_data['status'] = 1;
         //状态置为已发放
         if ($res['wininfo_id']) {
             $sql = "UPDATE " . DB_PREFIX . "win_info SET provide_status = 1 WHERE id = {$res['wininfo_id']}";
             $this->db->query($sql);
         }
     }
     $sql = "UPDATE " . DB_PREFIX . "sync_fail SET ";
     foreach ($up_data as $k => $v) {
         $sql .= " {$k} = '{$v}',";
     }
     $sql = trim($sql, ',');
     $sql .= " WHERE id = '" . $res['id'] . "'";
     $this->db->query($sql);
 }