/** * 检查购物车中限购商品数量 * * @param boolean $auto_upload 是否自动修改数量 */ function check_cartgoods_number($auto_upload = false) { global $ecs, $db; $sql = "SELECT min(c.rec_id) AS rec_id, count(rec_id) AS rec_count, c.extension_id, sum(c.goods_number) AS goods_number, f.order_limit_num FROM " . $ecs->table('cart', 'c') . "," . $ecs->table('flash_sale', 'f') . " WHERE c.extension_code = 'flash_sale' AND c.extension_id = f.id AND c.rec_type = " . CART_GENERAL_GOODS . " AND f.order_limit_num > 0 AND " . get_cart_cond('c.') . " GROUP BY c.extension_id"; $result = $db->getAll($sql); if (empty($result)) { return true; } $flash_cart = array(); foreach ($result as &$row) { $row['allow_number'] = $row['order_limit_num']; $flash_cart[$row['extension_id']] = $row; } if (!empty($_SESSION['user_id'])) { $sql = "SELECT g.extension_id, sum(g.goods_number) AS goods_number FROM " . $ecs->table('order_info', 'o') . "," . $ecs->table('order_goods', 'g') . " WHERE o.order_id = g.order_id AND g.extension_code = 'flash_sale' AND g.extension_id IN (" . implode(',', array_keys($flash_cart)) . ")" . " AND o.pay_status = " . PS_PAYED . " AND o.user_id = " . $_SESSION['user_id'] . " GROUP BY g.extension_code, g.extension_id"; $result = $db->getAll($sql); if (!empty($result)) { foreach ($result as $goods) { $flash_id = $goods['extension_id']; if (array_key_exists($flash_id, $flash_cart)) { $flash_cart[$flash_id]['allow_number'] = $flash_cart[$flash_id]['order_limit_num'] - $goods['goods_number']; } } } } foreach ($flash_cart as $flash) { if ($flash['allow_number'] <= 0) { if ($auto_upload) { $sql = "DELETE FROM " . $ecs->table('cart') . " WHERE extension_code = 'flash_sale' AND extension_id = '{$flash['extension_id']}' AND " . get_cart_cond(); $db->query($sql); } else { return false; } } elseif ($flash['allow_number'] < $flash['goods_number']) { if ($auto_upload) { if ($flash['rec_count'] > 1) { $sql = "DELETE FROM " . $ecs->table('cart') . " WHERE extension_code = 'flash_sale' AND extension_id = '{$flash['extension_id']}' AND rec_id <> '{$flash['rec_id']}'" . " AND " . get_cart_cond(); $db->query($sql); } $sql = "UPDATE " . $ecs->table('cart') . " SET goods_number = '{$flash['allow_number']}' WHERE rec_id = '{$flash['rec_id']}'"; $db->query($sql); } else { return false; } } } return true; }
function insert_cart_goods_number($goods_id) { $sql = 'SELECT SUM(goods_number) AS number FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND rec_type = '" . CART_GENERAL_GOODS . "' AND goods_id = {$goods_id}"; $num = $GLOBALS['db']->getOne($sql); return $num ?: 0; }
/** * 取得购物车中某优惠活动范围内的总金额 * @param array $favourable 优惠活动 * @return float */ function cart_favourable_amount($favourable) { /* 查询优惠范围内商品总额的sql */ $sql = "SELECT SUM(c.goods_price * c.goods_number) " . "FROM " . $GLOBALS['ecs']->table('cart') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " . "WHERE c.goods_id = g.goods_id " . "AND " . get_cart_cond('c.') . "AND c.rec_type = '" . CART_GENERAL_GOODS . "' " . "AND c.is_gift = 0 " . "AND c.goods_id > 0 "; /* 根据优惠范围修正sql */ if ($favourable['act_range'] == FAR_ALL) { // sql do not change } elseif ($favourable['act_range'] == FAR_CATEGORY) { /* 取得优惠范围分类的所有下级分类 */ $id_list = array(); $cat_list = explode(',', $favourable['act_range_ext']); foreach ($cat_list as $id) { $id_list = array_merge($id_list, array_keys(cat_list(intval($id), 0, false))); } $sql .= "AND g.cat_id " . db_create_in($id_list); } elseif ($favourable['act_range'] == FAR_BRAND) { $id_list = explode(',', $favourable['act_range_ext']); $sql .= "AND g.brand_id " . db_create_in($id_list); } else { $id_list = explode(',', $favourable['act_range_ext']); $sql .= "AND g.goods_id " . db_create_in($id_list); } /* 优惠范围内的商品总额 */ return $GLOBALS['db']->getOne($sql); }
/** * 将指定订单中的商品添加到购物车 * * @access public * @param int $order_id * * @return mix $message 成功返回true, 错误返回出错信息 */ function return_to_cart($order_id) { /* 初始化基本件数量 goods_id => goods_number */ $basic_number = array(); /* 查订单商品:不考虑赠品 */ $sql = "SELECT goods_id, product_id,goods_number, goods_attr, parent_id, goods_attr_id" . " FROM " . $GLOBALS['ecs']->table('order_goods') . " WHERE order_id = '{$order_id}' AND is_gift = 0 AND extension_code <> 'package_buy'" . " ORDER BY parent_id ASC"; $res = $GLOBALS['db']->query($sql); $time = gmtime(); while ($row = $GLOBALS['db']->fetchRow($res)) { // 查该商品信息:是否删除、是否上架 $sql = "SELECT goods_sn, goods_name, goods_number, market_price, " . "IF(is_promote = 1 AND '{$time}' BETWEEN promote_start_date AND promote_end_date, promote_price, shop_price) AS goods_price," . "is_real, extension_code, is_alone_sale, goods_type " . "FROM " . $GLOBALS['ecs']->table('goods') . " WHERE goods_id = '{$row['goods_id']}' " . " AND is_delete = 0 LIMIT 1"; $goods = $GLOBALS['db']->getRow($sql); // 如果该商品不存在,处理下一个商品 if (empty($goods)) { continue; } if ($row['product_id']) { $order_goods_product_id = $row['product_id']; $sql = "SELECT product_number from " . $GLOBALS['ecs']->table('products') . "where product_id='{$order_goods_product_id}'"; $product_number = $GLOBALS['db']->getOne($sql); } // 如果使用库存,且库存不足,修改数量 if ($GLOBALS['_CFG']['use_storage'] == 1 && ($row['product_id'] ? $product_number < $row['goods_number'] : $goods['goods_number'] < $row['goods_number'])) { if ($goods['goods_number'] == 0 || $product_number === 0) { // 如果库存为0,处理下一个商品 continue; } else { if ($row['product_id']) { $row['goods_number'] = $product_number; } else { // 库存不为0,修改数量 $row['goods_number'] = $goods['goods_number']; } } } //检查商品价格是否有会员价格 $sql = "SELECT goods_number FROM" . $GLOBALS['ecs']->table('cart') . " " . "WHERE " . get_cart_cond() . "AND goods_id = '" . $row['goods_id'] . "' " . "AND rec_type = '" . CART_GENERAL_GOODS . "' LIMIT 1"; $temp_number = $GLOBALS['db']->getOne($sql); $row['goods_number'] += $temp_number; $attr_array = empty($row['goods_attr_id']) ? array() : explode(',', $row['goods_attr_id']); $goods['goods_price'] = get_final_price($row['goods_id'], $row['goods_number'], true, $attr_array); // 要返回购物车的商品 $return_goods = array('goods_id' => $row['goods_id'], 'goods_sn' => addslashes($goods['goods_sn']), 'goods_name' => addslashes($goods['goods_name']), 'market_price' => $goods['market_price'], 'goods_price' => $goods['goods_price'], 'goods_number' => $row['goods_number'], 'goods_attr' => empty($row['goods_attr']) ? '' : addslashes($row['goods_attr']), 'goods_attr_id' => empty($row['goods_attr_id']) ? '' : $row['goods_attr_id'], 'is_real' => $goods['is_real'], 'extension_code' => addslashes($goods['extension_code']), 'parent_id' => '0', 'is_gift' => '0', 'rec_type' => CART_GENERAL_GOODS); // 如果是配件 if ($row['parent_id'] > 0) { // 查询基本件信息:是否删除、是否上架、能否作为普通商品销售 $sql = "SELECT goods_id " . "FROM " . $GLOBALS['ecs']->table('goods') . " WHERE goods_id = '{$row['parent_id']}' " . " AND is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 LIMIT 1"; $parent = $GLOBALS['db']->getRow($sql); if ($parent) { // 如果基本件存在,查询组合关系是否存在 $sql = "SELECT goods_price " . "FROM " . $GLOBALS['ecs']->table('group_goods') . " WHERE parent_id = '{$row['parent_id']}' " . " AND goods_id = '{$row['goods_id']}' LIMIT 1"; $fitting_price = $GLOBALS['db']->getOne($sql); if ($fitting_price) { // 如果组合关系存在,取配件价格,取基本件数量,改parent_id $return_goods['parent_id'] = $row['parent_id']; $return_goods['goods_price'] = $fitting_price; $return_goods['goods_number'] = $basic_number[$row['parent_id']]; } } } else { // 保存基本件数量 $basic_number[$row['goods_id']] = $row['goods_number']; } // 返回购物车:看有没有相同商品 $sql = "SELECT goods_id " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND goods_id = '{$return_goods['goods_id']}' " . " AND goods_attr = '{$return_goods['goods_attr']}' " . " AND parent_id = '{$return_goods['parent_id']}' " . " AND is_gift = 0 " . " AND rec_type = '" . CART_GENERAL_GOODS . "'"; $cart_goods = $GLOBALS['db']->getOne($sql); if (empty($cart_goods)) { // 没有相同商品,插入 $return_goods['session_id'] = SESS_ID; $return_goods['user_id'] = $_SESSION['user_id']; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $return_goods, 'INSERT'); } else { // 有相同商品,修改数量 $sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET " . "goods_number = '" . $return_goods['goods_number'] . "' " . ",goods_price = '" . $return_goods['goods_price'] . "' " . "WHERE " . get_cart_cond() . "AND goods_id = '" . $return_goods['goods_id'] . "' " . "AND rec_type = '" . CART_GENERAL_GOODS . "' LIMIT 1"; $GLOBALS['db']->query($sql); } } // 清空购物车的赠品 $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND is_gift = 1"; $GLOBALS['db']->query($sql); return true; }
/** * 更新购物车中的商品 */ function update_cart() { global $ecs, $db; //删除已下架商品 $sql = "DELETE c FROM " . $ecs->table('cart', 'c') . " WHERE " . get_cart_cond() . " AND NOT EXISTS (SELECT 1 FROM " . $ecs->table('goods', 'g') . " WHERE g.goods_id = c.goods_id AND g.is_on_sale = 1 AND g.is_delete = 0) " . " AND c.rec_type = " . CART_GENERAL_GOODS; $db->query($sql); //更新产品价格、规格等 $sql = "SELECT c.rec_id, c.goods_id, c.goods_number, c.goods_attr_id, g.goods_name, g.market_price, g.shop_price, g.amount_desc, g.free_more FROM " . $ecs->table('cart', 'c') . ',' . $ecs->table('goods', 'g') . " WHERE c.goods_id = g.goods_id AND " . get_cart_cond('c.'); $query = $db->query($sql); while ($rs = $db->fetch_array($query)) { $spec = explode(',', $rs['goods_attr_id']); $goods_attr = get_goods_attr_info($spec); if (empty($goods_attr)) { $goods_attr = $rs['amount_desc']; } else { $goods_attr = $rs['amount_desc'] . "\n" . $goods_attr; } $cart = array('goods_name' => $rs['goods_name'], 'market_price' => $rs['market_price'], 'goods_price' => get_final_price($rs['goods_id'], $rs['goods_number'], true, $spec), 'goods_attr' => $goods_attr, 'free_more' => $rs['free_more']); $db->autoExecute($ecs->table('cart'), $cart, 'UPDATE', 'rec_id=' . $rs['rec_id']); } }
/** * 重新计算购物车中的商品价格:目的是当用户登录时享受会员价格,当用户退出登录时不享受会员价格 * 如果商品有促销,价格不变 * * @access public * @return void */ function recalculate_price() { /* 取得有可能改变价格的商品:除配件和赠品之外的商品 */ $sql = 'SELECT c.rec_id, c.goods_id, c.goods_attr_id, g.promote_price, g.promote_start_date, c.goods_number,' . "g.promote_end_date, IFNULL(mp.user_price, g.shop_price * '{$_SESSION['discount']}') AS member_price " . 'FROM ' . $GLOBALS['ecs']->table('cart') . ' AS c ' . 'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . ' AS g ON g.goods_id = c.goods_id ' . "LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '" . $_SESSION['user_rank'] . "' " . "WHERE " . get_cart_cond('c.') . " AND c.parent_id = 0 AND c.is_gift = 0 AND c.goods_id > 0 " . "AND c.rec_type = '" . CART_GENERAL_GOODS . "' AND c.extension_code <> 'package_buy'"; $res = $GLOBALS['db']->getAll($sql); foreach ($res as $row) { $attr_id = empty($row['goods_attr_id']) ? array() : explode(',', $row['goods_attr_id']); $goods_price = get_final_price($row['goods_id'], $row['goods_number'], true, $attr_id); $goods_sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_price = '{$goods_price}' " . "WHERE goods_id = '" . $row['goods_id'] . "' AND " . get_cart_cond() . " AND rec_id = '" . $row['rec_id'] . "'"; $GLOBALS['db']->query($goods_sql); } /* 删除赠品,重新选择 */ $GLOBALS['db']->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND is_gift > 0"); }
function flow_available_points() { $sql = "SELECT SUM(g.integral * c.goods_number) " . "FROM " . $GLOBALS['ecs']->table('cart') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " . "WHERE " . get_cart_cond('c.') . " AND c.goods_id = g.goods_id AND c.is_gift = 0 AND g.integral > 0 " . "AND c.rec_type = '" . CART_GENERAL_GOODS . "'"; $val = intval($GLOBALS['db']->getOne($sql)); return integral_of_value($val); }
$json = new JSON(); if ($_POST['id']) { $sql = 'DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE rec_id=" . $_POST['id']; $GLOBALS['db']->query($sql); } $sql = 'SELECT c.*,g.goods_name,g.goods_thumb,g.goods_id,c.goods_number,c.goods_price' . ' FROM ' . $GLOBALS['ecs']->table('cart') . " AS c " . " LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON g.goods_id=c.goods_id " . " WHERE " . get_cart_cond() . " AND rec_type = '" . CART_GENERAL_GOODS . "'"; $row = $GLOBALS['db']->GetAll($sql); $arr = array(); foreach ($row as $k => $v) { $arr[$k]['goods_thumb'] = get_image_path($v['goods_id'], $v['goods_thumb'], true); $arr[$k]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ? sub_str($v['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $v['goods_name']; $arr[$k]['url'] = build_uri('goods', array('gid' => $v['goods_id']), $v['goods_name']); $arr[$k]['goods_number'] = $v['goods_number']; $arr[$k]['goods_name'] = $v['goods_name']; $arr[$k]['goods_price'] = price_format($v['goods_price']); $arr[$k]['rec_id'] = $v['rec_id']; } $sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' . ' FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND rec_type = '" . CART_GENERAL_GOODS . "'"; $row = $GLOBALS['db']->GetRow($sql); if ($row) { $number = intval($row['number']); $amount = floatval($row['amount']); } else { $number = 0; $amount = 0; } $GLOBALS['smarty']->assign('str', sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false))); $GLOBALS['smarty']->assign('goods', $arr); $result['content'] = $GLOBALS['smarty']->fetch('library/cart_info.lbi'); //$smarty->assign('order',$order); die($json->encode($result));