Example #1
0
 public static function getLevel($examinee_id)
 {
     $index_ans = IndexAns::find(array('examinee_id' => 1, 'bind' => array(1 => $examinee_id)));
     $score = 0;
     $count = 0;
     foreach ($index_ans as $index) {
         $score += $index->score;
         $count++;
     }
     if ($count == 0) {
         $score_avg = 0;
     } else {
         $score_avg = $score / $count;
     }
     if ($score_avg > 5.8) {
         $level = 1;
     } else {
         if ($score_avg > 5.3) {
             $level = 2;
         } else {
             if ($score_avg > 5.0) {
                 $level = 3;
             } else {
                 $level = 4;
             }
         }
     }
     return $level;
 }
Example #2
0
 /**
  * 处理指标得分的核心
  * @param int $examinee_id
  */
 public static function handleIndexs($examinee_id)
 {
     #判定项目存在
     if (empty(self::$project_id)) {
         $index_state = self::getProjectId($examinee_id);
         #false 表示这一层已经完成
         if (!$index_state) {
             return false;
         }
     }
     #获取必须存到数据库的相关因子
     self::getFactors($examinee_id);
     #获取需要计算的指标
     if (empty(self::$indexs_list)) {
         self::getIndexs($examinee_id);
     }
     $index_ans = array();
     #此处为依次进行
     foreach (self::$indexs_list as $key => $value) {
         $score = 0;
         $index_detail = MemoryCache::getIndexDetail($value);
         if ($value != 'zb_ldnl' && $value != 'zb_gzzf') {
             #注意此处解析直接需要知道得到相应的因子得分,如果需要的因子得分而没有得到计算,那么可能报错
             $code = preg_replace('/[a-zA-Z][a-zA-Z0-9]*/', 'self::$factors_list[\'$0\']', $index_detail->action);
             $matches = array();
             preg_match_all('/self\\:\\:\\$factors\\_list\\[\'[a-zA-Z][a-zA-Z0-9]*\'\\]/', $code, $matches);
             foreach ($matches[0] as $key => $svalue) {
                 if (!isset($svalue)) {
                     eval("{$svalue} = 0;");
                 }
             }
             $code = "\$score = sprintf(\"%.2f\",{$code});";
             eval($code);
             $index_ans[$value] = $score;
         } else {
             if ($value == 'zb_ldnl') {
                 $code = preg_replace('/zb_[a-zA-Z0-9]*/', '\\$index_ans[\'$0\']', $index_detail->action);
                 $matches = array();
                 preg_match_all('/\\$index\\_ans\\[\'[a-zA-Z][a-zA-Z0-9]*\'\\]/', $code, $matches);
                 foreach ($matches[0] as $key => $svalue) {
                     if (!isset($svalue)) {
                         eval("{$svalue} = 0;");
                     }
                 }
                 $code = "\$score = sprintf(\"%.2f\",{$code});";
                 eval($code);
                 $index_ans[$value] = $score;
             } else {
                 if (!isset($index_ans['zb_rjgxtjsp'])) {
                     $index_ans['zb_rjgxtjsp'] = 0;
                 }
                 $code = $index_detail->action;
                 $code = str_replace('zb_rjgxtjsp', 'rjgxtjsptmp', $code);
                 self::$factors_list['rjgxtjsptmp'] = $index_ans['zb_rjgxtjsp'];
                 $code = preg_replace('/[a-zA-Z][a-zA-Z0-9]*/', 'self::$factors_list[\'$0\']', $code);
                 $matches = array();
                 preg_match_all('/self\\:\\:\\$factors\\_list\\[\'[a-zA-Z][a-zA-Z0-9]*\'\\]/', $code, $matches);
                 foreach ($matches[0] as $key => $svalue) {
                     if (!isset($svalue)) {
                         eval("{$svalue} = 0;");
                     }
                 }
                 $code = "\$score = sprintf(\"%.2f\",{$code});";
                 eval($code);
                 $index_ans[$value] = $score;
                 if (isset(self::$factors_list['rjgxtjsptmp'])) {
                     unset(self::$factors_list['rjgxtjsptmp']);
                 }
             }
         }
     }
     try {
         $manager = new TxManager();
         $transaction = $manager->get();
         foreach (self::$indexs_list as $key => $value) {
             $index = new IndexAns();
             $index->setTransaction($transaction);
             $index->examinee_id = $examinee_id;
             $index->index_id = $key;
             $index->score = $index_ans[$value];
             $isWrited = IndexAns::findFirst(array("examinee_id = :examinee_id: AND index_id = :index_id:", 'bind' => array('examinee_id' => $examinee_id, 'index_id' => $key)));
             if (isset($isWrited->score)) {
                 continue;
             }
             if ($index->save() == false) {
                 $transaction->rollback("Cannot insert IndexAns data");
             }
         }
         $transaction->commit();
         return true;
     } catch (TxFailed $e) {
         throw new Exception("Failed, reason: " . $e->getMessage());
     }
 }
 public function getSystemComprehensive($examinee_id)
 {
     $project_id = $this->self_check($examinee_id);
     $result = IndexAns::find(array('examinee_id = ?1', 'bind' => array(1 => $examinee_id)));
     $result = $result->toArray();
     //指标总数
     $count_all = count($result);
     if ($count_all <= 0) {
         throw new Exception('指标数量为0,请确认');
     }
     //优秀(X>5.8)、良好(5.8≥X>5.3)、一般(5.3≥X>5.0)、较差(X≤5.0)
     $rate = array(0 => 0, 1 => 0, 2 => 0, 3 => 0);
     $sum = 0;
     foreach ($result as $value) {
         $sum += $value['score'];
         if ($value['score'] > 5.8) {
             $rate[0]++;
         } else {
             if ($value['score'] > 5.3) {
                 $rate[1]++;
             } else {
                 if ($value['score'] > 5.0) {
                     $rate[2]++;
                 } else {
                     $rate[3]++;
                 }
             }
         }
     }
     foreach ($rate as &$value) {
         $value = sprintf("%.2f", $value / $count_all) * 100;
     }
     $rt['value'] = $rate;
     //计算个人的指标平均成绩,得到评价等级
     $average = $sum / $count_all;
     if ($average > 5.8) {
         $rt['level'] = 1;
     } else {
         if ($average > 5.3) {
             $rt['level'] = 2;
         } else {
             if ($average > 5.0) {
                 $rt['level'] = 3;
             } else {
                 $rt['level'] = 4;
             }
         }
     }
     return $rt;
 }