コード例 #1
0
ファイル: DumpController.php プロジェクト: chenyongze/d-a-m
 /**
  * 文档数据导出
  * 导出及备份系统制定字段的数据
  * 20130419 容易导致混乱,有整体导出即可,本功能暂停开发
  */
 public function actionCExport()
 {
     exit;
     $tableName = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';
     //表明
     //验证表明是否为实体表
     if (!preg_match('/^item/i', $tableName)) {
         $this->redirect_back();
     }
     $selectedFields = isset($_POST['checked']) ? $_POST['checked'] : array();
     //选中
     //获取数据库对象和所有字段列表
     $db = CardItem::model()->getDb();
     $nameInfo = explode('_', $tableName);
     $attr = Attr::model()->getAll($nameInfo[1], $nameInfo[2]);
     $fields = array_merge(array('name', 'edittime', 'addtime'), array_keys($attr));
     //获取字段列表
     //获取需要导出的字段列表,并导出
     if (!empty($_POST)) {
         $contents = "";
         //内容
         array_unshift($selectedFields, '_id');
         //加入必选字段id
         //data	获取文档数据
         $cursor = $db->selectCollection($tableName)->find(array(), $selectedFields);
         //查询指定字段数据
         foreach ($cursor as $one) {
             $one_id = is_object($one['_id']) ? '' . $one['_id'] : $one['_id'];
             //id类型处理
             unset($one['_id']);
             //$contents .= '{_id:"'.$one_id.'"},{$set:'.$this->_exportJSON($one).'}'."\n";
             $contents .= $this->json_unicode_utf8(json_encode(array('_id' => $one_id))) . ',{"$set":' . $this->json_unicode_utf8(json_encode($one)) . '}' . "\n";
         }
         unset($cursor);
         $fiels_ext = '';
         array_shift($selectedFields);
         //移出顶部的_id
         $sfcount = count($selectedFields);
         //字段数量
         if ($sfcount > 2) {
             $fiels_ext = $selectedFields[0] . ',' . $selectedFields[1] . '...[' . $sfcount . ']';
         } else {
             $fiels_ext = implode(',', $selectedFields);
         }
         file_put_contents(yiiBase::getPathOfAlias($this->dirpath . '.export') . '/' . date("YmdHis") . '-' . $tableName . '-' . $fiels_ext . '.js', $contents);
     }
     //扫描导出文件并获取列表
     $exportTables = $this->findDir($this->dirpath . '.export', 'js');
     $exe_msg = $this->_exe_message();
     $this->render('cexport', array('fields' => $fields, 'selectedFields' => $selectedFields, 'tableName' => $tableName, 'exportTables' => $exportTables, 'exe_msg' => $exe_msg));
 }
コード例 #2
0
ファイル: DBModel.php プロジェクト: chenyongze/d-a-m
 /**
  * 根据表名清理记录
  * @param $tname	string	表名(可以是由item虚化出来的,如“item_nnhysj_tz”)
  * @return 记录总数
  */
 public function getRemove($tname)
 {
     $ts = $this->parseRealTable($tname);
     $this->applyScopes($ts['criteria']);
     return CardItem::model()->getDb()->selectCollection($ts['name'])->remove($ts['criteria']->getConditions());
 }
コード例 #3
0
ファイル: CardController.php プロジェクト: chenyongze/d-a-m
 /**
  * 获取选择字段的已使用选项(带缓存)
  * http://db.admin.mofang.com/api/card/getoptionuse?setid=1&field=fglx
  */
 public function actionGetOptionUse()
 {
     //参数接收
     //http://db.dev.mofang.com/api/card/getoptionuse/setid/9/field/select1
     $datasetId = isset($_GET['setid']) ? intval($_GET['setid']) : 0;
     //表id
     $fieldKay = isset($_GET['field']) ? $_GET['field'] : '';
     //字段名
     $filter = isset($_GET['filter']) ? $this->paramStr2Arr($_GET['filter']) : '';
     //过滤条件		filter = djfl|珍品::	(多个且关系)
     //初始化返回值
     $info = array();
     $return = array('code' => 0, 'data' => array());
     //参数验证
     if (empty($datasetId) || empty($fieldKay)) {
         $return['code'] = 1;
         //接口参数不足
         //获取字段定义
     } else {
         $this->checkCache($cache_data);
         //检查缓存
         if (!empty($cache_data)) {
             echo $cache_data;
             return '';
         }
         $options = CardDs::model()->getFieldOption($datasetId, $fieldKay);
         if (empty($options)) {
             $return['code'] = 2;
         } else {
             //过滤条件
             $condition = array("dataset_id" => $datasetId, 'data.' . $fieldKay => array('$exists' => true));
             //加入过滤条件
             if ($filter) {
                 foreach ($filter as $fkey => $fval) {
                     $condition['data.' . $fkey] = $fval;
                 }
             }
             //执行查询
             $option_dist = CardItem::model()->getCollection()->distinct('data.' . $fieldKay, $condition);
             //若有分组数据,则填入返回值中
             if ($option_dist) {
                 //合并选项并去重
                 foreach ($option_dist as $oval) {
                     if (is_array($oval)) {
                         $return['data'] = array_merge($return['data'], $oval);
                         //数组合并
                     } else {
                         array_push($return['data'], $oval);
                         //字符串压入
                     }
                 }
                 $return['data'] = array_unique($return['data']);
                 //去重
                 $return['data'] = array_filter($return['data']);
                 //去空
                 $return['data'] = array_merge($return['data'], array());
             }
             $this->writeCache(CJSON::encode($return));
             //设置缓存
         }
     }
     echo CJSON::encode($return);
 }
コード例 #4
0
ファイル: CardDs.php プロジェクト: chenyongze/d-a-m
 /**
  * 获取当前表结构字段名和英文名的对应关系
  * @author gavin
  * @param $istpl	bool	是否为模板,若是组合框只导出一组(默认),若不是则按照当前最大元素数来生成
  * @return 对应
  */
 public function getFieldNameMap($istpl = true)
 {
     //获取字段和中文的对应关系
     $fields = array('id' => '序号');
     //     	FunctionUTL::Debug($this->fields);exit;
     foreach ($this->fields as $field_key => $field_info) {
         if ($field_info['type'] == 'field') {
             $fields[$field_key] = $field_info['name'];
         } else {
             if ($field_info['type'] == 'group') {
                 //确认组数
                 $size = 1;
                 if (empty($istpl)) {
                     //获取当前元素的最大值
                     $size = CardItem::model()->getFieldMaxSize($this->id, $field_key);
                 }
                 //按组数生成
                 for ($i = 0; $i < $size; $i++) {
                     $_line = $i + 1;
                     foreach ($field_info['fields'] as $fg_key => $fg_info) {
                         $fields[$field_key . '-' . $i . '-' . $fg_key] = $field_info['name'] . '-' . $fg_info['name'] . $_line;
                     }
                 }
             }
         }
     }
     return $fields;
 }
コード例 #5
0
 /**
  * 导出数据
  * @param $id	表id
  * @return unknown_type
  */
 public function actionExport($id)
 {
     $this->actCheck('item-export', false);
     $itemModel = new CardItem();
     $dsModel = $this->loadModel($id, 'ds');
     $dbModel = $this->loadModel((int) $dsModel->database_id, 'db');
     $dsModel = $dsModel->sortField();
     //添加默认安装order asc
     //范围验证
     $this->scopeCheck($dsModel->database_id, $id);
     $this->addLog('ds', $dsModel->id, '导出了“' . $dbModel->name . '”中“' . $dsModel->name . '”中所有的数据');
     //获取表头
     $dsmap = $dsModel->getFieldNameMap(false);
     $rs = array(array_values($dsmap), array_keys($dsmap));
     //获取表数据
     $criteria = new EMongoCriteria();
     $criteria->dataset_id = (int) $id;
     //添加查询条件
     if (isset($_GET['sub'])) {
         $criteria = $this->fillCond($criteria, $dsModel['fields']);
     }
     $itemModel = CardItem::model()->findAll($criteria);
     foreach ($itemModel as $ik => $io) {
         $io_info = array();
         foreach ($rs[1] as $dk => $do) {
             if (strpos($do, '-') !== false) {
                 $group_do = explode('-', $do);
                 $io_info[$dk] = $io['data'][$group_do[0]][$group_do[1]][$group_do[2]];
             } else {
                 if (isset($io[$do])) {
                     $io_info[$dk] = $io[$do];
                 } else {
                     $io_info[$dk] = $io['data'][$do];
                 }
             }
         }
         $rs[] = $io_info;
     }
     //拼接文件名
     $file_name = $dbModel->name . '-' . $dsModel->name . '-' . date('YmdHis');
     //输出csv文件
     $this->outputXls($rs, $file_name);
 }