Example #1
0
/**
 * 检查购物车中限购商品数量
 * 
 * @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;
}
Example #2
0
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;
}
Example #3
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);
}
Example #4
0
/**
 *  将指定订单中的商品添加到购物车
 *
 * @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;
}
Example #5
0
/**
 * 更新购物车中的商品
 */
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']);
    }
}
Example #6
0
/**
 * 重新计算购物车中的商品价格:目的是当用户登录时享受会员价格,当用户退出登录时不享受会员价格
 * 如果商品有促销,价格不变
 *
 * @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");
}
Example #7
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);
}
Example #8
0
$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));