|
|
<?php
|
|
|
|
|
|
/**
|
|
|
* 取得购物车商品
|
|
|
* @param int $type 类型:默认普通商品
|
|
|
* @return array 购物车商品数组
|
|
|
*/
|
|
|
function cart_goods_1($type = CART_GENERAL_GOODS)
|
|
|
{
|
|
|
$sql = "SELECT rec_id, user_id, goods_id, goods_name, goods_sn, goods_number, " .
|
|
|
"market_price, goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, is_shipping, " .
|
|
|
"goods_price * goods_number AS subtotal " .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') .
|
|
|
" WHERE session_id = '" . SESS_ID . "' " .
|
|
|
"AND rec_type = '$type'";
|
|
|
|
|
|
$arr = $GLOBALS['db']->getAll($sql);
|
|
|
|
|
|
/* 格式化价格及礼包商品 */
|
|
|
foreach ($arr as $key => $value)
|
|
|
{
|
|
|
$arr[$key]['formated_market_price'] = price_format($value['market_price'], false);
|
|
|
$arr[$key]['formated_goods_price'] = price_format($value['goods_price'], false);
|
|
|
$arr[$key]['formated_subtotal'] = price_format($value['subtotal'], false);
|
|
|
|
|
|
if ($value['extension_code'] == 'package_buy')
|
|
|
{
|
|
|
$arr[$key]['package_goods_list'] = get_package_goods($value['goods_id']);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return $arr;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获得购物车中的商品
|
|
|
*
|
|
|
* @access public
|
|
|
* @return array
|
|
|
*/
|
|
|
function get_cart_goods_1()
|
|
|
{
|
|
|
/* 初始化 */
|
|
|
$goods_list = array();
|
|
|
$total = array(
|
|
|
'goods_price' => 0, // 本店售价合计(有格式)
|
|
|
'market_price' => 0, // 市场售价合计(有格式)
|
|
|
'saving' => 0, // 节省金额(有格式)
|
|
|
'save_rate' => 0, // 节省百分比
|
|
|
'goods_amount' => 0, // 本店售价合计(无格式)
|
|
|
);
|
|
|
|
|
|
/* 循环、统计 */
|
|
|
$sql = "SELECT *, IF(parent_id, parent_id, goods_id) AS pid " .
|
|
|
" FROM " . $GLOBALS['ecs']->table('cart1') . " " .
|
|
|
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'" .
|
|
|
" ORDER BY pid, parent_id";
|
|
|
$res = $GLOBALS['db']->query($sql);
|
|
|
|
|
|
/* 用于统计购物车中实体商品和虚拟商品的个数 */
|
|
|
$virtual_goods_count = 0;
|
|
|
$real_goods_count = 0;
|
|
|
|
|
|
while ($row = $GLOBALS['db']->fetchRow($res))
|
|
|
{
|
|
|
$total['goods_price'] += $row['goods_price'] * $row['goods_number'];
|
|
|
$total['market_price'] += $row['market_price'] * $row['goods_number'];
|
|
|
|
|
|
$row['subtotal'] = price_format($row['goods_price'] * $row['goods_number'], false);
|
|
|
$row['goods_price'] = price_format($row['goods_price'], false);
|
|
|
$row['market_price'] = price_format($row['market_price'], false);
|
|
|
|
|
|
/* 统计实体商品和虚拟商品的个数 */
|
|
|
if ($row['is_real'])
|
|
|
{
|
|
|
$real_goods_count++;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$virtual_goods_count++;
|
|
|
}
|
|
|
|
|
|
/* 查询规格 */
|
|
|
if (trim($row['goods_attr']) != '')
|
|
|
{
|
|
|
$sql = "SELECT attr_value FROM " . $GLOBALS['ecs']->table('goods_attr') . " WHERE goods_attr_id " .
|
|
|
db_create_in($row['goods_attr']);
|
|
|
$attr_list = $GLOBALS['db']->getCol($sql);
|
|
|
foreach ($attr_list AS $attr)
|
|
|
{
|
|
|
$row['goods_name'] .= ' [' . $attr . '] ';
|
|
|
}
|
|
|
}
|
|
|
/* 增加是否在购物车里显示商品图 */
|
|
|
if (($GLOBALS['_CFG']['show_goods_in_cart'] == "2" || $GLOBALS['_CFG']['show_goods_in_cart'] == "3") && $row['extension_code'] != 'package_buy')
|
|
|
{
|
|
|
$goods_thumb = $GLOBALS['db']->getOne("SELECT `goods_thumb` FROM " . $GLOBALS['ecs']->table('goods') . " WHERE `goods_id`='{$row['goods_id']}'");
|
|
|
$row['goods_thumb'] = get_image_path($row['goods_id'], $goods_thumb, true);
|
|
|
}
|
|
|
if ($row['extension_code'] == 'package_buy')
|
|
|
{
|
|
|
$row['package_goods_list'] = get_package_goods($row['goods_id']);
|
|
|
}
|
|
|
$goods_list[] = $row;
|
|
|
}
|
|
|
$total['goods_amount'] = $total['goods_price'];
|
|
|
$total['saving'] = price_format($total['market_price'] - $total['goods_price'], false);
|
|
|
if ($total['market_price'] > 0)
|
|
|
{
|
|
|
$total['save_rate'] = $total['market_price'] ? round(($total['market_price'] - $total['goods_price']) *
|
|
|
100 / $total['market_price']).'%' : 0;
|
|
|
}
|
|
|
$total['goods_price'] = price_format($total['goods_price'], false);
|
|
|
$total['market_price'] = price_format($total['market_price'], false);
|
|
|
$total['real_goods_count'] = $real_goods_count;
|
|
|
$total['virtual_goods_count'] = $virtual_goods_count;
|
|
|
|
|
|
return array('goods_list' => $goods_list, 'total' => $total);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获得订单中的费用信息
|
|
|
*
|
|
|
* @access public
|
|
|
* @param array $order
|
|
|
* @param array $goods
|
|
|
* @param array $consignee
|
|
|
* @param bool $is_gb_deposit 是否团购保证金(如果是,应付款金额只计算商品总额和支付费用,可以获得的积分取 $gift_integral)
|
|
|
* @return array
|
|
|
*/
|
|
|
function order_fee1($order, $goods, $consignee)
|
|
|
{
|
|
|
/* 初始化订单的扩展code */
|
|
|
if (!isset($order['extension_code']))
|
|
|
{
|
|
|
$order['extension_code'] = '';
|
|
|
}
|
|
|
|
|
|
if ($order['extension_code'] == 'group_buy')
|
|
|
{
|
|
|
$group_buy = group_buy_info($order['extension_id']);
|
|
|
}
|
|
|
|
|
|
$total = array('real_goods_count' => 0,
|
|
|
'gift_amount' => 0,
|
|
|
'goods_price' => 0,
|
|
|
'market_price' => 0,
|
|
|
'discount' => 0,
|
|
|
'pack_fee' => 0,
|
|
|
'card_fee' => 0,
|
|
|
'shipping_fee' => 0,
|
|
|
'shipping_insure' => 0,
|
|
|
'integral_money' => 0,
|
|
|
'bonus' => 0,
|
|
|
'surplus' => 0,
|
|
|
'cod_fee' => 0,
|
|
|
'pay_fee' => 0,
|
|
|
'tax' => 0);
|
|
|
$weight = 0;
|
|
|
|
|
|
/* 商品总价 */
|
|
|
foreach ($goods AS $val)
|
|
|
{
|
|
|
/* 统计实体商品的个数 */
|
|
|
if ($val['is_real'])
|
|
|
{
|
|
|
$total['real_goods_count']++;
|
|
|
}
|
|
|
|
|
|
$total['goods_price'] += $val['goods_price'] * $val['goods_number'];
|
|
|
$total['market_price'] += $val['market_price'] * $val['goods_number'];
|
|
|
}
|
|
|
|
|
|
$total['saving'] = $total['market_price'] - $total['goods_price'];
|
|
|
$total['save_rate'] = $total['market_price'] ? round($total['saving'] * 100 / $total['market_price']) . '%' : 0;
|
|
|
|
|
|
$total['goods_price_formated'] = price_format($total['goods_price'], false);
|
|
|
$total['market_price_formated'] = price_format($total['market_price'], false);
|
|
|
$total['saving_formated'] = price_format($total['saving'], false);
|
|
|
|
|
|
/* 折扣 */
|
|
|
if ($order['extension_code'] != 'group_buy')
|
|
|
{
|
|
|
$discount = compute_discount_1();
|
|
|
$total['discount'] = $discount['discount'];
|
|
|
if ($total['discount'] > $total['goods_price'])
|
|
|
{
|
|
|
$total['discount'] = $total['goods_price'];
|
|
|
}
|
|
|
}
|
|
|
$total['discount_formated'] = price_format($total['discount'], false);
|
|
|
|
|
|
/* 税额 */
|
|
|
if (!empty($order['need_inv']) && $order['inv_type'] != '')
|
|
|
{
|
|
|
/* 查税率 */
|
|
|
$rate = 0;
|
|
|
foreach ($GLOBALS['_CFG']['invoice_type']['type'] as $key => $type)
|
|
|
{
|
|
|
if ($type == $order['inv_type'])
|
|
|
{
|
|
|
$rate = floatval($GLOBALS['_CFG']['invoice_type']['rate'][$key]) / 100;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if ($rate > 0)
|
|
|
{
|
|
|
$total['tax'] = $rate * $total['goods_price'];
|
|
|
}
|
|
|
}
|
|
|
$total['tax_formated'] = price_format($total['tax'], false);
|
|
|
|
|
|
/* 包装费用 */
|
|
|
if (!empty($order['pack_id']))
|
|
|
{
|
|
|
$total['pack_fee'] = pack_fee($order['pack_id'], $total['goods_price']);
|
|
|
}
|
|
|
$total['pack_fee_formated'] = price_format($total['pack_fee'], false);
|
|
|
|
|
|
|
|
|
|
|
|
/* 贺卡费用 */
|
|
|
if (!empty($order['card_id']))
|
|
|
{
|
|
|
$total['card_fee'] = card_fee($order['card_id'], $total['goods_price']);
|
|
|
}
|
|
|
$total['card_fee_formated'] = price_format($total['card_fee'], false);
|
|
|
|
|
|
/* 红包 */
|
|
|
|
|
|
|
|
|
if (!empty($order['bonus_id']))
|
|
|
{
|
|
|
|
|
|
$bonus = bonus_info($order['bonus_id']);
|
|
|
$total['bonus'] = $bonus['type_money'];
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$total['bonus_formated'] = price_format($total['bonus'], false);
|
|
|
|
|
|
/* 线下红包 */
|
|
|
if (!empty($order['bonus_kill']))
|
|
|
{
|
|
|
$bonus = bonus_info(0,$order['bonus_kill']);
|
|
|
$total['bonus_kill'] = $order['bonus_kill'];
|
|
|
$total['bonus_kill_formated'] = price_format($total['bonus_kill'], false);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* 配送费用 */
|
|
|
$shipping_cod_fee = NULL;
|
|
|
|
|
|
if ($order['shipping_id'] > 0 && $total['real_goods_count'] > 0)
|
|
|
{
|
|
|
$region['country'] = $consignee['country'];
|
|
|
$region['province'] = $consignee['province'];
|
|
|
$region['city'] = $consignee['city'];
|
|
|
$region['district'] = $consignee['district'];
|
|
|
$shipping_info = shipping_area_info($order['shipping_id'], $region);
|
|
|
|
|
|
if (!empty($shipping_info))
|
|
|
{
|
|
|
if ($order['extension_code'] == 'group_buy')
|
|
|
{
|
|
|
$weight_price = cart_weight_price_1(CART_GROUP_BUY_GOODS);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$weight_price = cart_weight_price_1();
|
|
|
}
|
|
|
|
|
|
// 查看购物车中是否全为免运费商品,若是则把运费赋为零
|
|
|
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('cart1') . " WHERE `session_id` = '" . SESS_ID. "' AND `extension_code` != 'package_buy' AND `is_shipping` = 0";
|
|
|
$shipping_count = $GLOBALS['db']->getOne($sql);
|
|
|
|
|
|
$total['shipping_fee'] = ($shipping_count == 0 AND $weight_price['free_shipping'] == 1) ?0 : shipping_fee($shipping_info['shipping_code'],$shipping_info['configure'], $weight_price['weight'], $total['goods_price'], $weight_price['number']);
|
|
|
|
|
|
if (!empty($order['need_insure']) && $shipping_info['insure'] > 0)
|
|
|
{
|
|
|
$total['shipping_insure'] = shipping_insure_fee($shipping_info['shipping_code'],
|
|
|
$total['goods_price'], $shipping_info['insure']);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$total['shipping_insure'] = 0;
|
|
|
}
|
|
|
|
|
|
if ($shipping_info['support_cod'])
|
|
|
{
|
|
|
$shipping_cod_fee = $shipping_info['pay_fee'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$total['shipping_fee_formated'] = price_format($total['shipping_fee'], false);
|
|
|
$total['shipping_insure_formated'] = price_format($total['shipping_insure'], false);
|
|
|
|
|
|
// 购物车中的商品能享受红包支付的总额
|
|
|
$bonus_amount = compute_discount_amount_1();
|
|
|
// 红包和积分最多能支付的金额为商品总额
|
|
|
$max_amount = $total['goods_price'] == 0 ? $total['goods_price'] : $total['goods_price'] - $bonus_amount;
|
|
|
|
|
|
/* 计算订单总额 */
|
|
|
if ($order['extension_code'] == 'group_buy' && $group_buy['deposit'] > 0)
|
|
|
{
|
|
|
$total['amount'] = $total['goods_price'];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$total['amount'] = $total['goods_price'] - $total['discount'] + $total['tax'] + $total['pack_fee'] + $total['card_fee'] +
|
|
|
$total['shipping_fee'] + $total['shipping_insure'] + $total['cod_fee'];
|
|
|
|
|
|
// 减去红包金额
|
|
|
$use_bonus = min($total['bonus'], $max_amount); // 实际减去的红包金额
|
|
|
if(isset($total['bonus_kill']))
|
|
|
{
|
|
|
$use_bonus_kill = min($total['bonus_kill'], $max_amount);
|
|
|
$total['amount'] -= $price = number_format($total['bonus_kill'], 2, '.', ''); // 还需要支付的订单金额
|
|
|
}
|
|
|
|
|
|
$total['bonus'] = $use_bonus;
|
|
|
$total['bonus_formated'] = price_format($total['bonus'], false);
|
|
|
|
|
|
$total['amount'] -= $use_bonus; // 还需要支付的订单金额
|
|
|
$max_amount -= $use_bonus; // 积分最多还能支付的金额
|
|
|
|
|
|
}
|
|
|
|
|
|
/* 余额 */
|
|
|
$order['surplus'] = $order['surplus'] > 0 ? $order['surplus'] : 0;
|
|
|
if ($total['amount'] > 0)
|
|
|
{
|
|
|
if (isset($order['surplus']) && $order['surplus'] > $total['amount'])
|
|
|
{
|
|
|
$order['surplus'] = $total['amount'];
|
|
|
$total['amount'] = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$total['amount'] -= floatval($order['surplus']);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$order['surplus'] = 0;
|
|
|
$total['amount'] = 0;
|
|
|
}
|
|
|
$total['surplus'] = $order['surplus'];
|
|
|
$total['surplus_formated'] = price_format($order['surplus'], false);
|
|
|
|
|
|
/* 积分 */
|
|
|
$order['integral'] = $order['integral'] > 0 ? $order['integral'] : 0;
|
|
|
if ($total['amount'] > 0 && $max_amount > 0 && $order['integral'] > 0)
|
|
|
{
|
|
|
$integral_money = value_of_integral($order['integral']);
|
|
|
|
|
|
// 使用积分支付
|
|
|
$use_integral = min($total['amount'], $max_amount, $integral_money); // 实际使用积分支付的金额
|
|
|
$total['amount'] -= $use_integral;
|
|
|
$total['integral_money'] = $use_integral;
|
|
|
$order['integral'] = integral_of_value($use_integral);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$total['integral_money'] = 0;
|
|
|
$order['integral'] = 0;
|
|
|
}
|
|
|
$total['integral'] = $order['integral'];
|
|
|
$total['integral_formated'] = price_format($total['integral_money'], false);
|
|
|
|
|
|
/* 保存订单信息 */
|
|
|
$_SESSION['flow_order'] = $order;
|
|
|
|
|
|
$se_flow_type = isset($_SESSION['flow_type']) ? $_SESSION['flow_type'] : '';
|
|
|
|
|
|
/* 支付费用 */
|
|
|
if (!empty($order['pay_id']) && ($total['real_goods_count'] > 0 || $se_flow_type != CART_EXCHANGE_GOODS))
|
|
|
{
|
|
|
$total['pay_fee'] = pay_fee($order['pay_id'], $total['amount'], $shipping_cod_fee);
|
|
|
}
|
|
|
|
|
|
$total['pay_fee_formated'] = price_format($total['pay_fee'], false);
|
|
|
|
|
|
$total['amount'] += $total['pay_fee']; // 订单总额累加上支付费用
|
|
|
$total['amount_formated'] = price_format($total['amount'], false);
|
|
|
|
|
|
/* 取得可以得到的积分和红包 */
|
|
|
if ($order['extension_code'] == 'group_buy')
|
|
|
{
|
|
|
$total['will_get_integral'] = $group_buy['gift_integral'];
|
|
|
}
|
|
|
elseif ($order['extension_code'] == 'exchange_goods')
|
|
|
{
|
|
|
$total['will_get_integral'] = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$total['will_get_integral'] = get_give_integral_1($goods);
|
|
|
}
|
|
|
$total['will_get_bonus'] = $order['extension_code'] == 'exchange_goods' ? 0 : price_format(get_total_bonus_1(), false);
|
|
|
$total['formated_goods_price'] = price_format($total['goods_price'], false);
|
|
|
$total['formated_market_price'] = price_format($total['market_price'], false);
|
|
|
$total['formated_saving'] = price_format($total['saving'], false);
|
|
|
|
|
|
if ($order['extension_code'] == 'exchange_goods')
|
|
|
{
|
|
|
$sql = 'SELECT SUM(eg.exchange_integral) '.
|
|
|
'FROM ' . $GLOBALS['ecs']->table('cart1') . ' AS c,' . $GLOBALS['ecs']->table('exchange_goods') . 'AS eg '.
|
|
|
"WHERE c.goods_id = eg.goods_id AND c.session_id= '" . SESS_ID . "' " .
|
|
|
" AND c.rec_type = '" . CART_EXCHANGE_GOODS . "' " .
|
|
|
' AND c.is_gift = 0 AND c.goods_id > 0 ' .
|
|
|
'GROUP BY eg.goods_id';
|
|
|
$exchange_integral = $GLOBALS['db']->getOne($sql);
|
|
|
$total['exchange_integral'] = $exchange_integral;
|
|
|
}
|
|
|
|
|
|
return $total;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 计算折扣:根据购物车和优惠活动
|
|
|
* @return float 折扣
|
|
|
*/
|
|
|
function compute_discount_1()
|
|
|
{
|
|
|
/* 查询优惠活动 */
|
|
|
$now = gmtime();
|
|
|
$user_rank = ',' . $_SESSION['user_rank'] . ',';
|
|
|
$sql = "SELECT *" .
|
|
|
"FROM " . $GLOBALS['ecs']->table('favourable_activity') .
|
|
|
" WHERE start_time <= '$now'" .
|
|
|
" AND end_time >= '$now'" .
|
|
|
" AND CONCAT(',', user_rank, ',') LIKE '%" . $user_rank . "%'" .
|
|
|
" AND act_type " . db_create_in(array(FAT_DISCOUNT, FAT_PRICE));
|
|
|
$favourable_list = $GLOBALS['db']->getAll($sql);
|
|
|
if (!$favourable_list)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/* 查询购物车商品 */
|
|
|
$sql = "SELECT c.goods_id, c.goods_price * c.goods_number AS subtotal, g.cat_id, g.brand_id " .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " .
|
|
|
"WHERE c.goods_id = g.goods_id " .
|
|
|
"AND c.session_id = '" . SESS_ID . "' " .
|
|
|
"AND c.parent_id = 0 " .
|
|
|
"AND c.is_gift = 0 " .
|
|
|
"AND rec_type = '" . CART_GENERAL_GOODS . "'";
|
|
|
$goods_list = $GLOBALS['db']->getAll($sql);
|
|
|
if (!$goods_list)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/* 初始化折扣 */
|
|
|
$discount = 0;
|
|
|
$favourable_name = array();
|
|
|
|
|
|
/* 循环计算每个优惠活动的折扣 */
|
|
|
foreach ($favourable_list as $favourable)
|
|
|
{
|
|
|
$total_amount = 0;
|
|
|
if ($favourable['act_range'] == FAR_ALL)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_CATEGORY)
|
|
|
{
|
|
|
/* 找出分类id的子分类id */
|
|
|
$id_list = array();
|
|
|
$raw_id_list = explode(',', $favourable['act_range_ext']);
|
|
|
foreach ($raw_id_list as $id)
|
|
|
{
|
|
|
$id_list = array_merge($id_list, array_keys(cat_list($id, 0, false)));
|
|
|
}
|
|
|
$ids = join(',', array_unique($id_list));
|
|
|
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $ids . ',', ',' . $goods['cat_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_BRAND)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $favourable['act_range_ext'] . ',', ',' . $goods['brand_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_GOODS)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $favourable['act_range_ext'] . ',', ',' . $goods['goods_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
/* 如果金额满足条件,累计折扣 */
|
|
|
if ($total_amount > 0 && $total_amount >= $favourable['min_amount'] && ($total_amount <= $favourable['max_amount'] || $favourable['max_amount'] == 0))
|
|
|
{
|
|
|
if ($favourable['act_type'] == FAT_DISCOUNT)
|
|
|
{
|
|
|
$discount += $total_amount * (1 - $favourable['act_type_ext'] / 100);
|
|
|
|
|
|
$favourable_name[] = $favourable['act_name'];
|
|
|
}
|
|
|
elseif ($favourable['act_type'] == FAT_PRICE)
|
|
|
{
|
|
|
$discount += $favourable['act_type_ext'];
|
|
|
|
|
|
$favourable_name[] = $favourable['act_name'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return array('discount' => $discount, 'name' => $favourable_name);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算购物车中的商品能享受红包支付的总额
|
|
|
* @return float 享受红包支付的总额
|
|
|
*/
|
|
|
function compute_discount_amount_1()
|
|
|
{
|
|
|
/* 查询优惠活动 */
|
|
|
$now = gmtime();
|
|
|
$user_rank = ',' . $_SESSION['user_rank'] . ',';
|
|
|
$sql = "SELECT *" .
|
|
|
"FROM " . $GLOBALS['ecs']->table('favourable_activity') .
|
|
|
" WHERE start_time <= '$now'" .
|
|
|
" AND end_time >= '$now'" .
|
|
|
" AND CONCAT(',', user_rank, ',') LIKE '%" . $user_rank . "%'" .
|
|
|
" AND act_type " . db_create_in(array(FAT_DISCOUNT, FAT_PRICE));
|
|
|
$favourable_list = $GLOBALS['db']->getAll($sql);
|
|
|
if (!$favourable_list)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/* 查询购物车商品 */
|
|
|
$sql = "SELECT c.goods_id, c.goods_price * c.goods_number AS subtotal, g.cat_id, g.brand_id " .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " .
|
|
|
"WHERE c.goods_id = g.goods_id " .
|
|
|
"AND c.session_id = '" . SESS_ID . "' " .
|
|
|
"AND c.parent_id = 0 " .
|
|
|
"AND c.is_gift = 0 " .
|
|
|
"AND rec_type = '" . CART_GENERAL_GOODS . "'";
|
|
|
$goods_list = $GLOBALS['db']->getAll($sql);
|
|
|
if (!$goods_list)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/* 初始化折扣 */
|
|
|
$discount = 0;
|
|
|
$favourable_name = array();
|
|
|
|
|
|
/* 循环计算每个优惠活动的折扣 */
|
|
|
foreach ($favourable_list as $favourable)
|
|
|
{
|
|
|
$total_amount = 0;
|
|
|
if ($favourable['act_range'] == FAR_ALL)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_CATEGORY)
|
|
|
{
|
|
|
/* 找出分类id的子分类id */
|
|
|
$id_list = array();
|
|
|
$raw_id_list = explode(',', $favourable['act_range_ext']);
|
|
|
foreach ($raw_id_list as $id)
|
|
|
{
|
|
|
$id_list = array_merge($id_list, array_keys(cat_list($id, 0, false)));
|
|
|
}
|
|
|
$ids = join(',', array_unique($id_list));
|
|
|
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $ids . ',', ',' . $goods['cat_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_BRAND)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $favourable['act_range_ext'] . ',', ',' . $goods['brand_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
elseif ($favourable['act_range'] == FAR_GOODS)
|
|
|
{
|
|
|
foreach ($goods_list as $goods)
|
|
|
{
|
|
|
if (strpos(',' . $favourable['act_range_ext'] . ',', ',' . $goods['goods_id'] . ',') !== false)
|
|
|
{
|
|
|
$total_amount += $goods['subtotal'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
if ($total_amount > 0 && $total_amount >= $favourable['min_amount'] && ($total_amount <= $favourable['max_amount'] || $favourable['max_amount'] == 0))
|
|
|
{
|
|
|
if ($favourable['act_type'] == FAT_DISCOUNT)
|
|
|
{
|
|
|
$discount += $total_amount * (1 - $favourable['act_type_ext'] / 100);
|
|
|
}
|
|
|
elseif ($favourable['act_type'] == FAT_PRICE)
|
|
|
{
|
|
|
$discount += $favourable['act_type_ext'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
return $discount;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获得购物车中商品的总重量、总价格、总数量
|
|
|
*
|
|
|
* @access public
|
|
|
* @param int $type 类型:默认普通商品
|
|
|
* @return array
|
|
|
*/
|
|
|
function cart_weight_price_1($type = CART_GENERAL_GOODS)
|
|
|
{
|
|
|
$package_row['weight'] = 0;
|
|
|
$package_row['amount'] = 0;
|
|
|
$package_row['number'] = 0;
|
|
|
|
|
|
$packages_row['free_shipping'] = 1;
|
|
|
|
|
|
/* 计算超值礼包内商品的相关配送参数 */
|
|
|
$sql = 'SELECT goods_id, goods_number, goods_price FROM ' . $GLOBALS['ecs']->table('cart1') . " WHERE extension_code = 'package_buy' AND session_id = '" . SESS_ID . "'";
|
|
|
$row = $GLOBALS['db']->getAll($sql);
|
|
|
|
|
|
if ($row)
|
|
|
{
|
|
|
$packages_row['free_shipping'] = 0;
|
|
|
$free_shipping_count = 0;
|
|
|
|
|
|
foreach ($row as $val)
|
|
|
{
|
|
|
// 如果商品全为免运费商品,设置一个标识变量
|
|
|
$sql = 'SELECT count(*) FROM ' .
|
|
|
$GLOBALS['ecs']->table('package_goods') . ' AS pg, ' .
|
|
|
$GLOBALS['ecs']->table('goods') . ' AS g ' .
|
|
|
"WHERE g.goods_id = pg.goods_id AND g.is_shipping = 0 AND pg.package_id = '" . $val['goods_id'] . "'";
|
|
|
$shipping_count = $GLOBALS['db']->getOne($sql);
|
|
|
|
|
|
if ($shipping_count > 0)
|
|
|
{
|
|
|
// 循环计算每个超值礼包商品的重量和数量,注意一个礼包中可能包换若干个同一商品
|
|
|
$sql = 'SELECT SUM(g.goods_weight * pg.goods_number) AS weight, ' .
|
|
|
'SUM(pg.goods_number) AS number FROM ' .
|
|
|
$GLOBALS['ecs']->table('package_goods') . ' AS pg, ' .
|
|
|
$GLOBALS['ecs']->table('goods') . ' AS g ' .
|
|
|
"WHERE g.goods_id = pg.goods_id AND g.is_shipping = 0 AND pg.package_id = '" . $val['goods_id'] . "'";
|
|
|
|
|
|
$goods_row = $GLOBALS['db']->getRow($sql);
|
|
|
$package_row['weight'] += floatval($goods_row['weight']) * $val['goods_number'];
|
|
|
$package_row['amount'] += floatval($val['goods_price']) * $val['goods_number'];
|
|
|
$package_row['number'] += intval($goods_row['number']) * $val['goods_number'];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
$free_shipping_count++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$packages_row['free_shipping'] = $free_shipping_count == count($row) ? 1 : 0;
|
|
|
}
|
|
|
|
|
|
/* 获得购物车中非超值礼包商品的总重量 */
|
|
|
$sql = 'SELECT SUM(g.goods_weight * c.goods_number) AS weight, ' .
|
|
|
'SUM(c.goods_price * c.goods_number) AS amount, ' .
|
|
|
'SUM(c.goods_number) AS number '.
|
|
|
'FROM ' . $GLOBALS['ecs']->table('cart1') . ' AS c '.
|
|
|
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . ' AS g ON g.goods_id = c.goods_id '.
|
|
|
"WHERE c.session_id = '" . SESS_ID . "' " .
|
|
|
"AND rec_type = '$type' AND g.is_shipping = 0 AND c.extension_code != 'package_buy'";
|
|
|
$row = $GLOBALS['db']->getRow($sql);
|
|
|
|
|
|
$packages_row['weight'] = floatval($row['weight']) + $package_row['weight'];
|
|
|
$packages_row['amount'] = floatval($row['amount']) + $package_row['amount'];
|
|
|
$packages_row['number'] = intval($row['number']) + $package_row['number'];
|
|
|
/* 格式化重量 */
|
|
|
$packages_row['formated_weight'] = formated_weight($packages_row['weight']);
|
|
|
|
|
|
return $packages_row;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获得用户的可用积分
|
|
|
*
|
|
|
* @access private
|
|
|
* @return integral
|
|
|
*/
|
|
|
function flow_available_points_1()
|
|
|
{
|
|
|
$sql = "SELECT SUM(g.integral * c.goods_number) ".
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g " .
|
|
|
"WHERE c.session_id = '" . SESS_ID . "' 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);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取得购物车该赠送的积分数
|
|
|
* @return int 积分数
|
|
|
*/
|
|
|
function get_give_integral_1()
|
|
|
{
|
|
|
$sql = "SELECT SUM(c.goods_number * IF(g.give_integral > -1, g.give_integral, c.goods_price))" .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') . " AS c, " .
|
|
|
$GLOBALS['ecs']->table('goods') . " AS g " .
|
|
|
"WHERE c.goods_id = g.goods_id " .
|
|
|
"AND c.session_id = '" . SESS_ID . "' " .
|
|
|
"AND c.goods_id > 0 " .
|
|
|
"AND c.parent_id = 0 " .
|
|
|
"AND c.rec_type = 0 " .
|
|
|
"AND c.is_gift = 0";
|
|
|
|
|
|
return intval($GLOBALS['db']->getOne($sql));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取得购物车总金额
|
|
|
* @params boolean $include_gift 是否包括赠品
|
|
|
* @param int $type 类型:默认普通商品
|
|
|
* @return float 购物车总金额
|
|
|
*/
|
|
|
function cart_amount_1($include_gift = true, $type = CART_GENERAL_GOODS)
|
|
|
{
|
|
|
$sql = "SELECT SUM(goods_price * goods_number) " .
|
|
|
" FROM " . $GLOBALS['ecs']->table('cart1') .
|
|
|
" WHERE session_id = '" . SESS_ID . "' " .
|
|
|
"AND rec_type = '$type' ";
|
|
|
|
|
|
if (!$include_gift)
|
|
|
{
|
|
|
$sql .= ' AND is_gift = 0 AND goods_id > 0';
|
|
|
}
|
|
|
|
|
|
return floatval($GLOBALS['db']->getOne($sql));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取得当前用户应该得到的红包总额
|
|
|
*/
|
|
|
function get_total_bonus_1()
|
|
|
{
|
|
|
$day = getdate();
|
|
|
$today = local_mktime(23, 59, 59, $day['mon'], $day['mday'], $day['year']);
|
|
|
|
|
|
/* 按商品发的红包 */
|
|
|
$sql = "SELECT SUM(c.goods_number * t.type_money)" .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') . " AS c, "
|
|
|
. $GLOBALS['ecs']->table('bonus_type') . " AS t, "
|
|
|
. $GLOBALS['ecs']->table('goods') . " AS g " .
|
|
|
"WHERE c.session_id = '" . SESS_ID . "' " .
|
|
|
"AND c.is_gift = 0 " .
|
|
|
"AND c.goods_id = g.goods_id " .
|
|
|
"AND g.bonus_type_id = t.type_id " .
|
|
|
"AND t.send_type = '" . SEND_BY_GOODS . "' " .
|
|
|
"AND t.send_start_date <= '$today' " .
|
|
|
"AND t.send_end_date >= '$today' " .
|
|
|
"AND c.rec_type = '" . CART_GENERAL_GOODS . "'";
|
|
|
$goods_total = floatval($GLOBALS['db']->getOne($sql));
|
|
|
|
|
|
/* 取得购物车中非赠品总金额 */
|
|
|
$sql = "SELECT SUM(goods_price * goods_number) " .
|
|
|
"FROM " . $GLOBALS['ecs']->table('cart1') .
|
|
|
" WHERE session_id = '" . SESS_ID . "' " .
|
|
|
" AND is_gift = 0 " .
|
|
|
" AND rec_type = '" . CART_GENERAL_GOODS . "'";
|
|
|
$amount = floatval($GLOBALS['db']->getOne($sql));
|
|
|
|
|
|
/* 按订单发的红包 */
|
|
|
$sql = "SELECT FLOOR('$amount' / min_amount) * type_money " .
|
|
|
"FROM " . $GLOBALS['ecs']->table('bonus_type') .
|
|
|
" WHERE send_type = '" . SEND_BY_ORDER . "' " .
|
|
|
" AND send_start_date <= '$today' " .
|
|
|
"AND send_end_date >= '$today' " .
|
|
|
"AND min_amount > 0 ";
|
|
|
$order_total = floatval($GLOBALS['db']->getOne($sql));
|
|
|
|
|
|
return $goods_total + $order_total;
|
|
|
}
|
|
|
/**
|
|
|
* 检查订单中商品库存
|
|
|
*
|
|
|
* @access public
|
|
|
* @param array $arr
|
|
|
*
|
|
|
* @return void
|
|
|
*/
|
|
|
function flow_cart_stock_1($arr)
|
|
|
{
|
|
|
foreach ($arr AS $key => $val)
|
|
|
{
|
|
|
$val = intval(make_semiangle($val));
|
|
|
if ($val <= 0)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
$sql = "SELECT `goods_id`, `goods_attr_id`, `extension_code` FROM" .$GLOBALS['ecs']->table('cart1').
|
|
|
" WHERE rec_id='$key' AND session_id='" . SESS_ID . "'";
|
|
|
$goods = $GLOBALS['db']->getRow($sql);
|
|
|
|
|
|
$sql = "SELECT g.goods_name, g.goods_number, c.product_id ".
|
|
|
"FROM " .$GLOBALS['ecs']->table('goods'). " AS g, ".
|
|
|
$GLOBALS['ecs']->table('cart1'). " AS c ".
|
|
|
"WHERE g.goods_id = c.goods_id AND c.rec_id = '$key'";
|
|
|
$row = $GLOBALS['db']->getRow($sql);
|
|
|
|
|
|
//系统启用了库存,检查输入的商品数量是否有效
|
|
|
if (intval($GLOBALS['_CFG']['use_storage']) > 0 && $goods['extension_code'] != 'package_buy')
|
|
|
{
|
|
|
if ($row['goods_number'] < $val)
|
|
|
{
|
|
|
show_message(sprintf($GLOBALS['_LANG']['stock_insufficiency'], $row['goods_name'],
|
|
|
$row['goods_number'], $row['goods_number']));
|
|
|
exit;
|
|
|
}
|
|
|
|
|
|
/* 是货品 */
|
|
|
$row['product_id'] = trim($row['product_id']);
|
|
|
if (!empty($row['product_id']))
|
|
|
{
|
|
|
$sql = "SELECT product_number FROM " .$GLOBALS['ecs']->table('products'). " WHERE goods_id = '" . $goods['goods_id'] . "' AND product_id = '" . $row['product_id'] . "'";
|
|
|
$product_number = $GLOBALS['db']->getOne($sql);
|
|
|
if ($product_number < $val)
|
|
|
{
|
|
|
show_message(sprintf($GLOBALS['_LANG']['stock_insufficiency'], $row['goods_name'],
|
|
|
$row['goods_number'], $row['goods_number']));
|
|
|
exit;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
elseif (intval($GLOBALS['_CFG']['use_storage']) > 0 && $goods['extension_code'] == 'package_buy')
|
|
|
{
|
|
|
if (judge_package_stock($goods['goods_id'], $val))
|
|
|
{
|
|
|
show_message($GLOBALS['_LANG']['package_stock_insufficiency']);
|
|
|
exit;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 清空购物车
|
|
|
* @param int $type 类型:默认普通商品
|
|
|
*/
|
|
|
function clear_cart_1($type = CART_GENERAL_GOODS)
|
|
|
{
|
|
|
$sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart1') .
|
|
|
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '$type'";
|
|
|
$GLOBALS['db']->query($sql);
|
|
|
}
|
|
|
?>
|