/** * 获取用户指定范围的订单列表 * * @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; }
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); } }
/** * 获取相关属性的库存 * @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; */ }
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; }
/** * 取得商品最终使用价格 * * @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; }
/** * 取得某订单应该赠送的积分数 * @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); } } }