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; }
/** * 处理指标得分的核心 * @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; }