Server : Apache
System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/saimikebio.com/mobile/include/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/saimikebio.com/mobile/include/lib_transaction.php
<?php



/**

 * ECSHOP 用户交易相关函数库

 * ============================================================================

 * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。

 * 网站地址: http://www.ecshop.com;

 * ----------------------------------------------------------------------------

 * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和

 * 使用;不允许对程序代码以任何形式任何目的的再发布。

 * ============================================================================

 * $Author: liubo $

 * $Id: lib_transaction.php 17217 2011-01-19 06:29:08Z liubo $

*/



if (!defined('IN_ECTOUCH'))

{

    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 user_name, birthday, sex, question, answer, rank_points, pay_points,user_money, user_rank,".

             " msn, qq, office_phone, home_phone, mobile_phone, passwd_question, passwd_answer ".

           "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'];



    return $info;

}



/**

 * 取得收货人地址列表

 * @param   int     $user_id    用户编号

 * @return  array

 */

function get_consignee_list($user_id)

{

    $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_address') .

            " WHERE user_id = '$user_id' LIMIT 5";



    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_id, 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'],

					   'shipping_id'	=> $row['shipping_id'],

                       '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 . "',shipping_time_end = '" . gmtime() . "' WHERE order_id = '$order_id'";
        if ($GLOBALS['db']->query($sql))
        {
			$sql_2 = "SELECT back_id FROM " . $GLOBALS['ecs']->table('back_order') . " WHERE order_id = '$order_id' AND status_back < 6 AND status_back != 3";
			$re_2  = $GLOBALS['db']->getCol($sql_2);
			if (count($re_2) > 0)
			{
				$sql_3 = "UPDATE " . $GLOBALS['ecs']->table('back_goods') . " SET status_back = 8 WHERE back_id in (" . implode(',', $re_2) . ")";
				$GLOBALS['db']->query($sql_3);
			}
			
			$sql_4 = "UPDATE " . $GLOBALS['ecs']->table('back_order') . " SET status_back = 8 WHERE order_id = '$order_id' AND status_back < 6 AND status_back != 3";
			$GLOBALS['db']->query($sql_4);
			
            /* 记录日志 */
            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_consignee($consignee, $default=false)

{

    if ($consignee['address_id'] > 0)

    {

        /* 修改地址 */

        $res = $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_address'), $consignee, 'UPDATE', 'address_id = ' . $consignee['address_id']." AND `user_id`= '".$_SESSION['user_id']."'");

    }

    else

    {

        /* 添加地址 */

        $res = $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_address'), $consignee, 'INSERT');

        $consignee['address_id'] = $GLOBALS['db']->insert_id();

    }



    if ($default)

    {

        /* 保存为用户的默认收货地址 */

        $sql = "UPDATE " . $GLOBALS['ecs']->table('users') .

            " SET address_id = '$consignee[address_id]' WHERE user_id = '$_SESSION[user_id]'";



        $res = $GLOBALS['db']->query($sql);

    }



    return $res !== false;

}



/**

 * 删除一个收货地址

 *

 * @access  public

 * @param   integer $id

 * @return  boolean

 */

function drop_consignee($id)

{

    $sql = "SELECT user_id FROM " .$GLOBALS['ecs']->table('user_address') . " WHERE address_id = '$id'";

    $uid = $GLOBALS['db']->getOne($sql);



    if ($uid != $_SESSION['user_id'])

    {

        return false;

    }

    else

    {

        $sql = "DELETE FROM " .$GLOBALS['ecs']->table('user_address') . " WHERE address_id = '$id'";

        $res = $GLOBALS['db']->query($sql);



        return $res;

    }

}



/**

 *  添加或更新指定用户收货地址

 *

 * @access  public

 * @param   array       $address

 * @return  bool

 */

function update_address($address)

{

    $address_id = intval($address['address_id']);

    unset($address['address_id']);



    if ($address_id > 0)

    {

         /* 更新指定记录 */

        $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_address'), $address, 'UPDATE', 'address_id = ' .$address_id . ' AND user_id = ' . $address['user_id']);

    }

    else

    {

        /* 插入一条新记录 */

        $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('user_address'), $address, 'INSERT');

        $address_id = $GLOBALS['db']->insert_id();

    }



    if (isset($address['defalut']) && $address['default'] > 0 && isset($address['user_id']))

    {

        $sql = "UPDATE ".$GLOBALS['ecs']->table('users') .

                " SET address_id = '".$address_id."' ".

                " WHERE user_id = '" .$address['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 . 'include/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.'include/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;

    }


    /* 只有取消的订单才隐藏支付方式 */
    if ($order['order_status'] == OS_CANCELED)
    {
        $order['order_status1'] = 1; //已取消
    }
    else
    {
        $order['order_status1'] = 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 . 'include/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;



}











function get_order_detail_new($order_id, $user_id = 0)

{

    include_once(ROOT_PATH . 'include/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 (!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.'include/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 . 'include/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 . 'include/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']) ? '' : $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, 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;

}

?>