/** * 提交编辑的物流 */ function do_edit() { $request_data = $this->input->post(); //流程 $submit_target = intval($this->input->post('submit_target')); if ($_POST) { $delivery_service = DeliveryService::get_instance(); $delivery_country_service = Delivery_countryService::get_instance(); //数据验证 $validation = Validation::factory($request_data)->pre_filter('trim')->add_rules('delivery_id', 'required', 'digit')->add_rules('name', 'required', 'length[0,100]')->add_rules('url', 'required', 'length[0,200]')->add_rules('first_unit', 'required', 'numeric')->add_rules('continue_unit', 'required', 'numeric')->add_rules('use_exp', 'required', 'digit')->add_rules('type', 'required', 'digit')->add_rules('position', 'required', 'numeric')->add_rules('active', 'required', 'digit'); //验证物流表的数据 $delivery = $delivery_service->get($request_data['delivery_id']); if (empty($delivery) || !isset($delivery)) { remind::set(Kohana::lang('o_global.bad_request'), request::referrer(), 'error'); } //验证物流国家表的数据 if (!empty($delivery['type']) && $delivery['type'] == 1) { $delivery_countries = $delivery_country_service->get_delivery_countries_by_id($delivery['id']); if (empty($delivery_countries) || !isset($delivery_countries)) { remind::set(Kohana::lang('o_global.bad_request'), request::referrer(), 'error'); } //验证物流国家表里面的数据是否与物流表的数据统一 $old_country_ids = array(); foreach ($delivery_countries as $item) { if (!is_array($item) || count($item) < 0) { remind::set(Kohana::lang('o_global.access_denied'), request::referrer(), 'error'); break; } foreach ($item as $k => $v) { if ($v['delivery_id'] != $delivery['id']) { remind::set(Kohana::lang('o_global.bad_request'), request::referrer(), 'error'); } //保存已存在的物流国家的信息 $old_country_ids[$v['country_id']] = $v['id']; } } } //检测物流名称是否存在 if ($delivery_service->name_is_exist($request_data['name'], $request_data['delivery_id'])) { remind::set(Kohana::lang('o_site.carrier_has_exist'), request::referrer(), 'error'); } $is_default = isset($request_data['is_default']) ? $request_data['is_default'] : 0; $set_data = array('name' => $request_data['name'], 'url' => $request_data['url'], 'first_unit' => $request_data['first_unit'], 'continue_unit' => $request_data['continue_unit'], 'type' => $request_data['type'], 'is_default' => $is_default, 'use_exp' => $request_data['use_exp'], 'expression' => $request_data['expression'], 'position' => $request_data['position'], 'delay' => $request_data['delay'], 'active' => $request_data['active']); //处理统一设置或启用默认费用 if ($request_data['use_exp'] == 1) { $validation->add_rules('expression', 'required'); } else { if (isset($request_data['is_default']) && $request_data['is_default'] == 1) { $validation->add_rules('first_price', 'required', 'numeric'); $validation->add_rules('continue_price', 'required', 'numeric'); $set_data['first_price'] = $request_data['first_price']; $set_data['continue_price'] = $request_data['continue_price']; $set_data['expression'] = delivery::create_exp($request_data['first_unit'], $request_data['continue_unit'], $request_data['first_price'], $request_data['continue_price']); } else { $set_data['expression'] = delivery::create_exp($request_data['first_unit'], $request_data['continue_unit']); } } if (!$validation->validate()) { remind::set(Kohana::lang('o_global.input_error'), request::referrer(), 'error'); } //更新物流表的信息 $delivery_service->set($delivery['id'], $set_data); //处理地区费用类型改变的情况 if ($delivery['type'] == 1) { //处理支持的配送国家的情况 if ($request_data['type'] == 1) { if (!empty($request_data['des_indexs']) and is_array($request_data['des_indexs'])) { $whole_country_ids = array(); foreach ($request_data['des_indexs'] as $i => $index) { // 验证国家数据 $validation = Validation::factory($request_data)->pre_filter('trim')->add_rules('country_names_' . $index, 'required')->add_rules('countries_use_exp_' . $index, 'required', 'digit')->add_rules('country_ids_' . $index, 'required'); // 生成 支配的国家数据 $country_data = array('delivery_id' => $delivery['id'], 'first_price' => $request_data['first_price_' . $index], 'continue_price' => $request_data['continue_price_' . $index], 'use_exp' => $request_data['countries_use_exp_' . $index], 'expression' => $request_data['expression_' . $index]); $country_ids = explode('-', $request_data['country_ids_' . $index]); $country_names = explode(',', $request_data['country_names_' . $index]); //判断提交的国家id个数是否于国家名称的个数一致 if (empty($country_ids)) { remind::set(Kohana::lang('o_global.bad_request'), request::referrer(), 'error'); } //使用公式 if ($request_data['countries_use_exp_' . $index] == 1) { $validation->add_rules('expression_' . $index, 'required'); } else { $validation->add_rules('first_price_' . $index, 'required', 'numeric'); $validation->add_rules('continue_price_' . $index, 'required', 'numeric'); $country_data['expression'] = delivery::create_exp($request_data['first_unit'], $request_data['continue_unit'], $request_data['first_price_' . $index], $request_data['continue_price_' . $index]); } $country_data['position'] = $index - 1; $ids_index = 'ids_' . $index; $de_countries[$index] = $country_data; $de_countries[$index]['ids'] = array(); if (!empty($request_data[$ids_index])) { $de_countries[$index]['ids'] = $request_data[$ids_index]; } $countries_ids[$index] = $request_data['country_ids_' . $index]; $whole_country_ids = array_merge($country_ids, $whole_country_ids); } foreach ($countries_ids as $i => $v) { $country_ids = explode('-', $v); foreach ($country_ids as $value) { $de_countries[$i]['country_id'] = $value; if (!isset($old_country_ids[$value])) { $delivery_country_service->add($de_countries[$i]); } else { $delivery_country_service->set($old_country_ids[$value], $de_countries[$i]); } } } foreach ($old_country_ids as $key => $id) { if (!in_array($key, $whole_country_ids)) { $delivery_country_service->remove($id); } } } } else { $delivery_country_service->delete_delivery_countries_by_delivery_id($delivery['id']); } } else { //处理支持的配送国家 if ($request_data['type'] == 1) { if (!empty($request_data['des_indexs']) and is_array($request_data['des_indexs'])) { foreach ($request_data['des_indexs'] as $i => $index) { // 验证国家数据 $validation = Validation::factory($request_data)->pre_filter('trim')->add_rules('country_names_' . $index, 'required', 'length[0,512]')->add_rules('countries_use_exp_' . $index, 'required', 'digit')->add_rules('country_ids_' . $index, 'required', 'length[0,256]'); // 生成 支配国家数据 $country_data = array('delivery_id' => $delivery['id'], 'first_price' => $request_data['first_price_' . $index], 'continue_price' => $request_data['continue_price_' . $index], 'use_exp' => $request_data['countries_use_exp_' . $index], 'expression' => $request_data['expression_' . $index]); $country_ids = explode('-', $request_data['country_ids_' . $index]); $country_names = explode(',', $request_data['country_names_' . $index]); //判断提交的国家id个数是否于国家名称的个数一致 if (empty($country_ids)) { remind::set(Kohana::lang('o_global.bad_request'), request::referrer(), 'error'); } //使用公式 if ($request_data['countries_use_exp_' . $index] == 1) { $validation->add_rules('expression_' . $index, 'required'); } else { $validation->add_rules('first_price_' . $index, 'required', 'numeric'); $validation->add_rules('continue_price_' . $index, 'required', 'numeric'); $country_data['expression'] = delivery::create_exp($request_data['first_unit'], $request_data['continue_unit'], $request_data['first_price_' . $index], $request_data['continue_price_' . $index]); } $country_data['position'] = $index - 1; foreach ($country_ids as $i) { $country_data['country_id'] = $i; if (!$delivery_country_service->add($country_data)) { remind::set(Kohana::lang('o_global.add_error'), 'site/delivery/add'); break; } } } } } } //判断走向 switch ($submit_target) { case 1: remind::set(Kohana::lang('o_global.update_success'), 'site/delivery/edit/' . $delivery['id'], 'success'); default: remind::set(Kohana::lang('o_global.update_success'), 'site/delivery/', 'success'); } } else { remind::set(Kohana::lang('o_global.update_error'), 'site/delivery'); } }
/** * Construct load data * * @param Int $site_id */ public function __construct($site_id) { $this->db = Database::instance('default'); $sql = "SELECT `carriers`.* FROM (`carriers`) WHERE `site_id` = {$site_id} ORDER BY `carriers`.`id` ASC"; $carriers = $this->db->query($sql); foreach ($carriers as $keyc => $_carrier) { $delivery_temp = array(); $delivery_temp['id'] = $_carrier->id; $delivery_temp['site_id'] = $_carrier->site_id; $delivery_temp['name'] = $_carrier->name; $delivery_temp['url'] = $_carrier->url; $delivery_temp['type'] = $_carrier->country_relative; $delivery_temp['first_unit'] = 1000000; $delivery_temp['continue_unit'] = 1000; $delivery_temp['is_default'] = 1; $delivery_temp['continue_price'] = 0; $delivery_temp['position'] = $_carrier->position; $delivery_temp['delay'] = $_carrier->delay; $delivery_temp['active'] = $_carrier->active; if ($_carrier->type == 0) { $delivery_temp['use_exp'] = 0; $delivery_temp['first_price'] = $_carrier->price; $delivery_temp['expression'] = delivery::create_exp(1000000, 1000, $_carrier->price, 0); $delivery_temp['delivery_country'] = array(); $sql = "SELECT `carrier_countries`.* FROM (`carrier_countries`) WHERE `site_id` = {$site_id} AND `carrier_id` = {$_carrier->id} ORDER BY `carrier_countries`.`id` ASC"; $countries = $this->db->query($sql); $j = 0; $price_j = array(); foreach ($countries as $key_c => $_country) { if ($_country->shipping_add != 0) { if (!isset($price_j[$_country->shipping_add])) { $delivery_temp['delivery_country'][$key_c]['position'] = $j; $price_j[$_country->shipping_add] = $j; $j++; } else { $delivery_temp['delivery_country'][$key_c]['position'] = $price_j[$_country->shipping_add]; } $delivery_temp['delivery_country'][$key_c]['id'] = $_country->id; $delivery_temp['delivery_country'][$key_c]['site_id'] = $_country->site_id; $delivery_temp['delivery_country'][$key_c]['country_id'] = $_country->country_id; $delivery_temp['delivery_country'][$key_c]['delivery_id'] = $_country->carrier_id; $delivery_temp['delivery_country'][$key_c]['first_price'] = $_country->shipping_add + $delivery_temp['first_price']; $delivery_temp['delivery_country'][$key_c]['continue_price'] = 0; $first_price = $_country->shipping_add + $delivery_temp['first_price']; $delivery_temp['delivery_country'][$key_c]['use_exp'] = 0; $delivery_temp['delivery_country'][$key_c]['expression'] = delivery::create_exp(1000000, 1000, $first_price, 0); } } if ($j == 0) { $delivery_temp['type'] = 0; } } else { $delivery_temp['use_exp'] = 1; $delivery_temp['first_price'] = 0; $sql_range = "SELECT `carrier_ranges`.* FROM (`carrier_ranges`) WHERE `site_id` = {$site_id} AND `carrier_id` = {$_carrier->id} ORDER BY `carrier_ranges`.`id` ASC"; $ranges = $this->db->query($sql_range)->as_array(); $str = ''; foreach ($ranges as $key_c => $_range) { if ($_range == end($ranges)) { if ($_range->parameter_from == 0) { $str .= "{{" . $_range->parameter_to . "-p}-0.6}*" . $_range->shipping; } else { $str .= "{{p-" . $_range->parameter_from . "}-0.1}*{{" . $_range->parameter_to . "-p}-0.6}*" . $_range->shipping; } } else { if ($_range->parameter_from == 0) { $str .= "{{" . $_range->parameter_to . "-p}-0.6}*" . $_range->shipping . '+'; } else { $str .= "{{p-" . $_range->parameter_from . "}-0.1}*{{" . $_range->parameter_to . "-p}-0.6}*" . $_range->shipping . '+'; } } } $delivery_temp['expression'] = $str; $delivery_temp['delivery_country'] = array(); $sql = "SELECT `carrier_countries`.* FROM (`carrier_countries`) WHERE `site_id` = {$site_id} AND `carrier_id` = {$_carrier->id} ORDER BY `carrier_countries`.`id` ASC"; $countries = $this->db->query($sql); $i = 0; $price = array(); foreach ($countries as $key_c => $_country) { if ($_country->shipping_add != 0) { if (!isset($price[$_country->shipping_add])) { $delivery_temp['delivery_country'][$key_c]['position'] = $i; $price[$_country->shipping_add] = $i; $i++; } else { $delivery_temp['delivery_country'][$key_c]['position'] = $price[$_country->shipping_add]; } $str_country = ''; $delivery_temp['delivery_country'][$key_c]['id'] = $_country->id; $delivery_temp['delivery_country'][$key_c]['site_id'] = $_country->site_id; $delivery_temp['delivery_country'][$key_c]['country_id'] = $_country->country_id; $delivery_temp['delivery_country'][$key_c]['delivery_id'] = $_country->carrier_id; $delivery_temp['delivery_country'][$key_c]['first_price'] = 0; $delivery_temp['delivery_country'][$key_c]['continue_price'] = 0; $delivery_temp['delivery_country'][$key_c]['use_exp'] = 1; foreach ($ranges as $k_c => $_r) { if ($_r == end($ranges)) { if ($_r->parameter_from == 0) { $str_country .= "{{" . $_r->parameter_to . "-p}-0.6}*" . ($_r->shipping + $_country->shipping_add); } else { $str_country .= "{{p-" . $_r->parameter_from . "}-0.1}*{{" . $_r->parameter_to . "-p}-0.6}*" . ($_r->shipping + $_country->shipping_add); } } else { if ($_r->parameter_from == 0) { $str_country .= "{{" . $_r->parameter_to . "-p}-0.6}*" . ($_r->shipping + $_country->shipping_add) . '+'; } else { $str_country .= "{{p-" . $_r->parameter_from . "}-0.1}*{{" . $_r->parameter_to . "-p}-0.6}*" . ($_r->shipping + $_country->shipping_add) . '+'; } } } $delivery_temp['delivery_country'][$key_c]['expression'] = $str_country; } } if ($i == 0) { $delivery_temp['type'] = 0; } } $this->data[$keyc] = $delivery_temp; } $this->end = count($this->data); }