/** * 根据条件获得物流涉及的国家,按position排序 * * @param int $delivery_id * @return array */ public function get_delivery_countries_by_position($query_struct) { $results = array(); $result = array(); $delivery_countries = $this->query_assoc($query_struct); foreach ($delivery_countries as $key => $value) { if (Mycountry::instance($value['country_id'])->get('active') == 0) { $delivery_countries[$key]['disable'] = true; } } return $delivery_countries; }
/** * get carrier_country data * * @param Array $where * @param Array $orderby * @param Int $limit * @param Int $offset * @param Int $in * @return Array */ private function _data($where = NULL, $in = NULL, $orderby = NULL, $limit = 0, $offset = 1000) { $list = array(); $orm = ORM::factory('carrier_country'); if (!empty($where)) { $orm->where($where); } if (!empty($in)) { $orm->in('site_id', $in); } if (!empty($orderby)) { $orm->orderby($orderby); } $orm_list = $orm->find_all($limit, $offset); $list = array(); foreach ($orm_list as $key => $rs) { $list[$key] = $rs->as_array(); $list[$key]['site'] = Mysite::instance($rs->site_id)->get(); $list[$key]['carrier'] = Mycarrier::instance($rs->carrier_id)->get(); $list[$key]['country'] = Mycountry::instance($rs->country_id)->get(); } return $list; }
/** * 根据国家和订单的价格或重量得到所有的物流方式以及计算的费用 * * @param String $iso_code 国家简码 * @param float $total 订单价格 * @param int $weight 订单重量 * @return array $deliveries */ public function get_cart_deliveries_by_country($iso_code, $total, $weight = 0) { $whole_country_ids = array(); $results = array(); $country = Mycountry::instance()->get_by_iso($iso_code); if (empty($country['id']) || !isset($country)) { return array(); } $country_id = $country['id']; if (!is_array($country) || count($country) == 0) { die('error'); } $deliveries = $this->get_deliveries($site_id); foreach ($deliveries as $key => $rs) { //指定配送国家和费用 $result = $this->get_delivery_price($rs['id'], $country_id, $total, $weight); if (isset($result) && !empty($result)) { $results[$result['id']] = $result; } } $results = array_merge($results); return $results; }
function get_country() { $return_struct = array(); $countrys = array(); // 修改返回状态数据 $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = 'ok'; $request_data = $this->input->get(); $query_country_ids = explode('-', $request_data['country_ids']); if (!empty($query_country_ids)) { foreach ($query_country_ids as $id) { $countrys[] = Mycountry::instance($id)->get('name'); } } if (empty($countrys)) { $return_struct['status'] = 0; $return_struct['code'] = 501; $return_struct['msg'] = 'error'; } $countrys_str = implode(',', $countrys); $return_struct['content'] = $countrys_str; header('Content-Type: text/javascript; charset=UTF-8'); exit(json_encode($return_struct)); }
/** * 添加订单 */ function do_add() { /*权限检查*/ role::check('order_add'); if ($_POST) { $post = new Validation($_POST); $post->pre_filter('trim'); $post->add_rules('shipping_firstname', 'required', 'length[1,200]'); $post->add_rules('shipping_lastname', 'required', 'length[1,200]'); $post->add_rules('shipping_country', 'required', 'length[1,200]'); $post->add_rules('shipping_state', 'length[1,200]'); $post->add_rules('shipping_city', 'required', 'length[1,200]'); $post->add_rules('shipping_address', 'required', 'length[1,200]'); $post->add_rules('shipping_zip', 'required', 'length[1,200]'); $post->add_rules('shipping_phone', 'required', 'length[1,200]'); $post->add_rules('shipping_mobile', 'length[1,200]'); $post->add_rules('billing_firstname', 'length[1,200]'); $post->add_rules('billing_lastname', 'length[1,200]'); $post->add_rules('billing_country', 'length[1,200]'); $post->add_rules('billing_state', 'length[1,200]'); $post->add_rules('billing_city', 'length[1,200]'); $post->add_rules('billing_address', 'length[1,200]'); $post->add_rules('billing_zip', 'length[1,200]'); $post->add_rules('billing_phone', 'length[1,200]'); $post->add_rules('billing_mobile', 'length[1,200]'); $post->add_rules('good_price', 'required', 'length[1,200]'); $post->add_rules('shipping_price', 'required', 'length[1,200]'); if (!$post->validate()) { $errors = $post->errors(); log::write('form_error', $errors, __FILE__, __LINE__); remind::set(Kohana::lang('o_order.user_address_wrong'), 'order/order_add/add_again', 'error'); } /* 添加主订单详情*/ $order_data = array(); $user_id = $this->input->post('user_id'); $email = $this->input->post('email'); $carrier = $this->input->post('carrier'); $currency_code = $this->input->post('code'); if ($user_id && $email && $currency_code) { /* 订单用户信息*/ $order_data['user_id'] = $user_id; $order_data['email'] = $email; /* 订单币种信息*/ $currency = Mycurrency::instance()->get_by_code($currency_code); $order_data['currency'] = $currency_code; $order_data['conversion_rate'] = $currency['conversion_rate']; /* 订单国家*/ $order_data['shipping_country'] = Mycountry::instance($post->shipping_country)->get('iso_code'); $order_data['billing_country'] = Mycountry::instance($post->billing_country)->get('iso_code'); /* 订单时间和IP信息*/ $order_data['data_add'] = date('Y-m-d H:i:s', time()); $order_data['IP'] = tool::get_long_ip(); /* 订单号生成*/ $order_num = ''; do { $temp = sprintf("%14.0f", date('ymd') . "00000" + rand(0, 99999) . "0000"); $exist_data = array(); $exist_data['order_num'] = $temp; if (!Myorder::instance()->exist($exist_data)) { $order_num = $temp; break; } } while (1); $order_data['order_num'] = $order_num; $order_data['order_status'] = '1'; $order_data['pay_status'] = '1'; $order_data['ship_status'] = '1'; $order_data['user_status'] = 'NULL'; $order_data['order_source'] = 'manual'; $order_data['total'] = $post->good_price + $post->shipping_price; $order_data['total_products'] = $post->good_price; $order_data['total_shipping'] = $post->shipping_price; $order_data['total_real'] = $order_data['total'] / $order_data['conversion_rate']; $order_data['total_discount'] = '0.00'; $order_data['total_paid'] = '0.00'; $order_data['shipping_firstname'] = $post->shipping_firstname; $order_data['shipping_lastname'] = $post->shipping_lastname; $order_data['shipping_state'] = $post->shipping_state; $order_data['shipping_city'] = $post->shipping_city; $order_data['shipping_address'] = $post->shipping_address; $order_data['shipping_zip'] = $post->shipping_zip; $order_data['shipping_phone'] = $post->shipping_phone; $order_data['shipping_mobile'] = $post->shipping_mobile; $order_data['billing_firstname'] = $post->billing_firstname; $order_data['billing_lastname'] = $post->billing_lastname; $order_data['billing_state'] = $post->billing_state; $order_data['billing_city'] = $post->billing_city; $order_data['billing_address'] = $post->billing_address; $order_data['billing_zip'] = $post->billing_zip; $order_data['billing_phone'] = $post->billing_phone; $order_data['billing_mobile'] = $post->billing_mobile; $order_data['carrier'] = $carrier; $order_data['active'] = 1; } else { remind::set(Kohana::lang('o_order.data_trans_wrong'), 'order/order_add', 'error'); } /* 添加订单,返回订单数据*/ $order_id = Myorder::instance()->add($order_data); $order = Myorder::instance($order_id)->get(); /* 添加订单产品信息*/ $session = Session::instance(); $cart_data = $session->get('cart_data'); if (isset($cart_data) && is_array($cart_data) && count($cart_data) && !empty($order['order_num'])) { foreach ($cart_data as $key => $rs) { $good_full_data = ProductService::get_instance()->get($key); $order_product_detail_data = array(); $order_product_detail_data['order_id'] = $order['id']; $order_product_detail_data['product_type'] = ProductService::PRODUCT_TYPE_GOODS; $order_product_detail_data['dly_status'] = 'storage'; //$order_product_detail_data['product_id'] = $good_full_data['product_id']; $order_product_detail_data['good_id'] = $key; $order_product_detail_data['quantity'] = $rs; $order_product_detail_data['sendnum'] = '0'; $order_product_detail_data['price'] = $good_full_data['price']; $order_product_detail_data['discount_price'] = $good_full_data['price']; $order_product_detail_data['weight'] = $good_full_data['weight']; //$order_product_detail_data['name'] = $good_full_data['name_manage']; $order_product_detail_data['name'] = $good_full_data['title']; $order_product_detail_data['SKU'] = $good_full_data['sku']; $order_product_detail_data['brief'] = $good_full_data['brief']; $order_product_detail_data['date_add'] = date('Y-m-d H:i:s', time()); $order_product_detail_data['link'] = product::permalink($good_full_data); order::do_order_product_detail_data_by_good(&$order_product_detail_data, $good_full_data, $good_full_data['default_image_id']); $order_product_detail = Myorder_product::instance()->add($order_product_detail_data); } } /*验证是否添加成功,添加成功返回订单号*/ if (!empty($order['order_num']) && $order_product_detail) { remind::set(Kohana::lang('o_order.add_order_success') . $order['order_num'], 'order/order', 'success'); } else { remind::set(Kohana::lang('o_order.add_order_wrong'), 'order/order_add', 'error'); } } }
/** * ajax编辑 */ function ajax_edit() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented'); //权限验证 role::check('user_edit'); $countries = array(); $id = intval($this->input->get('id')); if (!$id) { $return_struct['code'] = 400; $return_struct['msg'] = Kohana::lang('o_global.bad_request'); exit(json_encode($return_struct)); } $address = Myaddress::instance($id)->get(); $query_struct = array('where' => array('active' => 1), 'orderby' => array('position' => 'DESC', 'name' => 'ASC')); $site_countries = Mycountry::instance()->query_assoc($query_struct); foreach ($site_countries as $val) { $countries[$val['iso_code']] = $val['name']; } $return_template = $this->template = new View('user/address_edit'); $this->template->address = $address; $this->template->countries = $countries; $return_str = $return_template->render(); $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = 'Success'; $return_struct['content'] = $return_str; exit(json_encode($return_struct)); }
/** * 订单导出 */ public function do_export($id = 0) { // 初始化返回数据 $return_data = array(); //请求结构体 $request_data = array(); try { //权限验证 role::check('order_export'); if ($id < 1) { throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403); } if (!$id) { throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403); } if ($_POST) { /* 验证是否选择了订单 */ if (!isset($_POST['order_ids'])) { throw new MyRuntimeException(Kohana::lang('o_order.select_order_export'), 403); } $order_ids = $this->input->post('order_ids'); //array(1,2); /* 得到当前的导出配置 */ $data = Myorder_export::instance($id)->get(); $output_field_ids = unserialize($data['export_ids']); /* 导出格式错误 */ if (!is_array($output_field_ids) || count($output_field_ids) < 1) { throw new MyRuntimeException(Kohana::lang('o_order.order_export_config_error'), 403); } $xls = export::instance(); //$xls->debug(true);//开测试模式 $xls->set_output_field_ids($output_field_ids); /* 订单状态,支付状态,物流状态 */ $order_status = Kohana::config('order.order_status'); $pay_status = Kohana::config('order.pay_status'); $ship_status = Kohana::config('order.ship_status'); $result = array(); foreach ($order_ids as $order_id) { $order = Myorder::instance($order_id)->get(); $shipping_country_name = Mycountry::instance()->get_name_by_iso_code($order['shipping_country']); $billing_country_name = Mycountry::instance()->get_name_by_iso_code($order['billing_country']); $order_products = Myorder_product::instance()->order_product_details(array('order_id' => $order['id'])); $order['shipping_country_name'] = $shipping_country_name; $order['billing_country_name'] = $billing_country_name; $order['pay_status_name'] = $pay_status[$order['pay_status']]['name']; $order['ship_status_name'] = $ship_status[$order['ship_status']]['name']; $order['order_status_name'] = $order_status[$order['order_status']]['name']; $order['ip'] = long2ip($order['ip']); if (is_array($order_products) && count($order_products) > 0) { foreach ($order_products as $key => $value) { $order_products[$key]['total'] = round($value['discount_price'] * $value['quantity'] * $order['conversion_rate'], 2); } } $order['product'] = $order_products; $xls->set_order_line($order); } $xls->output(); exit; } } catch (MyRuntimeException $ex) { $return_struct['status'] = 0; $return_struct['code'] = $ex->getCode(); $return_struct['msg'] = $ex->getMessage(); var_dump($return_struct); exit; //TODO 异常处理 //throw $ex; if ($this->is_ajax_request()) { $this->template = new View('layout/empty_html'); $this->template->content = $return_struct['msg']; } else { $this->template->return_struct = $return_struct; $content = new View('info'); $this->template->content = $content; /* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; /* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } } }
/** * 获取订单指定物流的运费 * * @param mixed $delivery_ids * @param string $country_iso * @param array $delivery_cats * @return array $price_arr */ public static function get_delivery_price_selected($delivery_ids, $country_iso, $delivery_cats = array()) { if (empty($delivery_cats)) { $delivery_cats = self::_get_cart_delivary_data(); } if (empty($delivery_cats)) { return array(); } $country = Mycountry::instance()->get_by_iso($country_iso); if (empty($country)) { return array(); } $country_id = $country['id']; $price_arr = array(); if (!is_array($delivery_ids)) { $delivery_id = $delivery_ids; $delivery = DeliveryService::get_instance()->get($delivery_id); $cat_id = $delivery['delivery_category_id']; if (key_exists($cat_id, $delivery_cats)) { $condition = array('delivery_id' => $delivery_id, 'country_id' => $country_id, 'weight' => $delivery_cats[$cat_id]['weight'], 'total_price' => $delivery_cats[$cat_id]['total_price']); $price = self::get_delivery_price_by_condition($condition); $price_arr[$delivery_id] = $price; } else { $price_arr[$delivery_id] = -1; } } else { foreach ($delivery_ids as $delivery_id) { $delivery = DeliveryService::get_instance()->get($delivery_id); $cat_id = $delivery['delivery_category_id']; if (key_exists($cat_id, $delivery_cats)) { $condition = array('delivery_id' => $delivery_id, 'country_id' => $country_id, 'weight' => $delivery_cats[$cat_id]['weight'], 'total_price' => $delivery_cats[$cat_id]['total_price']); $price = self::get_delivery_price_by_condition($condition); $price_arr[$delivery_id] = $price; } else { $price_arr[$delivery_id] = -1; } } } return $price_arr; }
/** * 根据物流id以及国家iso和订单的价格或重量得到费用 * @param int $delivery_id 物流id * @param String $iso_code 国家简码 * @param float $total 订单价格 * @param int $weight 订单重量 * @return array $deliveries */ public function get_final_delivery_price($delivery_id, $iso_code, $total, $weight = 0) { $delivery = array(); $country = Mycountry::instance()->get_by_iso($iso_code); if (empty($country['id']) || !isset($country)) { return array(); } $country_id = $country['id']; $result = $this->get($delivery_id); $delivery = $this->get_delivery_price($delivery_id, $country_id, $total, $weight); return $delivery; }
/** * 批量删除国家 */ public function batch_delete() { //初始化返回数据 $return_data = array(); //请求结构体 $request_data = array(); try { $country_ids = $this->input->post('country_ids'); if (is_array($country_ids) && count($country_ids) > 0) { /* 删除失败的 */ $failed_country_names = ''; /* 执行操作 */ foreach ($country_ids as $country_id) { if (!Mycountry::instance($country_id)->delete()) { $failed_country_names .= ' | ' . $country_id; } else { //删除国家对应的物流 Delivery_countryService::get_instance()->delete_delivery_by_country($country_id); } } if (empty($failed_country_names)) { throw new MyRuntimeException(Kohana::lang('o_site.delete_country_success'), 403); } else { /* 中转提示页面的停留时间 */ $return_struct['action']['time'] = 10; $failed_country_names = trim($failed_country_names, ' | '); throw new MyRuntimeException(Kohana::lang('o_site.delete_country_error', $failed_country_names), 403); } } else { throw new MyRuntimeException(Kohana::lang('o_global.data_load_error'), 403); } } catch (MyRuntimeException $ex) { $return_struct['status'] = 0; $return_struct['code'] = $ex->getCode(); $return_struct['msg'] = $ex->getMessage(); //TODO 异常处理 //throw $ex; if ($this->is_ajax_request()) { $this->template = new View('layout/empty_html'); $this->template->content = $return_struct['msg']; } else { $this->template->return_struct = $return_struct; $content = new View('info'); $this->template->content = $content; /* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; /* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } } }