get_prefix(); $task = pdo_fetch('select * from ' . tablename('ewei_shop_seckill_task') . ' where id=:id limit 1', array(':id' => $id)); redis()->delete($redis_prefix . 'info_' . $id); redis()->hMset($redis_prefix . 'info_' . $id, $task); $allrooms = pdo_fetchall('select * from ' . tablename('ewei_shop_seckill_task_room') . ' where taskid=:taskid and enabled=1 and uniacid=:uniacid order by `displayorder` desc', array(':taskid' => $id, ':uniacid' => $_W['uniacid'])); redis()->delete($redis_prefix . 'rooms_' . $id); foreach ($allrooms as $room) { redis()->rPush($redis_prefix . 'rooms_' . $id, json_encode($room)); } redis()->delete($redis_prefix . 'times_' . $id); $alltimes = pdo_fetchall('select * from ' . tablename('ewei_shop_seckill_task_time') . ' where taskid=:taskid and uniacid=:uniacid order by `time` asc', array(':taskid' => $id, ':uniacid' => $_W['uniacid'])); $redisgoods = array(); foreach ($alltimes as &$time) { $goods = pdo_fetchall('select * from ' . tablename('ewei_shop_seckill_task_goods') . ' where taskid=:taskid and timeid=:timeid and uniacid=:uniacid order by displayorder asc', array(':taskid' => $id, ':timeid' => $time['id'], ':uniacid' => $_W['uniacid'])); if (!empty($goods)) { if (!isset($redisgoods[$time['time']]) || !is_array($redisgoods[$time['time']])) { $redisgoods['time-' . $time['time']] = array(); } redis()->rPush($redis_prefix . 'times_' . $id, json_encode($time)); $redisgoods['time-' . $time['time']] = json_encode($goods); } } redis()->delete($redis_prefix . 'goods_' . $id); if (!empty($redisgoods)) { redis()->hMset($redis_prefix . 'goods_' . $id, $redisgoods); } } public function usedDate($taskid) { if (is_error(redis())) { return false; } global $_W; $redis_prefix = $this->get_prefix(); $calendar = redis()->hGetAll($redis_prefix . 'calendar'); if (!is_array($calendar) || empty($calendar)) { return false; } foreach ($calendar as $k => $v) { if (!empty($v) && is_array($v)) { if ($v['taskid'] == $taskid) { return $k; } } } return false; } public function getTodaySeckill() { if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); global $_W; $year = date('Y'); $month = date('m'); return redis()->hGet($redis_prefix . 'calendar_' . $year . '_' . $month, date('Y-m-d')); } public function getTodaySeckillInfo() { if (is_error(redis())) { return false; } global $_W; $taskid = $this->getTodaySeckill(); if (!empty($taskid)) { return $this->getTaskInfo($taskid); } return false; } public function getRooms($taskid) { global $_W; global $_GPC; $redis = redis(); if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); $allrooms = array(); $rooms = $redis->lGetRange($redis_prefix . 'rooms_' . $taskid, 0, -1); foreach ($rooms as $room) { $room = json_decode($room, true); if (is_array($room)) { $allrooms[] = $room; } } return $allrooms; } public function getMainRoom($taskid) { if (is_error(redis())) { return false; } global $_W; global $_GPC; $redis = redis(); $rooms = $this->getRooms($taskid); if (empty($rooms)) { return false; } return $rooms[0]; } public function getRoomInfo($taskid, $roomid) { global $_W; if (is_error(redis())) { return false; } $rooms = $this->getRooms($taskid); foreach ($rooms as $room) { if ($room['id'] == $roomid) { return $room; } } return false; } public function getTaskInfo($taskid) { global $_W; global $_GPC; if (is_error(redis())) { return false; } $redis = redis(); $redis_prefix = $this->get_prefix(); $info = $redis->hGetAll($redis_prefix . 'info_' . $taskid); if (empty($info)) { return false; } return $info; } public function getTaskTimes($taskid) { global $_W; global $_GPC; $redis = redis(); if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); $times = $redis->lGetRange($redis_prefix . 'times_' . $taskid, 0, -1); $alltimes = array(); if (empty($times)) { return false; } foreach ($times as $time) { $time = json_decode($time, true); if (is_array($time)) { $alltimes[] = $time; } } return $alltimes; } public function getTaskGoods($taskid) { global $_W; global $_GPC; $redis = redis(); if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); $info = $redis->hGetAll($redis_prefix . 'goods_' . $taskid); if (empty($info)) { return false; } return $info; } public function deleteTodaySeckill() { global $_W; if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); $year = date('Y'); $month = date('m'); $date = date('Y-m-d'); redis()->hDel($redis_prefix . 'calendar_' . $year . '_' . $month, $date); } public function getSeckillCount($taskid, $timeid, $goodsid, $optionid = 0, $openid = '') { global $_W; global $_GPC; if (is_error(redis())) { return false; } $redis = redis(); $date = date('Y-m-d'); $redis_prefix = $this->get_prefix(); $keys = $redis->keys($redis_prefix . 'queue_' . $date . '_' . $taskid . '_' . $timeid . '_' . $goodsid . '_*'); if (empty($keys)) { return array('count' => 0, 'notpay' => 0, 'selfcount' => 0, 'selfnotpay' => 0, 'selftotalcount' => 0, 'selftotalnotpay' => 0); } $count = 0; $notpay = 0; $selfcount = 0; $selftotalcount = 0; $selfnotpay = 0; $selftotalnotpay = 0; foreach ($keys as $key) { $arr = explode('_', $key); $key_optionid = $arr[11]; $queue = $redis->lGetRange($key, 0, -1); foreach ($queue as $data) { $data = @json_decode($data, true); if (!is_array($data)) { continue; } ++$count; if ($data['status'] <= 0) { ++$notpay; } if (!empty($openid) && $data['openid'] == $openid) { if ($key_optionid == $optionid) { ++$selfcount; } ++$selftotalcount; } if ($data['status'] <= 0 && !empty($openid) && $data['openid'] == $openid) { if ($key_optionid === $optionid) { ++$selfnotpay; } ++$selftotalnotpay; } } } return array('count' => $count, 'notpay' => $notpay, 'selfcount' => $selfcount, 'selfnotpay' => $selfnotpay, 'selftotalcount' => $selftotalcount, 'selftotalnotpay' => $selftotalnotpay); } public function getSeckillGoods($taskid, $time, $goodsid) { global $_W; global $_GPC; if (is_error(redis())) { return false; } $redis_prefix = $this->get_prefix(); $timegoods = array(); $goods = redis()->hGetAll($redis_prefix . 'goods_' . $taskid); if (empty($goods)) { return false; } $goods = @json_decode($goods['time-' . $time], true); if (!is_array($goods)) { return false; } foreach ($goods as $g) { if (!is_array($g)) { return false; } if ($g['goodsid'] == $goodsid || $goodsid == 'all') { $timegoods[] = $g; } } return $timegoods; } public function setSeckill($seckillinfo, $goods, $openid, $orderid, $status, $createtime) { global $_W; global $_GPC; if (is_error(redis())) { return false; } $taskid = $seckillinfo['taskid']; $timeid = $seckillinfo['timeid']; $goodsid = $goods['goodsid']; $optionid = intval($goods['optionid']); $date = date('Y-m-d'); $redis_prefix = $this->get_prefix(); $key = $redis_prefix . 'queue_' . $date . '_' . $taskid . '_' . $timeid . '_' . $goodsid . '_' . $optionid; $redis = redis(); if ($redis->ttl($key) == -1) { $redis->expireAt($key, $seckillinfo['endtime'] + 1); } $index = -1; $queue = $redis->lGetRange($key, 0, -1); foreach ($queue as $dindex => $data) { $data = @json_decode($data, true); if (!is_array($data)) { continue; } if ($data['orderid'] == $orderid && $data['openid'] == $openid) { $index = $dindex; break; } } $data = array('orderid' => $orderid, 'openid' => $openid, 'status' => $status, 'createtime' => $createtime); if ($index == -1) { $i = 1; while ($i <= $goods['total']) { $push = $redis->lPush($key, json_encode($data)); ++$i; } } else { $push = $redis->lSet($key, $index, json_encode($data)); } return $key; } public function deleteSeckill() { global $_W; if (is_error(redis())) { return false; } $currenttime = time(); $redis = redis(); $redis_prefix = $this->get_prefix(); $keys = $redis->keys($redis_prefix . 'queue_*'); $orders = array(); foreach ($keys as $key) { $queue = $redis->lGetRange($key, 0, -1); $tags = explode('_', $key); $taskid = $tags[7]; $task = $this->getTaskInfo($taskid); $closesec = $task['closesec']; if (!empty($queue)) { foreach ($queue as $value) { $data = @json_decode($value, true); if (!is_array($data)) { continue; } if ($data['status'] <= 0 && $closesec <= $currenttime - $data['createtime']) { $redis->lRemove($key, $value, 1); if (!in_array($data['orderid'], $orders)) { $orders[] = $data['orderid']; } } } } if ($redis->lLen($key) <= 0) { $redis->delete($key); } if (!empty($orders)) { $p = com('coupon'); foreach ($orders as $orderid) { $o = pdo_fetch('select id,openid,deductcredit2,ordersn,isparent,deductcredit,deductprice from ' . tablename('ewei_shop_order') . ' where id=:id limit 1', array(':id' => $orderid)); if (!empty($o) && $o['status'] == 0) { if ($o['isparent'] == 0) { if ($p) { if (!empty($o['couponid'])) { $p->returnConsumeCoupon($o['id']); } } m('order')->setStocksAndCredits($o['id'], 2); m('order')->setDeductCredit2($o); if (0 < $o['deductprice']) { m('member')->setCredit($o['openid'], 'credit1', $o['deductcredit'], array('0', $_W['shopset']['shop']['name'] . '秒杀自动关闭订单返还抵扣积分 积分: ' . $o['deductcredit'] . ' 抵扣金额: ' . $o['deductprice'] . ' 订单号: ' . $o['ordersn'])); } } pdo_query('update ' . tablename('ewei_shop_order') . ' set status=-1,canceltime=' . time() . ' where id=' . $o['id']); } } } } return true; } public function getSeckill($goodsid, $optionid = 0, $realprice = true, $openid = '') { global $_W; $redis = redis(); if (is_error($redis)) { return false; } static $deletedSeckill; if (is_null($deletedSeckill)) { $this->deleteSeckill(); $deletedSeckill = true; } $id = $this->getTodaySeckill(); if (empty($id)) { return false; } $times = $this->getTaskTimes($id); $options = array(); $currenttime = time(); $timegoods = array(); $sktime = 0; $timeid = 0; $roomid = 0; $taskid = 0; $goods_starttime = 0; $goods_endtime = 0; foreach ($times as $key => $time) { $starttime = strtotime(date('Y-m-d ' . $time['time'] . ':00:00')); if (isset($times[$key + 1])) { $end = $times[$key + 1]['time'] - 1; $endtime = strtotime(date('Y-m-d ' . $end . ':59:59')); } else { $endtime = strtotime(date('Y-m-d 23:59:59')); } $time['endtime'] = $endtime; $time['starttime'] = $starttime; if ($starttime <= $currenttime && $currenttime <= $endtime) { $timeid = $time['id']; $taskid = $time['taskid']; $goods_starttime = $starttime; $goods_endtime = $endtime; $sktime = $time['time']; $timegoods = $this->getSeckillGoods($id, $time['time'], $goodsid); } else { if ($currenttime < $starttime) { if (empty($timegoods)) { $timeid = $time['id']; $goods_starttime = $starttime; $goods_endtime = $endtime; $taskid = $time['taskid']; $sktime = $time['time']; $timegoods = $this->getSeckillGoods($id, $time['time'], $goodsid); } } } } $total = 0; $count = 0; $selfcount = 0; $selftotalcount = 0; $maxbuy = 0; $notpay = 0; $selfnotpay = 0; $selftotalnotpay = 0; $totalmaxbuy = 0; if (!empty($timegoods)) { $roomid = $timegoods[0]['roomid']; $total = $timegoods[0]['total']; $price = $timegoods[0]['price']; $totalmaxbuy = $timegoods[0]['totalmaxbuy']; if (count($timegoods) <= 1) { $counts = $this->getSeckillCount($id, $timeid, $timegoods[0]['goodsid'], 0, $openid); $count = $counts['count']; $selfcount = $counts['selfcount']; $selftotalcount = $counts['selftotalcount']; $notpay = $counts['notpay']; $selfnotpay = $counts['selfnotpay']; $selftotalnotpay = $counts['selftotalnotpay']; $maxbuy = $timegoods[0]['maxbuy']; $percent = ceil($count / (empty($total) ? 1 : $total) * 100); } else { $total = 0; $price = $timegoods[0]['price']; $option_goods = NULL; if (!empty($optionid)) { foreach ($timegoods as $g) { if ($g['optionid'] == $optionid) { $total = $g['total']; $counts = $this->getSeckillCount($id, $timeid, $g['goodsid'], $optionid, $openid); $count = $counts['count']; $selfcount = $counts['selfcount']; $selftotalcount = $counts['selftotalcount']; $selfnotpay = $counts['selfnotpay']; $selftotalnotpay = $counts['selftotalnotpay']; $notpay = $counts['notpay']; $maxbuy = $g['maxbuy']; $percent = ceil($count / (empty($g['total']) ? 1 : $g['total']) * 100); break; } } } else { foreach ($timegoods as $g) { $total += $g['total']; if ($g['price'] <= $price) { $price = $g['price']; } $options[] = $g; } $counts = $this->getSeckillCount($id, $timeid, $g['goodsid'], 0, $openid); $count = $counts['count']; $selfcount = $counts['selfcount']; $selfnotpay = $counts['selfnotpay']; $notpay = $counts['notpay']; $selftotalcount = $counts['selftotalcount']; $selftotalnotpay = $counts['selftotalnotpay']; $percent = ceil($count / (empty($total) ? 1 : $total) * 100); } } if (!$realprice) { $price = price_format($price); } $tag = ''; $taskinfo = $this->getTaskInfo($taskid); $roominfo = $this->getRoomInfo($taskid, $roomid); if (!empty($taskinfo['tag'])) { $tag = $taskinfo['tag']; } if (!empty($roominfo['tag'])) { $tag = $roominfo['tag']; } $status = false; if ($goods_starttime <= $currenttime && $currenttime <= $goods_endtime) { $status = 0; } else { if ($currenttime < $goods_starttime) { $status = 1; } else { if ($goods_endtime < $currenttime) { $status = -1; } } } return array('taskid' => $taskid, 'roomid' => $roomid, 'timeid' => $timeid, 'total' => $total, 'count' => $count, 'selfcount' => $selfcount, 'selftotalcount' => $selftotalcount, 'notpay' => $notpay, 'selfnotpay' => $selfnotpay, 'selftotalnotpay' => $selftotalnotpay, 'maxbuy' => $maxbuy, 'totalmaxbuy' => $totalmaxbuy, 'tag' => $tag, 'time' => $sktime, 'options' => $options, 'starttime' => $goods_starttime, 'endtime' => $goods_endtime, 'price' => $price, 'percent' => $percent, 'status' => $status); } return false; } public function orderRefund($item) { $shopset = m('common')->getSysset('shop'); $realprice = $item['price']; $refundtype = 0; $refundno = 'SKR' . date('YmdH:i:s') . random(4, true); $goods = pdo_fetchall('SELECT g.id,g.credit, o.total,o.realprice FROM ' . tablename('ewei_shop_order_goods') . ' o left join ' . tablename('ewei_shop_goods') . ' g on o.goodsid=g.id ' . ' WHERE o.orderid=:orderid and o.uniacid=:uniacid', array(':orderid' => $item['id'], ':uniacid' => $item['uniacid'])); if ($item['paytype'] == 1) { m('member')->setCredit($item['openid'], 'credit2', $realprice, array(0, $shopset['name'] . '秒杀退款: ' . $realprice . '元 订单号: ' . $item['ordersn'])); $result = true; } else { if ($item['paytype'] == 21) { $realprice = round($realprice - $item['deductcredit2'], 2); if (0 < $realprice) { if (empty($item['isborrow'])) { $result = m('finance')->refund($item['openid'], $item['ordersn'], $refundno, $realprice * 100, $realprice * 100, !empty($item['apppay']) ? true : false); } else { $result = m('finance')->refundBorrow($item['borrowopenid'], $item['ordersn'], $refundno, $realprice * 100, $realprice * 100, !empty($item['ordersn2']) ? 1 : 0); } } $refundtype = 2; } } $credits = m('order')->getGoodsCredit($goods); if (0 < $credits) { m('member')->setCredit($item['openid'], 'credit1', -$credits, array(0, $shopset['name'] . '退款扣除购物赠送积分: ' . $credits . ' 订单号: ' . $item['ordersn'])); } if (0 < $item['deductcredit']) { m('member')->setCredit($item['openid'], 'credit1', $item['deductcredit'], array('0', $shopset['name'] . '购物返还抵扣积分 积分: ' . $item['deductcredit'] . ' 抵扣金额: ' . $item['deductprice'] . ' 订单号: ' . $item['ordersn'])); } if (!empty($refundtype)) { if ($realprice < 0) { $item['deductcredit2'] = $realprice; } m('order')->setDeductCredit2($item); } m('order')->setGiveBalance($item['id'], 2); if (com('coupon') && !empty($item['couponid'])) { com('coupon')->returnConsumeCoupon($item['id']); } pdo_update('ewei_shop_order', array('refundstate' => 0, 'status' => -1, 'refundtime' => time()), array('id' => $item['id'], 'uniacid' => $item['uniacid'])); foreach ($goods as $g) { $salesreal = pdo_fetchcolumn('select ifnull(sum(total),0) from ' . tablename('ewei_shop_order_goods') . ' og ' . ' left join ' . tablename('ewei_shop_order') . ' o on o.id = og.orderid ' . ' where og.goodsid=:goodsid and o.status>=1 and o.uniacid=:uniacid limit 1', array(':goodsid' => $g['id'], ':uniacid' => $item['uniacid'])); pdo_update('ewei_shop_goods', array('salesreal' => $salesreal), array('id' => $g['id'])); } m('notice')->sendOrderMessage($item['id'], true); } public function setOrderPay($orderid) { global $_W; if (is_error(redis())) { return false; } $redis = redis(); $redis_prefix = $this->get_prefix(); $date = date('Y-m-d'); $order = pdo_fetch('select id,ordersn, price,openid,status, paytype, deductcredit2, couponid,isparent,merchid,agentid,createtime from ' . tablename('ewei_shop_order') . ' where id=:id and uniacid=:uniacid limit 1', array(':uniacid' => $_W['uniacid'], ':id' => $orderid)); if (empty($order)) { return ''; } $goods = pdo_fetchall('select uniacid, total , goodsid,optionid,seckill_timeid,seckill_taskid from ' . tablename('ewei_shop_order_goods') . ' where orderid=' . $order['id'] . ' and seckill=1 '); foreach ($goods as $g) { $key = $redis_prefix . 'queue_' . $date . '_' . $g['seckill_taskid'] . '_' . $g['seckill_timeid'] . '_' . $g['goodsid'] . '_' . $g['optionid']; $queue = $redis->lGetRange($key, 0, -1); $paydata = json_encode(array('orderid' => $order['id'], 'openid' => $order['openid'], 'status' => 1, 'createtime' => $order['createtime'])); if (empty($queue)) { $this->orderRefund($order); return 'refund'; } $has = false; foreach ($queue as $index => $value) { $data = @json_decode($value, true); if (!is_array($data)) { continue; } if ($data['orderid'] == $order['id'] && $data['openid'] == $order['openid']) { $has = true; $redis->lSet($key, $index, $paydata); } } if (!$has) { $this->orderRefund($order); return 'refund'; } } return ''; } public function getTaskSeckillInfo() { global $_W; if (is_error(redis())) { return false; } if (empty($taskid)) { $taskid = $this->getTodaySeckill(); if (empty($taskid)) { return false; } } $task = $this->getTodaySeckillInfo(); if (empty($taskid)) { return false; } $redis = redis(); $times = $this->getTaskTimes($taskid); $options = array(); $currenttime = time(); $timegoods = array(); $goods_starttime = 0; $goods_endtime = 0; $hasCurrent = false; $timegoods = false; $status = -1; foreach ($times as $key => $time) { $starttime = strtotime(date('Y-m-d ' . $time['time'] . ':00:00')); if (isset($times[$key + 1])) { $end = $times[$key + 1]['time'] - 1; $endtime = strtotime(date('Y-m-d ' . $end . ':59:59')); } else { $endtime = strtotime(date('Y-m-d 23:59:59')); } $time['endtime'] = $endtime; $time['starttime'] = $starttime; if ($starttime <= $currenttime && $currenttime <= $endtime) { $timeid = $time['id']; $taskid = $time['taskid']; $goods_starttime = $starttime; $goods_endtime = $endtime; $sktime = $time['time']; $timegoods = $this->getSeckillGoods($taskid, $time['time'], 'all'); $hasCurrent = true; $status = 0; break; } if ($currenttime < $starttime) { $timeid = $time['id']; $taskid = $time['taskid']; $goods_starttime = $starttime; $goods_endtime = $endtime; $sktime = $time['time']; $timegoods = $this->getSeckillGoods($taskid, $time['time'], 'all'); $hasCurrent = true; $status = 1; break; } } if (empty($timegoods)) { return false; } shuffle($timegoods); $allgoods = array(); foreach ($timegoods as $g) { if (10 <= count($allgoods)) { break; } if (!in_array($g['goodsid'], $allgoods)) { $allgoods[$g['goodsid']][] = array('optionid' => $g['optionid'], 'price' => $g['price']); } } $goodsids = array_keys($allgoods); $dbgoods = pdo_fetchall('select id,thumb,marketprice from ' . tablename('ewei_shop_goods') . ' where id in (' . implode(',', $goodsids) . ') and uniacid=' . $_W['uniacid'], array(), 'id'); $goods = array(); foreach ($allgoods as $gid => $tgs) { $price = $tgs[0]['price']; foreach ($tgs as $tg) { if ($tg['price'] < $price) { $price = $tg['price']; } } $goods[] = array('thumb' => tomedia($dbgoods[$gid]['thumb']), 'price' => price_format($price), 'marketprice' => price_format($dbgoods[$gid]['marketprice'])); } return array('tag' => $task['tag'], 'status' => $status, 'time' => $sktime < 10 ? '0' . $sktime : $sktime, 'endtime' => $goods_endtime, 'starttime' => $goods_starttime, 'goods' => $goods); } public function checkBuy($seckillinfo, $title, $unit = '') { if (empty($unit)) { $unit = '件'; } if (100 <= $seckillinfo['percent']) { if (0 < $seckillinfo['notpay']) { return error(-1, $title . '
已经抢完了 ,但还有 ' . $seckillinfo['notpay'] . ' ' . $unit . '未付款的, 抓住机会哦~'); } return error(-1, $title . '
已经抢完了 !'); } if (0 < $seckillinfo['totalmaxbuy']) { if ($seckillinfo['totalmaxbuy'] <= $seckillinfo['selftotalcount']) { if (0 < $seckillinfo['selftotalnotpay']) { return error(-1, $title . '
最多抢购 ' . $seckillinfo['totalmaxbuy'] . ' ' . $unit . ', 您有' . $seckillinfo['selftotalnotpay'] . '个未付款的,抓紧付款哦~'); } return error(-1, $title . '
您已经抢购 ' . $seckillinfo['totalmaxbuy'] . ' ' . $unit . '了哦,不能继续抢购了,看看别的吧!'); } } if (0 < $seckillinfo['maxbuy']) { if ($seckillinfo['maxbuy'] <= $seckillinfo['selfcount']) { if (0 < $seckillinfo['selfnotpay']) { return error(-1, $title . '
最多抢购 ' . $seckillinfo['maxbuy'] . ' ' . $unit . ', 您有' . $seckillinfo['selfnotpay'] . '个未付款的,抓紧付款哦~'); } return error(-1, $title . '
您已经抢购 ' . $seckillinfo['maxbuy'] . ' ' . $unit . '了哦,不能继续抢购了,看看别的吧!'); } } return true; } public function checkTaskGoods($taskid, $roomid, $goodsids) { if (is_error(redis())) { return false; } if (empty($goodsids)) { return true; } $error = array(); $times = $this->getTaskTimes($taskid); if (!is_array($times)) { return true; } foreach ($times as $time) { $goods = $this->getSeckillGoods($taskid, $time['time'], 'all'); if (!is_array($goods)) { continue; } foreach ($goods as $g) { if (in_array($g['goodsid'], $goodsids) && $g['roomid'] != $roomid) { $room = $this->getRoomInfo($taskid, $g['roomid']); $goodstitle = pdo_fetchcolumn('select title from ' . tablename('ewei_shop_goods') . ' where id=:id limit 1', array(':id' => $g['goodsid'])); $url = webUrl('seckill/room/edit', array('taskid' => $taskid, 'id' => $room['id'])); if (!isset($error['goods-' . $g['goodsid']])) { $error['goods-' . $g['goodsid']] = '商品<span class=\'text text-danger\'>【' . $goodstitle . '】</span>在会场<a href=\'' . $url . '\' target=\'_blank\'>【' . $room['title'] . '】</a>中的 <span class=\'text text-danger\'>' . $time['time'] . '</span> 点场已经存在,不能重复添加'; } } } } if (!empty($error)) { return error(-1, implode('
', $error)); } return true; } }