You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

264 lines
11 KiB

<?php
namespace apps\user\controllers;
use apps\base\controllers\FrontendController;
class OrderController extends FrontendController
{
public $user_id;
// 用户id
/**
* 构造,加载文件语言包和helper文件
*/
public function __construct()
{
parent::__construct();
$this->user_id = $_SESSION['user_id'];
$this->actionchecklogin();
L(require (ROOT_PATH . 'source/language/' . C('shop.lang') . '/user.php'));
L(require (ROOT_PATH . 'source/language/' . C('shop.lang') . '/flow.php'));
$files = array(
'order',
'clips',
'payment',
'transaction'
);
$this->load_helper($files);
}
/**
* 订单列表
*/
public function actionIndex()
{
$size = 10;
$page = I('page', 1, 'intval');
$status = I('status', 0, 'intval');
if(IS_POST){
$order_list = get_user_orders($this->user_id, $size, $page, $status);
exit(json_encode(array('order_list'=>$order_list['list'], 'totalPage'=>$order_list['totalpage'])));
}
$this->assign('status', $status);
$this->assign('page_title', '订单列表');
$this->display('user_order');
}
/**
* 查看订单详情
*/
public function actionDetail()
{
$order_id = I('order_id', 0, 'intval');
$noTime = gmtime();
$date = array(
'order_status',
'shipping_status',
'pay_status',
'shipping_time',
'auto_delivery_time'
);
$orderInfo = get_table_date('order_info', "order_id = '$order_id' and user_id = '$this->user_id'", $date);
if ($GLOBALS['_CFG']['open_delivery_time'] == 1) {
if ($orderInfo['order_status'] == 5 && $orderInfo['shipping_status'] == 1 && $orderInfo['pay_status'] == 2) { // 发货状态
$delivery_time = $orderInfo['shipping_time'] + 24 * 3600 * $orderInfo['auto_delivery_time'];
if ($noTime > $delivery_time) { // 自动确认发货操作
$sql = "update {pre}order_info set order_status = 5, shipping_status = 2, pay_status = 2 where order_id = '$order_id'";
$this->db->query($sql);
}
}
}
/* 订单详情 */
$order = get_order_detail($order_id, $this->user_id);
if ($order === false) {
$this->err->show(L('back_home_lnk'), './');
exit();
}
//订单店铺
$ru_id = $this->db->getRow("SELECT ru_id FROM ".$this->ecs->table('order_goods')." WHERE order_id = ".$order['order_id']);
if($ru_id){
$order['shop_name'] = get_shop_name($ru_id['ru_id'], 1); //店铺名称
$order['shopUrl'] = U('store/index/index', array('id'=>$ru_id));
}
/* 是否显示添加到购物车 */
if ($order['extension_code'] != 'group_buy' && $order['extension_code'] != 'exchange_goods') {
$this->assign('allow_to_cart', 1);
}
/* 订单商品 */
$goods_list = order_goods($order_id);
foreach ($goods_list as $key => $value) {
$goods_list[$key]['market_price'] = price_format($value['market_price'], false);
$goods_list[$key]['goods_price'] = price_format($value['goods_price'], false);
$goods_list[$key]['subtotal'] = price_format($value['subtotal'], false);
}
/* 设置能否修改使用余额数 */
if ($order['order_amount'] > 0) {
if ($order['order_status'] == OS_UNCONFIRMED || $order['order_status'] == OS_CONFIRMED)
{
$user = user_info($order['user_id']);
if ($user['user_money'] + $user['credit_line'] > 0) {
$this->assign('allow_edit_surplus', 1);
$this->assign('max_surplus', sprintf(L('max_surplus'), $user['user_money']));
}
}
}
/* 未发货,未付款时允许更换支付方式 */
if ($order['order_amount'] > 0 && ($order['pay_status'] == PS_UNPAYED || $order['pay_status'] == PS_PAYED_PART) && $order['shipping_status'] == SS_UNSHIPPED)
{
$payment_list = available_payment_list(false, 0, true);
/* 过滤掉当前支付方式和余额支付方式 */
if (is_array($payment_list)) {
foreach ($payment_list as $key => $payment) {
// ecmoban模板堂 --will start
// pc端去除ecjia的支付方式
if (substr($payment['pay_code'], 0, 4) == 'pay_') {
unset($payment_list[$key]);
continue;
}
// ecmoban模板堂 --will end
if ($payment['pay_id'] == $order['pay_id'] || $payment['pay_code'] == 'balance')
{
unset($payment_list[$key]);
}
}
}
$this->assign('payment_list', $payment_list);
}
/* 订单 支付 配送 状态语言项 */
$os = L('os');
$ps = L('ps');
$ss = L('ss');
if ($order['order_status'] == OS_UNCONFIRMED) {
$order['handler'] = "<span class=\"box-flex text-right\"></span><a class=\"btn-default box-flex\" type=\"button\" href=\"".U('user/order/cancel',array('order_id'=>$order['order_id'])) . "\" onclick=\"if (!confirm('" . L('confirm_cancel') . "')) return false;\">" . L('cancel') . "</a>";
}
else if ($order['order_status'] == OS_SPLITED) {
/* 对配送状态的处理 */
if ($order['shipping_status'] == SS_SHIPPED) {
@$order['handler'] = "<span class=\"box-flex text-right\"></span><a class=\"btn-submit\" href=\"".U('user/order/affirmreceived',array('order_id'=>$order['order_id'])). "\" onclick=\"if (!confirm('" . L('confirm_received') . "')) return false;\">" .L('received') . "</a>";
}
elseif ($order['shipping_status'] == SS_RECEIVED) {
@$order['handler'] = '<span class="order-checkout-text box">'.L('ss_received').'</span>';;
}
else {
if ($order['pay_status'] == PS_UNPAYED) {
@$order['handler'] = "<span class=\"box-flex text-right\"></span><a class=\"btn-submit\" href=\"".U('user/order/detail',array('order_id'=>$order['order_id'])). '" >' . L('pay_money') . '</a>';
}
else {
$order['handler'] = '<span class="order-checkout-text box">'.$ss[$order['shipping_status']].'</span>';
}
}
} else {
if($order['order_status'] == OS_CONFIRMED && $order['pay_status'] == PS_UNPAYED){
$order['handler'] = "<span class=\"box-flex text-right\"></span><a class=\"btn-default box-flex\" type=\"button\" >" .$ps[$order['pay_status']] . "</a>";
}else{
$order['handler'] = $order['handler'] = '<span class="order-checkout-text box">'.$os[$order['order_status']].'</span>';
}
}
$order['order_status'] = $os[$order[order_status]];
$order['pay_status'] = $ps[$order[pay_status]];
$order['shipping_status'] = $ss[$order['shipping_status']];
$order['c'] = get_region_name($order['country']);
$order['detail_address'] .= $order['c']['region_name'];
$order['p'] = get_region_name($order['province']);
$order['detail_address'] .= $order['p']['region_name'];
$order['cc'] = get_region_name($order['city']);
$order['detail_address'] .= $order['cc']['region_name'];
$order['dd'] = get_region_name($order['district']);
$order['detail_address'] .= $order['dd']['region_name'];
$order['detail_address'] .= $order['address'];
/* 自提点信息 */
$sql = "SELECT * FROM ".$this->ecs->table('shipping_point')." WHERE id IN (SELECT point_id FROM ".$this->ecs->table('order_info')." WHERE order_id='{$order_id}')";
$order['point'] = $this->db->getRow($sql);
if($order['point']){
$order['point']['pickDate'] = $order['shipping_dateStr'];
}
$this->assign('order', $order);
$this->assign('goods_list', $goods_list);
$this->assign('goods_count', count($goods_list));
$this->assign('page_title', '订单详情');
$this->display('user_order_checkout');
}
/**
* 订单跟踪
*/
public function actionOrderTracking(){
$order_id = I('order_id', 0, 'intval');
$order = get_order_detail($order_id, $this->user_id);
if ($order === false) {
$this->err->show(L('back_home_lnk'), './');
exit();
}
if($order['invoice_no']){
preg_match("/^<a.*href=\"(.*?)\">/is", $order['invoice_no'], $url);
if($url[1]){
$this->redirect($url[1]);
}
}
show_message("还未发货或者已收货", '会员中心', U('user/index/index'));
}
/* 确认收货 */
public function actionAffirmReceived()
{
$user_id = $this->user_id;
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
if (affirm_received($order_id, $user_id)) {
ecs_header("Location: " . U('user/order/index'));
exit();
} else {
show_message("还未发货或者已收货");
}
}
/**
* 取消订单
*/
public function actionCancel()
{
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
if (cancel_order($order_id, $this->user_id)) {
ecs_header("Location: " . U('user/order/index'));
exit();
} else {
$this->err->show(L('order_list_lnk'), U('user/order/index'));
}
}
/**
* 验证是否登录
*/
public function actionchecklogin(){
if(!$this->user_id){
$url = urlencode(__HOST__ . $_SERVER['REQUEST_URI']);
if(IS_POST) {
$url = urlencode($_SERVER['HTTP_REFERER']);
}
ecs_header("Location: ".U('user/login/index',array('back_act'=>$url)));
exit;
}
}
// 订单列表获取订单数量
function Get_Order_Where_Count($user_id = 0, $show_type = 0, $where = '')
{
$sql = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('order_info') . " as oi" . " WHERE oi.user_id = '$user_id' and oi.is_delete = '$show_type'" . " and (select count(*) from " . $GLOBALS['ecs']->table('order_info') . " as oi_2 where oi_2.main_order_id = oi.order_id) = 0 " . // 主订单下有子订单时,则主订单不显示 .
$where;
return $GLOBALS['db']->getOne($sql);
}
}