_request = kernel::single('base_component_request'); } /** * 生成URL * * @return void * @author **/ private function gen_url($params = array(), $full = false) { $params['app'] = isset($params['app']) ? $params['app'] : $this->app->app_id; $params['ctl'] = isset($params['ctl']) ? $params['ctl'] : 'regulation_apply'; $params['act'] = isset($params['act']) ? $params['act'] : 'index'; return kernel::single('desktop_router')->gen_url($params, $full); } public function index() { $actions = array( 'title' => $this->app->_('规则应用列表'), 'actions' => array( array( 'label' => $this->app->_('新建上下架应用'), 'href' => $this->gen_url(array('act' => 'add', 'p[0]' => 'frame')), 'target' => '_blank', ), array( 'label' => $this->app->_('新建库存回写应用'), 'href' => $this->gen_url(array('act' => 'add', 'p[0]' => 'stock')), 'target' => '_blank', ), array( 'label' => $this->app->_('启用'), 'submit' => $this->gen_url(array('act' => 'using')), 'confirm' => $this->app->_('确定启用选中项?'), 'target' => 'refresh', ), array( 'label' => $this->app->_('停用'), 'submit' => $this->gen_url(array('act' => 'unusing')), 'confirm' => $this->app->_('确定停用选中项?'), 'target' => 'refresh', ), ), 'use_buildin_filter' => true, 'use_buildin_recycle' => true, ); $this->finder( 'inventorydepth_mdl_regulation_apply', $actions ); } public function stockIndex() { $actions = array( 'title' => $this->app->_('回写库存规则应用列表'), 'actions' => array( array( 'label' => $this->app->_('新建库存回写应用'), 'href' => $this->gen_url(array('act' => 'add', 'p[0]' => 'stock')), 'target' => '_blank', ), array( 'label' => $this->app->_('启用'), 'submit' => $this->gen_url(array('act' => 'using')), 'confirm' => $this->app->_('确定启用选中项?'), 'target' => 'refresh', ), array( 'label' => $this->app->_('停用'), 'submit' => $this->gen_url(array('act' => 'unusing')), 'confirm' => $this->app->_('确定停用选中项?'), 'target' => 'refresh', ), array( 'label' => '库存规则货品导入模板', 'href' => 'index.php?app=inventorydepth&ctl=regulation_apply&act=exportTemplate', 'target' => '_blank', ), array( 'label' => '库存规则SKUID导入模板', 'href' => 'index.php?app=inventorydepth&ctl=regulation_apply&act=exportSkuIdTemplate', 'target' => '_blank', ), ), 'use_buildin_filter' => true, 'use_buildin_recycle' => true, 'base_filter' => array('condition' => 'stock', 'type' => '2'), ); $this->finder( 'inventorydepth_mdl_regulation_apply', $actions ); } public function frameIndex() { $actions = array( 'title' => $this->app->_('回写上下架规则应用列表'), 'actions' => array( array( 'label' => $this->app->_('新建上下架应用'), 'href' => $this->gen_url(array('act' => 'add', 'p[0]' => 'frame')), 'target' => '_blank', ), array( 'label' => $this->app->_('启用'), 'submit' => $this->gen_url(array('act' => 'using')), 'confirm' => $this->app->_('确定启用选中项?'), 'target' => 'refresh', ), array( 'label' => $this->app->_('停用'), 'submit' => $this->gen_url(array('act' => 'unusing')), 'confirm' => $this->app->_('确定停用选中项?'), 'target' => 'refresh', ), ), 'use_buildin_filter' => true, 'use_buildin_recycle' => true, 'base_filter' => array('condition' => 'frame'), ); $this->finder( 'inventorydepth_mdl_regulation_apply', $actions ); } /** * 添加规则应用 * * @return void * @author **/ public function add($condition = 'stock') { $this->title = $this->app->_('添加规则应用'); $this->pagedata['options'] = $this->options(); # 获取仓库选项 - 只选择线上仓库且具有发货属性且管控库存的仓库 $branchModel = app::get('ome')->model('branch'); $branches = $branchModel->getList('branch_id,branch_bn,name', array( 'disabled' => 'false', 'attr' => 'true', // 线上仓库 'is_deliv_branch' => 'true', // 发货仓库 'is_ctrl_store' => '1', // 管控库存 'b_type' => 1 // 只显示类型为1的仓库 )); $branchOptions = array(); foreach ($branches as $branch) { $branchOptions[$branch['branch_id']] = $branch['name'] . ' (' . $branch['branch_bn'] . ')'; } $this->pagedata['branchOptions'] = $branchOptions; # 在没有应用编号的情况下,临时编号 $this->pagedata['init_bn'] = uniqid(); # 获取所有已经联通的店铺 $filter = array('filter_sql' => '({table}node_id is not null AND {table}node_id!="" )', 's_type' => 1); if (app::get('drm')->is_installed()) { $channelShopObj = app::get('drm')->model('channel_shop'); $rows = $channelShopObj->getList('shop_id'); foreach ($rows as $val) { $shopIds[] = $val['shop_id']; $filter['shop_id|notin'] = $shopIds; } } $data['shops'] = $this->app->model('shop')->getList('shop_id,name', $filter); $data['condition'] = $condition; $this->pagedata['data'] = $data; $this->pagedata['title'] = $this->title; # 获取regulation选项 $regulationModel = $this->app->model('regulation'); $regulationFilter = array( 'type' => '2', 'condition' => $condition ); $regulations = $regulationModel->getList('regulation_id,heading,`using`', $regulationFilter, 0, -1, 'FIELD(`using`, "true") DESC, regulation_id DESC'); $regulationOptions = array(); foreach ($regulations as $regulation) { $status = $regulation['using'] == 'true' ? ' (已启用)' : ' (未启用)'; $regulationOptions[$regulation['regulation_id']] = $regulation['heading'] . $status; } $this->pagedata['regulationOptions'] = $regulationOptions; # 获取客户分类选项 $customerClassifyModel = app::get('material')->model('customer_classify'); $customerClassifies = $customerClassifyModel->getList('class_id,class_name', array(), 0, -1, 'class_id ASC'); $customerClassifyOptions = array(); foreach ($customerClassifies as $classify) { $customerClassifyOptions[$classify['class_id']] = $classify['class_name']; } $this->pagedata['customerClassifyOptions'] = $customerClassifyOptions; if ($condition == 'stock') { $this->singlepage('regulation/stock_apply.html'); } else { $this->singlepage('regulation/frame_apply.html'); } //$this->pagedata['condition'] = $condition; //$this->singlepage('regulation/apply.html'); } /** * @description 编辑应用 * @access public * @param void * @return void */ public function edit($id) { $this->title = $this->app->_('编辑规则应用'); $applyModel = $this->app->model('regulation_apply'); $data = $applyModel->select()->columns('*')->where('id=?', $id)->instance()->fetch_row(); # 获取ID范围 if ($data['apply_goods'] && $data['apply_goods'] != '_ALL_') { $data['pgid'] = explode(',', $data['apply_goods']); } $data['shop_id'] = explode(',', $data['shop_id']); // 处理专用供货仓字段,转换为数组格式供tail组件使用 if ($data['supply_branch_id']) { $data['supply_branch_id'] = explode(',', $data['supply_branch_id']); $data['supply_branch_id'] = array_filter(array_map('trim', $data['supply_branch_id'])); } else { $data['supply_branch_id'] = array(); } # 获取所有已经联通的店铺 $filter = array('filter_sql' => '({table}node_id is not null AND {table}node_id!="" )'); if (app::get('drm')->is_installed()) { $channelShopObj = app::get('drm')->model('channel_shop'); $rows = $channelShopObj->getList('shop_id'); foreach ($rows as $val) { $shopIds[] = $val['shop_id']; $filter['shop_id|notin'] = $shopIds; } } $data['shops'] = $this->app->model('shop')->getList('shop_id,name', $filter); $this->pagedata['options'] = $this->options(); # 获取仓库选项 - 只选择线上仓库且具有发货属性且管控库存的仓库 $branchModel = app::get('ome')->model('branch'); $branches = $branchModel->getList('branch_id,branch_bn,name', array( 'disabled' => 'false', 'attr' => 'true', // 线上仓库 'is_deliv_branch' => 'true', // 发货仓库 'is_ctrl_store' => '1', // 管控库存 'b_type' => 1 // 只显示类型为1的仓库 )); $branchOptions = array(); foreach ($branches as $branch) { $branchOptions[$branch['branch_id']] = $branch['name'] . ' (' . $branch['branch_bn'] . ')'; } $this->pagedata['branchOptions'] = $branchOptions; # 获取regulation选项 $regulationModel = $this->app->model('regulation'); $regulationFilter = array( 'type' => '2', 'condition' => $data['condition'] ); $regulations = $regulationModel->getList('regulation_id,heading,`using`', $regulationFilter, 0, -1, 'FIELD(`using`, "true") DESC, regulation_id DESC'); $regulationOptions = array(); foreach ($regulations as $regulation) { $status = $regulation['using'] == 'true' ? ' (已启用)' : ' (未启用)'; $regulationOptions[$regulation['regulation_id']] = $regulation['heading'] . $status; } $this->pagedata['regulationOptions'] = $regulationOptions; # 获取客户分类选项 $customerClassifyModel = app::get('material')->model('customer_classify'); $customerClassifies = $customerClassifyModel->getList('class_id,class_name', array(), 0, -1, 'class_id ASC'); $customerClassifyOptions = array(); foreach ($customerClassifies as $classify) { $customerClassifyOptions[$classify['class_id']] = $classify['class_name']; } $this->pagedata['customerClassifyOptions'] = $customerClassifyOptions; # 处理应用对象类型字段 if (!isset($data['apply_object_type']) || empty($data['apply_object_type'])) { // 根据apply_goods和apply_object_filter判断应用对象类型 if ($data['apply_object_filter']) { $applyObjectFilter = json_decode($data['apply_object_filter'], true); if ($applyObjectFilter && isset($applyObjectFilter['customer_classify'])) { $data['apply_object_type'] = 3; // 客户分类商品 } else { $data['apply_object_type'] = 1; // 全部商品 } } elseif ($data['apply_goods'] && $data['apply_goods'] != '_ALL_') { $data['apply_object_type'] = 2; // 指定商品 } else { $data['apply_object_type'] = 1; // 全部商品 } } # 处理应用对象筛选条件字段 if ($data['apply_object_filter']) { $applyObjectFilter = json_decode($data['apply_object_filter'], true); if ($applyObjectFilter && isset($applyObjectFilter['customer_classify'])) { $data['selected_customer_classify'] = $applyObjectFilter['customer_classify']; } else { $data['selected_customer_classify'] = array(); } } else { $data['selected_customer_classify'] = array(); } // 确保selected_customer_classify是一个数组 if (!is_array($data['selected_customer_classify'])) { $data['selected_customer_classify'] = array(); } $this->pagedata['data'] = $data; $this->pagedata['init_bn'] = $data['bn']; $this->pagedata['apply_goods_query'] = is_array($data['apply_goods']) ? http_build_query($data['apply_goods']) : $data['apply_goods']; $this->pagedata['title'] = $this->title; //$this->singlepage('regulation/apply.html'); if ($data['condition'] == 'stock') { $this->singlepage('regulation/stock_apply.html'); } else { $this->singlepage('regulation/frame_apply.html'); } } /** * undocumented function * * @return void * @author **/ private function options() { $reguObj = kernel::single('inventorydepth_regulation'); $options['style'] = $reguObj->get_style(); $options['model'] = $reguObj->get_condition_model(); return $options; } /** * 启用应用 * * @return void * @author **/ public function using() { $bool = $this->app->model('regulation_apply')->update(array('using' => 'true'), $_POST); $this->splash($bool ? 'success' : 'error', 'javascript:finderGroup["' . $_GET['finder_id'] . '"].refresh();', $this->app->_('启用成功')); } /** * 停用应用 * * @return void * @author **/ public function unusing() { $bool = $this->app->model('regulation_apply')->update(array('using' => 'false'), $_POST); $this->splash($bool ? 'success' : 'error', 'javascript:finderGroup["' . $_GET['finder_id'] . '"].refresh();', $this->app->_('停用成功')); } /** * 前端商品绑定列表 * * @return void * @author **/ public function merchandise_finder() { $params = array( 'title' => $this->app->_('店铺商品关系列表'), 'use_buildin_filter' => true, 'use_buildin_recycle' => false, 'alertpage_finder' => true, 'use_view_tab' => false, ); $condition = $this->_request->get_get('condition'); $model = ($condition == 'stock') ? 'inventorydepth_mdl_shop_skus' : 'inventorydepth_mdl_shop_items'; $shop_id = $this->_request->get_get('shop_id'); if ($shop_id) { $params['base_filter']['shop_id'] = $shop_id; } $this->finder($model, $params); } public function merchandise_dialog_filter() { $condition = $this->_request->get_get('condition'); $init_bn = $this->_request->get_get('init_bn'); $model = kernel::single('inventorydepth_regulation')->get_condition_model($condition); $get = $this->_request->get_get(); if ($init_bn) { $g = kernel::single('inventorydepth_regulation_apply')->fetch_merchandise_filter($init_bn); $get = $g ? $g : $get; $get['init_bn'] = $init_bn; } $this->main($model, $this->app, $get, $this); } private function main($object_name, $app, $filter = null, $controller = null, $cusrender = null) { if (strpos($_GET['object'], '@') !== false) { $tmp = explode('@', $object_name); $app = app::get($tmp[1]); $object_name = $tmp[0]; } $object = $app->model($object_name); $ui = new base_component_ui($controller, $app); require APP_DIR . '/base/datatypes.php'; $this->dbschema = $object->get_schema(); foreach (kernel::servicelist('extend_filter_' . get_class($object)) as $extend_filter) { $colums = $extend_filter->get_extend_colums(); if ($colums[$object_name]) { $this->dbschema['columns'] = array_merge((array) $this->dbschema['columns'], (array) $colums[$object_name]['columns']); } } foreach ($this->dbschema['columns'] as $c => $v) { if (!$v['filtertype']) { continue; } /* if( isset($filter[$c]) ) { continue; }*/ if (isset($filter['init_bn'])) { if ($filter[$c]) { $v['filterdefault'] = true; } if (!$filter[$c]) { $v['filterdefault'] = false; } } if (!is_array($v['type'])) { if (strpos($v['type'], 'decimal') !== false && $v['filtertype'] == 'number') { $v['type'] = 'number'; } } $columns[$c] = $v; if (!is_array($v['type']) && $v['type'] != 'bool' && isset($datatypes[$v['type']]) && isset($datatypes[$v['type']]['searchparams'])) { $addon = ''; } elseif ($v['type'] == 'skunum') { $addon = ''; } else { if ($v['type'] != 'bool') { $addon = app::get('desktop')->_('是'); } else { $addon = ''; } } $columns[$c]['addon'] = $addon; if ($v['type'] == 'last_modify') { $v['type'] = 'time'; } $params = array( 'type' => $v['type'], 'name' => $c, ); if ($filter[$c]) { $params['value'] = $filter[$c]; } if ($v['type'] == 'bool' && $v['default']) { $params = array_merge(array('value' => $v['default']), $params); } if ($this->name_prefix) { $params['name'] = $this->name_prefix . '[' . $params['name'] . ']'; } if ($v['type'] == 'region') { $params['app'] = 'eccommon'; } $inputer = $ui->input($params); $columns[$c]['inputer'] = $inputer; } if ($cusrender) { return array('filter_cols' => $columns, 'filter_datatypes' => $datatypes); } if ($object->has_tag) { $this->pagedata['app_id'] = $app->app_id; $this->pagedata['tag_type'] = $object_name; $tag_inputer = $this->fetch('finder/tag_inputer.html'); $columns['tag'] = array('filtertype' => true, 'filterdefault' => true, 'label' => app::get('desktop')->_('标签'), 'inputer' => $tag_inputer); } $this->pagedata['columns'] = $columns; $this->pagedata['datatypes'] = $datatypes; $this->pagedata['finder_id'] = uniqid(); $this->display('finder/finder_filter.html'); } /** * undocumented function * * @return void * @author **/ public function _views() { $view = array( 0 => array('label' => $this->app->_('全部'), 'href' => ''), ); return $view; } /** * 前端商品条件集 * * @return void * @author **/ public function merchandise_filter() { $condition = $this->_request->get_post('condition'); if (!$condition) { $this->splash('error', '', $this->app->_('规则类型错误!')); } $shop_id = $this->_request->get_post('shop_id'); $init_bn = $this->_request->get_post('init_bn'); $id['id'] = $this->_request->get_post('id'); $merchandise_filter = $this->_request->get_post('filter'); if ($shop_id) { $shop_id = http_build_query(array('shop_id' => $shop_id)); $shop_id = str_replace('&', ',', $shop_id); $merchandise_filter['advance'] = $merchandise_filter['advance'] ? $merchandise_filter['advance'] . ',' . $shop_id : $shop_id; } $msg = kernel::single('inventorydepth_regulation_apply')->choice_callback($condition, $init_bn, $id, $merchandise_filter); $this->splash('success', '', $msg); } public function merchandise_filter_array() { $condition = $this->_request->get_post('condition'); $init_bn = $this->_request->get_post('init_bn'); if (!$init_bn) { $this->splash('error', '', $this->app->_('规则类型错误!')); } $merchandise_filter = $this->_request->get_post('filter'); $msg = kernel::single('inventorydepth_regulation_apply')->choice_callback_array($condition, $init_bn, $merchandise_filter); $this->splash('success', '', $msg); } /** * 已选择的商品和货品 * * @return void * @author **/ public function finder_choice() { $init_bn = $this->_request->get_get('init_bn'); $condition = $this->_request->get_get('condition'); if (!$init_bn) { echo "参数错误";exit; } $filter = array( 'init_bn' => $init_bn, 'condition' => $condition, ); $tt = ($condition == 'stock') ? '货品' : '商品'; $title = $this->app->_("已选择的{$tt}列表"); $params = array( 'title' => $tt, 'use_buildin_filter' => true, 'use_buildin_recycle' => false, 'base_filter' => $filter, 'use_buildin_setcol' => false, ); $model = ($condition == 'stock') ? 'inventorydepth_mdl_regulation_productselect' : 'inventorydepth_mdl_regulation_goodselect'; $this->finder($model, $params); } /** * 删除已选择的商品/货品 * * @param Int $merchandise_id 映射关系ID * @param String $init_bn 应用编号 * @parma String $condition 规则类型 * * @return void * @author **/ public function removeFilter($id, $init_bn, $condition) { $this->begin(); if (!$id || !$init_bn || !$condition) { $this->end(false, $this->app->_('错误参数')); } $model = ($condition == 'stock') ? 'regulation_productselect' : 'regulation_goodselect'; $result = $this->app->model($model)->doRemove($init_bn, $id); $this->end($result); } /** * 保存规则应用 * * @return void * @author **/ public function save() { $this->begin(); $post = $this->_request->get_post(); $data = $this->check_params($post, $msg); if ($data === false) { $this->end(false, $msg); } $applyModel = $this->app->model('regulation_apply'); $result = $applyModel->save($data); $url = $this->gen_url(array('act' => 'index')); $msg = $result ? $this->app->_('保存成功') : $this->app->_('保存失败'); $this->end($result, $msg); } /** * @description 检查提交参数是否合法 * @access public * @param void * @return void */ public function check_params($post, &$msg) { if (empty($post['bn'])) { $msg = $this->app->_('应用规则不能为空!'); return false; } $applyModel = $this->app->model('regulation_apply'); $count = $applyModel->count(array('bn' => $post['bn'], 'condition' => $post['condition'])); if ((int) $count > 0 && empty($post['id'])) { $msg = $this->app->_('应用规则已经存在!'); return false; } if (empty($post['heading'])) { $msg = $this->app->_('应用名称不能为空!'); return false; } if (!kernel::single('inventorydepth_regulation')->get_condition($post['condition'])) { $msg = $this->app->_('规则类型不存在!'); return false; } if (!kernel::single('inventorydepth_regulation')->get_style($post['style'])) { $msg = $this->app->_('触发类型不存在!'); return false; } if (!$post['shop_id']) { $msg = $this->app->_('店铺不能为空!'); return false; } $post['shop_id'] = implode(',', $post['shop_id']); // 根据应用对象类型处理应用对象 if (!isset($post['apply_object_type']) || !in_array($post['apply_object_type'], array(1, 2, 3))) { $post['apply_object_type'] = 1; // 默认全部商品 } if ($post['apply_object_type'] == 1) { // 全部商品 $post['apply_goods'] = '_ALL_'; } elseif ($post['apply_object_type'] == 2) { // 指定商品 if ($post['condition'] == 'stock') { if ((!is_array($post['sm_id']) || empty($post['sm_id'])) && (!is_array($post['pkg_id']) || empty($post['pkg_id'])) && (!is_array($post['pko_id']) || empty($post['pko_id']))) { $msg = $this->app->_('应用对象不能空!'); return false; } if ($post['sm_id'] && is_array($post['sm_id'])) { $post['apply_goods'] = implode(',', $post['sm_id']); } else { $post['apply_goods'] = ''; } } elseif ($post['condition'] == 'frame') { if (!is_array($post['goods_id']) || empty($post['goods_id'])) { $msg = $this->app->_('应用对象不能空!'); return false; } $post['apply_goods'] = implode(',', $post['goods_id']); } else { $msg = $this->app->_('应用对象不能空!'); return false; } } elseif ($post['apply_object_type'] == 3) { // 客户分类商品,应用对象为空,通过筛选条件控制 $post['apply_goods'] = '_ALL_'; } // 平台SKU ID if ($post['shop_sku_id']) { $post['shop_sku_id'] = trim($post['shop_sku_id']); $post['shop_sku_id'] = str_replace(',', ',', $post['shop_sku_id']); } else { $post['shop_sku_id'] = ''; } // 专用供货仓 if ($post['supply_branch_id'] && is_array($post['supply_branch_id'])) { $branch_bns = array_filter($post['supply_branch_id']); if (!empty($branch_bns)) { $post['supply_branch_id'] = implode(',', $branch_bns); } else { $post['supply_branch_id'] = ''; } } else { $post['supply_branch_id'] = ''; } // 应用对象类型 if (!isset($post['apply_object_type']) || !in_array($post['apply_object_type'], array(1, 2, 3))) { $post['apply_object_type'] = 1; // 默认全部商品 } // 应用对象筛选条件 if ($post['apply_object_type'] == 3 && isset($post['apply_object_filter'])) { // 客户分类商品,处理客户分类筛选条件 if (is_array($post['apply_object_filter'])) { $customerClassifyIds = array_filter($post['apply_object_filter']); } else { // 处理从JavaScript传来的逗号分隔的字符串 $customerClassifyIds = array_filter(explode(',', $post['apply_object_filter'])); } // 去除重复值并重新索引数组 $customerClassifyIds = array_values(array_unique($customerClassifyIds)); if (!empty($customerClassifyIds)) { $post['apply_object_filter'] = json_encode(array('customer_classify' => $customerClassifyIds)); } else { $post['apply_object_filter'] = ''; } } else { $post['apply_object_filter'] = ''; } // 处理回写方式字段 $post['sync_mode'] = 'total'; // 回写区域仓 if (isset($post['is_sync_subwarehouse']) && $post['is_sync_subwarehouse'] == '1') { $post['is_sync_subwarehouse'] = '1'; } else { $post['is_sync_subwarehouse'] = '0'; } // 回写门店 if (isset($post['is_sync_store']) && $post['is_sync_store'] == '1') { $post['is_sync_store'] = '1'; } else { $post['is_sync_store'] = '0'; } if (empty($post['regulation_id'])) { $msg = $this->app->_('规则不能为空!'); return false; } $regulation = $this->app->model('regulation')->select()->columns('`condition`,`type`') ->where('regulation_id=?', $post['regulation_id'])->instance()->fetch_row(); if ($regulation['condition'] != $post['condition']) { $msg = $this->app->_('请选择符合类型的规则!'); return false; } $post['type'] = $regulation['type']; $start_time = strtotime($post['start_time'] . ' ' . $post['_DTIME_']['H']['start_time'] . ':' . $post['_DTIME_']['M']['start_time']); $end_time = strtotime($post['end_time'] . ' ' . $post['_DTIME_']['H']['end_time'] . ':' . $post['_DTIME_']['M']['end_time']); if ($end_time < time()) { $msg = $this->app->_('当前时间大于结束时间!'); return false; } if ($end_time && $start_time > $end_time) { $msg = $this->app->_('开始时间大于结束时间'); return false; } $post['start_time'] = $start_time; $post['end_time'] = $end_time; $post['operator'] = $this->user->user_id; $post['operator_ip'] = $this->_request->get_remote_ip(); $post['using'] = 'false'; $post['al_exec'] = 'false'; return $post; } public function singlepage($view, $app_id = '') { $service = kernel::service(sprintf('desktop_controller_display.%s.%s.%s', $_GET['app'], $_GET['ctl'], $_GET['act'])); if ($service) { if (method_exists($service, 'get_file')) { $view = $service->get_file(); } if (method_exists($service, 'get_app_id')) { $app_id = $service->get_app_id(); } } $page = $this->fetch($view, $app_id); $this->pagedata['_PAGE_PAGEDATA_'] = $this->_vars; $re = '/]*)>(.*?)<\/script>/is'; $this->__scripts = ''; preg_match_all($re, $page, $match); if (is_array($match[0])) { foreach ($match[0] as $key => $one) { if ($match[2][$key] && !strpos($match[1][$key], 'src') && !strpos($match[1][$key], 'hold')) { $this->__scripts .= "\n" . $match[2][$key]; $page = str_replace($one, ' ', $page); } } } $page = $page . ''; $this->pagedata['statusId'] = $this->app->getConf('b2c.wss.enable'); $this->pagedata['session_id'] = kernel::single('base_session')->sess_id(); $this->pagedata['desktop_path'] = app::get('desktop')->res_url; $this->pagedata['shopadmin_dir'] = dirname($_SERVER['PHP_SELF']) . '/'; $this->pagedata['shop_base'] = $this->app->base_url(); $this->pagedata['desktopresurl'] = app::get('desktop')->res_url; $this->pagedata['desktopresfullurl'] = app::get('desktop')->res_full_url; $this->pagedata['_PAGE_'] = &$page; $this->display('singlepage.html', 'desktop'); } public function finder_common() { $params = array( 'title' => app::get('desktop')->_('列表'), 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'use_buildin_setcol' => true, 'use_buildin_refresh' => true, 'finder_aliasname' => 'finder_common', 'alertpage_finder' => true, 'use_buildin_tagedit' => false, ); if ($_GET['findercount']) { $params['object_method']['count'] = $_GET['findercount']; } if ($_GET['findergetlist']) { $params['object_method']['getlist'] = $_GET['findergetlist']; } if (substr($_GET['name'], 0, 7) == 'adjunct') { $params['orderBy'] = 'goods_id desc'; } $this->finder($_GET['app_id'] . '_mdl_' . $_GET['object'], $params); } /** * @description AJax加载选择销售物料模板 * @param $id int * @param $shop_ids String * @return void */ /** * @description 显示已选择的销售物料 * @return void */ public function showProducts() { $salesMaterialObj = app::get('material')->model('sales_material'); $sm_id = kernel::single('base_component_request')->get_post('sm_id'); if ($sm_id) { //前端店铺_规则应用传值 if (!is_array($sm_id)) { $sm_id = explode(',', $sm_id); } $this->pagedata['_input'] = array( 'name' => 'sm_id', 'idcol' => 'sm_id', '_textcol' => 'sales_material_name', ); $list = $salesMaterialObj->getList('sm_id,sales_material_name,sales_material_bn', array('sm_id' => $sm_id, 'sales_material_type|noequal' => 3), 0, -1, 'sm_id asc'); $this->pagedata['_input']['items'] = $list; } $this->display('regulation/show_products.html'); } public function ajax_sales_material_html($id = '', $shop_ids = '') { #规则应用详细信息 if ($id) { $applyModel = $this->app->model('regulation_apply'); $data = $applyModel->select()->columns('*')->where('id=?', $id)->instance()->fetch_row(); # 获取ID范围 if ($data['apply_goods'] && $data['apply_goods'] != '_ALL_') { $data['pgid'] = explode(',', $data['apply_goods']); // 这里需要展示一下replacehtml $count = count($data['pgid']); $this->pagedata['replacehtml'] = <<已选择了{$count}销售物料,查看选中销售物料. EOF; } } #店铺 $shop_id = array(); if ($shop_ids && $shop_ids != '_ALL_') { $shop_id_list = explode(',', $shop_ids); foreach ($shop_id_list as $key => $val) { if (empty($shop_id_list)) { unset($shop_id_list[$key]); } } $shop_id = $this->app->model('shop')->getList('shop_id', array('shop_id' => $shop_id_list)); $shop_id = array_map('current', $shop_id); } $this->pagedata['data'] = $data; $this->pagedata['in_shop_id'] = ($shop_id ? implode(',', $shop_id) . ',_ALL_' : ''); $this->display('regulation/select_sales_material.html'); } public function object_rows() { @ini_set('memory_limit','128M'); if ($_POST['data']) { if ($_POST['app_id']) { $app = app::get($_POST['app_id']); } else { $app = $this->app; } $obj = $app->model($_POST['object']); $schema = $obj->get_schema(); $textColumn = $_POST['textcol'] ? $_POST['textcol'] : $schema['textColumn']; $textColumn = explode(',', $textColumn); $_textcol = $textColumn; $textColumn = $textColumn[0]; $keycol = $_POST['key'] ? $_POST['key'] : $schema['idColumn']; $is_filter_advance = false; //统一做掉了。 if ($_POST['data'][0] === '_ALL_') { $is_filter_advance = true; if (isset($_POST['filter']['advance']) && $_POST['filter']['advance']) { $arr_filters = explode(',', $_POST['filter']['advance']); foreach ($arr_filters as $obj_filter) { $arr = explode('=', $obj_filter); $_POST['filter'][$arr[0]] = $arr[1]; } unset($_POST['filter']['advance']); } $all_filter = !empty($obj->__all_filter) ? $obj->__all_filter : array(); $filter = !empty($_POST['filter']) ? $_POST['filter'] : $all_filter; $arr_list = $obj->getList($keycol, $filter); $_POST['data'] = array_map('current', $arr_list); } $items = $obj->getList('*', array($keycol => $_POST['data'])); $name = $items[0][$textColumn]; if ($_POST['type'] == 'radio') { if (strpos($textColumn, '@') !== false) { list($field, $table, $app_) = explode('@', $textColumn); if ($app_) { $app = app::get($app_); } $mdl = $app->model($table); $schema = $mdl->get_schema(); $row = $mdl->getList('*', array($schema['idColumn'] => $items[0][$keycol])); $name = $row[0][$field]; } echo json_encode(array('id' => $items[0][$keycol], 'name' => $name)); exit; } $this->pagedata['_input'] = array('items' => $items, 'idcol' => $schema['idColumn'], 'keycol' => $keycol, 'textcol' => $textColumn, '_textcol' => $_textcol, 'name' => $_POST['name'], 'value' => implode(',',array_column($items, $keycol)), 'domid' => $_POST['domid'], 'is_filter_advance' => $is_filter_advance, ); $this->pagedata['_input']['view_app'] = 'desktop'; $this->pagedata['_input']['view'] = $_POST['view']; if ($_POST['view_app']) { $this->pagedata['_input']['view_app'] = $_POST['view_app']; } if (strpos($_POST['view'], ':') !== false) { list($view_app, $view) = explode(':', $_POST['view']); $this->pagedata['_input']['view_app'] = $view_app; $this->pagedata['_input']['view'] = $view; } $this->display('finder/input-row.html'); } } public function import_goods($id) { $this->pagedata['id'] = $id; $this->display('regulation/import_goods.html'); } public function exportTemplate() { $oObj = $this->app->model('regulation_apply'); $row = $oObj->exportTemplate('csv'); $data[0] = array('sales001', '商品001', '普通'); $data[1] = array('sales002', '组合002', '组合'); $data[2] = array('sales003', '多选一003', '多选一'); $lib = kernel::single('omecsv_phpexcel'); $lib->newExportExcel($data, '库存规则货品导入模板'. date('Ymd'), 'xls', $row); } public function exportSkuIdTemplate() { $oObj = $this->app->model('regulation_apply'); $row = $oObj->exportTemplate('shop_sku_id'); $data[0] = array('10031110597837'); $data[1] = array('5257145962954'); $data[2] = array('5765642571319'); $lib = kernel::single('omecsv_phpexcel'); $lib->newExportExcel($data, '库存规则SKUID导入模板'. date('Ymd'), 'xls', $row); } /** * 导出库存回写规则绑定的商品 * @param $id * @date 2024-11-28 2:24 下午 */ public function export_goods($id) { ini_set('memory_limit', '1024M'); $salesMLib = kernel::single('material_sales_material'); $csvObj = kernel::single('desktop_io_type_csv'); $applyObj = $this->app->model('regulation_apply'); $apply_detail = $applyObj->dump(array('id' => $id), '*'); $apply_detail['heading'] = str_replace('%', '', $apply_detail['heading']); $data['name'] = $apply_detail['heading'] . '货品列表'; $csvObj->export_header($data, $applyObj); $title = ['*:销售物料编码', '*:销售物料名称', '*:销售物料类型']; $salesMaterialCsv[] = '"' . implode('","', $title) . '"'; //获取销售物料类型 $typeList = $salesMLib->getSalesMaterialTypes(); //apply_goods if ($apply_detail['apply_goods'] && $apply_detail['apply_goods'] != '_ALL_') { $goods_ids = explode(',', $apply_detail['apply_goods']); $page = ceil(count($goods_ids) / 10); $page_array = array_chunk($goods_ids, 10, true); for ($i = 0; $i < $page; $i++) { $apply_goods = $applyObj->db->select("SELECT sm_id,sales_material_name,sales_material_bn,sales_material_type FROM sdb_material_sales_material WHERE sm_id in (" . implode(',', $page_array[$i]) . ")"); foreach ($apply_goods as $goods) { $sales_material_type = $goods['sales_material_type']; $newSalesMaterial['sales_material_bn'] = $goods['sales_material_bn'] ? $goods['sales_material_bn'] : '-'; $newSalesMaterial['sales_material_name'] = $goods['sales_material_name'] ? $goods['sales_material_name'] : '-'; //sales_material_type $newSalesMaterial['sales_material_type'] = $typeList[$sales_material_type]; $salesMaterialCsv[] = '"' . implode('","', (array)$newSalesMaterial) . '"'; } } } echo implode("\n", $salesMaterialCsv); } public function export_skuid($id) { ini_set('memory_limit', '1024M'); $applyObj = $this->app->model('regulation_apply'); $apply_detail = $applyObj->dump(array('id' => $id), 'shop_sku_id,heading'); $apply_detail['heading'] = str_replace('%', '', $apply_detail['heading']); $skuIdCsv = []; if ($apply_detail['shop_sku_id']) { $skuIdList = explode(',', $apply_detail['shop_sku_id']); if ($skuIdList) { foreach ($skuIdList as $skuId) { $skuIdCsv[] = ["\t".trim($skuId)]; } } } $row = $applyObj->exportTemplate('shop_sku_id'); $lib = kernel::single('omecsv_phpexcel'); $lib->newExportExcel($skuIdCsv, $apply_detail['heading'] . 'SKUID列表', 'xls', $row); } }