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(); } }
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(); }
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); }