public function validate() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array('assoc' => NULL, 'count' => 0); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); if (empty($request_data['product_id'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } if (empty($request_data['goods']) or !is_array($request_data['goods'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } try { $product = BLL_Product::get($request_data['product_id']); } catch (MyRuntimeException $ex) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } foreach ($request_data['goods'] as $index => $good) { if (isset($good['sku'])) { empty($good['id']) and $good['id'] = 0; if (BLL_Product_Type_Assembly::good_sku_exists($good['sku'], $good['id'])) { throw new MyRuntimeException(sprintf(Kohana::lang('o_product.good_sku_has_exists'), $index), 403); } } else { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } } //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { //* html 输出 ==根据业务逻辑定制== */ $this->template = new View('layout/commonfix_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/product/merge/list'); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } // end of request type determine } catch (MyRuntimeException $ex) { $this->_ex($ex, $return_struct, $request_data); } }
/** * 使用商品模板创建一个新的商品 * * @return array */ public static function get($site_id, $type = 0) { if (Product_templateService::get_instance()->is_template_exist($site_id)) { $template = Product_templateService::get_instance()->get_template_by_site($site_id); unset($template['id']); unset($template['create_timestamp']); unset($template['update_timestamp']); unset($template['descriptions']); $product = $template; $product['type'] = $type; $product['sku'] = strtoupper(uniqid()); } else { $product = array('site_id' => $site_id, 'status' => 0, 'sku' => strtoupper(uniqid()), 'category_id' => 0, 'on_sale' => 1, 'type' => $type); } $product_id = ProductService::get_instance()->add($product); return BLL_Product::get($product_id); }
/** * 通过商品ID获取该商品的关联商品ID序列 * * @param integer $product_id * @return array */ public static function get($product_id) { $relations = Product_relationService::get_instance()->index(array('where' => array('product_id' => $product_id))); $relation_product_ids = array(); if (!empty($relations)) { foreach ($relations as $relation) { $relation_product_ids[] = $relation['relation_product_id']; } } if (!empty($relation_product_ids)) { /*$relations = ProductService::get_instance()->index(array('where' => array( 'id' => $relation_product_ids, )));*/ $relations = BLL_Product::index(array('where' => array('id' => $relation_product_ids))); return $relations['assoc']; } else { return array(); } }
public function search_product() { role::check('promotion_promotion'); // 收集请求数据 $request_data = $this->input->get(); $request_data['stype'] = $request_data['type']; $request_data['on_sale'] = 1; $request_data['per_page'] = 6; $struct = product::get_struct($request_data); $query_struct_current = $struct['query']; $request_struct_current = $struct['request']; $request_data['keyword'] && ($query_struct_current['like'][$request_data['stype']] = $request_data['keyword']); $return_data = BLL_Product::index($query_struct_current); $returnData['content'] = $return_data['assoc']; $returnData['page'] = isset($request_struct_current['page']) ? $request_struct_current['page'] : 1; $returnData['count'] = ceil($return_data['count'] / $request_struct_current['per_page']); echo json_encode($returnData); exit; }
public function index() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); //* 初始化返回数据 */ $return_data = array('assoc' => NULL, 'count' => 0); $search_value = isset($request_data['keyword']) ? $request_data['keyword'] : array(); $category_list = array(); $brand_list = array(); $product_ids = array(); $relation_product_ids = array(); $product_id = $request_data['product_id']; $product_service = ProductService::get_instance(); $product = $product_service->get($product_id); $product_id = $product['id']; if (!$product_id > 0) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 400); } else { $struct = product::get_struct($request_data); $query_struct_current = $struct['query']; $request_struct_current = $struct['request']; if ($product['type'] == ProductService::PRODUCT_TYPE_CONFIGURABLE || $product['type'] == ProductService::PRODUCT_TYPE_ASSEMBLY) { $product_id_array = Product_assemblyService::get_instance()->get_good_id_array($product_id); $product_id_array[] = $product_id; } else { $product_id_array = array($product_id); } $query_struct_current['not_in']['id'] = $product_id_array; try { $return_data = BLL_Product::index($query_struct_current); if (!empty($return_data['assoc'])) { // 获取该商品列表中涉及到的分类以及品牌ID $category_ids = array(); $brand_ids = array(); foreach ($return_data['assoc'] as $product) { if ($product['category_id'] != 0) { $category_ids[$product['category_id']] = TRUE; } if ($product['brand_id'] != 0) { $brand_ids[$product['brand_id']] = TRUE; } $product_ids[] = $product['id']; } $query_struct = array('where' => array('product_id' => $product_id)); foreach (Product_relationService::get_instance()->query_assoc($query_struct) as $relation) { if (in_array($relation['relation_product_id'], $product_ids)) { $relation_product_ids[] = $relation['relation_product_id']; } } // 获取分类列表 if (!empty($category_ids)) { $query_struct = array('where' => array('id' => array_keys($category_ids))); $categorys = CategoryService::get_instance()->query_assoc($query_struct); foreach ($categorys as $category) { $category_list[$category['id']] = $category['title_manage'] ? $category['title_manage'] : $category['title']; } } // 获取品牌列表 if (!empty($brand_ids)) { $query_struct = array('where' => array('id' => array_keys($brand_ids))); $brands = BrandService::get_instance()->query_assoc($query_struct); foreach ($brands as $brand) { $brand_list[$brand['id']] = $brand['name']; } } } // 模板输出 分页 $this->pagination = new Pagination(array('total_items' => $return_data['count'], 'items_per_page' => $query_struct_current['limit']['per_page'])); } catch (MyRuntimeException $ex) { //* ==根据业务逻辑定制== */ //FIXME 根据service层的异常做一些对应处理并抛出用户友好的异常Message throw $ex; } } //* 如果是ajax请求缩减返回的字段 ==根据业务逻辑定制== */ if ($this->is_ajax_request()) { $requestkeys = array('id', 'category_id', 'title', 'uri_name', 'store', 'on_sale', 'price', 'sku'); array_walk($return_data['assoc'], 'util::simplify_return_array', $requestkeys); } //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //exit("<div id=\"do_debug\" style=\"clear:both;display:;\"><pre>\n".var_export($return_struct,TRUE)."\n</pre></div>"); //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { //* html 输出 ==根据业务逻辑定制== */ $this->template = new View('layout/commonfix_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; $this->template->content->request_struct = $request_struct_current; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); //$this->template->content->site_list = Mysite::instance()->select_list($site_ids); $this->template->content->category_list = $category_list; $this->template->content->brand_list = $brand_list; $this->template->content->product_id = $product_id; $this->template->content->product_ids = $product_ids; $this->template->content->relation_ids = $relation_product_ids; $this->template->content->keyword = $search_value; } // end of request type determine } catch (MyRuntimeException $ex) { $this->template = new View('layout/commonfix_html'); $this->_ex($ex, $return_struct, $request_data); } }
public function set_on_sale() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); if (empty($request_data['product_id'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 400); } if (!isset($request_data['status']) or !in_array($request_data['status'], array('0', '1'))) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 400); } //* 逻辑验证 ==根据业务逻辑定制== */ BLL_Product::set_on_sale($request_data['product_id'], $request_data['status']); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $request_data['status']; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // 仅允许AJAX调用 //throw new MyRuntimeException('Not Implemented',501); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View('info'); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } // end of request type determine } catch (MyRuntimeException $ex) { $this->_ex($ex, $return_struct, $request_data); } }
/** * 获取可以绑定的货品 * * @author gehaifeng */ public function get_goods_not_binded() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); //* 权限验证 ==根据业务逻辑定制== */ $site_id_list = role::get_site_ids(); if (empty($request_data['site_id']) || empty($request_data['product_id'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } if (!in_array($request_data['site_id'], $site_id_list)) { throw new MyRuntimeException(Kohana::lang('o_global.access_denied'), 403); } //ajax请求处理 if (isset($request_data['is_ajax']) && $request_data['is_ajax'] == 1) { if (isset($request_data['select_classify'])) { $classify_id = intval($request_data['select_classify']); } } $page = isset($request_data['page']) ? intval($request_data['page']) : 1; $per_page = 10; //获取货品信息,判断是否有提交查询,选择不同的操作 if (isset($request_data['select_type']) && $request_data['select_key'] != '') { $product = BLL_Product_Type_Binding::get_goods_nb_by_select($request_data, $page, $per_page); } else { $product = BLL_Product::get($request_data['product_id'], $page, $per_page); } $return_data = array(); $this->pagination = new Pagination(array('total_items' => isset($product['goods_nb_count']) ? $product['goods_nb_count'] : 0, 'items_per_page' => $per_page)); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 $this->template = new View('layout/commonblank_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/binding/goods_nb_show'); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->product = $product; $this->template->content->request_data = $request_data; $this->template->content->pagination = $this->pagination; } // end of request type determine } catch (MyRuntimeException $ex) { $this->_ex($ex, $return_struct, $request_data); } }
public function search_products() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array('assoc' => NULL, 'count' => 0); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); if (empty($request_data)) { $request_data = array_merge($_POST, $_GET); } $site_ids = role::get_site_ids(); if (empty($site_ids)) { throw new MyRuntimeException(Kohana::lang('o_global.access_denied'), 403); } $in_site_id = site::id(); if (isset($request_data['site_id']) and $request_data['site_id'] === '0') { unset($request_data['site_id']); } if (isset($request_data['site_id']) and !in_array($request_data['site_id'], $site_ids)) { throw new MyRuntimeException(Kohana::lang('o_global.access_denied'), 403); } if ($in_site_id > 0) { $query_site_id = $in_site_id; } else { throw new MyRuntimeException(Kohana::lang('o_global.select_site'), 400); } $page = isset($request_data['page']) ? intval($request_data['page']) : 1; $page < 1 ? $page = 1 : ''; $per_page = 10; $query_struct = array('where' => array('site_id' => $query_site_id, 'status' => 1), 'limit' => array('page' => $page, 'per_page' => $per_page)); if (isset($request_data['type']) && trim($request_data['keyword']) != '') { $select_key = mysql_escape_string($request_data['keyword']); if ($request_data['type'] == 'sku') { $query_struct['where']['sku'] = $select_key; } elseif ($request_data['type'] == 'name_manage') { $query_struct['like']['name_manage'] = $select_key; } elseif ($request_data['type'] == 'title') { $query_struct['like']['title'] = $select_key; } elseif ($request_data['type'] == 'category_id') { $categories_select = CategoryService::get_instance()->index(array('where' => array('site_id' => $query_site_id), 'like' => array('title' => $select_key))); if (!empty($categories_select)) { $categories_ids = array(); for ($i = 0; $i < count($categories_select); $i++) { $categories_ids[] = $categories_select[$i]['id']; } $query_struct['where']['category_id'] = $categories_ids; } } elseif ($request_data['type'] == 'brand_id') { $brands_select = BrandService::get_instance()->index(array('where' => array('site_id' => $query_site_id), 'like' => array('name' => $select_key))); if (!empty($brands_select)) { $brands_ids = array(); for ($i = 0; $i < count($brands_select); $i++) { $brands_ids[] = $brands_select[$i]['id']; } $query_struct['where']['brand_id'] = $brands_ids; } else { $query_struct['where']['brand_id'] = -1; } } } //print_r($query_struct); $return_data = BLL_Product::index($query_struct); $this->pagination = new Pagination(array('total_items' => $return_data['count'], 'items_per_page' => $per_page)); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 $this->template = new View('layout/commonblank_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->products = $return_data['assoc']; $this->template->content->pagination = $this->pagination; if (isset($request_data['type'])) { $this->template->content->search_type = $request_data['type']; } $this->template->content->pagination = $this->pagination; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // end of request type determine } 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->content = $return_struct; } 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; } } }
public function validate() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array('assoc' => NULL, 'count' => 0); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->get(); $site_ids = role::get_site_ids(); if (empty($site_ids)) { throw new MyRuntimeException(Kohana::lang('o_global.access_denied'), 403); } if (empty($request_data['classify_id'])) { throw new MyRuntimeException('请首先选择商品类型', 403); } if (empty($request_data['merges'])) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } $classify = ClassifyService::get_instance()->get($request_data['classify_id']); $features = BLL_Product_Feature::get_clsfeturs($classify['id']); if (empty($features) or empty($request_data['mfids']) or !is_array($request_data['mfids'])) { throw new MyRuntimeException('未找到任何可供合并的特性', 403); } foreach ($request_data['mfids'] as $mfid) { if (!isset($features[$mfid])) { throw new MyRuntimeException('所设置的合并特性未找到', 403); } } $merges = array(); $fetuoptrs = array(); foreach ($request_data['merges'] as $index => $merge) { if (isset($merge['id']) and isset($merge['sku'])) { try { $merges[$index] = BLL_Product::get($merge['id']); } catch (MyRuntimeException $ex) { throw new MyRuntimeException(sprintf('参与合并的商品 #%s 未找到', $index), 403); } if ($merges[$index]['classify_id'] != $classify['id']) { throw new MyRuntimeException(sprintf('参与合并的商品 #%s 不属于商品类型 “%s”', $index, $classify['name'])); } // 验证合并商品的SKU if (BLL_Product::sku_exists($classify['site_id'], $merge['sku'], $merges[$index]['id'])) { throw new MyRuntimeException(sprintf('参与合并的商品 #%s 与其他商品的SKU重复', $index), 403); } // 验证是否包含要合并的特性值 if (empty($merges[$index]['fetuoptrs'])) { $merges[$index]['fetuoptrs'] = array(); } $fetuoptr = array(); foreach ($request_data['mfids'] as $mfid) { if (!isset($merges[$index]['fetuoptrs'][$mfid])) { throw new MyRuntimeException(sprintf('参与合并的商品 #%s 未设置特性 "%s" 的值', $index, $features[$mfid]['name_manage'])); } if (!isset($fetuoptr)) { $fetuoptrs[$index] = array(); } $fetuoptr[$mfid] = $merges[$index]['fetuoptrs'][$mfid]; } foreach ($fetuoptrs as $k => $item) { if ($item == $fetuoptr) { throw new MyRuntimeException(sprintf('参与合并的商品 #%s 特性设置与商品 #%s 相同', $index, $k), 403); } } $fetuoptrs[$index] = $fetuoptr; } else { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 403); } } //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = ''; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { //* html 输出 ==根据业务逻辑定制== */ $this->template = new View('layout/commonfix_html'); //* 模板输出 */ $this->template->return_struct = $return_struct; $content = new View($this->package_name . '/product/merge/list'); //* 变量绑定 */ $this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; $this->template->content->request_struct = $request_struct_current; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // end of request type determine } 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->content = $return_struct; } 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; } } }