/**
  * 比较截止日期与当前日期
  * 
  * @param string $datetime
  * @return string
  */
 public function deadline($datetime)
 {
     if (!empty($datetime)) {
         $padDatetime = ZtChart_Model_Assemble_Datetime::padDatetime($datetime, Zend_Date::SECOND);
         switch (strcmp($padDatetime, $this->_deadline)) {
             case -1:
             case 0:
                 return $datetime;
             case 1:
                 return substr($this->_deadline, 0, strlen($datetime));
         }
     }
 }
 /**
  * 取得获取数据的Select对象
  *
  * @see ZtChart_Model_Assemble_Backend_Abstract::select()
  * @param string $start 起始时间
  * @param string $end 结束时间
  * @param integer $pos 时间位置
  * @return Zend_Db_Select
  */
 public function select($start, $end, $pos)
 {
     $select = $this->columns(self::ROW_LABEL, self::ROW_DATA);
     $select->where('usertrade_datetime >= ?', ZtChart_Model_Assemble_Datetime::padDatetime($start, $pos))->where('usertrade_datetime < ?', ZtChart_Model_Assemble_Datetime::padDatetime($end, $pos));
     if (null !== $this->_opType) {
         $select->where('usertrade_optype = ?', $this->_opType);
     }
     if (null !== $this->_netbank) {
         // $this->clearGameTypes();
         $select->where('usertrade_netbank = ?', $this->_netbank);
     }
     return $select;
 }
 /**
  * 产生时间选择表单
  * 
  * @param string $name
  * @param string $name1
  * @param string $name2
  * @param array $options
  * @return string
  */
 public function radioDate($name, $name1, $name2, $options = array(ZtChart_Model_Assemble_Datetime::RECENT_24HOUR, ZtChart_Model_Assemble_Datetime::RECENT_48HOUR, ZtChart_Model_Assemble_Datetime::RECENT_1WEEK, ZtChart_Model_Assemble_Datetime::RECENT_1MONTH, ZtChart_Model_Assemble_Datetime::CUSTOM))
 {
     $request = Zend_Controller_Front::getInstance()->getRequest();
     $value = $request->getQuery($name, $options[0]);
     $options = array_map(function ($str) {
         return ' ' . $str;
     }, ZtChart_Model_Assemble_Datetime::getPredefinedDatetimes($options));
     $html = $this->formRadio($name, $value, null, $options, PHP_EOL);
     $params = array('maxDate' => date('Y-m-d'));
     $attribs = array('class' => 'dateInput', 'readonly' => 'readonly');
     if (!empty($value)) {
         $attribs['disabled'] = 'disabled';
     }
     if (array_key_exists(ZtChart_Model_Assemble_Datetime::CUSTOM, $options)) {
         $html .= '<span class="spanInput">' . PHP_EOL . $this->view->datePicker($name1, $request->getQuery($name1), $params, $attribs) . PHP_EOL . '-' . $this->view->datePicker($name2, $request->getQuery($name2), $params, $attribs) . PHP_EOL . '</span>' . PHP_EOL;
         $html .= '<button class="btn6" type="submit">确定</button>';
     }
     return $html;
 }
 /**
  * 在线人数曲线
  */
 public function chartAction()
 {
     $data = array();
     // 当前时间戳
     $nowOffsetTimestamp = Zend_Date::now()->subMinute(abs($this->_getParam('offset')))->getTimestamp();
     foreach ($this->_getParam('allowedGameTypes') as $gameType) {
         if (ZtChart_Model_GameType::isQule($gameType)) {
             // 取Qule游戏的数据
             $qule = new ZtChart_Model_Qule();
             // 取当前偏移量的数据
             $nowData = $qule->getGamedata(array('gametype' => $gameType, 'zoneid' => $this->_getParam('zoneid'), 'loadnumber' => $this->_getParam('range'), 'querydate' => $nowOffsetTimestamp));
             if (array_key_exists('data', $nowData) && !empty($nowData['data'])) {
                 foreach ($nowData['data'] as $item) {
                     $data['datetime'][] = $item[0];
                     $data['data'][0][] = $item[1];
                 }
             }
             // 取同比偏移量的数据
             if ($this->_hasParam('pdate')) {
                 foreach (explode(',', $this->_getParam('pdate')) as $pdate) {
                     $sameOffsetTimestamp = ZtChart_Model_Assemble_Datetime::getPredefinedStartTimestamp($pdate, $nowOffsetTimestamp);
                     $sameData = $qule->getGamedata(array('gametype' => $gameType, 'zoneid' => $this->_getParam('zoneid'), 'loadnumber' => $this->_getParam('range'), 'querydate' => $sameOffsetTimestamp));
                     if (array_key_exists('data', $sameData) && !empty($sameData['data'])) {
                         foreach ($sameData['data'] as $item) {
                             $data['data'][$pdate][] = $item[1];
                         }
                     }
                 }
             }
         } else {
             // 取InfoServer中的数据
             try {
                 if (ZtChart_Model_DbTable_Infoserver::isSingleAdapter($gameType)) {
                     // 游戏只有一个数据库的情况
                     $infoserver = ZtChart_Model_DbTable_Infoserver::factory($gameType);
                     // 取当前偏移量的数据
                     $nowOffsetDate = new Zend_Date($nowOffsetTimestamp);
                     $startNowOffsetTimestamp = $nowOffsetDate->subMinute($this->_getParam('range'))->getTimestamp();
                     for ($i = 0; $i < $this->_getParam('range'); $i++) {
                         $data['datetime'][$i] = $startNowOffsetTimestamp + $i * 60;
                         $data['tmp'][$i] = date('H:i', $data['datetime'][$i]);
                     }
                     foreach ($infoserver->fetchSumGroup($startNowOffsetTimestamp) as $item) {
                         if (in_array(date('H:i', $item[0]), $data['tmp'])) {
                             $data['data'][0][] = $item[1];
                         } else {
                             $data['data'][0][] = -1;
                         }
                     }
                     $data['data'][0] = array_pad($data['data'][0], $this->_getParam('range'), -1);
                     // 取同比偏移量的数据
                     if ($this->_hasParam('pdate')) {
                         foreach (explode(',', $this->_getParam('pdate')) as $pdate) {
                             $startSameOffsetTimestamp = ZtChart_Model_Assemble_Datetime::getPredefinedStartTimestamp($pdate, $startNowOffsetTimestamp);
                             $infoserver->setTablename($startSameOffsetTimestamp);
                             foreach ($infoserver->fetchSumGroup($startSameOffsetTimestamp, $this->_getParam('range')) as $item) {
                                 if (in_array(date('H:i', $item[0]), $data['tmp'])) {
                                     $data['data'][$pdate][] = $item[1];
                                 } else {
                                     $data['data'][$pdate][] = -1;
                                 }
                             }
                             $data['data'][$pdate] = array_pad($data['data'][$pdate], $this->_getParam('range'), -1);
                         }
                     }
                     unset($data['tmp']);
                 } else {
                     // @todo 游戏含有多个数据库的情况
                 }
             } catch (Zend_Db_Exception $e) {
                 ZtChart_Model_Logger::err($e->getMessage());
                 continue;
             }
         }
     }
     $this->_helper->json($data);
 }
 /**
  * 检查时间单位是否合法
  * 
  * @param string $unit
  * @return boolean
  */
 protected function _checkDatetimeUnit($unit)
 {
     return ZtChart_Model_Assemble_Datetime::checkDatetimeUnit($unit);
 }
 /**
  * 取得获取数据的Select对象
  *
  * @see ZtChart_Model_Assemble_Backend_Abstract::select()
  * @param string $start 起始时间
  * @param string $end 结束时间
  * @param integer $pos 时间位置
  * @return Zend_Db_Select
  */
 public function select($start, $end, $pos)
 {
     $select = $this->columns(self::ROW_LABEL, self::ROW_DATA);
     $select->where("flserver_datetime >= ?", ZtChart_Model_Assemble_Datetime::padDatetime($start, $pos))->where("flserver_datetime < ?", ZtChart_Model_Assemble_Datetime::padDatetime($end, $pos));
     return $select;
 }
 /**
  * 取得时间范围
  * 
  * @param string $start
  * @param string $end
  * @param string $unit
  * @return array
  */
 protected function _getDatetimeRange(&$start, &$end, $unit)
 {
     if (empty($start) && empty($end)) {
         $start = $end = ZtChart_Model_Assemble_Datetime::padDatetime(time(), $unit);
     } else {
         if (empty($start)) {
             $start = ZtChart_Model_Assemble_Datetime::ERA_DATETIME;
         } else {
             if (empty($end)) {
                 $end = ZtChart_Model_Assemble_Datetime::padDatetime(time(), $unit);
             }
         }
     }
     return ZtChart_Model_Assemble_Datetime::getDatetimeRange($start, $end, $unit);
 }