<?php 
 | 
  
 | 
class Model_Task_TaskProgress extends PhalApi_Model_NotORM { 
 | 
  
 | 
    const STATE_WAITTING = 0; 
 | 
    const STATE_RUNNING = 1; 
 | 
    const STATE_EXCEPTION = -1; 
 | 
  
 | 
    const ENABLE_ON = 1; 
 | 
    const ENABLE_OFF = 0; 
 | 
  
 | 
    protected function getTableName($id = NULL) { 
 | 
        return 'task_progress'; 
 | 
    } 
 | 
  
 | 
    public function getWrongItems($maxLastFireTime) { 
 | 
        $rows = $this->getORM() 
 | 
            ->select('id, title') 
 | 
            ->where('state != ?', self::STATE_WAITTING) 
 | 
            ->where('last_fire_time < ?', $maxLastFireTime) 
 | 
            ->where('enable = ?', self::ENABLE_ON) 
 | 
            ->order('last_fire_time ASC') 
 | 
            ->fetchAll(); 
 | 
  
 | 
        return !empty($rows) ? $rows : array(); 
 | 
    } 
 | 
  
 | 
    public function resetWrongItems($id) { 
 | 
        return $this->update($id, array('state' => self::STATE_WAITTING)); 
 | 
    } 
 | 
  
 | 
    public function getAllWaittingItems() { 
 | 
        $rows = $this->getORM() 
 | 
            ->select('id, title, trigger_class, fire_params') 
 | 
            ->where('state', self::STATE_WAITTING) 
 | 
            ->where('interval_time + last_fire_time < ?', $_SERVER['REQUEST_TIME']) 
 | 
            ->where('enable = ?', self::ENABLE_ON) 
 | 
            ->fetchAll(); 
 | 
  
 | 
        return !empty($rows) ? $rows : array(); 
 | 
    } 
 | 
  
 | 
    public function isRunnable($id) { 
 | 
        $row = $this->get($id, 'enable, state'); 
 | 
  
 | 
        if (empty($row)) { 
 | 
            return FALSE; 
 | 
        } 
 | 
  
 | 
        return ($row['state'] == self::STATE_WAITTING && $row['enable'] == self::ENABLE_ON) ? TRUE : FALSE; 
 | 
    } 
 | 
  
 | 
    public function setRunningState($id) { 
 | 
        return $this->update($id, array('state' => self::STATE_RUNNING)); 
 | 
    } 
 | 
  
 | 
    public function updateFinishItem($id, $result) { 
 | 
        $data = array( 
 | 
            'result' => json_encode($result), 
 | 
            'state' => self::STATE_WAITTING, 
 | 
            'last_fire_time' => $_SERVER['REQUEST_TIME'], 
 | 
        ); 
 | 
  
 | 
        return $this->update($id, $data); 
 | 
    } 
 | 
  
 | 
    public function updateExceptionItem($id, $errorMsg) { 
 | 
        $data = array( 
 | 
            'result' => $errorMsg, 
 | 
            'state' => self::STATE_EXCEPTION, 
 | 
            'last_fire_time' => $_SERVER['REQUEST_TIME'], 
 | 
        ); 
 | 
  
 | 
        return $this->update($id, $data); 
 | 
    } 
 | 
} 
 |