Пример #1
0
/**
 *  获取用户指定范围的订单列表
 *
 * @access  public
 * @param   int         $user_id        用户ID号
 * @param   int         $num            列表最大数量
 * @param   int         $start          列表起始位置
 * @return  array       $order_list     订单列表
 */
function get_user_orders_1($user_id, $num = 10, $start = 0, $where = '')
{
    /* 取得订单列表 */
    $arr = array();
    $sql = "SELECT o.*, ifnull(ssc.value,'网站自营') as shopname, " . "(goods_amount + shipping_fee + insure_fee + pay_fee + pack_fee + card_fee + tax - discount) AS total_fee " . " FROM " . $GLOBALS['ecs']->table('order_info') . ' as o ' . " LEFT JOIN " . $GLOBALS['ecs']->table('supplier_shop_config') . 'as ssc ' . " ON o.supplier_id=ssc.supplier_id AND ssc.code='shop_name' " . " WHERE user_id = '{$user_id}' {$where} 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) {
                    $back_num = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('back_order') . " WHERE order_id = " . $row['order_id'] . " AND status_back < 6 AND status_back != 3");
                    if ($back_num > 0) {
                        $back_info = "此单存在正在退货商品,确认收货退货申请将取消。";
                    } else {
                        $back_info = "";
                    }
                    @($okgoods_time = $GLOBALS['db']->getOne("select value from " . $GLOBALS['ecs']->table('shop_config') . " where code='okgoods_time'"));
                    @($row_time = $okgoods_time - (local_date('d', gmtime()) - local_date('d', $row['shipping_time'])));
                    //@$row['handler'] = "<img src='themes/" . $GLOBALS['_CFG']['template']. "/images/endtime.jpg' height='18px' style='vertical-align:middle;margin-right:3px;'/>Expect delivered time " . $row_time . " Days <br> <a href=\"user.php?act=affirm_received&order_id=" .$row['order_id']. "\" onclick=\"if (!confirm('".$back_info.$GLOBALS['_LANG']['confirm_received']."')) return false;\" style='display:inline-block;background:#F60;color:#fff;padding:3px 5px ;margin:3px 0px;'>".$GLOBALS['_LANG']['received']."</a>";
                    @($row['handler'] = "Shipped <br> <a href=\"user.php?act=affirm_received&order_id=" . $row['order_id'] . "\" onclick=\"if (!confirm('" . $back_info . $GLOBALS['_LANG']['confirm_received'] . "')) return false;\" style='display:inline-block;background:#F60;color:#fff;padding:3px 5px ;margin:3px 0px;'>" . $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_status1'] = $row['order_status'];
        $row['order_status'] = $GLOBALS['_LANG']['os'][$row['order_status']] . ',' . $GLOBALS['_LANG']['ps'][$row['pay_status']] . ',' . $GLOBALS['_LANG']['ss'][$row['shipping_status']];
        $cod_code = $GLOBALS['db']->getOne("select pay_code from " . $GLOBALS['ecs']->table('payment') . " where pay_id=" . $row['pay_id']);
        $weixiu_time = $GLOBALS['db']->getOne("select value from " . $GLOBALS['ecs']->table('shop_config') . " where code='weixiu_time'");
        $row['weixiu_time'] = $weixiu_time - (local_date('d', gmtime()) - local_date('d', $order['shipping_time_end'])) <= 0 ? 0 : 1;
        $back_can_a = 1;
        $comment_s = 0;
        $shaidan_s = 0;
        $goods_list_r = get_order_goods($row);
        foreach ($goods_list_r as $g_val) {
            if ($g_val['back_can'] == 0) {
                $back_can_a = 0;
            }
            if ($g_val['comment_state'] == 0 && $g_val['is_back'] == 0 && $comment_s == 0) {
                $comment_s = $g_val['rec_id'];
            }
            if ($g_val['shaidan_state'] == 0 && $g_val['is_back'] == 0 && $shaidan_s == 0) {
                $shaidan_s = $g_val['rec_id'];
            }
        }
        $extension_code = $row['extension_code'];
        /* 预售活动 */
        if ($extension_code == PRE_SALE_CODE) {
            include_once '/includes/lib_goods.php';
            $pre_sale = pre_sale_info($row['extension_id']);
            $pre_sale_status = $pre_sale['status'];
            if ($pre_sale['deposit'] > 0) {
                $pre_sale_deposit = $pre_sale['deposit'];
                $pre_sale_deposit_format = $pre_sale['formated_deposit'];
            }
        }
        $arr[$row['order_id']] = array('order_id' => $row['order_id'], 'order_sn' => $row['order_sn'], 'shopname' => $row['shopname'], 'order_time' => local_date($GLOBALS['_CFG']['time_format'], $row['add_time']), 'order_status' => str_replace(',', '</br>', $row['order_status']), 'order_status1' => $row['order_status1'], 'order_status_text' => $row['order_status'], 'consignee' => $row['consignee'], 'pay_name' => $row['pay_name'], 'back_can_a' => $back_can_a, 'comment_s' => $comment_s, 'shaidan_s' => $shaidan_s, 'total_fee' => price_format($row['total_fee'], false), 'goods_list' => $goods_list_r, 'pay_online' => $row['pay_online'], 'is_suborder' => $row['parent_order_id'] ? "(子订单)" : "", 'pay_status' => $row['pay_status'], 'handler' => $row['handler'], 'shipping_id' => $row['shipping_id'], 'shipping_name' => $row['shipping_name'], 'shipping_name_2' => strpos($row['shipping_name'], '同城快递') != FALSE ? "同城快递" : $row['shipping_name'], 'shipping_status' => $row['shipping_status'], 'pay_id' => $cod_code == 'cod' ? '' : $row['pay_id'], 'invoice_no' => $row['invoice_no'], 'extension_code' => $row['extension_code'], 'pre_sale_status' => $pre_sale_status, 'pre_sale_deposit' => $pre_sale_deposit, 'pre_sale_deposit_format' => $pre_sale_deposit_format, 'weixiu_time' => $row['weixiu_time']);
    }
    return $arr;
}
Пример #2
0
function action_batch_drop()
{
    $user = $GLOBALS['user'];
    $_CFG = $GLOBALS['_CFG'];
    $_LANG = $GLOBALS['_LANG'];
    $smarty = $GLOBALS['smarty'];
    $db = $GLOBALS['db'];
    $ecs = $GLOBALS['ecs'];
    $user_id = $_SESSION['user_id'];
    if (isset($_POST['checkboxes'])) {
        $del_count = 0;
        // 初始化删除数量
        foreach ($_POST['checkboxes'] as $key => $id) {
            /* 取得预售活动信息 */
            $pre_sale = pre_sale_info($id);
            /* 如果预售活动已经有订单,不能删除 */
            if ($pre_sale['valid_order'] <= 0) {
                /* 删除预售活动 */
                $sql = "DELETE FROM " . $GLOBALS['ecs']->table('goods_activity') . " WHERE act_id = '{$id}' LIMIT 1";
                $GLOBALS['db']->query($sql, 'SILENT');
                admin_log(addslashes($pre_sale['goods_name']) . '[' . $id . ']', 'remove', 'pre_sale');
                $del_count++;
            }
        }
        /* 如果删除了预售活动,清除缓存 */
        if ($del_count > 0) {
            clear_cache_files();
        }
        $links[] = array('text' => $_LANG['back_list'], 'href' => 'pre_sale.php?act=list');
        sys_msg(sprintf($_LANG['batch_drop_success'], $del_count), 0, $links);
    } else {
        $links[] = array('text' => $_LANG['back_list'], 'href' => 'pre_sale.php?act=list');
        sys_msg($_LANG['no_select_pre_sale'], 0, $links);
    }
}
Пример #3
0
/**
 * 获取相关属性的库存
 * @param int $goodid 商品id
 * @param string(array) $attrids 商品属性id的数组或者逗号分开的字符串
 */
function get_product_attr_num($goodid, $attrids = 0)
{
    $ret = array();
    /* 判断商品是否参与预售活动,如果参与则获取商品的(预售库存-已售出的数量) */
    if (!empty($_REQUEST['pre_sale_id'])) {
        $pre_sale = pre_sale_info($_REQUEST['pre_sale_id'], $goods_num);
        //如果预售为空或者预售库存小于等于0则认为不限购
        if (!empty($pre_sale) && $pre_sale['restrict_amount'] > 0) {
            $product_num = $pre_sale['restrict_amount'] - $pre_sale['valid_goods'];
            return $product_num;
        }
    }
    if (empty($attrids)) {
        $ginfo = get_goods_attr_value($goodid, 'goods_number');
        return $ginfo['goods_number'];
        //$ret[$attrids] = $ginfo['goods_number'];
        //return $ret;
    }
    if (!is_array($attrids)) {
        $attrids = explode(',', $attrids);
    }
    $goods_attr_array = sort_goods_attr_id_array($attrids);
    if (isset($goods_attr_array['sort'])) {
        $goods_attr = implode('|', $goods_attr_array['sort']);
        $sql = "SELECT product_id, goods_id, goods_attr, product_sn, product_number\r\n                FROM " . $GLOBALS['ecs']->table('products') . " \r\n                WHERE goods_id = {$goodid} AND goods_attr = '" . $goods_attr . "' LIMIT 0, 1";
        $row = $GLOBALS['db']->getRow($sql);
        return $row['product_number'];
    }
    //sort($attrids);
    //$attrids = implode('|',$attrids);
    //$attrids = array_unique($attrids);
    //$attrids = str_replace(',','|',$attrids);
    /*
    	echo "<pre>";
    	print_r($row);
    
    	foreach ($row as $key => $value)
    {
        if(in_array($value['goods_attr'],$attrids)){
        	$ret[$value['goods_attr']] = $value['product_number'];
        }
    }
    return $ret;
    */
}
Пример #4
0
function action_buy()
{
    $smarty = $GLOBALS['smarty'];
    $db = $GLOBALS['db'];
    $ecs = $GLOBALS['ecs'];
    /* 查询:判断是否登录 */
    if ($_SESSION['user_id'] <= 0) {
        show_message($_LANG['ps_error_login'], '', '', 'error');
    }
    /* 查询:取得参数:预售活动id */
    $pre_sale_id = isset($_POST['pre_sale_id']) ? intval($_POST['pre_sale_id']) : 0;
    if ($pre_sale_id <= 0) {
        ecs_header("Location: pre_sale.php\n");
        exit;
    }
    /* 查询:取得数量 */
    $number = isset($_POST['number']) ? intval($_POST['number']) : 1;
    $number = $number < 1 ? 1 : $number;
    /* 查询:取得预售活动信息 */
    $pre_sale = pre_sale_info($pre_sale_id, $number);
    if (empty($pre_sale)) {
        ecs_header("Location: pre_sale.php\n");
        exit;
    }
    /* 查询:检查预售活动是否是进行中 */
    if ($pre_sale['status'] != PSS_UNDER_WAY) {
        show_message($_LANG['ps_error_status'], '', '', 'error');
    }
    /* 查询:取得预售商品信息 */
    $goods = goods_info($pre_sale['goods_id']);
    if (empty($goods)) {
        ecs_header("Location: pre_sale.php\n");
        exit;
    }
    /* 查询:判断数量是否足够 */
    if ($pre_sale['restrict_amount'] > 0 && $number > $pre_sale['restrict_amount'] - $pre_sale['valid_goods'] || $number > $goods['goods_number']) {
        show_message($_LANG['ps_error_goods_lacking'], '', '', 'error');
    }
    /* 查询:取得规格 */
    $specs = '';
    foreach ($_POST as $key => $value) {
        if (strpos($key, 'spec_') !== false) {
            $specs .= ',' . intval($value);
        }
    }
    $specs = trim($specs, ',');
    /* 查询:如果商品有规格则取规格商品信息 配件除外 */
    if ($specs) {
        $_specs = explode(',', $specs);
        $product_info = get_products_info($goods['goods_id'], $_specs);
    }
    empty($product_info) ? $product_info = array('product_number' => 0, 'product_id' => 0) : '';
    /* 查询:判断指定规格的货品数量是否足够 */
    if ($specs && $number > $product_info['product_number'] && false) {
        show_message($_LANG['ps_error_goods_lacking'], '', '', 'error');
    }
    /* 查询:查询规格名称和值,不考虑价格 */
    $attr_list = array();
    $sql = "SELECT a.attr_name, g.attr_value " . "FROM " . $ecs->table('goods_attr') . " AS g, " . $ecs->table('attribute') . " AS a " . "WHERE g.attr_id = a.attr_id " . "AND g.goods_attr_id " . db_create_in($specs);
    $res = $db->query($sql);
    while ($row = $db->fetchRow($res)) {
        $attr_list[] = $row['attr_name'] . ': ' . $row['attr_value'];
    }
    $goods_attr = join(chr(13) . chr(10), $attr_list);
    /* 更新:清空购物车中所有预售商品 */
    include_once ROOT_PATH . 'includes/lib_order.php';
    clear_cart(CART_pre_sale_GOODS);
    /* 更新:加入购物车 */
    $goods_price = $pre_sale['deposit'] > 0 ? $pre_sale['deposit'] : $pre_sale['cur_price'];
    $cart = array('user_id' => $_SESSION['user_id'], 'session_id' => SESS_ID, 'goods_id' => $pre_sale['goods_id'], 'product_id' => $product_info['product_id'], 'goods_sn' => addslashes($goods['goods_sn']), 'goods_name' => addslashes($goods['goods_name']), 'market_price' => $goods['market_price'], 'goods_price' => $goods_price, 'goods_number' => $number, 'goods_attr' => addslashes($goods_attr), 'goods_attr_id' => $specs, 'is_real' => $goods['is_real'], 'extension_code' => addslashes($goods['extension_code']), 'parent_id' => 0, 'rec_type' => CART_PRE_SALE_GOODS, 'is_gift' => 0);
    $db->autoExecute($ecs->table('cart'), $cart, 'INSERT');
    $_SESSION['sel_cartgoods'] = $db->insert_id();
    $_SESSION['pre_sale_cart'] = $cart;
    /* 更新:记录购物流程类型:预售 */
    $_SESSION['flow_type'] = CART_PRE_SALE_GOODS;
    $_SESSION['extension_code'] = PRE_SALE_CODE;
    $_SESSION['extension_id'] = $pre_sale_id;
    /* 进入收货人页面 */
    ecs_header("Location: ./flow.php?step=checkout\n");
    exit;
}
Пример #5
0
/**
 * 取得商品最终使用价格
 *
 * @param   string  $goods_id      商品编号
 * @param   string  $goods_num     购买数量
 * @param   boolean $is_spec_price 是否加入规格价格
 * @param   mix     $spec          规格ID的数组或者逗号分隔的字符串
 *
 * @return  商品最终购买价格
 */
function get_final_price($goods_id, $goods_num = '1', $is_spec_price = false, $spec = array())
{
    $final_price = '0';
    //商品最终购买价格
    $volume_price = '0';
    //商品优惠价格
    $promote_price = '0';
    //商品促销价格
    $user_price = '0';
    //商品会员价格
    /* 判断商品是否参与预售活动,如果参与则获取商品 */
    if (!empty($_REQUEST['pre_sale_id'])) {
        $pre_sale = pre_sale_info($_REQUEST['pre_sale_id'], $goods_num);
        if (!empty($pre_sale)) {
            $final_price = $pre_sale['cur_price'];
            //如果需要加入规格价格
            if ($is_spec_price) {
                if (!empty($spec)) {
                    $spec_price = spec_price($spec);
                    $final_price += $spec_price;
                }
            }
            return $final_price;
        }
    }
    //取得商品优惠价格列表
    $price_list = get_volume_price_list($goods_id, '1');
    if (!empty($price_list)) {
        foreach ($price_list as $value) {
            if ($goods_num >= $value['number']) {
                $volume_price = $value['price'];
            }
        }
    }
    //取得商品促销价格列表
    /* 取得商品信息 */
    $sql = "SELECT g.promote_price, g.promote_start_date, g.promote_end_date, " . "IFNULL(mp.user_price, g.shop_price * '" . $_SESSION['discount'] . "') AS shop_price " . " FROM " . $GLOBALS['ecs']->table('goods') . " AS g " . " LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '" . $_SESSION['user_rank'] . "' " . " WHERE g.goods_id = '" . $goods_id . "'" . " AND g.is_delete = 0";
    $goods = $GLOBALS['db']->getRow($sql);
    /* 计算商品的促销价格 */
    if ($goods['promote_price'] > 0) {
        $promote_price = bargain_price($goods['promote_price'], $goods['promote_start_date'], $goods['promote_end_date']);
    } else {
        $promote_price = 0;
    }
    //取得商品会员价格列表
    $user_price = $goods['shop_price'];
    //比较商品的促销价格,会员价格,优惠价格
    if (empty($volume_price) && empty($promote_price)) {
        //如果优惠价格,促销价格都为空则取会员价格
        $final_price = $user_price;
    } elseif (!empty($volume_price) && empty($promote_price)) {
        //如果优惠价格为空时不参加这个比较。
        $final_price = min($volume_price, $user_price);
    } elseif (empty($volume_price) && !empty($promote_price)) {
        //如果促销价格为空时不参加这个比较。
        $final_price = min($promote_price, $user_price);
    } elseif (!empty($volume_price) && !empty($promote_price)) {
        //取促销价格,会员价格,优惠价格最小值
        $final_price = min($volume_price, $promote_price, $user_price);
    } else {
        $final_price = $user_price;
    }
    //如果需要加入规格价格
    if ($is_spec_price) {
        if (!empty($spec)) {
            $spec_price = spec_price($spec);
            $final_price += $spec_price;
        }
    }
    //返回商品最终购买价格
    return $final_price;
}
Пример #6
0
/**
 * 取得某订单应该赠送的积分数
 * @param   array   $order  订单
 * @return  int     积分数
 */
function integral_to_give($order)
{
    /* 判断是否团购 */
    if ($order['extension_code'] == GROUP_BUY_CODE) {
        include_once ROOT_PATH . 'includes/lib_goods.php';
        $group_buy = group_buy_info(intval($order['extension_id']));
        return array('custom_points' => $group_buy['gift_integral'], 'rank_points' => $order['goods_amount']);
    } else {
        if ($order['extension_code'] == PRE_SALE_CODE) {
            include_once ROOT_PATH . 'includes/lib_goods.php';
            $pre_sale = pre_sale_info(intval($order['extension_id']));
            return array('custom_points' => $group_buy['gift_integral'], 'rank_points' => $order['goods_amount']);
        } else {
            $sql = "SELECT SUM(og.goods_number * IF(g.give_integral > -1, g.give_integral, og.goods_price)) AS custom_points, SUM(og.goods_number * IF(g.rank_integral > -1, g.rank_integral, og.goods_price)) AS rank_points " . "FROM " . $GLOBALS['ecs']->table('order_goods') . " AS og, " . $GLOBALS['ecs']->table('goods') . " AS g " . "WHERE og.goods_id = g.goods_id " . "AND og.order_id = '{$order['order_id']}' " . "AND og.goods_id > 0 " . "AND og.parent_id = 0 " . "AND og.is_gift = 0 AND og.extension_code != 'package_buy'";
            return $GLOBALS['db']->getRow($sql);
        }
    }
}