Пример #1
0
/**
 *  获取指订单的详情
 *
 * @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 . 'includes/lib_order.php';
    $order_id = intval($order_id);
    if ($order_id <= 0) {
        $GLOBALS['err']->add(L('invalid_order_id'));
        return false;
    }
    $order = order_info($order_id);
    //检查订单是否属于该用户
    if ($user_id > 0 && $user_id != $order['user_id']) {
        $GLOBALS['err']->add(L('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 . 'includes/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 . 'includes/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'] = L('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(L('confirm_time'), local_date(C('time_format'), $order['confirm_time']));
    } else {
        $order['confirm_time'] = '';
    }
    if ($order['pay_time'] > 0 && $order['pay_status'] != PS_UNPAYED) {
        $order['pay_time'] = sprintf(L('pay_time'), local_date(C('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(L('shipping_time'), local_date(C('time_format'), $order['shipping_time']));
    } else {
        $order['shipping_time'] = '';
    }
    return $order;
}
Пример #2
0
 if ($order['user_id'] > 0) {
     $user = user_info($order['user_id']);
     if (!empty($user)) {
         $order['user_name'] = $user['user_name'];
     }
 }
 /* 查询:取得区域名 */
 $sql = "SELECT concat(IFNULL(c.region_name, ''), '  ', IFNULL(p.region_name, ''), " . "'  ', IFNULL(t.region_name, ''), '  ', IFNULL(d.region_name, '')) AS region " . "FROM " . $ecs->table('order_info') . " AS o " . "LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " . "WHERE o.order_id = '{$order['order_id']}'";
 $order['region'] = $db->getOne($sql);
 /* 查询:其他处理 */
 $order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
 $order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
 /* 查询:是否保价 */
 $order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
 /* 查询:是否存在实体商品 */
 $exist_real_goods = exist_real_goods($order_id);
 /* 查询:取得订单商品 */
 $_goods = get_order_goods(array('order_id' => $order['order_id'], 'order_sn' => $order['order_sn']));
 $attr = $_goods['attr'];
 $goods_list = $_goods['goods_list'];
 unset($_goods);
 /* 查询:商品已发货数量 此单可发货数量 */
 if ($goods_list) {
     foreach ($goods_list as $key => $goods_value) {
         if (!$goods_value['goods_id']) {
             continue;
         }
         /* 超级礼包 */
         if ($goods_value['extension_code'] == 'package_buy' && count($goods_value['package_goods_list']) > 0) {
             $goods_list[$key]['package_goods_list'] = package_goods($goods_value['package_goods_list'], $goods_value['goods_number'], $goods_value['order_id'], $goods_value['extension_code'], $goods_value['goods_id']);
             foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value) {
Пример #3
0
/**
 * 检查收货人信息是否完整
 * @param   array   $consignee  收货人信息
 * @param   int     $flow_type  购物流程类型
 * @return  bool    true 完整 false 不完整
 */
function check_consignee_info($consignee, $flow_type)
{
    if (exist_real_goods(0, $flow_type)) {
        /* 如果存在实体商品 */
        $res = !empty($consignee['consignee']) && !empty($consignee['country']) && !empty($consignee['email']) && !empty($consignee['tel']);
        if ($res) {
            if (empty($consignee['province'])) {
                /* 没有设置省份,检查当前国家下面有没有设置省份 */
                $pro = get_regions(1, $consignee['country']);
                $res = empty($pro);
            } elseif (empty($consignee['city'])) {
                /* 没有设置城市,检查当前省下面有没有城市 */
                $city = get_regions(2, $consignee['province']);
                $res = empty($city);
            } elseif (empty($consignee['district'])) {
                $dist = get_regions(3, $consignee['city']);
                $res = empty($dist);
            }
        }
        return $res;
    } else {
        /* 如果不存在实体商品 */
        return !empty($consignee['consignee']) && !empty($consignee['email']) && !empty($consignee['tel']);
    }
}
Пример #4
0
$flow_type = 0;
$_LANG['gram'] = '克';
$_LANG['kilogram'] = '千克';
$tips = '订单提交成功!';
if ($_SESSION['user_id'] > 0) {
    $smarty->assign('user_name', $_SESSION['user_name']);
}
if ($_REQUEST['act'] == 'order_lise') {
    include_once ROOT_PATH . 'includes/lib_transaction.php';
    $flow_type = isset($_SESSION['flow_type']) ? intval($_SESSION['flow_type']) : CART_GENERAL_GOODS;
    /* 检查购物车中是否有商品 */
    $sql = "SELECT COUNT(*) FROM " . $ecs->table('cart') . " WHERE session_id = '" . SESS_ID . "' " . "AND parent_id = 0 AND is_gift = 0 AND rec_type = '{$flow_type}'";
    if ($db->getOne($sql) == 0) {
        $tips = '您的购物车中没有商品';
    }
    $real_goods_count = exist_real_goods(0, $flow_type) ? 1 : 0;
    if ($real_goods_count) {
        $db->query("update " . $ecs->table('user_address') . " set best_time='" . $_POST['best_time'] . ' ' . $_POST['best_time1'] . "' where address_id=" . $_POST['address_id'] . " and user_id=" . $_SESSION['user_id']);
        $consignee = get_consignee_info($_SESSION['user_id'], $_POST['address_id']);
        $_SESSION['flow_consignee'] = stripslashes_deep($consignee);
        //$consignee = get_consignee($_SESSION['user_id']);
        //14:07 2013-07-17
        $where = "1";
        if ($consignee['city']) {
            $where = " region_id = '{$consignee['city']}'";
        }
        if ($consignee['district']) {
            $where .= " OR region_id = '{$consignee['district']}'";
        }
        $sql = 'SELECT region_name FROM ' . $GLOBALS['ecs']->table('region') . " WHERE " . $where;
        $rnarr = $db->GetAll($sql);
Пример #5
0
     $province_list = array();
     $city_list = array();
     $district_list = array();
     foreach ($consignee_list as $region_id => $consignee) {
         $consignee['country'] = isset($consignee['country']) ? intval($consignee['country']) : 0;
         $consignee['province'] = isset($consignee['province']) ? intval($consignee['province']) : 0;
         $consignee['city'] = isset($consignee['city']) ? intval($consignee['city']) : 0;
         $province_list[$region_id] = get_regions(1, $consignee['country']);
         $city_list[$region_id] = get_regions(2, $consignee['province']);
         $district_list[$region_id] = get_regions(3, $consignee['city']);
     }
     $smarty->assign('province_list', $province_list);
     $smarty->assign('city_list', $city_list);
     $smarty->assign('district_list', $district_list);
     /* 返回收货人页面代码 */
     $smarty->assign('real_goods_count', exist_real_goods(0, $flow_type) ? 1 : 0);
 } else {
     /*
      * 保存收货人信息
      */
     $consignee = array('address_id' => empty($_POST['address_id']) ? 0 : intval($_POST['address_id']), 'consignee' => empty($_POST['consignee']) ? '' : trim($_POST['consignee']), 'country' => empty($_POST['country']) ? '' : $_POST['country'], 'province' => empty($_POST['province']) ? '' : $_POST['province'], 'city' => empty($_POST['city']) ? '' : $_POST['city'], 'district' => empty($_POST['district']) ? '' : $_POST['district'], 'email' => empty($_POST['email']) ? '' : $_POST['email'], 'address' => empty($_POST['address']) ? '' : $_POST['address'], 'zipcode' => empty($_POST['zipcode']) ? '' : make_semiangle(trim($_POST['zipcode'])), 'tel' => empty($_POST['tel']) ? '' : make_semiangle(trim($_POST['tel'])), 'mobile' => empty($_POST['mobile']) ? '' : make_semiangle(trim($_POST['mobile'])), 'sign_building' => empty($_POST['sign_building']) ? '' : $_POST['sign_building'], 'best_time' => empty($_POST['best_time']) ? '' : $_POST['best_time']);
     if ($_SESSION['user_id'] > 0) {
         include_once ROOT_PATH . 'includes/lib_transaction.php';
         /* 如果用户已经登录,则保存收货人信息 */
         $consignee['user_id'] = $_SESSION['user_id'];
         save_consignee($consignee, true);
     }
     /* 保存到session */
     $_SESSION['flow_consignee'] = stripslashes_deep($consignee);
     ecs_header("Location: flow.php?step=checkout\n");
     exit;
Пример #6
0
function quick_delivery($order_id, $invoice_no, $action_note = 'Wap端一键发货')
{
    global $db, $ecs;
    if (!empty($invoice_no)) {
        $order_id = intval(trim($order_id));
        $action_note = trim($action_note);
        /* 查询:根据订单id查询订单信息 */
        if (!empty($order_id)) {
            $order = order_info($order_id);
        } else {
            die('order does not exist');
        }
        /* 查询:根据订单是否完成 检查权限 */
        if (order_finished($order)) {
            admin_priv('order_view_finished');
        } else {
            admin_priv('order_view');
        }
        /* 查询:如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
        $sql = "SELECT agency_id FROM " . $ecs->table('supplier_admin_user') . " WHERE user_id = '{$_SESSION['supplier_user_id']}'";
        $agency_id = $db->getOne($sql);
        if ($agency_id > 0) {
            if ($order['agency_id'] != $agency_id) {
                sys_msg($_LANG['priv_error'], 0);
            }
        }
        /* 查询:取得用户名 */
        if ($order['user_id'] > 0) {
            $user = user_info($order['user_id']);
            if (!empty($user)) {
                $order['user_name'] = $user['user_name'];
            }
        }
        /* 查询:取得区域名 */
        $order['region'] = $db->getOne($sql);
        /* 查询:其他处理 */
        $order['order_time'] = local_date($_CFG['time_format'], $order['add_time']);
        $order['invoice_no'] = $order['shipping_status'] == SS_UNSHIPPED || $order['shipping_status'] == SS_PREPARING ? $_LANG['ss'][SS_UNSHIPPED] : $order['invoice_no'];
        /* 查询:是否保价 */
        $order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
        /* 查询:是否存在实体商品 */
        $exist_real_goods = exist_real_goods($order_id);
        /* 查询:取得订单商品 */
        $_goods = get_order_goods(array('order_id' => $order['order_id'], 'order_sn' => $order['order_sn']));
        $attr = $_goods['attr'];
        $goods_list = $_goods['goods_list'];
        unset($_goods);
        /* 查询:商品已发货数量 此单可发货数量 */
        if ($goods_list) {
            foreach ($goods_list as $key => $goods_value) {
                if (!$goods_value['goods_id']) {
                    continue;
                }
                /* 超级礼包 */
                if ($goods_value['extension_code'] == 'package_buy' && count($goods_value['package_goods_list']) > 0) {
                    $goods_list[$key]['package_goods_list'] = package_goods($goods_value['package_goods_list'], $goods_value['goods_number'], $goods_value['order_id'], $goods_value['extension_code'], $goods_value['goods_id']);
                    foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value) {
                        $goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = '';
                        /* 使用库存 是否缺货 */
                        if ($pg_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) {
                            $goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_vacancy'];
                            $goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
                        } elseif ($pg_value['send'] <= 0) {
                            $goods_list[$key]['package_goods_list'][$pg_key]['send'] = $_LANG['act_good_delivery'];
                            $goods_list[$key]['package_goods_list'][$pg_key]['readonly'] = 'readonly="readonly"';
                        }
                    }
                } else {
                    $goods_list[$key]['sended'] = $goods_value['send_number'];
                    $goods_list[$key]['sended'] = $goods_value['goods_number'];
                    $goods_list[$key]['send'] = $goods_value['goods_number'] - $goods_value['send_number'];
                    $goods_list[$key]['readonly'] = '';
                    /* 是否缺货 */
                    if ($goods_value['storage'] <= 0 && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP) {
                        $goods_list[$key]['send'] = $_LANG['act_good_vacancy'];
                        $goods_list[$key]['readonly'] = 'readonly="readonly"';
                    } elseif ($goods_list[$key]['send'] <= 0) {
                        $goods_list[$key]['send'] = $_LANG['act_good_delivery'];
                        $goods_list[$key]['readonly'] = 'readonly="readonly"';
                    }
                }
            }
        }
        $suppliers_id = 0;
        $delivery['order_sn'] = trim($order['order_sn']);
        $delivery['add_time'] = trim($order['order_time']);
        $delivery['user_id'] = intval(trim($order['user_id']));
        $delivery['how_oos'] = trim($order['how_oos']);
        $delivery['shipping_id'] = trim($order['shipping_id']);
        $delivery['shipping_fee'] = trim($order['shipping_fee']);
        $delivery['consignee'] = trim($order['consignee']);
        $delivery['address'] = trim($order['address']);
        $delivery['country'] = intval(trim($order['country']));
        $delivery['province'] = intval(trim($order['province']));
        $delivery['city'] = intval(trim($order['city']));
        $delivery['district'] = intval(trim($order['district']));
        $delivery['sign_building'] = trim($order['sign_building']);
        $delivery['email'] = trim($order['email']);
        $delivery['zipcode'] = trim($order['zipcode']);
        $delivery['tel'] = trim($order['tel']);
        $delivery['mobile'] = trim($order['mobile']);
        $delivery['best_time'] = trim($order['best_time']);
        $delivery['postscript'] = trim($order['postscript']);
        $delivery['how_oos'] = trim($order['how_oos']);
        $delivery['insure_fee'] = floatval(trim($order['insure_fee']));
        $delivery['shipping_fee'] = floatval(trim($order['shipping_fee']));
        $delivery['agency_id'] = intval(trim($order['agency_id']));
        $delivery['shipping_name'] = trim($order['shipping_name']);
        /* 查询订单信息 */
        $order = order_info($order_id);
        /* 检查能否操作 */
        $operable_list = operable_list($order);
        /* 初始化提示信息 */
        $msg = '';
        /* 定义当前时间 */
        /* 取得订单商品 */
        $_goods = get_order_goods(array('order_id' => $order_id, 'order_sn' => $delivery['order_sn']));
        $goods_list = $_goods['goods_list'];
        /* 检查此单发货商品库存缺货情况 */
        /* $goods_list已经过处理 超值礼包中商品库存已取得 */
        $virtual_goods = array();
        $package_virtual_goods = array();
        /* 生成发货单 */
        /* 获取发货单号和流水号 */
        $delivery['delivery_sn'] = get_delivery_sn();
        $delivery_sn = $delivery['delivery_sn'];
        /* 获取当前操作员 */
        $delivery['action_user'] = $_SESSION['supplier_name'];
        /* 获取发货单生成时间 */
        define('GMTIME_UTC', gmtime());
        $delivery['update_time'] = GMTIME_UTC;
        $delivery_time = $delivery['update_time'];
        $sql = "select add_time from " . $GLOBALS['ecs']->table('order_info') . " WHERE order_sn = '" . $delivery['order_sn'] . "'";
        $delivery['add_time'] = $GLOBALS['db']->GetOne($sql);
        /* 获取发货单所属供应商 */
        $delivery['suppliers_id'] = $suppliers_id;
        /* 设置默认值 */
        $delivery['status'] = 2;
        // 正常
        $delivery['order_id'] = $order_id;
        /* 过滤字段项 */
        $filter_fileds = array('order_sn', 'add_time', 'user_id', 'how_oos', 'shipping_id', 'shipping_fee', 'consignee', 'address', 'country', 'province', 'city', 'district', 'sign_building', 'email', 'zipcode', 'tel', 'mobile', 'best_time', 'postscript', 'insure_fee', 'agency_id', 'delivery_sn', 'action_user', 'update_time', 'suppliers_id', 'status', 'order_id', 'shipping_name');
        $_delivery = array();
        foreach ($filter_fileds as $value) {
            $_delivery[$value] = $delivery[$value];
        }
        /* 发货单入库 */
        $query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'INSERT', '', 'SILENT');
        $delivery_id = $db->insert_id();
        if ($delivery_id) {
            $delivery_goods = array();
            //发货单商品入库
            if (!empty($goods_list)) {
                foreach ($goods_list as $value) {
                    // 商品(实货)(虚货)
                    if (empty($value['extension_code']) || $value['extension_code'] == 'virtual_card') {
                        $delivery_goods = array('delivery_id' => $delivery_id, 'goods_id' => $value['goods_id'], 'product_id' => $value['product_id'], 'product_sn' => $value['product_sn'], 'goods_id' => $value['goods_id'], 'goods_name' => $value['goods_name'], 'brand_name' => $value['brand_name'], 'goods_sn' => $value['goods_sn'], 'send_number' => $value['goods_number'], 'parent_id' => 0, 'is_real' => $value['is_real'], 'goods_attr' => $value['goods_attr']);
                        /* 如果是货品 */
                        if (!empty($value['product_id'])) {
                            $delivery_goods['product_id'] = $value['product_id'];
                        }
                        $query = $db->autoExecute($ecs->table('delivery_goods'), $delivery_goods, 'INSERT', '', 'SILENT');
                        $sql = "UPDATE " . $GLOBALS['ecs']->table('order_goods') . "\r\n                SET send_number = " . $value['goods_number'] . "\r\n                WHERE order_id = '" . $value['order_id'] . "'\r\n                AND goods_id = '" . $value['goods_id'] . "' ";
                        $GLOBALS['db']->query($sql, 'SILENT');
                    } elseif ($value['extension_code'] == 'package_buy') {
                        foreach ($value['package_goods_list'] as $pg_key => $pg_value) {
                            $delivery_pg_goods = array('delivery_id' => $delivery_id, 'goods_id' => $pg_value['goods_id'], 'product_id' => $pg_value['product_id'], 'product_sn' => $pg_value['product_sn'], 'goods_name' => $pg_value['goods_name'], 'brand_name' => '', 'goods_sn' => $pg_value['goods_sn'], 'send_number' => $value['goods_number'], 'parent_id' => $value['goods_id'], 'extension_code' => $value['extension_code'], 'is_real' => $pg_value['is_real']);
                            $query = $db->autoExecute($ecs->table('delivery_goods'), $delivery_pg_goods, 'INSERT', '', 'SILENT');
                            $sql = "UPDATE " . $GLOBALS['ecs']->table('order_goods') . "\r\n                SET send_number = " . $value['goods_number'] . "\r\n                WHERE order_id = '" . $value['order_id'] . "'\r\n                AND goods_id = '" . $pg_value['goods_id'] . "' ";
                            $GLOBALS['db']->query($sql, 'SILENT');
                        }
                    }
                }
            }
        } else {
            /* 操作失败 */
            $links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
            sys_msg($_LANG['act_false'], 1, $links);
        }
        unset($filter_fileds, $delivery, $_delivery, $order_finish);
        /* 定单信息更新处理 */
        if (true) {
            /* 标记订单为已确认 "发货中" */
            /* 更新发货时间 */
            $order_finish = get_order_finish($order_id);
            $shipping_status = SS_SHIPPED_ING;
            if ($order['order_status'] != OS_CONFIRMED && $order['order_status'] != OS_SPLITED && $order['order_status'] != OS_SPLITING_PART) {
                $arr['order_status'] = OS_CONFIRMED;
                $arr['confirm_time'] = GMTIME_UTC;
            }
            $arr['order_status'] = $order_finish ? OS_SPLITED : OS_SPLITING_PART;
            // 全部分单、部分分单
            $arr['shipping_status'] = $shipping_status;
            update_order($order_id, $arr);
        }
        /* 记录log */
        order_action($order['order_sn'], $arr['order_status'], $shipping_status, $order['pay_status'], $action_note);
        /* 清除缓存 */
        clear_cache_files();
        /* 根据发货单id查询发货单信息 */
        if (!empty($delivery_id)) {
            $delivery_order = delivery_order_info($delivery_id);
        } elseif (!empty($order_sn)) {
            $delivery_id = $GLOBALS['db']->getOne("SELECT delivery_id FROM " . $ecs->table('delivery_order') . " WHERE order_sn = " . $order_sn);
            $delivery_order = delivery_order_info($delivery_id);
        } else {
            die('order does not exist');
        }
        /* 如果管理员属于某个办事处,检查该订单是否也属于这个办事处 */
        $sql = "SELECT agency_id FROM " . $ecs->table('supplier_admin_user') . " WHERE user_id = '" . $_SESSION['supplier_user_id'] . "'";
        $agency_id = $db->getOne($sql);
        if ($agency_id > 0) {
            if ($delivery_order['agency_id'] != $agency_id) {
                sys_msg($_LANG['priv_error']);
            }
            /* 取当前办事处信息 */
            $sql = "SELECT agency_name FROM " . $ecs->table('agency') . " WHERE agency_id = '{$agency_id}' LIMIT 0, 1";
            $agency_name = $db->getOne($sql);
            $delivery_order['agency_name'] = $agency_name;
        }
        /* 取得用户名 */
        if ($delivery_order['user_id'] > 0) {
            $user = user_info($delivery_order['user_id']);
            if (!empty($user)) {
                $delivery_order['user_name'] = $user['user_name'];
            }
        }
        /* 取得区域名 */
        $sql = "SELECT concat(IFNULL(c.region_name, ''), '  ', IFNULL(p.region_name, ''), " . "'  ', IFNULL(t.region_name, ''), '  ', IFNULL(d.region_name, '')) AS region " . "FROM " . $ecs->table('order_info') . " AS o " . "LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " . "LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " . "WHERE o.order_id = '" . $delivery_order['order_id'] . "'";
        $delivery_order['region'] = $db->getOne($sql);
        /* 是否保价 */
        $order['insure_yn'] = empty($order['insure_fee']) ? 0 : 1;
        /* 取得发货单商品 */
        $goods_sql = "SELECT *\r\n                  FROM " . $ecs->table('delivery_goods') . "\r\n                  WHERE delivery_id = " . $delivery_order['delivery_id'];
        $goods_list = $GLOBALS['db']->getAll($goods_sql);
        /* 是否存在实体商品 */
        $exist_real_goods = 0;
        if ($goods_list) {
            foreach ($goods_list as $value) {
                if ($value['is_real']) {
                    $exist_real_goods++;
                }
            }
        }
        /* 取得订单操作记录 */
        $act_list = array();
        $sql = "SELECT * FROM " . $ecs->table('order_action') . " WHERE order_id = '" . $delivery_order['order_id'] . "' AND action_place = 1 ORDER BY log_time DESC,action_id DESC";
        $res = $db->query($sql);
        while ($row = $db->fetchRow($res)) {
            $row['order_status'] = $_LANG['os'][$row['order_status']];
            $row['pay_status'] = $_LANG['ps'][$row['pay_status']];
            $row['shipping_status'] = $row['shipping_status'] == SS_SHIPPED_ING ? $_LANG['ss_admin'][SS_SHIPPED_ING] : $_LANG['ss'][$row['shipping_status']];
            $row['action_time'] = local_date($_CFG['time_format'], $row['log_time']);
            $act_list[] = $row;
        }
        /*同步发货*/
        /*判断支付方式是否支付宝*/
        $alipay = false;
        $order = order_info($delivery_order['order_id']);
        //根据订单ID查询订单信息,返回数组$order
        $payment = payment_info($order['pay_id']);
        //取得支付方式信息
        /* 定义当前时间 */
        define('GMTIME_UTC', gmtime());
        // 获取 UTC 时间戳
        /* 根据发货单id查询发货单信息 */
        if (!empty($delivery_id)) {
            $delivery_order = delivery_order_info($delivery_id);
        } else {
            die('order does not exist');
        }
        /* 查询订单信息 */
        $order = order_info($order_id);
        /* 检查此单发货商品库存缺货情况 */
        $virtual_goods = array();
        $delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, DG.product_id, SUM(DG.send_number) AS sums, IF(DG.product_id > 0, P.product_number, G.goods_number) AS storage, G.goods_name,DG.goods_attr, DG.send_number\r\n        FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G, " . $GLOBALS['ecs']->table('products') . " AS P\r\n        WHERE DG.goods_id = G.goods_id\r\n        AND DG.delivery_id = '{$delivery_id}'\r\n        AND DG.product_id = P.product_id\r\n        GROUP BY DG.product_id ";
        $delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
        /* 如果商品存在规格就查询规格,如果不存在规格按商品库存查询 */
        if (!empty($delivery_stock_result)) {
            foreach ($delivery_stock_result as $value) {
                if (($value['sums'] > $value['storage'] || $value['storage'] <= 0) && ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP || $_CFG['use_storage'] == '0' && $value['is_real'] == 0)) {
                    /* 操作失败 */
                    $links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
                    sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
                    break;
                }
                /* 虚拟商品列表 virtual_card*/
                if ($value['is_real'] == 0) {
                    $virtual_goods[] = array('goods_id' => $value['goods_id'], 'goods_name' => $value['goods_name'], 'num' => $value['send_number']);
                }
            }
        } else {
            $delivery_stock_sql = "SELECT DG.goods_id, DG.is_real, SUM(DG.send_number) AS sums, G.goods_number, G.goods_name,DG.goods_attr, DG.send_number\r\n        FROM " . $GLOBALS['ecs']->table('delivery_goods') . " AS DG, " . $GLOBALS['ecs']->table('goods') . " AS G\r\n        WHERE DG.goods_id = G.goods_id\r\n        AND DG.delivery_id = '{$delivery_id}'\r\n        GROUP BY DG.goods_id ";
            $delivery_stock_result = $GLOBALS['db']->getAll($delivery_stock_sql);
            foreach ($delivery_stock_result as $value) {
                if (($value['sums'] > $value['goods_number'] || $value['goods_number'] <= 0) && ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP || $_CFG['use_storage'] == '0' && $value['is_real'] == 0)) {
                    /* 操作失败 */
                    $links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
                    sys_msg(sprintf($_LANG['act_good_vacancy'], $value['goods_name']), 1, $links);
                    break;
                }
                /* 虚拟商品列表 virtual_card*/
                if ($value['is_real'] == 0) {
                    $virtual_goods[] = array('goods_id' => $value['goods_id'], 'goods_name' => $value['goods_name'], 'num' => $value['send_number']);
                }
            }
        }
        /* 发货 */
        /* 处理虚拟卡 商品(虚货) */
        if (is_array($virtual_goods) && count($virtual_goods) > 0) {
            foreach ($virtual_goods as $virtual_value) {
                virtual_card_shipping($virtual_value, $order['order_sn'], $msg, 'split');
            }
        }
        /* 如果使用库存,且发货时减库存,则修改库存 */
        /*if ($_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_SHIP)
            {
        
                foreach ($delivery_stock_result as $value)
                {
        
                    // 商品(实货)、超级礼包(实货) 
                    if ($value['is_real'] != 0)
                    {
                        //(货品)
                        if (!empty($value['product_id']))
                        {
                            $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('products') . "
                                                SET product_number = product_number - " . $value['sums'] . "
                                                WHERE product_id = " . $value['product_id'];
                            $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
                        }
        
                        $minus_stock_sql = "UPDATE " . $GLOBALS['ecs']->table('goods') . "
                                            SET goods_number = goods_number - " . $value['sums'] . "
                                            WHERE goods_id = " . $value['goods_id'];
        
                        $GLOBALS['db']->query($minus_stock_sql, 'SILENT');
                    }
                }
            }
        
            /* 修改发货单信息 */
        $invoice_no = trim($invoice_no);
        $_delivery['invoice_no'] = $invoice_no;
        $_delivery['status'] = 0;
        // 0,为已发货
        $query = $db->autoExecute($ecs->table('delivery_order'), $_delivery, 'UPDATE', "delivery_id = {$delivery_id}", 'SILENT');
        if (!$query) {
            /* 操作失败 */
            $links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
            sys_msg($_LANG['act_false'], 1, $links);
        }
        /* 标记订单为已确认 "已发货" */
        /* 更新发货时间 */
        $order_finish = get_all_delivery_finish($order_id);
        $shipping_status = $order_finish == 1 ? SS_SHIPPED : SS_SHIPPED_PART;
        $arr['shipping_status'] = $shipping_status;
        $arr['shipping_time'] = GMTIME_UTC;
        // 发货时间
        $arr['invoice_no'] = trim($order['invoice_no'] . '<br>' . $invoice_no, '<br>');
        update_order($order_id, $arr);
        /* 发货单发货记录log */
        order_action($order['order_sn'], OS_CONFIRMED, $shipping_status, $order['pay_status'], $action_note, null, 1);
        /* 如果当前订单已经全部发货 */
        if ($order_finish) {
            /* 如果订单用户不为空,计算积分,并发给用户;发红包 */
            if ($order['user_id'] > 0) {
                /* 取得用户信息 */
                $user = user_info($order['user_id']);
                /* 计算并发放积分 */
                $integral = integral_to_give($order);
                log_account_change($order['user_id'], 0, 0, intval($integral['rank_points']), intval($integral['custom_points']), sprintf($_LANG['order_gift_integral'], $order['order_sn']));
                /* 发放红包 */
                send_order_bonus($order_id, $order['supplier_id']);
            }
            /* 发送邮件 */
            $cfg = $_CFG['send_ship_email'];
            if ($cfg == '1') {
                $order['invoice_no'] = $invoice_no;
                $tpl = get_mail_template('deliver_notice');
                $smarty->assign('order', $order);
                $smarty->assign('send_time', local_date($_CFG['time_format']));
                $smarty->assign('shop_name', $_CFG['shop_name']);
                $smarty->assign('send_date', local_date($_CFG['date_format']));
                $smarty->assign('sent_date', local_date($_CFG['date_format']));
                $smarty->assign('confirm_url', $ecs->url() . 'receive.php?id=' . $order['order_id'] . '&con=' . rawurlencode($order['consignee']));
                $smarty->assign('send_msg_url', $ecs->url() . 'user.php?act=message_list&order_id=' . $order['order_id']);
                $content = $smarty->fetch('str:' . $tpl['template_content']);
                if (!send_mail($order['consignee'], $order['email'], $tpl['template_subject'], $content, $tpl['is_html'])) {
                    $msg = $_LANG['send_mail_fail'];
                }
            }
            /* 如果需要,发短信 */
            if ($GLOBALS['_CFG']['sms_order_shipped'] == '1' && $order['mobile'] != '') {
                include_once '../send.php';
                $content = '您的订单已发货,订单号为' . $order['order_sn'] . '收货人为' . $order['consignee'] . '收货地址为' . $order['address'] . ',请注意查收【' . $GLOBALS['_CFG']['shop_name'] . '】';
                sendSMS($order['mobile'], $content);
            }
        }
        /* 清除缓存 */
        clear_cache_files();
        /* 操作成功 */
        $links[] = array('text' => '发货单列表', 'href' => 'order.php?act=delivery_list');
        $links[] = array('text' => $_LANG['delivery_sn'] . $_LANG['detail'], 'href' => 'order.php?act=delivery_info&delivery_id=' . $delivery_id);
        sys_msg($_LANG['act_ok'], 0, $links);
    }
}
Пример #7
0
 $operable_list = operable_list($order);
 $smarty->assign('operable_list', $operable_list);
 /* 取得订单操作记录 */
 $act_list = array();
 $sql = "SELECT * FROM " . $ecs->table('order_action') . " WHERE order_id='{$order['order_id']}' ORDER BY log_time DESC,action_id DESC";
 $res = $db->query($sql);
 while ($row = $db->fetchRow($res)) {
     $row['order_status'] = $_LANG['os'][$row['order_status']];
     $row['pay_status'] = $_LANG['ps'][$row['pay_status']];
     $row['shipping_status'] = $_LANG['ss'][$row['shipping_status']];
     $row['action_time'] = date($_CFG['time_format'], $row['log_time']);
     $act_list[] = $row;
 }
 $smarty->assign('action_list', $act_list);
 /* 取得是否存在实体商品 */
 $smarty->assign('exist_real_goods', exist_real_goods($order['order_id']));
 $sql = 'SELECT COUNT(user_id) FROM ' . $ecs->table('order_info') . " WHERE user_id={$order['user_id']} GROUP BY user_id HAVING COUNT(user_id)";
 if ($db->getOne($sql) > 1) {
     $smarty->assign('old_buyer', '◆');
 }
 $sql_select = 'SELECT card_number FROM ' . $GLOBALS['ecs']->table('memship_number') . " WHERE user_id={$order['user_id']}";
 $card_number = $GLOBALS['db']->getOne($sql_select);
 /* 是否打印订单,分别赋值 */
 if (isset($_GET['print'])) {
     $smarty->assign('shop_name', $_CFG['shop_name']);
     $smarty->assign('shop_url', $ecs->url());
     $smarty->assign('shop_address', $_CFG['shop_address']);
     $smarty->assign('service_phone', $_CFG['service_phone']);
     $smarty->assign('print_time', strstr($order['order_time'], ' ', true));
     $smarty->assign('action_user', $_SESSION['admin_name']);
     $smarty->assign('card_number', $card_number);
Пример #8
0
         $user = user_info($order['user_id']);
         /* 计算可用余额 */
         $smarty->assign('available_user_money', $order['surplus'] + $user['user_money']);
         /* 计算可用积分 */
         $smarty->assign('available_pay_points', $order['integral'] + $user['pay_points']);
         /* 取得用户可用红包 */
         $user_bonus = user_bonus($order['user_id'], $order['goods_amount']);
         if ($order['bonus_id'] > 0) {
             $bonus = bonus_info($order['bonus_id']);
             $user_bonus[] = $bonus;
         }
         $smarty->assign('available_bonus', $user_bonus);
     }
 } elseif ('invoice' == $step) {
     /* 如果不存在实体商品 */
     if (!exist_real_goods($order_id)) {
         die('Hacking Attemp');
     }
     /* 取得可用的配送方式列表 */
     $region_id_list = array($order['country'], $order['province'], $order['city'], $order['district']);
     $shipping_list = available_shipping_list($region_id_list);
     //        /* 取得配送费用 */
     //        $total = order_weight_price($order_id);
     //        foreach ($shipping_list AS $key => $shipping)
     //        {
     //            $shipping_fee = shipping_fee($shipping['shipping_code'],
     //                unserialize($shipping['configure']), $total['weight'], $total['amount'], $total['number']);
     //            $shipping_list[$key]['shipping_fee'] = $shipping_fee;
     //            $shipping_list[$key]['format_shipping_fee'] = price_format($shipping_fee);
     //            $shipping_list[$key]['free_money'] = price_format($shipping['configure']['free_money']);
     //        }