/** * public $NLL; * public $NLH; * public $B95; * public $B90; * public $B75; * public $B50; * public $B25; * public $B10; * public $B5; */ private static function startMysqlSpmmdMemory() { $spmmd_first = SpmmdMemory::findFirst(); if (isset($spmmd_first->NLL)) { return true; } else { try { $manager = new TxManager(); $transaction = $manager->get(); $spmmd_data = Spmmd::find(); foreach ($spmmd_data as $spmmd_record) { $spmmd_memory = new SpmmdMemory(); $spmmd_memory->setTransaction($transaction); $spmmd_memory->NLL = $spmmd_record->NLL; $spmmd_memory->NLH = $spmmd_record->NLH; $spmmd_memory->B95 = $spmmd_record->B95; $spmmd_memory->B90 = $spmmd_record->B90; $spmmd_memory->B75 = $spmmd_record->B75; $spmmd_memory->B50 = $spmmd_record->B50; $spmmd_memory->B25 = $spmmd_record->B25; $spmmd_memory->B10 = $spmmd_record->B10; $spmmd_memory->B5 = $spmmd_record->B5; if ($spmmd_memory->create() == false) { unset($ksmd_data); $transaction->rollback("SPMMD DATA INSERT INTO MEMORY TABLE ERROR!"); } } if (isset($spmmd_data)) { unset($spmmd_data); } $transaction->commit(); return true; } catch (TxFailed $e) { throw new Exception("Failed, reason: " . $e->getMessage()); } } }
/** * SPM */ protected static function calSPM(&$resultsets) { #首先判断是否需要写入SPM相关的因子分数 if (empty(self::$factors_list_all)) { self::getFactorsAll($resultsets->examinee_id); } if (!isset(self::$factors_list_all['SPM'])) { #true 表示不用写入SPM的相关因子 return true; } #确保加载内存表 if (!self::$memory_state) { self::loadMemoryTable(); } #确保个人信息 if (empty(self::$examinee_info)) { self::getExamineeInfo($resultsets->examinee_id); } #整理SPM题目答案 $question_ans_array = self::getAnswers($resultsets); #确定所有涉及的因子,不再进行全局遍历 $array_all_use = array(); foreach (self::$factors_list_all['SPM'] as $key => $value) { $factor_detail = MemoryCache::getFactorDetail($value); if ($factor_detail->action == 'sum') { if (!in_array($value, $array_all_use)) { $array_all_use[$key] = $value; } } else { if (!in_array($value, $array_all_use)) { $array_all_use[$key] = $value; } $child_factor_str = $factor_detail->children; $child_factor_array = explode(',', $child_factor_str); foreach ($child_factor_array as $fvalue) { if (!in_array($fvalue, $array_all_use)) { $fvalue_tmp = MemoryCache::getFactorDetail($fvalue); $fkey = $fvalue_tmp->id; $array_all_use[$fkey] = $fvalue; } } } } ksort($array_all_use); #得到一个完全有效数组 #返回数组 $rt_array = array(); #保存基础数组 $basic_array = array(); #简单因子先处理,复杂因子后处理,由于复杂因子使用简单因子的原始分,那么我们次序对其进行运算 foreach ($array_all_use as $key => $value) { $factor_record = MemoryCache::getFactorDetail($value); $score = 0; if ($factor_record->action == 'sum') { #前5项(至多) 简单因子的原始得分 $factor_record_number_array = explode(',', $factor_record->children); foreach ($factor_record_number_array as $skey) { if (isset($question_ans_array[$skey])) { $score += $question_ans_array[$skey]; } } $basic_array[$value] = $score; } else { #至多2项 $code = preg_replace('/[a-z]+/', '\\$basic_array[\'$0\']', $factor_record->action); $code = "\$score = {$code};"; eval($code); $basic_array[$value] = $score; } } #basic_array >= $factor_list_all['SPM']; foreach ($basic_array as $key => $value) { if (!in_array($key, self::$factors_list_all['SPM'])) { unset($basic_array[$key]); } } #现在的$basic_array为有效数组的原始的分 $age = self::$examinee_info['age']; #spm的年龄区间 5.25~110 if ($age < 5.25 || $age >= 110) { throw new Exception(self::$error_state . "SPM年龄范围越界" . $age); } foreach ($basic_array as $key => $score) { $factor_record = MemoryCache::getFactorDetail($key); $array_record = array(); $std_score = 0; $ans_score = 0; if ($key == 'spm') { $spmmd = SpmmdMemory::findFirst(array('NLH >= :age: AND NLL <= :age:', 'bind' => array('age' => $age))); if (!isset($spmmd->NLH)) { throw new Exception(self::$error_state . '-Spmmd不存在记录-' . 'age-' . $age); } if ($score >= $spmmd->B95) { $std_score = 195; } else { if ($score >= $spmmd->B90) { $std_score = 290; } else { if ($score >= $spmmd->B75) { $std_score = 275; } else { if ($score >= $spmmd->B50) { $std_score = 350; } else { if ($score >= $spmmd->B25) { $std_score = 325; } else { if ($score >= $spmmd->B10) { $std_score = 410; } else { if ($score >= $spmmd->B5) { $std_score = 45; } else { $std_score = 51; } } } } } } } // std_score 第一位 智力等级 之后位为 百分等级 $flag = substr($std_score, 0, 1); if ($flag == 1) { $ans_score = 9; } else { if ($flag == 2) { $ans_score = 7.5; } else { if ($flag == 3) { $ans_score = 6; } else { if ($flag == 4) { $ans_score = 5; } else { if ($flag == 5) { $ans_score = 4; } else { $ans_score = 1; } } } } } } else { $std_score = $score; if ($key == 'spmabc') { $ans_score = sprintf("%.2f", $std_score / 3.6); } else { $ans_score = sprintf("%.2f", $std_score / 1.2); } } $array_record['score'] = floatval($score); $array_record['std_score'] = floatval($std_score); $array_record['ans_score'] = floatval($ans_score); $rt_array[$factor_record->id] = $array_record; } return $rt_array; }