709 lines
21 KiB
PHP
Executable File
709 lines
21 KiB
PHP
Executable File
<?php
|
|
|
|
if (!defined('IN_ECS'))
|
|
{
|
|
die('Hacking attempt');
|
|
}
|
|
|
|
/**
|
|
* 处理序列化的支付、配送的配置参数
|
|
* 返回一个以name为索引的数组
|
|
*
|
|
* @access public
|
|
* @param string $cfg
|
|
* @return void
|
|
*/
|
|
function unserialize_config($cfg)
|
|
{
|
|
if (is_string($cfg) && ($arr = unserialize($cfg)) !== false)
|
|
{
|
|
$config = array();
|
|
|
|
foreach ($arr AS $key => $val)
|
|
{
|
|
$config[$val['name']] = $val['value'];
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
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']) ? $payment['pay_fee'] : 0;
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 判断订单是否已完成
|
|
* @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);
|
|
}
|
|
|
|
|
|
/**
|
|
* 得到新订单号
|
|
* @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 $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 bank_list($user_id)
|
|
{
|
|
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_bank') .
|
|
" WHERE user_id = '$user_id'";
|
|
|
|
return $GLOBALS['db']->getAll($sql);
|
|
}
|
|
|
|
/**
|
|
* 取得用户地址信息
|
|
* @param int $address_id 地址id
|
|
* @return array
|
|
*/
|
|
function bank_info($bank_id)
|
|
{
|
|
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_bank') .
|
|
" WHERE bank_id = '$bank_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;
|
|
}
|
|
|
|
/**
|
|
* 获得上一次用户采用的支付和配送方式
|
|
*
|
|
* @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);
|
|
}
|
|
|
|
/**
|
|
* 取得支付方式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);
|
|
}
|
|
|
|
/**
|
|
* 发红包:发货时发红包
|
|
* @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 " .
|
|
"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;
|
|
}
|
|
|
|
/**
|
|
* 使用者訂單
|
|
* @param int $order_id 订单id
|
|
* @param array $order key => value
|
|
* @return bool
|
|
*/
|
|
function update_order($id, $order)
|
|
{
|
|
|
|
return $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_account'),
|
|
$order, 'UPDATE', "id = '$id'");
|
|
}
|
|
?>
|