elseif($_REQUEST['act'] = 'done')
{
/*------------------------------------------------------ */
//-- 完成所有订单操作,提交到数据库
/*------------------------------------------------------ */
...
/* 检查商品库存 */
/* 如果使用库存,且下订单时减库存,则减少库存 */
if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE)
{
$cart_goods_stock = get_cart_goods();
$_cart_goods_stock = array();
foreach ($cart_goods_stock['goods_list'] as $value)
{
$_cart_goods_stock[$value['rec_id']] = $value['goods_number'];
}
flow_cart_stock($_cart_goods_stock);
unset($cart_goods_stock, $_cart_goods_stock);
}
...
}
/**
* 取消一个用户订单
*
* @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());
}
}