has_permission('taoexlib_ietask')){
header('Content-Type:text/html; charset=utf-8');
echo app::get('desktop')->_("您无权操作");exit;
}
//清除到期下载任务
kernel::single('taoexlib_ietask')->clean();
$base_filter = array();
$is_super = kernel::single('desktop_user')->is_super();
if (!$is_super){
$base_filter['op_id'] = kernel::single('desktop_user')->get_id();
}
$this->finder(
'taoexlib_mdl_ietask',
array(
'title'=>'导出任务列表',
'base_filter'=>$base_filter,
'use_buildin_export'=>false,
'use_buildin_set_tag'=>false,
'use_buildin_filter'=>true,
'use_buildin_tagedit'=>true,
'allow_detail_popup'=>false,
'use_view_tab'=>false,
'use_buildin_recycle'=>true,
'orderBy'=>' task_id desc ',
'use_buildin_recycle'=>false,
'actions' => array(
array('label'=>'删除','submit'=>'index.php?app=taoexlib&ctl=ietask&act=delTask'),
),
)
);
}
//直接删除导出任务
/**
* delTask
* @return mixed 返回值
*/
public function delTask(){
$this->begin('index.php?app=taoexlib&ctl=ietask&act=index');
$ietaskObj = app::get('taoexlib')->model('ietask');
$ids = array();
if(isset($_POST['task_id']) && is_array($_POST['task_id']) && (count($_POST['task_id'])>0)) {
$ids = $_POST['task_id'];
}elseif(isset($_POST['isSelectedAll']) && ($_POST['isSelectedAll'] == '_ALL_')){//全选
unset($_POST['app']);
unset($_POST['ctl']);
unset($_POST['act']);
unset($_POST['flt']);
unset($_POST['_finder']);
$filter = $_POST;
$task_ids = $ietaskObj->getList('task_id',$filter);
foreach($task_ids as $id){
$ids[] = $id['task_id'];
}
}
if(!empty($ids)){
//当前导出文件存储模式
$storageLib = kernel::single('taskmgr_interface_storage');
$isLocalStorage = $storageLib->isLocalMode();
$ietaskLib = kernel::single('taoexlib_ietask');
$rows = $ietaskObj->getList('task_id,status,file_name', array('task_id'=>$ids), 0, -1);
foreach ($rows as $task){
$cacheLib = kernel::single('taskmgr_interface_cache',$task['task_id']);
$isLocalCache = $cacheLib->isLocalMode();
//数据缓存是本地的,删除本地缓存
if($isLocalCache){
$ietaskLib->delDirAndFile(DATA_DIR.'/export/cache/'.$task['task_id'], false);
}
//如果任务没有执行完成被删除,则标记任务已被删除的缓存状态标记,以便队列任务直接跳出不执行占用资源
if($task['status'] != 'finished'){
$cacheLib->store('exp_task_'.$task['task_id'].'_status', 'del', 600);
}
//识别是否存在本地文件
if($isLocalStorage && !empty($task['file_name'])){
@unlink(DATA_DIR.'/export/file/'.$task['file_name']);
}
// 删除远程文件
$storageLib->delete($task['file_name']);
//删除任务
$ietaskObj->remove($task['task_id']);
}
}
$this->end(true, $this->app->_('删除成功'));
}
function download($id){
set_time_limit(0);
@ini_set('memory_limit', '1024M');
$ietaskObj = app::get("taoexlib")->model("ietask");
$task_info = $ietaskObj->dump(array('task_id'=>$id),'file_name,task_name,filter_data,op_id');
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super) {
if ($task_info['op_id'] != kernel::single('desktop_user')->get_id()) {
echo app::get('desktop')->_("您无权操作");exit;
}
}
$filter = @unserialize($task_info['filter_data']);
$storageLib = kernel::single('taskmgr_interface_storage');
$local_file = DATA_DIR.'/export/tmp_local/'.md5(microtime().KV_PREFIX).$id;
if($filter['_io_type'] == 'xls') {
$local_file .= '.xlsx';
} else {
$local_file .= '.csv';
}
//记录导出用户记录
$exportData = array();
$exportData['task_name'] = $task_info['task_name'];
$exportData['file_name'] = $task_info['file_name'];
$exportData['op_id'] = kernel::single('desktop_user')->get_id();
$exportData['create_time'] = time();
app::get('taoexlib')->model('export_history')->insert($exportData);
$getfile_res = $storageLib->get($task_info['file_name'],$local_file);
if($getfile_res){
$file_size = filesize($local_file);
$file_name = $task_info['task_name']."-".$id;
if($filter['_io_type'] == 'xls') {
$file_name .= '.xlsx';
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition:attachment;filename=" . $file_name);
header('Cache-Control: max-age=0');
} else {
$file_name .= '.csv';
header("Content-type:text/html;charset=utf-8");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".$file_name);
}
echo file_get_contents($local_file);
@unlink($local_file);
}
}
function import(){
$base_filter = array();
$is_super = kernel::single('desktop_user')->is_super();
if (!$is_super){
$base_filter['op_id'] = kernel::single('desktop_user')->get_id();
}
$this->finder(
'taoexlib_mdl_ietask_import',
array(
'title'=>'导入任务列表',
'base_filter'=>$base_filter,
'use_buildin_export'=>false,
'use_buildin_set_tag'=>false,
'use_buildin_filter'=>true,
'use_buildin_tagedit'=>true,
'allow_detail_popup'=>false,
'use_view_tab'=>false,
'use_buildin_recycle'=>true,
'orderBy'=>' task_id desc ',
// 'use_buildin_recycle'=>false,
//'actions' => array(
// array('label'=>'导入','href'=>'index.php?app=taoexlib&ctl=ietask&act=toImport'),
//),
)
);
}
function toImport(){
$oIeCfg = $this->app->model('ietask_cfg');
$cfgList = $oIeCfg->getCfgList($ietask_cfg_id,array('ietask_cfg_id','name'));
$this->pagedata['cfgList'] = $cfgList;
echo $this->page('ietask/import.html');
}
function doImport(){
if( !$_FILES['import_file']['name'] ){
echo '';
exit;
}
$oQueue = app::get('base')->model('queue');
$tmpFileHandle = fopen( $_FILES['import_file']['tmp_name'],"r" );
$mdl = substr($this->object_name,strlen( $this->app->app_id.'_mdl_'));
$oIo = kernel::servicelist('desktop_io');
foreach( $oIo as $aIo ){
if( $aIo->io_type_name == substr($_FILES['import_file']['name'],-3 ) ){
$oImportType = $aIo;
break;
}
}
unset($oIo);
if( !$oImportType ){
echo '';
exit;
}
$contents = array();
$oImportType->fgethandle($tmpFileHandle,$contents);
$newFileName = $this->app->app_id.'_'.$mdl.'_'.$_FILES['import_file']['name'].'-'.time();
base_kvstore::instance($this->app->app_id.'_'.$mdl)->store($newFileName,serialize($contents));
base_kvstore::instance($this->app->app_id.'_'.$mdl)->store($newFileName.'_sdf',serialize(array()));
base_kvstore::instance($this->app->app_id.'_'.$mdl)->store($newFileName.'_error',serialize(array()));
// base_kvstore::instance($this->app->app_id.'_'.$mdl)->store($newFileName.'_msg',serialize(array()));
fclose($tmpFileHandle);
$oo = kernel::single('desktop_finder_builder_to_run_import');
$msgList = $oo->turn_to_sdf($aaa,array(
'file_type' => substr( $_FILES['import_file']['name'],-3 ),
'app' => $this->app->app_id,
'mdl' => $mdl,
'file_name' => $newFileName
));
$msg = array();
if( $msgList['error'] )
$rs = array('failure',$msgList['error']);
else
$rs = array('success',$msgList['warning']);
/*
$queueData = array(
'queue_title'=>$mdl.app::get('desktop')->_('转sdf'),
'start_time'=>time(),
'params'=>array(
'file_type' => substr( $_FILES['import_file']['name'],-3 ),
'app' => $this->app->app_id,
'mdl' => $mdl,
'file_name' => $newFileName
),
'worker'=>'desktop_finder_builder_to_run_import.turn_to_sdf',
);
$oQueue->save($queueData);
*/
$echoMsg = '';
if( $rs[0] == 'success' ){
$o = app::get( $this->app->app_id )->model($mdl);
$oImportType->model = $o;
$frs = $oImportType->finish_import();
if(is_array($frs) && isset($frs[0]) && !$frs[0]) {
$echoMsg = '导入失败:'. $frs[1]['msg'];
} else {
$echoMsg =app::get('desktop')->_('上传成功 已加入队列 系统会自动跑完队列');
}
if($msgList['warning']){
$echoMsg .= app::get('desktop')->_('但是存在以下问题')."\\n";
$echoMsg .= implode("\\n",$msgList['warning']);
}
}else{
$echoMsg = app::get('desktop')->_('导入失败 错误如下:'."\\n".implode("\\n",$msgList['error']));
}
header("content-type:text/html; charset=utf-8");
echo "";
}
/**
* predownload
* @return mixed 返回值
*/
public function predownload()
{
$this->pagedata['durl'] = urldecode($_GET['durl']);
$this->pagedata['export_agreement'] = file_get_contents(ROOT_DIR . '/export.protocol');
$this->display('ietask/predownload.html');
}
/**
* 检查Download
* @return mixed 返回验证结果
*/
public function checkDownload()
{
$url = "index.php?app=taoexlib&ctl=ietask&act=index";
if (!base_vcode::verify('desktop', intval($_POST['verifycode']))) {
$this->splash('error', $url, '验证码错误');
}
$this->splash('success', $url, '操作成功');
}
}