bnbweb/includes/lib_transaction.php
2022-11-14 23:49:28 +08:00

1178 lines
40 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
/**
* 修改个人资料Email, 性别,生日)
*
* @access public
* @param array $profile array_keys(user_id int, email string, sex int, birthday string);
*
* @return boolen $bool
*/
function edit_profile($profile)
{
if (empty($profile['user_id']))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['not_login']);
return false;
}
$cfg = array();
$cfg['username'] = $GLOBALS['db']->getOne("SELECT user_name FROM " . $GLOBALS['ecs']->table('users') . " WHERE user_id='" . $profile['user_id'] . "'");
if (isset($profile['sex']))
{
$cfg['gender'] = intval($profile['sex']);
}
// if (!empty($profile['email']))
// {
// if (!is_email($profile['email']))
// {
// $GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_invalid'], $profile['email']));
//
// return false;
// }
// $cfg['email'] = $profile['email'];
// }
if (!empty($profile['birthday']))
{
$cfg['bday'] = $profile['birthday'];
}
if (!$GLOBALS['user']->edit_user($cfg))
{
if ($GLOBALS['user']->error == ERR_EMAIL_EXISTS)
{
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_exist'], $profile['email']));
}
else
{
$GLOBALS['err']->add('DB ERROR!');
}
return false;
}
/* 过滤非法的键值 */
$other_key_array = array('msn', 'qq', 'office_phone', 'home_phone', 'mobile_phone');
foreach ($profile['other'] as $key => $val)
{
//删除非法key值
if (!in_array($key, $other_key_array))
{
unset($profile['other'][$key]);
}
else
{
$profile['other'][$key] = htmlspecialchars(trim($val)); //防止用户输入javascript代码
}
}
/* 修改在其他资料 */
if (!empty($profile['other']))
{
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('users'), $profile['other'], 'UPDATE', "user_id = '$profile[user_id]'");
}
return true;
}
/**
* 获取用户帐号信息
*
* @access public
* @param int $user_id 用户user_id
*
* @return void
*/
function get_profile($user_id)
{
global $user;
/* 会员帐号信息 */
$info = array();
$infos = array();
$sql = "SELECT * ".
"FROM " .$GLOBALS['ecs']->table('users') . " WHERE user_id = '$user_id'";
$infos = $GLOBALS['db']->getRow($sql);
$infos['user_name'] = addslashes($infos['user_name']);
$row = $user->get_profile_by_name($infos['user_name']); //获取用户帐号信息
// $_SESSION['email'] = $row['email']; //注册SESSION
/* 会员等级 */
if ($infos['user_rank'] > 0)
{
$sql = "SELECT rank_id, rank_name, discount FROM ".$GLOBALS['ecs']->table('user_rank') .
" WHERE rank_id = '$infos[user_rank]'";
}
else
{
$sql = "SELECT rank_id, rank_name, discount, min_points".
" FROM ".$GLOBALS['ecs']->table('user_rank') .
" WHERE min_points<= " . intval($infos['rank_points']) . " ORDER BY min_points DESC";
}
if ($row = $GLOBALS['db']->getRow($sql))
{
$info['rank_name'] = $row['rank_name'];
}
else
{
$info['rank_name'] = $GLOBALS['_LANG']['undifine_rank'];
}
$cur_date = date('Y-m-d H:i:s');
/* 会员红包 */
$bonus = array();
$sql = "SELECT type_name, type_money ".
"FROM " .$GLOBALS['ecs']->table('bonus_type') . " AS t1, " .$GLOBALS['ecs']->table('user_bonus') . " AS t2 ".
"WHERE t1.type_id = t2.bonus_type_id AND t2.user_id = '$user_id' AND t1.use_start_date <= '$cur_date' ".
"AND t1.use_end_date > '$cur_date' AND t2.order_id = 0";
$bonus = $GLOBALS['db']->getAll($sql);
if ($bonus)
{
for ($i = 0, $count = count($bonus); $i < $count; $i++)
{
$bonus[$i]['type_money'] = price_format($bonus[$i]['type_money'], false);
}
}
$info['discount'] = $_SESSION['discount'] * 100 . "%";
// $info['email'] = $_SESSION['email'];
$info['user_name'] = $_SESSION['user_name'];
$info['rank_points'] = isset($infos['rank_points']) ? $infos['rank_points'] : '';
$info['pay_points'] = isset($infos['pay_points']) ? $infos['pay_points'] : 0;
$info['user_money'] = isset($infos['user_money']) ? $infos['user_money'] : 0;
$info['sex'] = isset($infos['sex']) ? $infos['sex'] : 0;
$info['birthday'] = isset($infos['birthday']) ? $infos['birthday'] : '';
$info['question'] = isset($infos['question']) ? htmlspecialchars($infos['question']) : '';
$info['user_money'] = price_format($info['user_money'], false);
$info['pay_points'] = $info['pay_points'] . $GLOBALS['_CFG']['integral_name'];
$info['bonus'] = $bonus;
$info['qq'] = $infos['qq'];
$info['msn'] = $infos['msn'];
$info['office_phone']= $infos['office_phone'];
$info['home_phone'] = $infos['home_phone'];
$info['mobile_phone'] = $infos['mobile_phone'];
$info['passwd_question'] = $infos['passwd_question'];
$info['passwd_answer'] = $infos['passwd_answer'];
$info['face_card'] = $infos['face_card'];
$info['face_card2'] = $infos['face_card2'];
$info['face_card3'] = $infos['face_card3'];
$info['card'] = $infos['card'];
$info['status'] = $infos['status'];
return $info;
}
/**
* 取得銀行帳戶列表
* @param int $user_id 用户编号
* @return array
*/
function get_userbank_list($user_id)
{
$sql = "SELECT a.*,b.bank_name FROM " . $GLOBALS['ecs']->table('user_bank') . " a," . $GLOBALS['ecs']->table('bank') . " b" .
" WHERE a.bank_code=b.bank_code AND user_id = '$user_id' order by a.bank_id desc LIMIT 1";
return $GLOBALS['db']->getAll($sql);
}
/**
* 取得遊戲列表
* @param int $user_id 用户编号
* @return array
*/
function get_game_list()
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('games') .
" WHERE is_on_sale=1 and is_check=1 and is_game=1";
return $GLOBALS['db']->getAll($sql);
}
/**
* 给指定用户添加一个指定红包
*
* @access public
* @param int $user_id 用户ID
* @param string $bouns_sn 红包序列号
*
* @return boolen $result
*/
function add_bonus($user_id, $bouns_sn)
{
if (empty($user_id))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['not_login']);
return false;
}
/* 查询红包序列号是否已经存在 */
$sql = "SELECT bonus_id, bonus_sn, user_id, bonus_type_id FROM " .$GLOBALS['ecs']->table('user_bonus') .
" WHERE bonus_sn = '$bouns_sn'";
$row = $GLOBALS['db']->getRow($sql);
if ($row)
{
if ($row['user_id'] == 0)
{
//红包没有被使用
$sql = "SELECT send_end_date, use_end_date ".
" FROM " . $GLOBALS['ecs']->table('bonus_type') .
" WHERE type_id = '" . $row['bonus_type_id'] . "'";
$bonus_time = $GLOBALS['db']->getRow($sql);
$now = gmtime();
if ($now > $bonus_time['use_end_date'])
{
$GLOBALS['err']->add($GLOBALS['_LANG']['bonus_use_expire']);
return false;
}
$sql = "UPDATE " .$GLOBALS['ecs']->table('user_bonus') . " SET user_id = '$user_id' ".
"WHERE bonus_id = '$row[bonus_id]'";
$result = $GLOBALS['db'] ->query($sql);
if ($result)
{
return true;
}
else
{
return $GLOBALS['db']->errorMsg();
}
}
else
{
if ($row['user_id']== $user_id)
{
//红包已经添加过了。
$GLOBALS['err']->add($GLOBALS['_LANG']['bonus_is_used']);
}
else
{
//红包被其他人使用过了。
$GLOBALS['err']->add($GLOBALS['_LANG']['bonus_is_used_by_other']);
}
return false;
}
}
else
{
//红包不存在
$GLOBALS['err']->add($GLOBALS['_LANG']['bonus_not_exist']);
return false;
}
}
/**
* 获取用户指定范围的订单列表
*
* @access public
* @param int $user_id 用户ID号
* @param int $num 列表最大数量
* @param int $start 列表起始位置
* @return array $order_list 订单列表
*/
function get_user_orders($user_id, $num = 10, $start = 0)
{
/* 取得订单列表 */
$arr = array();
$sql = "SELECT order_id, order_sn, order_status, shipping_status, pay_status, add_time, " .
"(goods_amount + shipping_fee + insure_fee + pay_fee + pack_fee + card_fee + tax - discount) AS total_fee ".
" FROM " .$GLOBALS['ecs']->table('order_info') .
" WHERE user_id = '$user_id' ORDER BY add_time DESC";
$res = $GLOBALS['db']->SelectLimit($sql, $num, $start);
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['order_status'] == OS_UNCONFIRMED)
{
$row['handler'] = "<a href=\"user.php?act=cancel_order&order_id=" .$row['order_id']. "\" onclick=\"if (!confirm('".$GLOBALS['_LANG']['confirm_cancel']."')) return false;\">".$GLOBALS['_LANG']['cancel']."</a>";
}
else if ($row['order_status'] == OS_SPLITED)
{
/* 对配送状态的处理 */
if ($row['shipping_status'] == SS_SHIPPED)
{
@$row['handler'] = "<a href=\"user.php?act=affirm_received&order_id=" .$row['order_id']. "\" onclick=\"if (!confirm('".$GLOBALS['_LANG']['confirm_received']."')) return false;\">".$GLOBALS['_LANG']['received']."</a>";
}
elseif ($row['shipping_status'] == SS_RECEIVED)
{
@$row['handler'] = '<span style="color:red">'.$GLOBALS['_LANG']['ss_received'] .'</span>';
}
else
{
if ($row['pay_status'] == PS_UNPAYED)
{
@$row['handler'] = "<a href=\"user.php?act=order_detail&order_id=" .$row['order_id']. '">' .$GLOBALS['_LANG']['pay_money']. '</a>';
}
else
{
@$row['handler'] = "<a href=\"user.php?act=order_detail&order_id=" .$row['order_id']. '">' .$GLOBALS['_LANG']['view_order']. '</a>';
}
}
}
else
{
$row['handler'] = '<span style="color:red">'.$GLOBALS['_LANG']['os'][$row['order_status']] .'</span>';
}
$row['shipping_status'] = ($row['shipping_status'] == SS_SHIPPED_ING) ? SS_PREPARING : $row['shipping_status'];
$row['order_status'] = $GLOBALS['_LANG']['os'][$row['order_status']] . ',' . $GLOBALS['_LANG']['ps'][$row['pay_status']] . ',' . $GLOBALS['_LANG']['ss'][$row['shipping_status']];
$arr[] = array('order_id' => $row['order_id'],
'order_sn' => $row['order_sn'],
'order_time' => local_date($GLOBALS['_CFG']['time_format'], $row['add_time']),
'order_status' => $row['order_status'],
'total_fee' => price_format($row['total_fee'], false),
'handler' => $row['handler']);
}
return $arr;
}
/**
* 取消一个用户订单
*
* @access public
* @param int $order_id 订单ID
* @param int $user_id 用户ID
*
* @return void
*/
function cancel_order($order_id, $user_id = 0)
{
/* 查询订单信息,检查状态 */
$sql = "SELECT user_id, order_id, order_sn , surplus , integral , bonus_id, order_status, shipping_status, pay_status FROM " .$GLOBALS['ecs']->table('order_info') ." WHERE order_id = '$order_id'";
$order = $GLOBALS['db']->GetRow($sql);
if (empty($order))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['order_exist']);
return false;
}
// 如果用户ID大于0检查订单是否属于该用户
if ($user_id > 0 && $order['user_id'] != $user_id)
{
$GLOBALS['err'] ->add($GLOBALS['_LANG']['no_priv']);
return false;
}
// 订单状态只能是“未确认”或“已确认”
if ($order['order_status'] != OS_UNCONFIRMED && $order['order_status'] != OS_CONFIRMED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['current_os_not_unconfirmed']);
return false;
}
//订单一旦确认,不允许用户取消
if ( $order['order_status'] == OS_CONFIRMED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['current_os_already_confirmed']);
return false;
}
// 发货状态只能是“未发货”
if ($order['shipping_status'] != SS_UNSHIPPED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['current_ss_not_cancel']);
return false;
}
// 如果付款状态是“已付款”、“付款中”,不允许取消,要取消和商家联系
if ($order['pay_status'] != PS_UNPAYED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['current_ps_not_cancel']);
return false;
}
//将用户订单设置为取消
$sql = "UPDATE ".$GLOBALS['ecs']->table('order_info') ." SET order_status = '".OS_CANCELED."' WHERE order_id = '$order_id'";
if ($GLOBALS['db']->query($sql))
{
/* 记录log */
order_action($order['order_sn'], OS_CANCELED, $order['shipping_status'], PS_UNPAYED,$GLOBALS['_LANG']['buyer_cancel'],'buyer');
/* 退货用户余额、积分、红包 */
if ($order['user_id'] > 0 && $order['surplus'] > 0)
{
$change_desc = sprintf($GLOBALS['_LANG']['return_surplus_on_cancel'], $order['order_sn']);
log_account_change($order['user_id'], $order['surplus'], 0, 0, 0, $change_desc);
}
if ($order['user_id'] > 0 && $order['integral'] > 0)
{
$change_desc = sprintf($GLOBALS['_LANG']['return_integral_on_cancel'], $order['order_sn']);
log_account_change($order['user_id'], 0, 0, 0, $order['integral'], $change_desc);
}
if ($order['user_id'] > 0 && $order['bonus_id'] > 0)
{
change_user_bonus($order['bonus_id'], $order['order_id'], false);
}
/* 如果使用库存,且下订单时减库存,则增加库存 */
if ($GLOBALS['_CFG']['use_storage'] == '1' && $GLOBALS['_CFG']['stock_dec_time'] == SDT_PLACE)
{
change_order_goods_storage($order['order_id'], false, 1);
}
/* 修改订单 */
$arr = array(
'bonus_id' => 0,
'bonus' => 0,
'integral' => 0,
'integral_money' => 0,
'surplus' => 0
);
update_order($order['order_id'], $arr);
return true;
}
else
{
die($GLOBALS['db']->errorMsg());
}
}
/**
* 确认一个用户订单
*
* @access public
* @param int $order_id 订单ID
* @param int $user_id 用户ID
*
* @return bool $bool
*/
function affirm_received($order_id, $user_id = 0)
{
/* 查询订单信息,检查状态 */
$sql = "SELECT user_id, order_sn , order_status, shipping_status, pay_status FROM ".$GLOBALS['ecs']->table('order_info') ." WHERE order_id = '$order_id'";
$order = $GLOBALS['db']->GetRow($sql);
// 如果用户ID大于 0 。检查订单是否属于该用户
if ($user_id > 0 && $order['user_id'] != $user_id)
{
$GLOBALS['err'] -> add($GLOBALS['_LANG']['no_priv']);
return false;
}
/* 检查订单 */
elseif ($order['shipping_status'] == SS_RECEIVED)
{
$GLOBALS['err'] ->add($GLOBALS['_LANG']['order_already_received']);
return false;
}
elseif ($order['shipping_status'] != SS_SHIPPED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['order_invalid']);
return false;
}
/* 修改订单发货状态为“确认收货” */
else
{
$sql = "UPDATE " . $GLOBALS['ecs']->table('order_info') . " SET shipping_status = '" . SS_RECEIVED . "' WHERE order_id = '$order_id'";
if ($GLOBALS['db']->query($sql))
{
/* 记录日志 */
order_action($order['order_sn'], $order['order_status'], SS_RECEIVED, $order['pay_status'], '', $GLOBALS['_LANG']['buyer']);
return true;
}
else
{
die($GLOBALS['db']->errorMsg());
}
}
}
/**
* 保存用户的收货人信息
* 如果收货人信息中的 id 为 0 则新增一个收货人信息
*
* @access public
* @param array $consignee
* @param boolean $default 是否将该收货人信息设置为默认收货人信息
* @return boolean
*/
function save_userbank($userbank, $default=false)
{
if ($userbank['bank_id'] > 0)
{
/* 修改地址 */
$res = $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_bank'), $userbank, 'UPDATE', 'address_id = ' . $userbank['bank_id']." AND `user_id`= '".$_SESSION['user_id']."'");
}
else
{
/* 添加地址 */
$res = $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_bank'), $userbank, 'INSERT');
$userbank['bank_id'] = $GLOBALS['db']->insert_id();
}
if ($default)
{
/* 保存为用户的默认收货地址 */
$sql = "UPDATE " . $GLOBALS['ecs']->table('users') .
" SET bank_id = '$userbank[bank_id]' WHERE user_id = '$_SESSION[user_id]'";
$res = $GLOBALS['db']->query($sql);
}
return $res !== false;
}
/**
* 删除一个銀行帳戶
*
* @access public
* @param integer $id
* @return boolean
*/
function drop_userbank($id)
{
$sql = "SELECT user_id FROM " .$GLOBALS['ecs']->table('user_bank') . " WHERE bank_id = '$id'";
$uid = $GLOBALS['db']->getOne($sql);
if ($uid != $_SESSION['user_id'])
{
return false;
}
else
{
$sql = "DELETE FROM " .$GLOBALS['ecs']->table('user_bank') . " WHERE bank_id = '$id'";
$res = $GLOBALS['db']->query($sql);
return $res;
}
}
/**
* 添加或更新指定用户帳戶資料
*
* @access public
* @param array $address
* @return bool
*/
function update_userbank($userbank)
{
$bank_id = intval($userbank['bank_id']);
unset($userbank['bank_id']);
if ($bank_id > 0)
{
/* 更新指定记录 */
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_bank'), $userbank, 'UPDATE', 'bank_id = ' .$bank_id . ' AND user_id = ' . $userbank['user_id']);
}
else
{
/* 插入一条新记录 */
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_bank'), $userbank, 'INSERT');
$bank_id = $GLOBALS['db']->insert_id();
}
if (isset($userbank['defalut']) && $userbank['default'] > 0 && isset($userbank['user_id']))
{
$sql = "UPDATE ".$GLOBALS['ecs']->table('users') .
" SET bank_id = '".$bank_id."' ".
" WHERE user_id = '" .$userbank['user_id']. "'";
$GLOBALS['db'] ->query($sql);
}
return true;
}
/**
* 获取指订单的详情
*
* @access public
* @param int $order_id 订单ID
* @param int $user_id 用户ID
*
* @return arr $order 订单所有信息的数组
*/
function get_order_detail($order_id, $user_id = 0)
{
include_once(ROOT_PATH . 'includes/lib_order.php');
$order_id = intval($order_id);
if ($order_id <= 0)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['invalid_order_id']);
return false;
}
$order = order_info($order_id);
//检查订单是否属于该用户
if ($user_id > 0 && $user_id != $order['user_id'])
{
$GLOBALS['err']->add($GLOBALS['_LANG']['no_priv']);
return false;
}
/* 对发货号处理 */
if (!empty($order['invoice_no']))
{
$shipping_code = $GLOBALS['db']->GetOne("SELECT shipping_code FROM ".$GLOBALS['ecs']->table('shipping') ." WHERE shipping_id = '$order[shipping_id]'");
$plugin = ROOT_PATH.'includes/modules/shipping/'. $shipping_code. '.php';
if (file_exists($plugin))
{
include_once($plugin);
$shipping = new $shipping_code;
$order['invoice_no'] = $shipping->query($order['invoice_no']);
}
}
/* 只有未确认才允许用户修改订单地址 */
if ($order['order_status'] == OS_UNCONFIRMED)
{
$order['allow_update_address'] = 1; //允许修改收货地址
}
else
{
$order['allow_update_address'] = 0;
}
/* 获取订单中实体商品数量 */
$order['exist_real_goods'] = exist_real_goods($order_id);
/* 如果是未付款状态,生成支付按钮 */
if ($order['pay_status'] == PS_UNPAYED &&
($order['order_status'] == OS_UNCONFIRMED ||
$order['order_status'] == OS_CONFIRMED))
{
/*
* 在线支付按钮
*/
//支付方式信息
$payment_info = array();
$payment_info = payment_info($order['pay_id']);
//无效支付方式
if ($payment_info === false)
{
$order['pay_online'] = '';
}
else
{
//取得支付信息,生成支付代码
$payment = unserialize_config($payment_info['pay_config']);
//获取需要支付的log_id
$order['log_id'] = get_paylog_id($order['order_id'], $pay_type = PAY_ORDER);
$order['user_name'] = $_SESSION['user_name'];
$order['pay_desc'] = $payment_info['pay_desc'];
/* 调用相应的支付方式文件 */
include_once(ROOT_PATH . 'includes/modules/payment/' . $payment_info['pay_code'] . '.php');
/* 取得在线支付方式的支付按钮 */
$pay_obj = new $payment_info['pay_code'];
$order['pay_online'] = $pay_obj->get_code($order, $payment);
}
}
else
{
$order['pay_online'] = '';
}
/* 无配送时的处理 */
$order['shipping_id'] == -1 and $order['shipping_name'] = $GLOBALS['_LANG']['shipping_not_need'];
/* 其他信息初始化 */
$order['how_oos_name'] = $order['how_oos'];
$order['how_surplus_name'] = $order['how_surplus'];
/* 虚拟商品付款后处理 */
if ($order['pay_status'] != PS_UNPAYED)
{
/* 取得已发货的虚拟商品信息 */
$virtual_goods = get_virtual_goods($order_id, true);
$virtual_card = array();
foreach ($virtual_goods AS $code => $goods_list)
{
/* 只处理虚拟卡 */
if ($code == 'virtual_card')
{
foreach ($goods_list as $goods)
{
if ($info = virtual_card_result($order['order_sn'], $goods))
{
$virtual_card[] = array('goods_id'=>$goods['goods_id'], 'goods_name'=>$goods['goods_name'], 'info'=>$info);
}
}
}
/* 处理超值礼包里面的虚拟卡 */
if ($code == 'package_buy')
{
foreach ($goods_list as $goods)
{
$sql = 'SELECT g.goods_id FROM ' . $GLOBALS['ecs']->table('package_goods') . ' AS pg, ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
"WHERE pg.goods_id = g.goods_id AND pg.package_id = '" . $goods['goods_id'] . "' AND extension_code = 'virtual_card'";
$vcard_arr = $GLOBALS['db']->getAll($sql);
foreach ($vcard_arr AS $val)
{
if ($info = virtual_card_result($order['order_sn'], $val))
{
$virtual_card[] = array('goods_id'=>$goods['goods_id'], 'goods_name'=>$goods['goods_name'], 'info'=>$info);
}
}
}
}
}
$var_card = deleteRepeat($virtual_card);
$GLOBALS['smarty']->assign('virtual_card', $var_card);
}
/* 确认时间 支付时间 发货时间 */
if ($order['confirm_time'] > 0 && ($order['order_status'] == OS_CONFIRMED || $order['order_status'] == OS_SPLITED || $order['order_status'] == OS_SPLITING_PART))
{
$order['confirm_time'] = sprintf($GLOBALS['_LANG']['confirm_time'], local_date($GLOBALS['_CFG']['time_format'], $order['confirm_time']));
}
else
{
$order['confirm_time'] = '';
}
if ($order['pay_time'] > 0 && $order['pay_status'] != PS_UNPAYED)
{
$order['pay_time'] = sprintf($GLOBALS['_LANG']['pay_time'], local_date($GLOBALS['_CFG']['time_format'], $order['pay_time']));
}
else
{
$order['pay_time'] = '';
}
if ($order['shipping_time'] > 0 && in_array($order['shipping_status'], array(SS_SHIPPED, SS_RECEIVED)))
{
$order['shipping_time'] = sprintf($GLOBALS['_LANG']['shipping_time'], local_date($GLOBALS['_CFG']['time_format'], $order['shipping_time']));
}
else
{
$order['shipping_time'] = '';
}
return $order;
}
/**
* 获取用户可以和并的订单数组
*
* @access public
* @param int $user_id 用户ID
*
* @return array $merge 可合并订单数组
*/
function get_user_merge($user_id)
{
include_once(ROOT_PATH . 'includes/lib_order.php');
$sql = "SELECT order_sn FROM ".$GLOBALS['ecs']->table('order_info') .
" WHERE user_id = '$user_id' " . order_query_sql('unprocessed') .
"AND extension_code = '' ".
" ORDER BY add_time DESC";
$list = $GLOBALS['db']->GetCol($sql);
$merge = array();
foreach ($list as $val)
{
$merge[$val] = $val;
}
return $merge;
}
/**
* 合并指定用户订单
*
* @access public
* @param string $from_order 合并的从订单号
* @param string $to_order 合并的主订单号
*
* @return boolen $bool
*/
function merge_user_order($from_order, $to_order, $user_id = 0)
{
if ($user_id > 0)
{
/* 检查订单是否属于指定用户 */
if (strlen($to_order) > 0)
{
$sql = "SELECT user_id FROM " .$GLOBALS['ecs']->table('order_info').
" WHERE order_sn = '$to_order'";
$order_user = $GLOBALS['db']->getOne($sql);
if ($order_user != $user_id)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['no_priv']);
}
}
else
{
$GLOBALS['err']->add($GLOBALS['_LANG']['order_sn_empty']);
return false;
}
}
$result = merge_order($from_order, $to_order);
if ($result === true)
{
return true;
}
else
{
$GLOBALS['err']->add($result);
return false;
}
}
/**
* 将指定订单中的商品添加到购物车
*
* @access public
* @param int $order_id
*
* @return mix $message 成功返回true, 错误返回出错信息
*/
function return_to_cart($order_id)
{
/* 初始化基本件数量 goods_id => goods_number */
$basic_number = array();
/* 查订单商品:不考虑赠品 */
$sql = "SELECT goods_id, product_id,goods_number, goods_attr, parent_id, goods_attr_id" .
" FROM " . $GLOBALS['ecs']->table('order_goods') .
" WHERE order_id = '$order_id' AND is_gift = 0 AND extension_code <> 'package_buy'" .
" ORDER BY parent_id ASC";
$res = $GLOBALS['db']->query($sql);
$time = gmtime();
while ($row = $GLOBALS['db']->fetchRow($res))
{
// 查该商品信息:是否删除、是否上架
$sql = "SELECT goods_sn, goods_name, goods_number, market_price, " .
"IF(is_promote = 1 AND '$time' BETWEEN promote_start_date AND promote_end_date, promote_price, shop_price) AS goods_price," .
"is_real, extension_code, is_alone_sale, goods_type " .
"FROM " . $GLOBALS['ecs']->table('goods') .
" WHERE goods_id = '$row[goods_id]' " .
" AND is_delete = 0 LIMIT 1";
$goods = $GLOBALS['db']->getRow($sql);
// 如果该商品不存在,处理下一个商品
if (empty($goods))
{
continue;
}
if($row['product_id'])
{
$order_goods_product_id=$row['product_id'];
$sql="SELECT product_number from ".$GLOBALS['ecs']->table('products')."where product_id='$order_goods_product_id'";
$product_number=$GLOBALS['db']->getOne($sql);
}
// 如果使用库存,且库存不足,修改数量
if ($GLOBALS['_CFG']['use_storage'] == 1 && ($row['product_id']?($product_number<$row['goods_number']):($goods['goods_number'] < $row['goods_number'])))
{
if ($goods['goods_number'] == 0 || $product_number=== 0)
{
// 如果库存为0处理下一个商品
continue;
}
else
{
if($row['product_id'])
{
$row['goods_number']=$product_number;
}
else
{
// 库存不为0修改数量
$row['goods_number'] = $goods['goods_number'];
}
}
}
//检查商品价格是否有会员价格
$sql = "SELECT goods_number FROM" . $GLOBALS['ecs']->table('cart') . " " .
"WHERE session_id = '" . SESS_ID . "' " .
"AND goods_id = '" . $row['goods_id'] . "' " .
"AND rec_type = '" . CART_GENERAL_GOODS . "' LIMIT 1";
$temp_number = $GLOBALS['db']->getOne($sql);
$row['goods_number'] += $temp_number;
$attr_array = empty($row['goods_attr_id']) ? array() : explode(',', $row['goods_attr_id']);
$goods['goods_price'] = get_final_price($row['goods_id'], $row['goods_number'], true, $attr_array);
// 要返回购物车的商品
$return_goods = array(
'goods_id' => $row['goods_id'],
'goods_sn' => addslashes($goods['goods_sn']),
'goods_name' => addslashes($goods['goods_name']),
'market_price' => $goods['market_price'],
'goods_price' => $goods['goods_price'],
'goods_number' => $row['goods_number'],
'goods_attr' => empty($row['goods_attr']) ? '' : addslashes($row['goods_attr']),
'goods_attr_id' => empty($row['goods_attr_id']) ? '' : addslashes($row['goods_attr_id']),
'is_real' => $goods['is_real'],
'extension_code'=> addslashes($goods['extension_code']),
'parent_id' => '0',
'is_gift' => '0',
'rec_type' => CART_GENERAL_GOODS
);
// 如果是配件
if ($row['parent_id'] > 0)
{
// 查询基本件信息:是否删除、是否上架、能否作为普通商品销售
$sql = "SELECT goods_id " .
"FROM " . $GLOBALS['ecs']->table('goods') .
" WHERE goods_id = '$row[parent_id]' " .
" AND is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 LIMIT 1";
$parent = $GLOBALS['db']->getRow($sql);
if ($parent)
{
// 如果基本件存在,查询组合关系是否存在
$sql = "SELECT goods_price " .
"FROM " . $GLOBALS['ecs']->table('group_goods') .
" WHERE parent_id = '$row[parent_id]' " .
" AND goods_id = '$row[goods_id]' LIMIT 1";
$fitting_price = $GLOBALS['db']->getOne($sql);
if ($fitting_price)
{
// 如果组合关系存在取配件价格取基本件数量改parent_id
$return_goods['parent_id'] = $row['parent_id'];
$return_goods['goods_price'] = $fitting_price;
$return_goods['goods_number'] = $basic_number[$row['parent_id']];
}
}
}
else
{
// 保存基本件数量
$basic_number[$row['goods_id']] = $row['goods_number'];
}
// 返回购物车:看有没有相同商品
$sql = "SELECT goods_id " .
"FROM " . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' " .
" AND goods_id = '$return_goods[goods_id]' " .
" AND goods_attr = '$return_goods[goods_attr]' " .
" AND parent_id = '$return_goods[parent_id]' " .
" AND is_gift = 0 " .
" AND rec_type = '" . CART_GENERAL_GOODS . "'";
$cart_goods = $GLOBALS['db']->getOne($sql);
if (empty($cart_goods))
{
// 没有相同商品,插入
$return_goods['session_id'] = SESS_ID;
$return_goods['user_id'] = $_SESSION['user_id'];
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('cart'), $return_goods, 'INSERT');
}
else
{
// 有相同商品,修改数量
$sql = "UPDATE " . $GLOBALS['ecs']->table('cart') . " SET " .
"goods_number = '" . $return_goods['goods_number'] . "' " .
",goods_price = '" . $return_goods['goods_price'] . "' " .
"WHERE session_id = '" . SESS_ID . "' " .
"AND goods_id = '" . $return_goods['goods_id'] . "' " .
"AND rec_type = '" . CART_GENERAL_GOODS . "' LIMIT 1";
$GLOBALS['db']->query($sql);
}
}
// 清空购物车的赠品
$sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND is_gift = 1";
$GLOBALS['db']->query($sql);
return true;
}
/**
* 保存用户收货地址
*
* @access public
* @param array $address array_keys(consignee string, email string, address string, zipcode string, tel string, mobile stirng, sign_building string, best_time string, order_id int)
* @param int $user_id 用户ID
*
* @return boolen $bool
*/
function save_order_address($address, $user_id)
{
$GLOBALS['err']->clean();
/* 数据验证 */
empty($address['consignee']) and $GLOBALS['err']->add($GLOBALS['_LANG']['consigness_empty']);
empty($address['address']) and $GLOBALS['err']->add($GLOBALS['_LANG']['address_empty']);
$address['order_id'] == 0 and $GLOBALS['err']->add($GLOBALS['_LANG']['order_id_empty']);
if (empty($address['email']))
{
$GLOBALS['err']->add($GLOBALS['email_empty']);
}
else
{
if (!is_email($address['email']))
{
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_invalid'], $address['email']));
}
}
if ($GLOBALS['err']->error_no > 0)
{
return false;
}
/* 检查订单状态 */
$sql = "SELECT user_id, order_status FROM " .$GLOBALS['ecs']->table('order_info'). " WHERE order_id = '" .$address['order_id']. "'";
$row = $GLOBALS['db']->getRow($sql);
if ($row)
{
if ($user_id > 0 && $user_id != $row['user_id'])
{
$GLOBALS['err']->add($GLOBALS['_LANG']['no_priv']);
return false;
}
if ($row['order_status'] != OS_UNCONFIRMED)
{
$GLOBALS['err']->add($GLOBALS['_LANG']['require_unconfirmed']);
return false;
}
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), $address, 'UPDATE', "order_id = '$address[order_id]'");
return true;
}
else
{
/* 订单不存在 */
$GLOBALS['err']->add($GLOBALS['_LANG']['order_exist']);
return false;
}
}
/**
*
* @access public
* @param int $user_id 用户ID
* @param int $num 列表显示条数
* @param int $start 显示起始位置
*
* @return array $arr 红保列表
*/
function get_user_bouns_list($user_id, $num = 10, $start = 0)
{
$sql = "SELECT u.bonus_sn, u.order_id, u.bonus_money, b.type_name, b.type_money, b.min_goods_amount, b.use_start_date, b.use_end_date ".
" FROM " .$GLOBALS['ecs']->table('user_bonus'). " AS u ,".
$GLOBALS['ecs']->table('bonus_type'). " AS b".
" WHERE u.bonus_type_id = b.type_id AND u.user_id = '" .$user_id. "'";
$res = $GLOBALS['db']->selectLimit($sql, $num, $start);
$arr = array();
$day = getdate();
$cur_date = local_mktime(23, 59, 59, $day['mon'], $day['mday'], $day['year']);
while ($row = $GLOBALS['db']->fetchRow($res))
{
/* 先判断是否被使用,然后判断是否开始或过期 */
if (empty($row['order_id']))
{
/* 没有被使用 */
if ($row['use_start_date'] > $cur_date)
{
$row['status'] = $GLOBALS['_LANG']['not_start'];
}
else if ($row['use_end_date'] < $cur_date)
{
$row['status'] = $GLOBALS['_LANG']['overdue'];
}
else
{
$row['status'] = $GLOBALS['_LANG']['not_use'];
}
}
else
{
$row['status'] = '<a href="user.php?act=order_detail&order_id=' .$row['order_id']. '" >' .$GLOBALS['_LANG']['had_use']. '</a>';
}
$row['use_startdate'] = local_date($GLOBALS['_CFG']['date_format'], $row['use_start_date']);
$row['use_enddate'] = local_date($GLOBALS['_CFG']['date_format'], $row['use_end_date']);
$arr[] = $row;
}
return $arr;
}
/**
* 获得会员的团购活动列表
*
* @access public
* @param int $user_id 用户ID
* @param int $num 列表显示条数
* @param int $start 显示起始位置
*
* @return array $arr 团购活动列表
*/
function get_user_group_buy($user_id, $num = 10, $start = 0)
{
return true;
}
/**
* 获得团购详细信息(团购订单信息)
*
*
*/
function get_group_buy_detail($user_id, $group_buy_id)
{
return true;
}
/**
* 去除虚拟卡中重复数据
*
*
*/
function deleteRepeat($array){
$_card_sn_record = array();
foreach ($array as $_k => $_v){
foreach ($_v['info'] as $__k => $__v){
if (in_array($__v['card_sn'],$_card_sn_record)){
unset($array[$_k]['info'][$__k]);
} else {
array_push($_card_sn_record,$__v['card_sn']);
}
}
}
return $array;
}
function get_bank_name($bank_code)
{
$sql = "SELECT bank_name FROM ".$GLOBALS['ecs']->table('bank') .
" WHERE bank_code = '$bank_code' ";
$bank_name = $GLOBALS['db']->getOne($sql);
return $bank_name;
}
?>