'淘宝前端宝贝管理',
'actions' => array(
array(
'label' => '同步淘宝宝贝',
'href' => 'index.php?app=tbo2o&ctl=admin_shop_skus&act=syncTbPage&finder_id='.$_GET['finder_id'],
'target'=>'dialog::{title:\'同步淘宝店铺商品\'}',
),
array(
'label' => '导出关联模板',
'href' => 'index.php?app=tbo2o&ctl=admin_shop_skus&act=exportTemplate',
'target' => '_blank',
),
),
'base_filter' => $base_filter,
'use_buildin_set_tag'=>false,
'use_buildin_recycle'=>false,
'use_buildin_filter'=>true,
'use_buildin_export'=>false,
'use_buildin_import'=>true,
);
$this->finder('tbo2o_mdl_shop_skus', $params);
}
/**
* 列表分栏菜单
*
* @return Array
*/
function _views()
{
$skuObj = app::get('tbo2o')->model('shop_skus');
$sub_menu = array(
0 => array('label'=>app::get('base')->_('全部'),'optional'=>false),
1 => array('label'=>app::get('base')->_('已关联'),'filter'=>array('is_bind_product'=>1),'optional'=>false),
2 => array('label'=>app::get('base')->_('已绑定'),'filter'=>array('is_bind'=>1),'optional'=>false),
);
foreach($sub_menu as $k=>$v){
$sub_menu[$k]['filter'] = $v['filter']?$v['filter']:null;
$sub_menu[$k]['addon'] = $skuObj->count($v['filter']);
$sub_menu[$k]['href'] = 'index.php?app=tbo2o&ctl=admin_shop_skus&act=index&view='.$k;
}
return $sub_menu;
}
/**
* 商品同步宝贝页
*
* @return void
* @author
* */
function syncTbPage()
{
#店铺配置信息
$tbo2o_shop = kernel::single('tbo2o_common')->getTbo2oShopInfo();
$shop_id = $tbo2o_shop['shop_id'];
if(empty($shop_id))
{
echo('没有找到可同步的店铺!');
exit;
}
$shopObj = app::get('ome')->model('shop');
$filter = array('shop_id'=>$shop_id, 'taobao'=>'taobao', 'active'=>'true', 'disabled'=>'false', 'node_type'=>'taobao');
$shopItem = $shopObj->dump($filter, 'shop_id, shop_bn, name, shop_type, business_type');
if(empty($shopItem))
{
echo('店铺不存在或者不是淘宝类型店铺!');
exit;
}
#同步页面
$url = 'index.php?app=tbo2o&ctl=admin_shop_skus&act=downloadByShop&p[0]='. $shop_id;
$shopfactory = tbo2o_shop_service_factory::createFactory($shopItem['shop_type'], $shopItem['business_type']);
if ($shopfactory)
{
$loadList = $shopfactory->get_approve_status();
}
$this->pagedata['shop_id'] = $shop_id;
$this->pagedata['url'] = $url;
$this->pagedata['loadList'] = $loadList;
$this->pagedata['width'] = intval(100/count($loadList));
$this->pagedata['downloadType'] = 'shop';
if ($_GET['redirectUrl']) {
$this->pagedata['redirectUrl'] = 'index.php?'.http_build_query($_GET['redirectUrl']);
}
$_POST['time'] = time();
if($_POST)
{
$inputhtml = '';
$post = http_build_query($_POST);
$post = explode('&', $post);
foreach ($post as $p) {
list($name,$value) = explode('=', $p);
$params = array(
'type' => 'hidden',
'name' => $name,
'value' => $value
);
$inputhtml .= utils::buildTag($params,'input');
}
$this->pagedata['inputhtml'] = $inputhtml;
}
$this->display('admin/shop/download_page.html');
}
/**
* 下载淘宝店铺中所有宝贝
*
* @param Null
* @return String
*/
function downloadByShop($shop_id)
{
if(empty($shop_id))
{
$this->splash('error', null, $this->app->_('请选择店铺!'));
}
$page = $_GET['page'] > 0 ? (int)$_GET['page'] : 1;
$flag = $_GET['flag'];
$shopLib = kernel::single('tbo2o_shop_sync');
$shopObj = app::get('ome')->model('shop');
# 店铺配置信息
$tbo2o_shop = kernel::single('tbo2o_common')->getTbo2oShopInfo();
if(empty($tbo2o_shop['shop_id']) || ($tbo2o_shop['shop_id'] != $shop_id))
{
$this->splash('error', null, $this->app->_('没有找到可同步的店铺!'));
}
$shop = $shopObj->dump(array('shop_id'=>$shop_id), 'shop_id, shop_bn, name, shop_type, business_type');
if(empty($shop))
{
$this->splash('error', null, $this->app->_('店铺不存在'));
}
# 查看是否在同步中
$sync = $shopLib->getShopSync($shop_id);
if ($sync === 'true')
{
$this->splash('error', null, $this->app->_("其他人正在同步中,请稍后同步!"));
}
# 加载处理类
$shopfactory = tbo2o_shop_service_factory::createFactory($shop['shop_type'], $shop['business_type']);
if ($shopfactory == false) {
$this->splash('error',null,$this->app->_("工厂生产类失败!"));
}
$exist = true;
$approve_status = $shopfactory->get_approve_status($flag, $exist);
if($exist == false)
{
$this->splash('error',null,$this->app->_("标记异常!"));
}
$shopLib->setShopSync($shop_id,'true');
#下载商品
try{
$result = $shopLib->downloadList($shop_id, $approve_status['filter'], $page, $errormsg);
} catch (Exception $e) {
$errormsg = '同步失败:网络异常';
}
$shopLib->setShopSync($shop_id,'false');
$errormsg = is_array($errormsg) ? implode('
',$errormsg) : $errormsg;
if ($result === false)
{
$this->splash('error', null, $errormsg);
}
else
{
$loading = $shopfactory->get_approve_status();
$rate = $loading ? 100/count($loading) : 100;
$totalResults = $shopfactory->getTotalResults();
$download_limit = tbo2o_shop_sync::DOWNLOAD_ALL_LIMIT;
$msg = '同步完成';
$downloadStatus = 'running';
# 判断是否已经全部下载完
if($page >= ceil($totalResults/$download_limit) || $totalResults==0)
{
$msg = '全部下载完';
$downloadStatus = 'finish';
$downloadRate = $rate * ($flag+1);
if($_POST['time'] && count($loading)==($flag+1))
{
base_kvstore::instance('tbo2o/batchframe')->store('downloadTime'.$shop_id, $_POST['time']);
$shopItemLib = kernel::single('tbo2o_shop_items');
$shopSkuLib = kernel::single('tbo2o_shop_skus');
$shopItemLib->deletePassData($shop_id, $_POST['time']);
$shopSkuLib->deletePassData($shop_id, $_POST['time']);
}
} else {
$downloadRate = $rate*$flag + $page*$download_limit/$totalResults*$rate;
}
$msgData = array('errormsg'=>$errormsg,'totalResults'=>$totalResults,'downloadRate'=>intval($downloadRate),'downloadStatus'=>$downloadStatus);
$this->splash('success', null, $msg,'redirect', $msgData);
}
}
/**
* 批量导入的模板
*
* @param Null
* @return String
*/
function exportTemplate()
{
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=淘宝宝贝关联后端商品导入模板-".date('Ymd').".csv");
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
$shopItemObj = app::get('tbo2o')->model('shop_skus');
$title = $shopItemObj->exportTemplate('item');
echo '"'.implode('","',$title).'"';
#模板案例
$data[0] = array('淘宝前端商品名称一', 'taobao_bn_001', '淘宝后端商品一', 'product_bn_001');
$data[1] = array('淘宝前端商品名称二', 'taobao_bn_002', '淘宝后端商品二', 'product_bn_002');
foreach ($data as $items)
{
foreach ($items as $key => $val)
{
$items[$key] = kernel::single('base_charset')->utf2local($val);
}
echo "\n";
echo '"'.implode('","', $items).'"';
}
}
/**
* 关联后端商品
*
* @param $id
* @return String
*/
function bind_product($id)
{
if(empty($id))
{
die('操作出错,请重新操作');
}
$skuObj = app::get('tbo2o')->model('shop_skus');
$skuRow = $skuObj->dump(array('id'=>$id), '*');
if(empty($skuRow))
{
die('操作出错,请重新操作');
}
if($skuRow['is_bind'] == 1)
{
die('店铺货品已绑定,请先解绑再进行关联[后端商品]');
}
if($_POST)
{
$this->begin('index.php?app=tbo2o&ctl=admin_shop_skus&act=index');
$shopProductObj = app::get('tbo2o')->model('shop_products');
$product_id = $_POST['product_id'];
if(empty($product_id))
{
$this->end(false, '请选择关联后端商品');
}
$row = $shopProductObj->dump(array('id'=>$product_id, 'visibled'=>1), 'id, bn, name');
if(empty($row))
{
$this->end(false, '关联的后端商品不存在');
}
//基础物料只能关联一次前端宝贝
$item = $skuObj->dump(array('product_id'=>$product_id), 'shop_product_bn');
if($item)
{
$this->end(false, '后端商品:'. $row['product_bn'] .' 已关联过前端宝贝:'. $item['shop_product_bn']);
}
$updata = array(
'product_id'=>$row['id'],
'product_bn'=>$row['bn'],
'product_name'=>$row['name'],
'is_bind_product'=>1,
);
$result = $skuObj->update($updata, array('id'=>$skuRow['id']));
if($result)
{
$this->end(true, '关联成功');
}
$this->end(false, '关联失败');
}
if($skuRow['product_id'])
{
$this->pagedata['bind_product_id'] = $skuRow['product_id'];
$this->pagedata['replacehtml'] = <<已选择了1个物料,查看关联的后端商品.
EOF;
}
$this->pagedata['data'] = $skuRow;
$this->singlepage('admin/shop/bind_product.html');
}
/**
* @description 显示关联的物料
* @access public
* @param void
* @return void
*/
public function showProducts()
{
$product_id = kernel::single('base_component_request')->get_post('product_id');
if ($product_id) {
$this->pagedata['_input'] = array(
'name' => 'id',
'idcol' => 'id',
'_textcol' => 'product_name',
);
$shopProductObj = app::get('tbo2o')->model('shop_products');
$list = $shopProductObj->getList('id,bn,name',array('id'=>$product_id),0,-1);
//显示基础物料编码
foreach ($list as $key => $val)
{
$list[$key]['product_name'] = $val['bn'] .' '. $val['name'];
}
$this->pagedata['_input']['items'] = $list;
}
$this->display('admin/shop/show_products.html');
}
/**
* 创建IC商品与后端商品的映射关系
*
* @param $id
* @return String
*/
function bind_scitem_map($id)
{
$finder_id = $_GET['finder_id'];
$shopSkuLib = kernel::single('tbo2o_shop_skus');
$result = $shopSkuLib->scitemMapAdd($id, $error_msg);
if($result === false)
{
echo "";
exit;
}
echo "";
exit;
}
/**
* 解除淘宝前端商品的绑定关系
*
* @param $id
* @return String
*/
function unbind_scitem_map($id)
{
$finder_id = $_GET['finder_id'];
$shopSkuLib = kernel::single('tbo2o_shop_skus');
$result = $shopSkuLib->scitemMapDelete($id, $error_msg);
if($result === false)
{
echo "";
exit;
}
echo "";
exit;
}
}