function action_add_huan_goods() { $user = $GLOBALS['user']; $_CFG = $GLOBALS['_CFG']; $_LANG = $GLOBALS['_LANG']; $smarty = $GLOBALS['smarty']; $db = $GLOBALS['db']; $ecs = $GLOBALS['ecs']; $user_id = $_SESSION['user_id']; include_once 'includes/cls_json.php'; include_once 'includes/lib_order.php'; $json = new JSON(); $result = array('error' => 0, 'content' => ''); $_POST['goods'] = strip_tags(urldecode($_POST['goods'])); $_POST['goods'] = json_str_iconv($_POST['goods']); $goods = $json->decode($_POST['goods']); $spec = $goods->spec; $goods_id = $goods->goods_id; $goods_name = $db->getOne("select goods_name from " . $ecs->table('goods') . " where goods_id='{$goods_id}' "); /* 如果商品有规格则取规格商品信息 配件除外 */ $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } $goods_attr = get_goods_attr_info($spec); $result['error'] = 1; $result['goods_name'] = $goods_name . " "; $result['product_id'] = $product_info['product_id']; $result['product_id'] = $result['product_id'] == 'null' ? '0' : intval($result['product_id']); $result['content'] = addslashes($goods_attr); die($json->encode($result)); }
if (is_spec($goods_attr) && !empty($prod)) { $product_info = get_products_info($_REQUEST['goodslist'], $goods_attr); } //商品存在规格 是货品 检查该货品库存 if (is_spec($goods_attr) && !empty($prod)) { if (!empty($goods_attr)) { /* 取规格的货品库存 */ if ($goods_number > $product_info['product_number']) { $url = "order.php?act=" . $step_act . "&order_id=" . $order_id . "&step=goods"; echo '<a href="' . $url . '">' . $_LANG['goods_num_err'] . '</a>'; exit; return false; } } } if (is_spec($goods_attr) && !empty($prod)) { /* 插入订单商品 */ $sql = "INSERT INTO " . $ecs->table('order_goods') . "(order_id, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, " . "goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id) " . "SELECT '{$order_id}', goods_id, goods_name, goods_sn, " . $product_info['product_id'] . ", " . "'{$goods_number}', market_price, '{$goods_price}', '" . $attr_value . "', " . "is_real, extension_code, 0, 0 , '" . implode(',', $goods_attr) . "' " . "FROM " . $ecs->table('goods') . " WHERE goods_id = '{$goods_id}' LIMIT 1"; } else { $sql = "INSERT INTO " . $ecs->table('order_goods') . " (order_id, goods_id, goods_name, goods_sn, " . "goods_number, market_price, goods_price, goods_attr, " . "is_real, extension_code, parent_id, is_gift)" . "SELECT '{$order_id}', goods_id, goods_name, goods_sn, " . "'{$goods_number}', market_price, '{$goods_price}', '" . $attr_value . "', " . "is_real, extension_code, 0, 0 " . "FROM " . $ecs->table('goods') . " WHERE goods_id = '{$goods_id}' LIMIT 1"; } $db->query($sql); /* 如果使用库存,且下订单时减库存,则修改库存 */ if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE) { //(货品) if (!empty($product_info['product_id'])) { $sql = "UPDATE " . $ecs->table('products') . "\n SET product_number = product_number - " . $goods_number . "\n WHERE product_id = " . $product_info['product_id']; $db->query($sql); } $sql = "UPDATE " . $ecs->table('goods') . " SET `goods_number` = goods_number - '" . $goods_number . "' " . " WHERE `goods_id` = '" . $goods_id . "' LIMIT 1"; $db->query($sql);
/** * 添加商品到购物车 * * @access public * @param integer $goods_id 商品编号 * @param integer $num 商品数量 * @param array $spec 规格值对应的id数组 * @param integer $parent 基本件 * @return boolean */ function addto_cart($goods_id, $num = 1, $spec = array(), $parent = 0) { $GLOBALS['err']->clean(); $_parent_id = $parent; /*ccx 2015-03-03 判断该商品是否已经通过自动下架功能 start*/ $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('auto_manage') . " WHERE item_id = {$goods_id} AND type = 'goods' "; $autodb = $GLOBALS['db']->getRow($sql); //print_r($autodb);exit; if ($autodb) { $where = " WHERE goods_id = '{$goods_id}'"; if ($autodb['endtime'] < gmtime() && $autodb['endtime'] > 0) { $sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . " SET is_on_sale = 0 {$where}"; $GLOBALS['db']->query($sql); $sql_1 = "DELETE FROM " . $GLOBALS['ecs']->table('auto_manage') . "WHERE item_id = '{$goods_id}' AND type = 'goods'"; $GLOBALS['db']->query($sql_1); $GLOBALS['err']->add($GLOBALS['_LANG']['not_on_sale'], ERR_NOT_ON_SALE); return false; } //var_dump($up); } /*ccx 2015-03-03 end*/ /* 取得商品信息 */ $sql = "SELECT g.goods_name, g.goods_sn, g.is_on_sale, g.is_real, " . "g.market_price, g.shop_price AS org_price, g.promote_price, g.promote_start_date, " . "g.promote_end_date, g.goods_weight, g.integral, g.extension_code, " . "g.goods_number, g.is_alone_sale, g.is_shipping," . "IFNULL(mp.user_price, g.shop_price * '{$_SESSION['discount']}') AS shop_price " . " FROM " . $GLOBALS['ecs']->table('goods') . " AS g " . " LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '{$_SESSION['user_rank']}' " . " WHERE g.goods_id = '{$goods_id}'" . " AND g.is_delete = 0"; $goods = $GLOBALS['db']->getRow($sql); if (empty($goods)) { $GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS); return false; } /* 如果是作为配件添加到购物车的,需要先检查购物车里面是否已经有基本件 */ if ($parent > 0) { $sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('cart') . " WHERE goods_id='{$parent}' AND session_id='" . SESS_ID . "' AND extension_code <> 'package_buy'"; if ($GLOBALS['db']->getOne($sql) == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['no_basic_goods'], ERR_NO_BASIC_GOODS); return false; } } /* 是否正在销售 */ if ($goods['is_on_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['not_on_sale'], ERR_NOT_ON_SALE); return false; } /* 不是配件时检查是否允许单独销售 */ if (empty($parent) && $goods['is_alone_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['cannt_alone_sale'], ERR_CANNT_ALONE_SALE); return false; } /* 如果商品有规格则取规格商品信息 配件除外 */ $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } if (empty($product_info)) { $product_info = array('product_number' => '', 'product_id' => 0); } /* 检查:库存 */ /* 2014-12-18 ccx 把购物的时候, 把检查库存这块屏蔽了, 不做库存判断 if ($GLOBALS['_CFG']['use_storage'] == 1) { //检查:商品购买数量是否大于总库存 if ($num > $goods['goods_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $goods['goods_number']), ERR_OUT_OF_STOCK); return false; } //商品存在规格 是货品 检查该货品库存 if (is_spec($spec) && !empty($prod)) { if (!empty($spec)) { // 取规格的货品库存 if ($num > $product_info['product_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $product_info['product_number']), ERR_OUT_OF_STOCK); return false; } } } } */ /* 计算商品的促销价格 */ $spec_price = spec_price($spec); $goods_price = get_final_price($goods_id, $num, true, $spec); $goods['market_price'] += $spec_price; $goods_attr = get_goods_attr_info($spec); $goods_attr_id = join(',', $spec); /* 初始化要插入购物车的基本件数据 */ $parent = array('user_id' => $_SESSION['user_id'], 'session_id' => SESS_ID, 'goods_id' => $goods_id, 'goods_sn' => addslashes($goods['goods_sn']), 'product_id' => $product_info['product_id'], 'goods_name' => addslashes($goods['goods_name']), 'market_price' => $goods['market_price'], 'goods_attr' => addslashes($goods_attr), 'goods_attr_id' => $goods_attr_id, 'is_real' => $goods['is_real'], 'extension_code' => $goods['extension_code'], 'is_gift' => 0, 'is_shipping' => $goods['is_shipping'], 'rec_type' => CART_GENERAL_GOODS); /* 如果该配件在添加为基本件的配件时,所设置的“配件价格”比原价低,即此配件在价格上提供了优惠, */ /* 则按照该配件的优惠价格卖,但是每一个基本件只能购买一个优惠价格的“该配件”,多买的“该配件”不享 */ /* 受此优惠 */ $basic_list = array(); $sql = "SELECT parent_id, goods_price " . "FROM " . $GLOBALS['ecs']->table('group_goods') . " WHERE goods_id = '{$goods_id}'" . " AND goods_price < '{$goods_price}'" . " AND parent_id = '{$_parent_id}'" . " ORDER BY goods_price"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_list[$row['parent_id']] = $row['goods_price']; } /* 取得购物车中该商品每个基本件的数量 */ $basic_count_list = array(); if ($basic_list) { $sql = "SELECT goods_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "'" . " AND parent_id = 0" . " AND extension_code <> 'package_buy' " . " AND goods_id " . db_create_in(array_keys($basic_list)) . " GROUP BY goods_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['goods_id']] = $row['count']; } } /* 取得购物车中该商品每个基本件已有该商品配件数量,计算出每个基本件还能有几个该商品配件 */ /* 一个基本件对应一个该商品配件 */ if ($basic_count_list) { $sql = "SELECT parent_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "'" . " AND goods_id = '{$goods_id}'" . " AND extension_code <> 'package_buy' " . " AND parent_id " . db_create_in(array_keys($basic_count_list)) . " GROUP BY parent_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['parent_id']] -= $row['count']; } } /* 循环插入配件 如果是配件则用其添加数量依次为购物车中所有属于其的基本件添加足够数量的该配件 */ foreach ($basic_list as $parent_id => $fitting_price) { /* 如果已全部插入,退出 */ if ($num <= 0) { break; } /* 如果该基本件不再购物车中,执行下一个 */ if (!isset($basic_count_list[$parent_id])) { continue; } /* 如果该基本件的配件数量已满,执行下一个基本件 */ if ($basic_count_list[$parent_id] <= 0) { continue; } /* 作为该基本件的配件插入 */ $parent['goods_price'] = max($fitting_price, 0) + $spec_price; //允许该配件优惠价格为0 $parent['goods_number'] = min($num, $basic_count_list[$parent_id]); $parent['parent_id'] = $parent_id; /* 添加 */ $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); /* 改变数量 */ $num -= $parent['goods_number']; } /* 如果数量不为0,作为基本件插入 */ if ($num > 0) { /* 检查该商品是否已经存在在购物车中 */ $sql = "SELECT goods_number FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . get_goods_attr_info($spec) . "' " . " AND extension_code <> 'package_buy' " . " AND rec_type = 'CART_GENERAL_GOODS'"; $row = $GLOBALS['db']->getRow($sql); if ($row) { $num += $row['goods_number']; if (is_spec($spec) && !empty($prod)) { $goods_storage = $product_info['product_number']; } else { $goods_storage = $goods['goods_number']; } /* 2014-12-23 因为取消库存,这里购物的时候,商品的库存要先跟购物车那里进行过比较,如果库存小于购物车的数量,就执行else,输出库存数量不足 if ($GLOBALS['_CFG']['use_storage'] == 0 || $num <= $goods_storage) */ if ($GLOBALS['_CFG']['use_storage'] == 1) { $goods_price = get_final_price($goods_id, $num, true, $spec); $sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_number = '{$num}'" . " , goods_price = '{$goods_price}'" . " WHERE session_id = '" . SESS_ID . "' AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . get_goods_attr_info($spec) . "' " . " AND extension_code <> 'package_buy' " . "AND rec_type = 'CART_GENERAL_GOODS'"; $GLOBALS['db']->query($sql); } else { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $num), ERR_OUT_OF_STOCK); return false; } } else { $goods_price = get_final_price($goods_id, $num, true, $spec); $parent['goods_price'] = max($goods_price, 0); $parent['goods_number'] = $num; $parent['parent_id'] = 0; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); } } /* 把赠品删除 */ $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND is_gift <> 0"; $GLOBALS['db']->query($sql); return true; }
function is_stock($goods_id, $num, $spec = array()) { $sql = 'SELECT goods_number,is_alone_sale,is_on_sale FROM ' . $GLOBALS['ecs']->table('goods') . " WHERE goods_id = '{$goods_id}'"; $goods = $GLOBALS['db']->getRow($sql); if (empty($goods)) { return 3; } if ($goods['is_on_sale'] == 0) { return 4; } if ($goods['is_alone_sale'] == 0) { return 2; // 不是配件时检查是否允许单独销售 } if ($GLOBALS['_CFG']['use_storage'] == 1) { $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); } else { return true; } if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } //检查:商品购买数量是否大于总库存 if ($num > $goods['goods_number']) { // $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $goods['goods_number']), ERR_OUT_OF_STOCK); return false; } //商品存在规格 是货品 检查该货品库存 if (is_spec($spec) && !empty($prod)) { if (!empty($spec)) { /* 取规格的货品库存 */ if ($num > $product_info['product_number']) { //$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $product_info['product_number']), ERR_OUT_OF_STOCK); return false; } } } return true; }
/** * 添加商品到购物车 * * @access public * @param integer $goods_id 商品编号 * @param integer $num 商品数量 * @param array $spec 规格值对应的id数组 * @param integer $parent 基本件 * @return boolean */ function addto_cart($goods_id, $num = 1, $spec = array(), $parent = 0) { $GLOBALS['err']->clean(); $_parent_id = $parent; /* 取得商品信息 */ $sql = "SELECT g.goods_name, g.goods_sn, g.is_on_sale, g.is_real, " . "g.market_price, g.shop_price AS org_price, g.promote_price, g.promote_start_date, " . "g.promote_end_date, g.goods_weight, g.integral, g.extension_code, " . "g.goods_number, g.is_alone_sale, g.is_shipping, g.free_more, g.amount_desc, " . "IFNULL(mp.user_price, g.shop_price * '{$_SESSION['discount']}') AS shop_price " . " FROM " . $GLOBALS['ecs']->table('goods') . " AS g " . " LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '{$_SESSION['user_rank']}' " . " WHERE g.goods_id = '{$goods_id}'" . " AND g.is_delete = 0"; $goods = $GLOBALS['db']->getRow($sql); if (empty($goods)) { $GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS); return false; } /* 如果是作为配件添加到购物车的,需要先检查购物车里面是否已经有基本件 */ if ($parent > 0) { $sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('cart') . " WHERE goods_id='{$parent}' AND " . get_cart_cond() . " AND extension_code <> 'package_buy'"; if ($GLOBALS['db']->getOne($sql) == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['no_basic_goods'], ERR_NO_BASIC_GOODS); return false; } } /* 是否正在销售 */ if ($goods['is_on_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['not_on_sale'], ERR_NOT_ON_SALE); return false; } /* 不是配件时检查是否允许单独销售 */ if (empty($parent) && $goods['is_alone_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['cannt_alone_sale'], ERR_CANNT_ALONE_SALE); return false; } //TODO 取消规格相关逻辑 /* 如果商品有规格则取规格商品信息 配件除外 */ /*$sql = "SELECT * FROM " .$GLOBALS['ecs']->table('products'). " WHERE goods_id = '$goods_id' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } if (empty($product_info)) { $product_info = array('product_number' => '', 'product_id' => 0); }*/ /* 检查:库存 */ if ($GLOBALS['_CFG']['use_storage'] == 1) { //检查:商品购买数量是否大于总库存 if ($num > $goods['goods_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $goods['goods_number']), ERR_OUT_OF_STOCK); return false; } //商品存在规格 是货品 检查该货品库存 if (is_spec($spec) && !empty($prod)) { if (!empty($spec)) { /* 取规格的货品库存 */ if ($num > $product_info['product_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $product_info['product_number']), ERR_OUT_OF_STOCK); return false; } } } } /* 计算商品的促销价格 */ $spec_price = spec_price($spec); $goods_price = get_final_price($goods_id, $num, true, $spec); $goods['market_price'] += $spec_price; //商品规格 $goods_attr_id = join(',', $spec); $goods_attr = get_goods_attr_info($spec); if (empty($goods_attr)) { $goods_attr = $goods['amount_desc']; } else { $goods_attr = $goods['amount_desc'] . "\n" . $goods_attr; } // 初始化要插入购物车的基本件数据 $parent = array('user_id' => $_SESSION['user_id'], 'session_id' => SESS_ID, 'goods_id' => $goods_id, 'goods_sn' => addslashes($goods['goods_sn']), 'product_id' => $product_info['product_id'], 'goods_name' => addslashes($goods['goods_name']), 'market_price' => $goods['market_price'], 'free_more' => $goods['free_more'], 'goods_attr' => addslashes($goods_attr), 'goods_attr_id' => $goods_attr_id, 'is_real' => $goods['is_real'], 'extension_code' => $goods['extension_code'], 'is_gift' => 0, 'is_shipping' => $goods['is_shipping'], 'add_time' => time(), 'rec_type' => CART_GENERAL_GOODS); // 如果该配件在添加为基本件的配件时,所设置的“配件价格”比原价低,即此配件在价格上提供了优惠, // 则按照该配件的优惠价格卖,但是每一个基本件只能购买一个优惠价格的“该配件”,多买的“该配件”不享 // 受此优惠 //TODO: 取消配件逻辑 /*$basic_list = array(); $sql = "SELECT parent_id, goods_price " . "FROM " . $GLOBALS['ecs']->table('group_goods') . " WHERE goods_id = '$goods_id'" . " AND goods_price < '$goods_price'" . " AND parent_id = '$_parent_id'" . " ORDER BY goods_price"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_list[$row['parent_id']] = $row['goods_price']; } // 取得购物车中该商品每个基本件的数量 $basic_count_list = array(); if ($basic_list) { $sql = "SELECT goods_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND parent_id = 0" . " AND extension_code <> 'package_buy' " . " AND goods_id " . db_create_in(array_keys($basic_list)) . " GROUP BY goods_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['goods_id']] = $row['count']; } } // 取得购物车中该商品每个基本件已有该商品配件数量,计算出每个基本件还能有几个该商品配件 // 一个基本件对应一个该商品配件 if ($basic_count_list) { $sql = "SELECT parent_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND goods_id = '$goods_id'" . " AND extension_code <> 'package_buy' " . " AND parent_id " . db_create_in(array_keys($basic_count_list)) . " GROUP BY parent_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['parent_id']] -= $row['count']; } } // 循环插入配件 如果是配件则用其添加数量依次为购物车中所有属于其的基本件添加足够数量的该配件 foreach ($basic_list as $parent_id => $fitting_price) { // 如果已全部插入,退出 if ($num <= 0) { break; } // 如果该基本件不再购物车中,执行下一个 if (!isset($basic_count_list[$parent_id])) { continue; } // 如果该基本件的配件数量已满,执行下一个基本件 if ($basic_count_list[$parent_id] <= 0) { continue; } // 作为该基本件的配件插入 $parent['goods_price'] = max($fitting_price, 0) + $spec_price; //允许该配件优惠价格为0 $parent['goods_number'] = min($num, $basic_count_list[$parent_id]); $parent['parent_id'] = $parent_id; // 添加 $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); // 改变数量 $num -= $parent['goods_number']; }*/ /* 如果数量不为0,作为基本件插入 */ if ($num > 0) { /* 检查该商品是否已经存在在购物车中 */ $sql = "SELECT goods_number FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . $goods_attr . "' " . " AND extension_code <> 'flash_sale' " . " AND rec_type = '" . CART_GENERAL_GOODS . "' AND group_id=''"; //by mike add $row = $GLOBALS['db']->getRow($sql); if ($row) { $num += $row['goods_number']; if (is_spec($spec) && !empty($prod)) { $goods_storage = $product_info['product_number']; } else { $goods_storage = $goods['goods_number']; } if ($GLOBALS['_CFG']['use_storage'] == 0 || $num <= $goods_storage) { $goods_price = get_final_price($goods_id, $num, true, $spec); $sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_number = '{$num}'" . " , goods_price = '{$goods_price}'" . " WHERE " . get_cart_cond() . " AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . $goods_attr . "' " . " AND extension_code <> 'flash_sale' " . "AND rec_type = '" . CART_GENERAL_GOODS . "' AND group_id=''"; $GLOBALS['db']->query($sql); } else { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $num), ERR_OUT_OF_STOCK); return false; } } else { $goods_price = get_final_price($goods_id, $num, true, $spec); $parent['goods_price'] = max($goods_price, 0); $parent['goods_number'] = $num; $parent['parent_id'] = 0; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); } } /* 把赠品删除 */ $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE " . get_cart_cond() . " AND is_gift <> 0"; $GLOBALS['db']->query($sql); return true; }
/** * 获取商品的原价、配件价、库存(配件组合) by mike * 返回数组 */ function get_combo_goods_info($goods_id, $num = 1, $spec = array(), $parent = 0) { $result = array(); /* 取得商品信息 */ $sql = "SELECT goods_number FROM " . $GLOBALS['ecs']->table('goods') . " WHERE goods_id = '{$goods_id}' AND is_delete = 0"; $goods = $GLOBALS['db']->getRow($sql); /* 如果商品有规格则取规格商品信息 配件除外 */ $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } if (empty($product_info)) { $product_info = array('product_number' => '', 'product_id' => 0); } //商品库存 $result['stock'] = $goods['goods_number']; //商品存在规格 是货品 检查该货品库存 if (is_spec($spec) && !empty($prod)) { if (!empty($spec)) { /* 取规格的货品库存 */ $result['stock'] = $product_info['product_number']; } } /* 如果该配件在添加为基本件的配件时,所设置的“配件价格”比原价低,即此配件在价格上提供了优惠, */ $sql = "SELECT parent_id, goods_price " . "FROM " . $GLOBALS['ecs']->table('group_goods') . " WHERE goods_id = '{$goods_id}'" . " AND parent_id = '{$parent}'" . " ORDER BY goods_price"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $result['fittings_price'] = $row['goods_price']; } /* 计算商品的促销价格 */ $result['fittings_price'] = isset($result['fittings_price']) ? $result['fittings_price'] : get_final_price($goods_id, $num, true, $spec); $result['spec_price'] = spec_price($spec); //属性价格 $result['goods_price'] = get_final_price($goods_id, $num, true, $spec); return $result; }
$res['err_no'] = 1; } else { if ($number == 0) { $res['qty'] = $number = 1; } else { $res['qty'] = $number; } $shop_price = get_final_price($goods_id, $number, true, $attr_id); $res['result'] = price_format($shop_price * $number); } //ecshop商品详情页动态库存调用 $goods_tinfo = get_goods_info($goods_id); $goods_sn = $goods_tinfo['goods_sn']; $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($attr_id) && !empty($prod)) { $product_info = get_products_info($goods_id, $attr_id); } if ($product_info['product_number']) { $res['stock'] = $product_info['product_number']; //商品库存 } else { $res['stock'] = $goods_tinfo['goods_number']; //商品库存 } if ($product_info['product_sn']) { $res['goods_sn'] = $product_info['product_sn']; } else { $res['goods_sn'] = $goods_tinfo['goods_sn']; } if ($product_info['product_weight']) {
/** * 添加商品到购物车 * * @access public * @param integer $goods_id 商品编号 * @param integer $num 商品数量 * @param array $spec 规格值对应的id数组 * @param integer $parent 基本件 * @return boolean */ function addto_cart($goods_id, $num = 1, $spec = array(), $parent = 0) { $GLOBALS['err']->clean(); $_parent_id = $parent; /* 取得商品信息 */ $sql = "SELECT g.goods_name, g.goods_sn, g.is_on_sale, g.is_real, " . "g.market_price, g.cost_price, g.shop_price AS org_price, g.promote_price, g.promote_start_date, " . "g.promote_end_date, g.goods_weight, g.integral, g.extension_code, " . "g.goods_number, g.is_alone_sale, g.is_shipping," . "IFNULL(mp.user_price, g.shop_price * '{$_SESSION['discount']}') AS shop_price " . " FROM " . $GLOBALS['ecs']->table('goods') . " AS g " . " LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '{$_SESSION['user_rank']}' " . " WHERE g.goods_id = '{$goods_id}'" . " AND g.is_delete = 0"; $goods = $GLOBALS['db']->getRow($sql); if (empty($goods)) { $GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS); return false; } /* 如果是作为配件添加到购物车的,需要先检查购物车里面是否已经有基本件 */ if ($parent > 0) { $sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('cart') . " WHERE goods_id='{$parent}' AND session_id='" . SESS_ID . "' AND extension_code <> 'package_buy'"; if ($GLOBALS['db']->getOne($sql) == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['no_basic_goods'], ERR_NO_BASIC_GOODS); return false; } } /* 是否正在销售 */ if ($goods['is_on_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['not_on_sale'], ERR_NOT_ON_SALE); return false; } /* 不是配件时检查是否允许单独销售 */ if (empty($parent) && $goods['is_alone_sale'] == 0) { $GLOBALS['err']->add($GLOBALS['_LANG']['cannt_alone_sale'], ERR_CANNT_ALONE_SALE); return false; } /* 如果商品有规格则取规格商品信息 配件除外 */ $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('products') . " WHERE goods_id = '{$goods_id}' LIMIT 0, 1"; $prod = $GLOBALS['db']->getRow($sql); if (is_spec($spec) && !empty($prod)) { $product_info = get_products_info($goods_id, $spec); } if (empty($product_info)) { $product_info = array('product_number' => '', 'product_id' => 0); } /* 检查:库存 */ if ($GLOBALS['_CFG']['use_storage'] == 1) { //检查:商品购买数量是否大于总库存 if ($num > $goods['goods_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $goods['goods_number']), ERR_OUT_OF_STOCK); return false; } //商品存在规格 是货品 检查该货品库存 if (is_spec($spec) && !empty($prod)) { if (!empty($spec)) { /* 取规格的货品库存 */ if ($num > $product_info['product_number']) { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $product_info['product_number']), ERR_OUT_OF_STOCK); return false; } } } } /* 计算商品的促销价格 */ $spec_price = spec_price($spec); $goods_price = get_final_price($goods_id, $num, true, $spec); $goods['market_price'] += $spec_price; $goods_attr = get_goods_attr_info($spec); $goods_attr_id = join(',', $spec); /* 初始化要插入购物车的基本件数据 */ $parent = array('user_id' => $_SESSION['user_id'], 'session_id' => SESS_ID, 'goods_id' => $goods_id, 'goods_sn' => addslashes($goods['goods_sn']), 'product_id' => $product_info['product_id'], 'goods_name' => addslashes($goods['goods_name']), 'market_price' => $goods['market_price'], 'goods_attr' => addslashes($goods_attr), 'goods_attr_id' => $goods_attr_id, 'cost_price' => $goods['cost_price'], 'is_real' => $goods['is_real'], 'extension_code' => $goods['extension_code'], 'is_gift' => 0, 'is_shipping' => $goods['is_shipping'], 'add_time' => gmtime(), 'rec_type' => CART_GENERAL_GOODS); //初始化为普通商品 $_SESSION['flow_type'] = CART_GENERAL_GOODS; /* 如果该配件在添加为基本件的配件时,所设置的“配件价格”比原价低,即此配件在价格上提供了优惠, */ /* 则按照该配件的优惠价格卖,但是每一个基本件只能购买一个优惠价格的“该配件”,多买的“该配件”不享 */ /* 受此优惠 */ $basic_list = array(); $sql = "SELECT parent_id, goods_price " . "FROM " . $GLOBALS['ecs']->table('group_goods') . " WHERE goods_id = '{$goods_id}'" . " AND goods_price < '{$goods_price}'" . " AND parent_id = '{$_parent_id}'" . " ORDER BY goods_price"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_list[$row['parent_id']] = $row['goods_price']; } /* 取得购物车中该商品每个基本件的数量 */ $basic_count_list = array(); if ($basic_list) { $sql = "SELECT goods_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "'" . " AND parent_id = 0" . " AND extension_code <> 'package_buy' " . " AND goods_id " . db_create_in(array_keys($basic_list)) . " GROUP BY goods_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['goods_id']] = $row['count']; } } /* 取得购物车中该商品每个基本件已有该商品配件数量,计算出每个基本件还能有几个该商品配件 */ /* 一个基本件对应一个该商品配件 */ if ($basic_count_list) { $sql = "SELECT parent_id, SUM(goods_number) AS count " . "FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "'" . " AND goods_id = '{$goods_id}'" . " AND extension_code <> 'package_buy' " . " AND parent_id " . db_create_in(array_keys($basic_count_list)) . " GROUP BY parent_id"; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->fetchRow($res)) { $basic_count_list[$row['parent_id']] -= $row['count']; } } /* 循环插入配件 如果是配件则用其添加数量依次为购物车中所有属于其的基本件添加足够数量的该配件 */ foreach ($basic_list as $parent_id => $fitting_price) { /* 如果已全部插入,退出 */ if ($num <= 0) { break; } /* 如果该基本件不再购物车中,执行下一个 */ if (!isset($basic_count_list[$parent_id])) { continue; } /* 如果该基本件的配件数量已满,执行下一个基本件 */ if ($basic_count_list[$parent_id] <= 0) { continue; } /* 作为该基本件的配件插入 */ $parent['goods_price'] = max($fitting_price, 0) + $spec_price; //允许该配件优惠价格为0 $parent['goods_number'] = min($num, $basic_count_list[$parent_id]); $parent['parent_id'] = $parent_id; /* 添加 */ $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); /* 改变数量 */ $num -= $parent['goods_number']; } /* 如果数量不为0,作为基本件插入 */ if ($num > 0) { /* 检查该商品是否已经存在在购物车中 */ $sql = "SELECT goods_number FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . get_goods_attr_info($spec) . "' " . " AND extension_code <> 'package_buy' " . " AND user_id= '" . $_SESSION['user_id'] . "'" . " AND rec_type = 'CART_GENERAL_GOODS'"; $row = $GLOBALS['db']->getRow($sql); if ($row) { $num += $row['goods_number']; if (is_spec($spec) && !empty($prod)) { $goods_storage = $product_info['product_number']; } else { $goods_storage = $goods['goods_number']; } if ($GLOBALS['_CFG']['use_storage'] == 0 || $num <= $goods_storage) { $goods_price = get_final_price($goods_id, $num, true, $spec); $sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_number = '{$num}'" . " , goods_price = '{$goods_price}'" . " WHERE session_id = '" . SESS_ID . "' AND goods_id = '{$goods_id}' " . " AND parent_id = 0 AND goods_attr = '" . get_goods_attr_info($spec) . "' " . " AND extension_code <> 'package_buy' " . "AND rec_type = 'CART_GENERAL_GOODS'"; $GLOBALS['db']->query($sql); } else { $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $num), ERR_OUT_OF_STOCK); return false; } } else { // 判断是否为预售商品 $pre_sale_id = is_pre_sale_goods($goods_id); if (!empty($pre_sale_id)) { /* 更新:记录购物流程类型:预售 */ $_SESSION['flow_type'] = CART_PRE_SALE_GOODS; $_SESSION['extension_code'] = PRE_SALE_CODE; $_SESSION['extension_id'] = $pre_sale_id; $parent['extension_code'] = PRE_SALE_CODE; $parent['rec_type'] = CART_PRE_SALE_GOODS; //获取预售信息 $pre_sale = pre_sale_info($pre_sale_id, $num); if ($pre_sale['deposit'] > 0) { //定金大于0则使用定金金额 $goods_price = $pre_sale['deposit']; } else { //计算当前价格 $goods_price = $pre_sale['cur_price']; //加入规格价格 if (!empty($spec)) { $spec_price = spec_price($spec); $goods_price += $spec_price; } } } else { $goods_price = get_final_price($goods_id, $num, true, $spec); } $parent['goods_price'] = max($goods_price, 0); $parent['goods_number'] = $num; $parent['parent_id'] = 0; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $parent, 'INSERT'); } /** * 判断是否为虚拟团购商品 */ $virtual_sale_id = is_virtual_sale_goods($goods_id); if (!empty($virtual_sale_id)) { /* 更新:记录购物流程类型:预售 */ $_SESSION['flow_type'] = CART_VIRTUAL_GROUP_GOODS; $_SESSION['extension_code'] = VIRTUAL_SALE_CODE; $_SESSION['extension_id'] = $virtual_sale_id; $GLOBALS['db']->query("update " . $GLOBALS['ecs']->table('cart') . " set rec_type=" . CART_VIRTUAL_GROUP_GOODS . " WHERE session_id = '" . SESS_ID . "' AND goods_id = '{$goods_id}' "); } } /* 把赠品删除 */ $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND is_gift <> 0"; $GLOBALS['db']->query($sql); return true; }