$val)
{
$config[$val['name']] = $val['value'];
}
return $config;
}
else
{
return false;
}
}
/**
* å–得已安装的é…é€æ–¹å¼
* @return array 已安装的é…é€æ–¹å¼
*/
function shipping_list()
{
$sql = 'SELECT shipping_id, shipping_name ' .
'FROM ' . $GLOBALS['ecs']->table('shipping') .
' WHERE enabled = 1';
return $GLOBALS['db']->getAll($sql);
}
/**
* å–å¾—é…é€æ–¹å¼ä¿¡æ¯
* @param int $shipping_id é…é€æ–¹å¼id
* @return array é…é€æ–¹å¼ä¿¡æ¯
*/
function shipping_info($shipping_id)
{
$sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('shipping') .
" WHERE shipping_id = '$shipping_id' " .
'AND enabled = 1';
return $GLOBALS['db']->getRow($sql);
}
/**
* å–å¾—å¯ç”¨çš„é…é€æ–¹å¼åˆ—表
* @param array $region_id_list 收货人地区id数组(包括国家ã€çœã€å¸‚ã€åŒºï¼‰
* @return array é…é€æ–¹å¼æ•°ç»„
*/
function available_shipping_list($region_id_list)
{
$sql = 'SELECT s.shipping_id, s.shipping_code, s.shipping_name, ' .
's.shipping_desc, s.insure, s.support_cod, a.configure ' .
'FROM ' . $GLOBALS['ecs']->table('shipping') . ' AS s, ' .
$GLOBALS['ecs']->table('shipping_area') . ' AS a, ' .
$GLOBALS['ecs']->table('area_region') . ' AS r ' .
'WHERE r.region_id ' . db_create_in($region_id_list) .
' AND r.shipping_area_id = a.shipping_area_id AND a.shipping_id = s.shipping_id AND s.enabled = 1';
return $GLOBALS['db']->getAll($sql);
}
/**
* å–å¾—æŸé…é€æ–¹å¼å¯¹åº”于æŸæ”¶è´§åœ°å€çš„区域信æ¯
* @param int $shipping_id é…é€æ–¹å¼id
* @param array $region_id_list 收货人地区id数组
* @return array é…é€åŒºåŸŸä¿¡æ¯ï¼ˆconfig 对应ç€ååºåˆ—化的 configure)
*/
function shipping_area_info($shipping_id, $region_id_list)
{
$sql = 'SELECT s.shipping_code, s.shipping_name, ' .
's.shipping_desc, s.insure, s.support_cod, a.configure ' .
'FROM ' . $GLOBALS['ecs']->table('shipping') . ' AS s, ' .
$GLOBALS['ecs']->table('shipping_area') . ' AS a, ' .
$GLOBALS['ecs']->table('area_region') . ' AS r ' .
"WHERE s.shipping_id = '$shipping_id' " .
'AND r.region_id ' . db_create_in($region_id_list) .
' AND r.shipping_area_id = a.shipping_area_id AND a.shipping_id = s.shipping_id AND s.enabled = 1';
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
$shipping_config = unserialize_config($row['configure']);
if (isset($shipping_config['pay_fee']))
{
if (strpos($shipping_config['pay_fee'], '%') !== false)
{
$row['pay_fee'] = floatval($shipping_config['pay_fee']) . '%';
}
else
{
$row['pay_fee'] = floatval($shipping_config['pay_fee']);
}
}
else
{
$row['pay_fee'] = 0.00;
}
}
return $row;
}
/**
* 计算è¿è´¹
* @param string $shipping_code é…é€æ–¹å¼ä»£ç
* @param mix $shipping_config é…é€æ–¹å¼é…置信æ¯
* @param float $goods_weight 商å“é‡é‡
* @param float $goods_amount 商å“金é¢
* @param float $goods_number 商å“æ•°é‡
* @return float è¿è´¹
*/
function shipping_fee($shipping_code, $shipping_config, $goods_weight, $goods_amount, $goods_number='')
{
if (!is_array($shipping_config))
{
$shipping_config = unserialize($shipping_config);
}
$filename = ROOT_PATH . 'includes/modules/shipping/' . $shipping_code . '.php';
if (file_exists($filename))
{
include_once($filename);
$obj = new $shipping_code($shipping_config);
return $obj->calculate($goods_weight, $goods_amount, $goods_number);
}
else
{
return 0;
}
}
/**
* 获å–指定é…é€çš„ä¿ä»·è´¹ç”¨
*
* @access public
* @param string $shipping_code é…é€æ–¹å¼çš„code
* @param float $goods_amount ä¿ä»·é‡‘é¢
* @param mix $insure ä¿ä»·æ¯”例
* @return float
*/
function shipping_insure_fee($shipping_code, $goods_amount, $insure)
{
if (strpos($insure, '%') === false)
{
/* 如果ä¿ä»·è´¹ç”¨ä¸æ˜¯ç™¾åˆ†æ¯”则直接返回该数值 */
return floatval($insure);
}
else
{
$path = ROOT_PATH . 'includes/modules/shipping/' . $shipping_code . '.php';
if (file_exists($path))
{
include_once($path);
$shipping = new $shipping_code;
$insure = floatval($insure) / 100;
if (method_exists($shipping, 'calculate_insure'))
{
return $shipping->calculate_insure($goods_amount, $insure);
}
else
{
return ceil($goods_amount * $insure);
}
}
else
{
return false;
}
}
}
/**
* å–得已安装的支付方å¼åˆ—表
* @return array 已安装的é…é€æ–¹å¼åˆ—表
*/
function payment_list()
{
$sql = 'SELECT pay_id, pay_name ' .
'FROM ' . $GLOBALS['ecs']->table('payment') .
' WHERE enabled = 1';
return $GLOBALS['db']->getAll($sql);
}
/**
* å–得支付方å¼ä¿¡æ¯
* @param int $pay_id 支付方å¼id
* @return array 支付方å¼ä¿¡æ¯
*/
function payment_info($pay_id)
{
$sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('payment') .
" WHERE pay_id = '$pay_id' AND enabled = 1";
return $GLOBALS['db']->getRow($sql);
}
/**
* 获得订å•éœ€è¦æ”¯ä»˜çš„支付费用
*
* @access public
* @param integer $payment_id
* @param float $order_amount
* @param mix $cod_fee
* @return float
*/
function pay_fee($payment_id, $order_amount, $cod_fee=null)
{
$pay_fee = 0;
$payment = payment_info($payment_id);
$rate = ($payment['is_cod'] && !is_null($cod_fee)) ? $cod_fee : $payment['pay_fee'];
if (strpos($rate, '%') !== false)
{
/* 支付费用是一个比例 */
$val = floatval($rate) / 100;
$pay_fee = $val > 0 ? $order_amount * $val /(1- $val) : 0;
}
else
{
$pay_fee = floatval($rate);
}
return round($pay_fee, 2);
}
/**
* å–å¾—å¯ç”¨çš„支付方å¼åˆ—表
* @param bool $support_cod é…é€æ–¹å¼æ˜¯å¦æ”¯æŒè´§åˆ°ä»˜æ¬¾
* @param int $cod_fee 货到付款手ç»è´¹ï¼ˆå½“é…é€æ–¹å¼æ”¯æŒè´§åˆ°ä»˜æ¬¾æ—¶æ‰ä¼ æ¤å‚数)
* @param int $is_online 是å¦æ”¯æŒåœ¨çº¿æ”¯ä»˜
* @return array é…é€æ–¹å¼æ•°ç»„
*/
function available_payment_list($support_cod, $cod_fee = 0, $is_online = false)
{
$sql = 'SELECT pay_id, pay_code, pay_name, pay_fee, pay_desc, pay_config, is_cod' .
' FROM ' . $GLOBALS['ecs']->table('payment') .
' WHERE enabled = 1 ';
if (!$support_cod)
{
$sql .= 'AND is_cod = 0 '; // 如果ä¸æ”¯æŒè´§åˆ°ä»˜æ¬¾
}
if ($is_online)
{
$sql .= "AND is_online = '1' ";
}
$sql .= 'ORDER BY pay_order'; // 排åº
$res = $GLOBALS['db']->query($sql);
$pay_list = array();
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['is_cod'] == '1')
{
$row['pay_fee'] = $cod_fee;
}
$row['format_pay_fee'] = strpos($row['pay_fee'], '%') !== false ? $row['pay_fee'] :
price_format($row['pay_fee'], false);
$modules[] = $row;
}
include_once(ROOT_PATH.'includes/lib_compositor.php');
if(isset($modules))
{
return $modules;
}
}
/**
* å–得包装列表
* @return array 包装列表
*/
function pack_list()
{
$sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('pack');
$res = $GLOBALS['db']->query($sql);
$list = array();
while ($row = $GLOBALS['db']->fetchRow($res))
{
$row['format_pack_fee'] = price_format($row['pack_fee'], false);
$row['format_free_money'] = price_format($row['free_money'], false);
$list[] = $row;
}
return $list;
}
/**
* å–得包装信æ¯
* @param int $pack_id 包装id
* @return array 包装信æ¯
*/
function pack_info($pack_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('pack') .
" WHERE pack_id = '$pack_id'";
return $GLOBALS['db']->getRow($sql);
}
/**
* æ ¹æ®è®¢å•ä¸çš„商å“总é¢æ¥èŽ·å¾—包装的费用
*
* @access public
* @param integer $pack_id
* @param float $goods_amount
* @return float
*/
function pack_fee($pack_id, $goods_amount)
{
$pack = pack_info($pack_id);
$val = (floatval($pack['free_money']) <= $goods_amount && $pack['free_money'] > 0) ? 0 : floatval($pack['pack_fee']);
return $val;
}
/**
* å–å¾—è´ºå¡åˆ—表
* @return array è´ºå¡åˆ—表
*/
function card_list()
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('card');
$res = $GLOBALS['db']->query($sql);
$list = array();
while ($row = $GLOBALS['db']->fetchRow($res))
{
$row['format_card_fee'] = price_format($row['card_fee'], false);
$row['format_free_money'] = price_format($row['free_money'], false);
$list[] = $row;
}
return $list;
}
/**
* å–å¾—è´ºå¡ä¿¡æ¯
* @param int $card_id è´ºå¡id
* @return array è´ºå¡ä¿¡æ¯
*/
function card_info($card_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('card') .
" WHERE card_id = '$card_id'";
return $GLOBALS['db']->getRow($sql);
}
/**
* æ ¹æ®è®¢å•ä¸å•†å“总é¢èŽ·å¾—需è¦æ”¯ä»˜çš„è´ºå¡è´¹ç”¨
*
* @access public
* @param integer $card_id
* @param float $goods_amount
* @return float
*/
function card_fee($card_id, $goods_amount)
{
$card = card_info($card_id);
return ($card['free_money'] <= $goods_amount && $card['free_money'] > 0) ? 0 : $card['card_fee'];
}
/**
* å–得订å•ä¿¡æ¯
* @param int $order_id 订å•id(如果order_id > 0 就按id查,å¦åˆ™æŒ‰sn查)
* @param string $order_sn 订å•å·
* @return array 订å•ä¿¡æ¯ï¼ˆé‡‘é¢éƒ½æœ‰ç›¸åº”æ ¼å¼åŒ–çš„å—段,å‰ç¼€æ˜¯formated_)
*/
function order_info($order_id, $order_sn = '')
{
/* 计算订å•å„ç§è´¹ç”¨ä¹‹å’Œçš„è¯å¥ */
$total_fee = " (goods_amount - discount + tax + shipping_fee + insure_fee + pay_fee + pack_fee + card_fee) AS total_fee ";
$order_id = intval($order_id);
if ($order_id > 0)
{
$sql = "SELECT *, " . $total_fee . " FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE order_id = '$order_id'";
}
else
{
$sql = "SELECT *, " . $total_fee . " FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE order_sn = '$order_sn'";
}
$order = $GLOBALS['db']->getRow($sql);
/* æ ¼å¼åŒ–金é¢å—段 */
if ($order)
{
$order['formated_goods_amount'] = price_format($order['goods_amount'], false);
$order['formated_discount'] = price_format($order['discount'], false);
$order['formated_tax'] = price_format($order['tax'], false);
$order['formated_shipping_fee'] = price_format($order['shipping_fee'], false);
$order['formated_insure_fee'] = price_format($order['insure_fee'], false);
$order['formated_pay_fee'] = price_format($order['pay_fee'], false);
$order['formated_pack_fee'] = price_format($order['pack_fee'], false);
$order['formated_card_fee'] = price_format($order['card_fee'], false);
$order['formated_total_fee'] = price_format($order['total_fee'], false);
$order['formated_money_paid'] = price_format($order['money_paid'], false);
$order['formated_bonus'] = price_format($order['bonus'], false);
$order['formated_integral_money'] = price_format($order['integral_money'], false);
$order['formated_surplus'] = price_format($order['surplus'], false);
$order['formated_order_amount'] = price_format(abs($order['order_amount']), false);
$order['formated_add_time'] = local_date($GLOBALS['_CFG']['time_format'], $order['add_time']);
}
return $order;
}
/**
* 判æ–订å•æ˜¯å¦å·²å®Œæˆ
* @param array $order 订å•ä¿¡æ¯
* @return bool
*/
function order_finished($order)
{
return $order['order_status'] == OS_CONFIRMED &&
($order['shipping_status'] == SS_SHIPPED || $order['shipping_status'] == SS_RECEIVED) &&
($order['pay_status'] == PS_PAYED || $order['pay_status'] == PS_PAYING);
}
/**
* å–得订å•å•†å“
* @param int $order_id 订å•id
* @return array 订å•å•†å“数组
*/
function order_goods($order_id)
{
$sql = "SELECT rec_id, goods_id, goods_name, goods_sn, market_price, goods_number, " .
"goods_price, goods_attr, is_real, parent_id, is_gift, " .
"goods_price * goods_number AS subtotal, extension_code " .
"FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id'";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['extension_code'] == 'package_buy')
{
$row['package_goods_list'] = get_package_goods($row['goods_id']);
}
$goods_list[] = $row;
}
//return $GLOBALS['db']->getAll($sql);
return $goods_list;
}
/**
* å–得订å•æ€»é‡‘é¢
* @param int $order_id 订å•id
* @param bool $include_gift 是å¦åŒ…æ‹¬èµ å“
* @return float 订å•æ€»é‡‘é¢
*/
function order_amount($order_id, $include_gift = true)
{
$sql = "SELECT SUM(goods_price * goods_number) " .
"FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id'";
if (!$include_gift)
{
$sql .= " AND is_gift = 0";
}
return floatval($GLOBALS['db']->getOne($sql));
}
/**
* å–å¾—æŸè®¢å•å•†å“总é‡é‡å’Œæ€»é‡‘é¢ï¼ˆå¯¹åº” cart_weight_price)
* @param int $order_id 订å•id
* @return array ('weight' => **, 'amount' => **, 'formated_weight' => **)
*/
function order_weight_price($order_id)
{
$sql = "SELECT SUM(g.goods_weight * o.goods_number) AS weight, " .
"SUM(o.goods_price * o.goods_number) AS amount ," .
"SUM(o.goods_number) AS number " .
"FROM " . $GLOBALS['ecs']->table('order_goods') . " AS o, " .
$GLOBALS['ecs']->table('goods') . " AS g " .
"WHERE o.order_id = '$order_id' " .
"AND o.goods_id = g.goods_id";
$row = $GLOBALS['db']->getRow($sql);
$row['weight'] = floatval($row['weight']);
$row['amount'] = floatval($row['amount']);
$row['number'] = intval($row['number']);
/* æ ¼å¼åŒ–é‡é‡ */
$row['formated_weight'] = formated_weight($row['weight']);
return $row;
}
/**
* 获得订å•ä¸çš„费用信æ¯
*
* @access public
* @param array $order
* @param array $goods
* @param array $consignee
* @param bool $is_gb_deposit 是å¦å›¢è´ä¿è¯é‡‘(如果是,应付款金é¢åªè®¡ç®—商å“总é¢å’Œæ”¯ä»˜è´¹ç”¨ï¼Œå¯ä»¥èŽ·å¾—çš„ç§¯åˆ†å– $gift_integral)
* @return array
*/
function order_fee($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();
$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(CART_GROUP_BUY_GOODS);
}
else
{
$weight_price = cart_weight_price();
}
// 查看è´ç‰©è½¦ä¸æ˜¯å¦å…¨ä¸ºå…è¿è´¹å•†å“,若是则把è¿è´¹èµ‹ä¸ºé›¶
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('cart') . " 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();
// 红包和积分最多能支付的金é¢ä¸ºå•†å“总é¢
$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($goods);
}
$total['will_get_bonus'] = $order['extension_code'] == 'exchange_goods' ? 0 : price_format(get_total_bonus(), 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('cart') . ' 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;
}
/**
* 修改订å•
* @param int $order_id 订å•id
* @param array $order key => value
* @return bool
*/
function update_order($order_id, $order)
{
return $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'),
$order, 'UPDATE', "order_id = '$order_id'");
}
/**
* 得到新订å•å·
* @return string
*/
function get_order_sn()
{
/* 选择一个éšæœºçš„方案 */
mt_srand((double) microtime() * 1000000);
return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}
/**
* å–å¾—è´ç‰©è½¦å•†å“
* @param int $type 类型:默认普通商å“
* @return array è´ç‰©è½¦å•†å“数组
*/
function cart_goods($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('cart') .
" 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;
}
/**
* å–å¾—è´ç‰©è½¦æ€»é‡‘é¢
* @params boolean $include_gift 是å¦åŒ…æ‹¬èµ å“
* @param int $type 类型:默认普通商å“
* @return float è´ç‰©è½¦æ€»é‡‘é¢
*/
function cart_amount($include_gift = true, $type = CART_GENERAL_GOODS)
{
$sql = "SELECT SUM(goods_price * goods_number) " .
" FROM " . $GLOBALS['ecs']->table('cart') .
" 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));
}
/**
* 检查æŸå•†å“是å¦å·²ç»å˜åœ¨äºŽè´ç‰©è½¦
*
* @access public
* @param integer $id
* @param array $spec
* @param int $type 类型:默认普通商å“
* @return boolean
*/
function cart_goods_exists($id, $spec, $type = CART_GENERAL_GOODS)
{
/* 检查该商å“是å¦å·²ç»å˜åœ¨åœ¨è´ç‰©è½¦ä¸ */
$sql = "SELECT COUNT(*) FROM " .$GLOBALS['ecs']->table('cart').
"WHERE session_id = '" .SESS_ID. "' AND goods_id = '$id' ".
"AND parent_id = 0 AND goods_attr = '" .get_goods_attr_info($spec). "' " .
"AND rec_type = '$type'";
return ($GLOBALS['db']->getOne($sql) > 0);
}
/**
* 获得è´ç‰©è½¦ä¸å•†å“的总é‡é‡ã€æ€»ä»·æ ¼ã€æ€»æ•°é‡
*
* @access public
* @param int $type 类型:默认普通商å“
* @return array
*/
function cart_weight_price($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('cart') . " 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('cart') . ' 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 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,".
"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,
'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 ($GLOBALS['_CFG']['use_storage'] == 0 || $num <= $goods['goods_number'])
{
$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;
}
/**
* 清空è´ç‰©è½¦
* @param int $type 类型:默认普通商å“
*/
function clear_cart($type = CART_GENERAL_GOODS)
{
$sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '$type'";
$GLOBALS['db']->query($sql);
}
/**
* 获得指定的商å“属性
*
* @access public
* @param array $arr è§„æ ¼ã€å±žæ€§ID数组
* @param type $type 设置返回结果类型:piceï¼Œæ˜¾ç¤ºä»·æ ¼ï¼Œé»˜è®¤ï¼›no,ä¸æ˜¾ç¤ºä»·æ ¼
*
* @return string
*/
function get_goods_attr_info($arr, $type = 'pice')
{
$attr = '';
if (!empty($arr))
{
$fmt = "%s:%s[%s] \n";
$sql = "SELECT a.attr_name, ga.attr_value, ga.attr_price ".
"FROM ".$GLOBALS['ecs']->table('goods_attr')." AS ga, ".
$GLOBALS['ecs']->table('attribute')." AS a ".
"WHERE " .db_create_in($arr, 'ga.goods_attr_id')." AND a.attr_id = ga.attr_id";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$attr_price = round(floatval($row['attr_price']), 2);
$attr .= sprintf($fmt, $row['attr_name'], $row['attr_value'], $attr_price);
}
$attr = str_replace('[0]', '', $attr);
}
return $attr;
}
/**
* å–得用户信æ¯
* @param int $user_id 用户id
* @return array 用户信æ¯
*/
function user_info($user_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('users') .
" WHERE user_id = '$user_id'";
$user = $GLOBALS['db']->getRow($sql);
unset($user['question']);
unset($user['answer']);
/* æ ¼å¼åŒ–å¸æˆ·ä½™é¢ */
if ($user)
{
// if ($user['user_money'] < 0)
// {
// $user['user_money'] = 0;
// }
$user['formated_user_money'] = price_format($user['user_money'], false);
$user['formated_frozen_money'] = price_format($user['frozen_money'], false);
}
return $user;
}
/**
* 修改用户
* @param int $user_id 订å•id
* @param array $user key => value
* @return bool
*/
function update_user($user_id, $user)
{
return $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('users'),
$user, 'UPDATE', "user_id = '$user_id'");
}
/**
* å–得用户地å€åˆ—表
* @param int $user_id 用户id
* @return array
*/
function address_list($user_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_address') .
" WHERE user_id = '$user_id'";
return $GLOBALS['db']->getAll($sql);
}
/**
* å–得用户地å€ä¿¡æ¯
* @param int $address_id 地å€id
* @return array
*/
function address_info($address_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_address') .
" WHERE address_id = '$address_id'";
return $GLOBALS['db']->getRow($sql);
}
/**
* å–得用户当å‰å¯ç”¨çº¢åŒ…
* @param int $user_id 用户id
* @param float $goods_amount 订å•å•†å“金é¢
* @return array 红包数组
*/
function user_bonus($user_id, $goods_amount = 0)
{
$day = getdate();
$today = local_mktime(23, 59, 59, $day['mon'], $day['mday'], $day['year']);
$sql = "SELECT t.type_id, t.type_name, t.type_money, b.bonus_id " .
"FROM " . $GLOBALS['ecs']->table('bonus_type') . " AS t," .
$GLOBALS['ecs']->table('user_bonus') . " AS b " .
"WHERE t.type_id = b.bonus_type_id " .
"AND t.use_start_date <= '$today' " .
"AND t.use_end_date >= '$today' " .
"AND t.min_goods_amount <= '$goods_amount' " .
"AND b.user_id<>0 " .
"AND b.user_id = '$user_id' " .
"AND b.order_id = 0";
return $GLOBALS['db']->getAll($sql);
}
/**
* å–得红包信æ¯
* @param int $bonus_id 红包id
* @param string $bonus_sn 红包åºåˆ—å·
* @param array 红包信æ¯
*/
function bonus_info($bonus_id, $bonus_sn = '')
{
$sql = "SELECT t.*, b.* " .
"FROM " . $GLOBALS['ecs']->table('bonus_type') . " AS t," .
$GLOBALS['ecs']->table('user_bonus') . " AS b " .
"WHERE t.type_id = b.bonus_type_id ";
if ($bonus_id > 0)
{
$sql .= "AND b.bonus_id = '$bonus_id'";
}
else
{
$sql .= "AND b.bonus_sn = '$bonus_sn'";
}
return $GLOBALS['db']->getRow($sql);
}
/**
* 检查红包是å¦å·²ä½¿ç”¨
* @param int $bonus_id 红包id
* @return bool
*/
function bonus_used($bonus_id)
{
$sql = "SELECT order_id FROM " . $GLOBALS['ecs']->table('user_bonus') .
" WHERE bonus_id = '$bonus_id'";
return $GLOBALS['db']->getOne($sql) > 0;
}
/**
* 设置红包为已使用
* @param int $bonus_id 红包id
* @param int $order_id 订å•id
* @return bool
*/
function use_bonus($bonus_id, $order_id)
{
$sql = "UPDATE " . $GLOBALS['ecs']->table('user_bonus') .
" SET order_id = '$order_id', used_time = '" . gmtime() . "' " .
"WHERE bonus_id = '$bonus_id' LIMIT 1";
return $GLOBALS['db']->query($sql);
}
/**
* 设置红包为未使用
* @param int $bonus_id 红包id
* @param int $order_id 订å•id
* @return bool
*/
function unuse_bonus($bonus_id)
{
$sql = "UPDATE " . $GLOBALS['ecs']->table('user_bonus') .
" SET order_id = 0, used_time = 0 " .
"WHERE bonus_id = '$bonus_id' LIMIT 1";
return $GLOBALS['db']->query($sql);
}
/**
* 计算积分的价值(能抵多少钱)
* @param int $integral 积分
* @return float 积分价值
*/
function value_of_integral($integral)
{
$scale = floatval($GLOBALS['_CFG']['integral_scale']);
return $scale > 0 ? round(($integral / 100) * $scale, 2) : 0;
}
/**
* 计算指定的金é¢éœ€è¦å¤šå°‘积分
*
* @access public
* @param integer $value 金é¢
* @return void
*/
function integral_of_value($value)
{
$scale = floatval($GLOBALS['_CFG']['integral_scale']);
return $scale > 0 ? round($value / $scale * 100) : 0;
}
/**
* 订å•é€€æ¬¾
* @param array $order 订å•
* @param int $refund_type é€€æ¬¾æ–¹å¼ 1 到å¸æˆ·ä½™é¢ 2 到退款申请(先到余é¢ï¼Œå†ç”³è¯·æ款) 3 ä¸å¤„ç†
* @param string $refund_note 退款说明
* @param float $refund_amount 退款金é¢ï¼ˆå¦‚果为0,å–订å•å·²ä»˜æ¬¾é‡‘é¢ï¼‰
* @return bool
*/
function order_refund($order, $refund_type, $refund_note, $refund_amount = 0)
{
/* 检查å‚æ•° */
$user_id = $order['user_id'];
if ($user_id == 0 && $refund_type == 1)
{
die('anonymous, cannot return to account balance');
}
$amount = $refund_amount > 0 ? $refund_amount : $order['money_paid'];
if ($amount <= 0)
{
return true;
}
if (!in_array($refund_type, array(1, 2, 3)))
{
die('invalid params');
}
/* å¤‡æ³¨ä¿¡æ¯ */
if ($refund_note)
{
$change_desc = $refund_note;
}
else
{
include_once(ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/admin/order.php');
$change_desc = sprintf($GLOBALS['_LANG']['order_refund'], $order['order_sn']);
}
/* 处ç†é€€æ¬¾ */
if (1 == $refund_type)
{
log_account_change($user_id, $amount, 0, 0, 0, $change_desc);
return true;
}
elseif (2 == $refund_type)
{
/* 如果éžåŒ¿åï¼Œé€€å›žä½™é¢ */
if ($user_id > 0)
{
log_account_change($user_id, $amount, 0, 0, 0, $change_desc);
}
/* user_account è¡¨å¢žåŠ æ款申请记录 */
$account = array(
'user_id' => $user_id,
'amount' => (-1) * $amount,
'add_time' => gmtime(),
'user_note' => $refund_note,
'process_type' => SURPLUS_RETURN,
'admin_user' => $_SESSION['admin_name'],
'admin_note' => sprintf($GLOBALS['_LANG']['order_refund'], $order['order_sn']),
'is_paid' => 0
);
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_account'), $account, 'INSERT');
return true;
}
else
{
return true;
}
}
/**
* 获得è´ç‰©è½¦ä¸çš„商å“
*
* @access public
* @return array
*/
function get_cart_goods()
{
/* åˆå§‹åŒ– */
$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('cart') . " " .
" 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);
}
/**
* å–得收货人信æ¯
* @param int $user_id 用户编å·
* @return array
*/
function get_consignee($user_id)
{
if (isset($_SESSION['flow_consignee']))
{
/* 如果å˜åœ¨session,则直接返回sessionä¸çš„æ”¶è´§äººä¿¡æ¯ */
return $_SESSION['flow_consignee'];
}
else
{
/* 如果ä¸å˜åœ¨ï¼Œåˆ™å–å¾—ç”¨æˆ·çš„é»˜è®¤æ”¶è´§äººä¿¡æ¯ */
$arr = array();
if ($user_id > 0)
{
/* å–é»˜è®¤åœ°å€ */
$sql = "SELECT ua.*".
" FROM " . $GLOBALS['ecs']->table('user_address') . "AS ua, ".$GLOBALS['ecs']->table('users').' AS u '.
" WHERE u.user_id='$user_id' AND ua.address_id = u.address_id";
$arr = $GLOBALS['db']->getRow($sql);
}
return $arr;
}
}
/**
* 查询è´ç‰©è½¦ï¼ˆè®¢å•id为0)或订å•ä¸æ˜¯å¦æœ‰å®žä½“商å“
* @param int $order_id 订å•id
* @param int $flow_type è´ç‰©æµç¨‹ç±»åž‹
* @return bool
*/
function exist_real_goods($order_id = 0, $flow_type = CART_GENERAL_GOODS)
{
if ($order_id <= 0)
{
$sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND is_real = 1 " .
"AND rec_type = '$flow_type'";
}
else
{
$sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND is_real = 1";
}
return $GLOBALS['db']->getOne($sql) > 0;
}
/**
* 检查收货人信æ¯æ˜¯å¦å®Œæ•´
* @param array $consignee 收货人信æ¯
* @param int $flow_type è´ç‰©æµç¨‹ç±»åž‹
* @return bool true 完整 false ä¸å®Œæ•´
*/
function check_consignee_info($consignee, $flow_type)
{
if (exist_real_goods(0, $flow_type))
{
/* 如果å˜åœ¨å®žä½“å•†å“ */
$res = !empty($consignee['consignee']) &&
!empty($consignee['country']) &&
!empty($consignee['email']) &&
!empty($consignee['tel']);
if ($res)
{
if (empty($consignee['province']))
{
/* 没有设置çœä»½ï¼Œæ£€æŸ¥å½“å‰å›½å®¶ä¸‹é¢æœ‰æ²¡æœ‰è®¾ç½®çœä»½ */
$pro = get_regions(1, $consignee['country']);
$res = empty($pro);
}
elseif (empty($consignee['city']))
{
/* 没有设置城市,检查当å‰çœä¸‹é¢æœ‰æ²¡æœ‰åŸŽå¸‚ */
$city = get_regions(2, $consignee['province']);
$res = empty($city);
}
elseif (empty($consignee['district']))
{
$dist = get_regions(3, $consignee['city']);
$res = empty($dist);
}
}
return $res;
}
else
{
/* 如果ä¸å˜åœ¨å®žä½“å•†å“ */
return !empty($consignee['consignee']) &&
!empty($consignee['email']) &&
!empty($consignee['tel']);
}
}
/**
* 获得上一次用户采用的支付和é…é€æ–¹å¼
*
* @access public
* @return void
*/
function last_shipping_and_payment()
{
$sql = "SELECT shipping_id, pay_id " .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE user_id = '$_SESSION[user_id]' " .
" ORDER BY order_id DESC LIMIT 1";
$row = $GLOBALS['db']->getRow($sql);
if (empty($row))
{
/* 如果获得是一个空数组,则返回默认值 */
$row = array('shipping_id' => 0, 'pay_id' => 0);
}
return $row;
}
/**
* å–得当å‰ç”¨æˆ·åº”该得到的红包总é¢
*/
function get_total_bonus()
{
$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('cart') . " 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('cart') .
" 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;
}
/**
* 处ç†çº¢åŒ…(下订å•æ—¶è®¾ä¸ºä½¿ç”¨ï¼Œå–æ¶ˆï¼ˆæ— æ•ˆï¼Œé€€è´§ï¼‰è®¢å•æ—¶è®¾ä¸ºæœªä½¿ç”¨
* @param int $bonus_id 红包编å·
* @param int $order_id 订å•å·
* @param int $is_used 是å¦ä½¿ç”¨äº†
*/
function change_user_bonus($bonus_id, $order_id, $is_used = true)
{
if ($is_used)
{
$sql = 'UPDATE ' . $GLOBALS['ecs']->table('user_bonus') . ' SET ' .
'used_time = ' . gmtime() . ', ' .
"order_id = '$order_id' " .
"WHERE bonus_id = '$bonus_id'";
}
else
{
$sql = 'UPDATE ' . $GLOBALS['ecs']->table('user_bonus') . ' SET ' .
'used_time = 0, ' .
'order_id = 0 ' .
"WHERE bonus_id = '$bonus_id'";
}
$GLOBALS['db']->query($sql);
}
/**
* 获得订å•ä¿¡æ¯
*
* @access private
* @return array
*/
function flow_order_info()
{
$order = isset($_SESSION['flow_order']) ? $_SESSION['flow_order'] : array();
/* åˆå§‹åŒ–é…é€å’Œæ”¯ä»˜æ–¹å¼ */
if (!isset($order['shipping_id']) || !isset($order['pay_id']))
{
/* 如果还没有设置é…é€å’Œæ”¯ä»˜ */
if ($_SESSION['user_id'] > 0)
{
/* 用户已ç»ç™»å½•äº†ï¼Œåˆ™èŽ·å¾—上次使用的é…é€å’Œæ”¯ä»˜ */
$arr = last_shipping_and_payment();
if (!isset($order['shipping_id']))
{
$order['shipping_id'] = $arr['shipping_id'];
}
if (!isset($order['pay_id']))
{
$order['pay_id'] = $arr['pay_id'];
}
}
else
{
if (!isset($order['shipping_id']))
{
$order['shipping_id'] = 0;
}
if (!isset($order['pay_id']))
{
$order['pay_id'] = 0;
}
}
}
if (!isset($order['pack_id']))
{
$order['pack_id'] = 0; // åˆå§‹åŒ–包装
}
if (!isset($order['card_id']))
{
$order['card_id'] = 0; // åˆå§‹åŒ–è´ºå¡
}
if (!isset($order['bonus']))
{
$order['bonus'] = 0; // åˆå§‹åŒ–红包
}
if (!isset($order['integral']))
{
$order['integral'] = 0; // åˆå§‹åŒ–积分
}
if (!isset($order['surplus']))
{
$order['surplus'] = 0; // åˆå§‹åŒ–ä½™é¢
}
/* æ‰©å±•ä¿¡æ¯ */
if (isset($_SESSION['flow_type']) && intval($_SESSION['flow_type']) != CART_GENERAL_GOODS)
{
$order['extension_code'] = $_SESSION['extension_code'];
$order['extension_id'] = $_SESSION['extension_id'];
}
return $order;
}
/**
* åˆå¹¶è®¢å•
* @param string $from_order_sn 从订å•å·
* @param string $to_order_sn 主订å•å·
* @return æˆåŠŸè¿”回true,失败返回错误信æ¯
*/
function merge_order($from_order_sn, $to_order_sn)
{
/* 订å•å·ä¸èƒ½ä¸ºç©º */
if (trim($from_order_sn) == '' || trim($to_order_sn) == '')
{
return $GLOBALS['_LANG']['order_sn_not_null'];
}
/* 订å•å·ä¸èƒ½ç›¸åŒ */
if ($from_order_sn == $to_order_sn)
{
return $GLOBALS['_LANG']['two_order_sn_same'];
}
/* å–得订å•ä¿¡æ¯ */
$from_order = order_info(0, $from_order_sn);
$to_order = order_info(0, $to_order_sn);
/* 检查订å•æ˜¯å¦å˜åœ¨ */
if (!$from_order)
{
return sprintf($GLOBALS['_LANG']['order_not_exist'], $from_order_sn);
}
elseif (!$to_order)
{
return sprintf($GLOBALS['_LANG']['order_not_exist'], $to_order_sn);
}
/* 检查åˆå¹¶çš„订å•æ˜¯å¦ä¸ºæ™®é€šè®¢å•ï¼Œéžæ™®é€šè®¢å•ä¸å…许åˆå¹¶ */
if ($from_order['extension_code'] != '' || $to_order['extension_code'] != 0)
{
return $GLOBALS['_LANG']['merge_invalid_order'];
}
/* 检查订å•çŠ¶æ€æ˜¯å¦æ˜¯å·²ç¡®è®¤æˆ–未确认ã€æœªä»˜æ¬¾ã€æœªå‘è´§ */
if ($from_order['order_status'] != OS_UNCONFIRMED && $from_order['order_status'] != OS_CONFIRMED)
{
return sprintf($GLOBALS['_LANG']['os_not_unconfirmed_or_confirmed'], $from_order_sn);
}
elseif ($from_order['pay_status'] != PS_UNPAYED)
{
return sprintf($GLOBALS['_LANG']['ps_not_unpayed'], $from_order_sn);
}
elseif ($from_order['shipping_status'] != SS_UNSHIPPED)
{
return sprintf($GLOBALS['_LANG']['ss_not_unshipped'], $from_order_sn);
}
if ($to_order['order_status'] != OS_UNCONFIRMED && $to_order['order_status'] != OS_CONFIRMED)
{
return sprintf($GLOBALS['_LANG']['os_not_unconfirmed_or_confirmed'], $to_order_sn);
}
elseif ($to_order['pay_status'] != PS_UNPAYED)
{
return sprintf($GLOBALS['_LANG']['ps_not_unpayed'], $to_order_sn);
}
elseif ($to_order['shipping_status'] != SS_UNSHIPPED)
{
return sprintf($GLOBALS['_LANG']['ss_not_unshipped'], $to_order_sn);
}
/* 检查订å•ç”¨æˆ·æ˜¯å¦ç›¸åŒ */
if ($from_order['user_id'] != $to_order['user_id'])
{
return $GLOBALS['_LANG']['order_user_not_same'];
}
/* åˆå¹¶è®¢å• */
$order = $to_order;
$order['order_id'] = '';
$order['add_time'] = gmtime();
// åˆå¹¶å•†å“总é¢
$order['goods_amount'] += $from_order['goods_amount'];
// åˆå¹¶æŠ˜æ‰£
$order['discount'] += $from_order['discount'];
if ($order['shipping_id'] > 0)
{
// é‡æ–°è®¡ç®—é…é€è´¹ç”¨
$weight_price = order_weight_price($to_order['order_id']);
$from_weight_price = order_weight_price($from_order['order_id']);
$weight_price['weight'] += $from_weight_price['weight'];
$weight_price['amount'] += $from_weight_price['amount'];
$weight_price['number'] += $from_weight_price['number'];
$region_id_list = array($order['country'], $order['province'], $order['city'], $order['district']);
$shipping_area = shipping_area_info($order['shipping_id'], $region_id_list);
$order['shipping_fee'] = shipping_fee($shipping_area['shipping_code'],
unserialize($shipping_area['configure']), $weight_price['weight'], $weight_price['amount'], $weight_price['number']);
// 如果ä¿ä»·äº†ï¼Œé‡æ–°è®¡ç®—ä¿ä»·è´¹
if ($order['insure_fee'] > 0)
{
$order['insure_fee'] = shipping_insure_fee($shipping_area['shipping_code'], $order['goods_amount'], $shipping_area['insure']);
}
}
// é‡æ–°è®¡ç®—包装费ã€è´ºå¡è´¹
if ($order['pack_id'] > 0)
{
$pack = pack_info($order['pack_id']);
$order['pack_fee'] = $pack['free_money'] > $order['goods_amount'] ? $pack['pack_fee'] : 0;
}
if ($order['card_id'] > 0)
{
$card = card_info($order['card_id']);
$order['card_fee'] = $card['free_money'] > $order['goods_amount'] ? $card['card_fee'] : 0;
}
// 红包ä¸å˜ï¼Œåˆå¹¶ç§¯åˆ†ã€ä½™é¢ã€å·²ä»˜æ¬¾é‡‘é¢
$order['integral'] += $from_order['integral'];
$order['integral_money'] = value_of_integral($order['integral']);
$order['surplus'] += $from_order['surplus'];
$order['money_paid'] += $from_order['money_paid'];
// 计算应付款金é¢ï¼ˆä¸åŒ…括支付费用)
$order['order_amount'] = $order['goods_amount'] - $order['discount']
+ $order['shipping_fee']
+ $order['insure_fee']
+ $order['pack_fee']
+ $order['card_fee']
- $order['bonus']
- $order['integral_money']
- $order['surplus']
- $order['money_paid'];
// é‡æ–°è®¡ç®—支付费
if ($order['pay_id'] > 0)
{
// 货到付款手ç»è´¹
$cod_fee = $shipping_area ? $shipping_area['pay_fee'] : 0;
$order['pay_fee'] = pay_fee($order['pay_id'], $order['order_amount'], $cod_fee);
// 应付款金é¢åŠ 上支付费
$order['order_amount'] += $order['pay_fee'];
}
/* æ’入订å•è¡¨ */
do
{
$order['order_sn'] = get_order_sn();
if ($GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), addslashes_deep($order), 'INSERT'))
{
break;
}
else
{
if ($GLOBALS['db']->errno() != 1062)
{
die($GLOBALS['db']->errorMsg());
}
}
}
while (true); // 防æ¢è®¢å•å·é‡å¤
/* 订å•å· */
$order_id = $GLOBALS['db']->insert_id();
/* 更新订å•å•†å“ */
$sql = 'UPDATE ' . $GLOBALS['ecs']->table('order_goods') .
" SET order_id = '$order_id' " .
"WHERE order_id " . db_create_in(array($from_order['order_id'], $to_order['order_id']));
$GLOBALS['db']->query($sql);
include_once(ROOT_PATH . 'includes/lib_clips.php');
/* æ’入支付日志 */
insert_pay_log($order_id, $order['order_amount'], PAY_ORDER);
/* åˆ é™¤åŽŸè®¢å• */
$sql = 'DELETE FROM ' . $GLOBALS['ecs']->table('order_info') .
" WHERE order_id " . db_create_in(array($from_order['order_id'], $to_order['order_id']));
$GLOBALS['db']->query($sql);
/* åˆ é™¤åŽŸè®¢å•æ”¯ä»˜æ—¥å¿— */
$sql = 'DELETE FROM ' . $GLOBALS['ecs']->table('pay_log') .
" WHERE order_id " . db_create_in(array($from_order['order_id'], $to_order['order_id']));
$GLOBALS['db']->query($sql);
/* 返还 from_order çš„çº¢åŒ…ï¼Œå› ä¸ºåªä½¿ç”¨ to_order 的红包 */
if ($from_order['bonus_id'] > 0)
{
unuse_bonus($from_order['bonus_id']);
}
/* 返回æˆåŠŸ */
return true;
}
/**
* 查询é…é€åŒºåŸŸå±žäºŽå“ªä¸ªåŠžäº‹å¤„管辖
* @param array $regions é…é€åŒºåŸŸï¼ˆ1ã€2ã€3ã€4级按顺åºï¼‰
* @return int 办事处id,å¯èƒ½ä¸º0
*/
function get_agency_by_regions($regions)
{
if (!is_array($regions) || empty($regions))
{
return 0;
}
$arr = array();
$sql = "SELECT region_id, agency_id " .
"FROM " . $GLOBALS['ecs']->table('region') .
" WHERE region_id " . db_create_in($regions) .
" AND region_id > 0 AND agency_id > 0";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$arr[$row['region_id']] = $row['agency_id'];
}
if (empty($arr))
{
return 0;
}
$agency_id = 0;
for ($i = count($regions) - 1; $i >= 0; $i--)
{
if (isset($arr[$regions[$i]]))
{
return $arr[$regions[$i]];
}
}
}
/**
* 获å–é…é€æ’件的实例
* @param int $shipping_id é…é€æ’件ID
* @return object é…é€æ’件对象实例
*/
function &get_shipping_object($shipping_id)
{
$shipping = shipping_info($shipping_id);
if (!$shipping)
{
$object = new stdClass();
return $object;
}
$file_path = ROOT_PATH.'includes/modules/shipping/' . $shipping['shipping_code'] . '.php';
include_once($file_path);
$object = new $shipping['shipping_code'];
return $object;
}
/**
* 改å˜è®¢å•ä¸å•†å“库å˜
* @param int $order_id 订å•å·
* @param bool $is_dec 是å¦å‡å°‘库å˜
* @param bool $storage å‡åº“å˜çš„时机,1,下订å•æ—¶ï¼›0,å‘货时;
*/
function change_order_goods_storage($order_id, $is_dec = true, $storage = 0)
{
/* 查询订å•å•†å“ä¿¡æ¯ */
switch ($storage)
{
case 0 :
$sql = "SELECT goods_id, SUM(send_number) AS num, MAX(extension_code) AS extension_code, product_id FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND is_real = 1 GROUP BY goods_id, product_id";
break;
case 1 :
$sql = "SELECT goods_id, SUM(goods_number) AS num, MAX(extension_code) AS extension_code, product_id FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND is_real = 1 GROUP BY goods_id, product_id";
break;
}
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['extension_code'] != "package_buy")
{
if ($is_dec)
{
change_goods_storage($row['goods_id'], $row['product_id'], - $row['num']);
}
else
{
change_goods_storage($row['goods_id'], $row['product_id'], $row['num']);
}
$GLOBALS['db']->query($sql);
}
else
{
$sql = "SELECT goods_id, goods_number" .
" FROM " . $GLOBALS['ecs']->table('package_goods') .
" WHERE package_id = '" . $row['goods_id'] . "'";
$res_goods = $GLOBALS['db']->query($sql);
while ($row_goods = $GLOBALS['db']->fetchRow($res_goods))
{
$sql = "SELECT is_real" .
" FROM " . $GLOBALS['ecs']->table('goods') .
" WHERE goods_id = '" . $row_goods['goods_id'] . "'";
$real_goods = $GLOBALS['db']->query($sql);
$is_goods = $GLOBALS['db']->fetchRow($real_goods);
if ($is_dec)
{
change_goods_storage($row_goods['goods_id'], $row['product_id'], - ($row['num'] * $row_goods['goods_number']));
}
elseif ($is_goods['is_real'])
{
change_goods_storage($row_goods['goods_id'], $row['product_id'], ($row['num'] * $row_goods['goods_number']));
}
}
}
}
}
/**
* 商å“库å˜å¢žä¸Žå‡ è´§å“库å˜å¢žä¸Žå‡
*
* @param int $good_id 商å“ID
* @param int $product_id è´§å“ID
* @param int $number 增å‡æ•°é‡ï¼Œé»˜è®¤0ï¼›
*
* @return bool true,æˆåŠŸï¼›false,失败;
*/
function change_goods_storage($good_id, $product_id, $number = 0)
{
if ($number == 0)
{
return true; // 值为0å³ä¸åšã€å¢žå‡æ“作,返回true
}
if (empty($good_id) || empty($number))
{
return false;
}
$number = ($number > 0) ? '+ ' . $number : $number;
/* 处ç†è´§å“åº“å˜ */
$products_query = true;
if (!empty($product_id))
{
$sql = "UPDATE " . $GLOBALS['ecs']->table('products') ."
SET product_number = product_number $number
WHERE goods_id = '$good_id'
AND product_id = '$product_id'
LIMIT 1";
$products_query = $GLOBALS['db']->query($sql);
}
/* 处ç†å•†å“åº“å˜ */
$sql = "UPDATE " . $GLOBALS['ecs']->table('goods') ."
SET goods_number = goods_number $number
WHERE goods_id = '$good_id'
LIMIT 1";
$query = $GLOBALS['db']->query($sql);
if ($query && $products_query)
{
return true;
}
else
{
return false;
}
}
/**
* å–得支付方å¼id列表
* @param bool $is_cod 是å¦è´§åˆ°ä»˜æ¬¾
* @return array
*/
function payment_id_list($is_cod)
{
$sql = "SELECT pay_id FROM " . $GLOBALS['ecs']->table('payment');
if ($is_cod)
{
$sql .= " WHERE is_cod = 1";
}
else
{
$sql .= " WHERE is_cod = 0";
}
return $GLOBALS['db']->getCol($sql);
}
/**
* 生æˆæŸ¥è¯¢è®¢å•çš„sql
* @param string $type 类型
* @param string $alias order表的别å(包括.例如 o.)
* @return string
*/
function order_query_sql($type = 'finished', $alias = '')
{
/* 已完æˆè®¢å• */
if ($type == 'finished')
{
return " AND {$alias}order_status " . db_create_in(array(OS_CONFIRMED, OS_SPLITED)) .
" AND {$alias}shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
" AND {$alias}pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) . " ";
}
/* å¾…å‘è´§è®¢å• */
elseif ($type == 'await_ship')
{
return " AND {$alias}order_status " .
db_create_in(array(OS_CONFIRMED, OS_SPLITED, OS_SPLITING_PART)) .
" AND {$alias}shipping_status " .
db_create_in(array(SS_UNSHIPPED, SS_PREPARING, SS_SHIPPED_ING)) .
" AND ( {$alias}pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) . " OR {$alias}pay_id " . db_create_in(payment_id_list(true)) . ") ";
}
/* å¾…ä»˜æ¬¾è®¢å• */
elseif ($type == 'await_pay')
{
return " AND {$alias}order_status " . db_create_in(array(OS_CONFIRMED, OS_SPLITED)) .
" AND {$alias}pay_status = '" . PS_UNPAYED . "'" .
" AND ( {$alias}shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " OR {$alias}pay_id " . db_create_in(payment_id_list(false)) . ") ";
}
/* æœªç¡®è®¤è®¢å• */
elseif ($type == 'unconfirmed')
{
return " AND {$alias}order_status = '" . OS_UNCONFIRMED . "' ";
}
/* 未处ç†è®¢å•ï¼šç”¨æˆ·å¯æ“作 */
elseif ($type == 'unprocessed')
{
return " AND {$alias}order_status " . db_create_in(array(OS_UNCONFIRMED, OS_CONFIRMED)) .
" AND {$alias}shipping_status = '" . SS_UNSHIPPED . "'" .
" AND {$alias}pay_status = '" . PS_UNPAYED . "' ";
}
/* 未付款未å‘货订å•ï¼šç®¡ç†å‘˜å¯æ“作 */
elseif ($type == 'unpay_unship')
{
return " AND {$alias}order_status " . db_create_in(array(OS_UNCONFIRMED, OS_CONFIRMED)) .
" AND {$alias}shipping_status " . db_create_in(array(SS_UNSHIPPED, SS_PREPARING)) .
" AND {$alias}pay_status = '" . PS_UNPAYED . "' ";
}
/* å·²å‘货订å•ï¼šä¸è®ºæ˜¯å¦ä»˜æ¬¾ */
elseif ($type == 'shipped')
{
return " AND {$alias}order_status = '" . OS_CONFIRMED . "'" .
" AND {$alias}shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " ";
}
else
{
die('函数 order_query_sql å‚数错误');
}
}
/**
* 生æˆæŸ¥è¯¢è®¢å•æ€»é‡‘é¢çš„å—段
* @param string $alias order表的别å(包括.例如 o.)
* @return string
*/
function order_amount_field($alias = '')
{
return " {$alias}goods_amount + {$alias}tax + {$alias}shipping_fee" .
" + {$alias}insure_fee + {$alias}pay_fee + {$alias}pack_fee" .
" + {$alias}card_fee ";
}
/**
* 生æˆè®¡ç®—应付款金é¢çš„å—段
* @param string $alias order表的别å(包括.例如 o.)
* @return string
*/
function order_due_field($alias = '')
{
return order_amount_field($alias) .
" - {$alias}money_paid - {$alias}surplus - {$alias}integral_money" .
" - {$alias}bonus - {$alias}discount ";
}
/**
* è®¡ç®—æŠ˜æ‰£ï¼šæ ¹æ®è´ç‰©è½¦å’Œä¼˜æƒ 活动
* @return float 折扣
*/
function compute_discount()
{
/* æŸ¥è¯¢ä¼˜æƒ æ´»åŠ¨ */
$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('cart') . " 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 int 积分数
*/
function get_give_integral()
{
$sql = "SELECT SUM(c.goods_number * IF(g.give_integral > -1, g.give_integral, c.goods_price))" .
"FROM " . $GLOBALS['ecs']->table('cart') . " 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));
}
/**
* å–å¾—æŸè®¢å•åº”è¯¥èµ é€çš„积分数
* @param array $order 订å•
* @return int 积分数
*/
function integral_to_give($order)
{
/* 判æ–是å¦å›¢è´ */
if ($order['extension_code'] == 'group_buy')
{
include_once(ROOT_PATH . 'includes/lib_goods.php');
$group_buy = group_buy_info(intval($order['extension_id']));
return array('custom_points' => $group_buy['gift_integral'], 'rank_points' => $order['goods_amount']);
}
else
{
$sql = "SELECT SUM(og.goods_number * IF(g.give_integral > -1, g.give_integral, og.goods_price)) AS custom_points, SUM(og.goods_number * IF(g.rank_integral > -1, g.rank_integral, og.goods_price)) AS rank_points " .
"FROM " . $GLOBALS['ecs']->table('order_goods') . " AS og, " .
$GLOBALS['ecs']->table('goods') . " AS g " .
"WHERE og.goods_id = g.goods_id " .
"AND og.order_id = '$order[order_id]' " .
"AND og.goods_id > 0 " .
"AND og.parent_id = 0 " .
"AND og.is_gift = 0 AND og.extension_code != 'package_buy'";
return $GLOBALS['db']->getRow($sql);
}
}
/**
* å‘红包:å‘货时å‘红包
* @param int $order_id 订å•å·
* @return bool
*/
function send_order_bonus($order_id)
{
/* å–得订å•åº”该å‘放的红包 */
$bonus_list = order_bonus($order_id);
/* 如果有红包,统计并å‘é€ */
if ($bonus_list)
{
/* ç”¨æˆ·ä¿¡æ¯ */
$sql = "SELECT u.user_id, u.user_name, u.email " .
"FROM " . $GLOBALS['ecs']->table('order_info') . " AS o, " .
$GLOBALS['ecs']->table('users') . " AS u " .
"WHERE o.order_id = '$order_id' " .
"AND o.user_id = u.user_id ";
$user = $GLOBALS['db']->getRow($sql);
/* 统计 */
$count = 0;
$money = '';
foreach ($bonus_list AS $bonus)
{
$count += $bonus['number'];
$money .= price_format($bonus['type_money']) . ' [' . $bonus['number'] . '], ';
/* 修改用户红包 */
$sql = "INSERT INTO " . $GLOBALS['ecs']->table('user_bonus') . " (bonus_type_id, user_id) " .
"VALUES('$bonus[type_id]', '$user[user_id]')";
for ($i = 0; $i < $bonus['number']; $i++)
{
if (!$GLOBALS['db']->query($sql))
{
return $GLOBALS['db']->errorMsg();
}
}
}
/* 如果有红包,å‘é€é‚®ä»¶ */
if ($count > 0)
{
$tpl = get_mail_template('send_bonus');
$GLOBALS['smarty']->assign('user_name', $user['user_name']);
$GLOBALS['smarty']->assign('count', $count);
$GLOBALS['smarty']->assign('money', $money);
$GLOBALS['smarty']->assign('shop_name', $GLOBALS['_CFG']['shop_name']);
$GLOBALS['smarty']->assign('send_date', local_date($GLOBALS['_CFG']['date_format']));
$GLOBALS['smarty']->assign('sent_date', local_date($GLOBALS['_CFG']['date_format']));
$content = $GLOBALS['smarty']->fetch('str:' . $tpl['template_content']);
send_mail($user['user_name'], $user['email'], $tpl['template_subject'], $content, $tpl['is_html']);
}
}
return true;
}
/**
* 返回订å•å‘放的红包
* @param int $order_id 订å•id
*/
function return_order_bonus($order_id)
{
/* å–得订å•åº”该å‘放的红包 */
$bonus_list = order_bonus($order_id);
/* åˆ é™¤ */
if ($bonus_list)
{
/* å–得订å•ä¿¡æ¯ */
$order = order_info($order_id);
$user_id = $order['user_id'];
foreach ($bonus_list AS $bonus)
{
$sql = "DELETE FROM " . $GLOBALS['ecs']->table('user_bonus') .
" WHERE bonus_type_id = '$bonus[type_id]' " .
"AND user_id = '$user_id' " .
"AND order_id = '0' LIMIT " . $bonus['number'];
$GLOBALS['db']->query($sql);
}
}
}
/**
* å–得订å•åº”该å‘放的红包
* @param int $order_id 订å•id
* @return array
*/
function order_bonus($order_id)
{
/* 查询按商å“å‘的红包 */
$day = getdate();
$today = local_mktime(23, 59, 59, $day['mon'], $day['mday'], $day['year']);
$sql = "SELECT b.type_id, b.type_money, SUM(o.goods_number) AS number " .
"FROM " . $GLOBALS['ecs']->table('order_goods') . " AS o, " .
$GLOBALS['ecs']->table('goods') . " AS g, " .
$GLOBALS['ecs']->table('bonus_type') . " AS b " .
" WHERE o.order_id = '$order_id' " .
" AND o.is_gift = 0 " .
" AND o.goods_id = g.goods_id " .
" AND g.bonus_type_id = b.type_id " .
" AND b.send_type = '" . SEND_BY_GOODS . "' " .
" AND b.send_start_date <= '$today' " .
" AND b.send_end_date >= '$today' " .
" GROUP BY b.type_id ";
$list = $GLOBALS['db']->getAll($sql);
/* 查询定å•ä¸éžèµ å“æ€»é‡‘é¢ */
$amount = order_amount($order_id, false);
/* 查询订å•æ—¥æœŸ */
$sql = "SELECT add_time " .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE order_id = '$order_id' LIMIT 1";
$order_time = $GLOBALS['db']->getOne($sql);
/* 查询按订å•å‘的红包 */
$sql = "SELECT type_id, type_money, IFNULL(FLOOR('$amount' / min_amount), 1) AS number " .
"FROM " . $GLOBALS['ecs']->table('bonus_type') .
"WHERE send_type = '" . SEND_BY_ORDER . "' " .
"AND send_start_date <= '$order_time' " .
"AND send_end_date >= '$order_time' ";
$list = array_merge($list, $GLOBALS['db']->getAll($sql));
return $list;
}
/**
* 计算è´ç‰©è½¦ä¸çš„商å“能享å—红包支付的总é¢
* @return float 享å—红包支付的总é¢
*/
function compute_discount_amount()
{
/* æŸ¥è¯¢ä¼˜æƒ æ´»åŠ¨ */
$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('cart') . " 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 integer $package_id 礼包编å·
* @param integer $num 礼包数é‡
* @return boolean
*/
function add_package_to_cart($package_id, $num = 1)
{
$GLOBALS['err']->clean();
/* å–å¾—ç¤¼åŒ…ä¿¡æ¯ */
$package = get_package_info($package_id);
if (empty($package))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['goods_not_exists'], ERR_NOT_EXISTS);
return false;
}
/* 是å¦æ£åœ¨é”€å”® */
if ($package['is_on_sale'] == 0)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['not_on_sale'], ERR_NOT_ON_SALE);
return false;
}
/* 现有库å˜æ˜¯å¦è¿˜èƒ½å‡‘é½ä¸€ä¸ªç¤¼åŒ… */
if ($GLOBALS['_CFG']['use_storage'] == '1' && judge_package_stock($package_id))
{
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], 1), ERR_OUT_OF_STOCK);
return false;
}
/* æ£€æŸ¥åº“å˜ */
// if ($GLOBALS['_CFG']['use_storage'] == 1 && $num > $package['goods_number'])
// {
// $num = $goods['goods_number'];
// $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['shortage'], $num), ERR_OUT_OF_STOCK);
//
// return false;
// }
/* åˆå§‹åŒ–è¦æ’å…¥è´ç‰©è½¦çš„åŸºæœ¬ä»¶æ•°æ® */
$parent = array(
'user_id' => $_SESSION['user_id'],
'session_id' => SESS_ID,
'goods_id' => $package_id,
'goods_sn' => '',
'goods_name' => addslashes($package['package_name']),
'market_price' => $package['market_package'],
'goods_price' => $package['package_price'],
'goods_number' => $num,
'goods_attr' => '',
'goods_attr_id' => '',
'is_real' => $package['is_real'],
'extension_code'=> 'package_buy',
'is_gift' => 0,
'rec_type' => CART_GENERAL_GOODS
);
/* 如果数é‡ä¸ä¸º0,作为基本件æ’å…¥ */
if ($num > 0)
{
/* 检查该商å“是å¦å·²ç»å˜åœ¨åœ¨è´ç‰©è½¦ä¸ */
$sql = "SELECT goods_number FROM " .$GLOBALS['ecs']->table('cart').
" WHERE session_id = '" .SESS_ID. "' AND goods_id = '" . $package_id . "' ".
" AND parent_id = 0 AND extension_code = 'package_buy' " .
" AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->getRow($sql);
if($row) //如果è´ç‰©è½¦å·²ç»æœ‰æ¤ç‰©å“,则更新
{
$num += $row['goods_number'];
if ($GLOBALS['_CFG']['use_storage'] == 0 || $num > 0)
{
$sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET goods_number = '" . $num . "'" .
" WHERE session_id = '" .SESS_ID. "' AND goods_id = '$package_id' ".
" AND parent_id = 0 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 //è´ç‰©è½¦æ²¡æœ‰æ¤ç‰©å“,则æ’å…¥
{
$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;
}
/**
* 得到新å‘è´§å•å·
* @return string
*/
function get_delivery_sn()
{
/* 选择一个éšæœºçš„方案 */
mt_srand((double) microtime() * 1000000);
return date('YmdHi') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}
/**
* 检查礼包内商å“的库å˜
* @return boolen
*/
function judge_package_stock($package_id, $package_num = 1)
{
$sql = "SELECT goods_id, product_id, goods_number
FROM " . $GLOBALS['ecs']->table('package_goods') . "
WHERE package_id = '" . $package_id . "'";
$row = $GLOBALS['db']->getAll($sql);
if (empty($row))
{
return true;
}
/* 分离货å“ä¸Žå•†å“ */
$goods = array('product_ids' => '', 'goods_ids' => '');
foreach ($row as $value)
{
if ($value['product_id'] > 0)
{
$goods['product_ids'] .= ',' . $value['product_id'];
continue;
}
$goods['goods_ids'] .= ',' . $value['goods_id'];
}
/* 检查货å“åº“å˜ */
if ($goods['product_ids'] != '')
{
$sql = "SELECT p.product_id
FROM " . $GLOBALS['ecs']->table('products') . " AS p, " . $GLOBALS['ecs']->table('package_goods') . " AS pg
WHERE pg.product_id = p.product_id
AND pg.package_id = '$package_id'
AND pg.goods_number * $package_num > p.product_number
AND p.product_id IN (" . trim($goods['product_ids'], ',') . ")";
$row = $GLOBALS['db']->getAll($sql);
if (!empty($row))
{
return true;
}
}
/* 检查商å“åº“å˜ */
if ($goods['goods_ids'] != '')
{
$sql = "SELECT g.goods_id
FROM " . $GLOBALS['ecs']->table('goods') . "AS g, " . $GLOBALS['ecs']->table('package_goods') . " AS pg
WHERE pg.goods_id = g.goods_id
AND pg.goods_number * $package_num > g.goods_number
AND pg.package_id = '" . $package_id . "'
AND pg.goods_id IN (" . trim($goods['goods_ids'], ',') . ")";
$row = $GLOBALS['db']->getAll($sql);
if (!empty($row))
{
return true;
}
}
return false;
}
?>
document.write();