Пример #1
0
 /**
  * public $DM;
  * public $YZ;
  * public $M;
  * public $SD;
  * @throws Exception
  * @return boolean
  */
 private static function startMysqlCpimdMemory()
 {
     $cpimd_first = CpimdMemory::findFirst();
     if (isset($cpimd_first->DM)) {
         return true;
     } else {
         try {
             $manager = new TxManager();
             $transaction = $manager->get();
             $cpimd_data = Cpimd::find();
             foreach ($cpimd_data as $cpimd_record) {
                 $cpimd_memory = new CpimdMemory();
                 $cpimd_memory->setTransaction($transaction);
                 $cpimd_memory->DM = $cpimd_record->DM;
                 $cpimd_memory->YZ = $cpimd_record->YZ;
                 $cpimd_memory->M = $cpimd_record->M;
                 $cpimd_memory->SD = $cpimd_record->SD;
                 if ($cpimd_memory->create() == false) {
                     unset($cpimd_data);
                     $transaction->rollback("CPIMD DATA INSERT INTO MEMORY TABLE ERROR!");
                 }
             }
             if (isset($cpimd_data)) {
                 unset($cpimd_data);
             }
             $transaction->commit();
             return true;
         } catch (TxFailed $e) {
             throw new Exception("Failed, reason: " . $e->getMessage());
         }
     }
 }
Пример #2
0
 /**
  * CPI 匹配 sum
  */
 protected static function calCPI(&$resultsets)
 {
     #首先判断是否需要写入cpi相关的因子分数
     if (empty(self::$factors_list_all)) {
         self::getFactorsAll($resultsets->examinee_id);
     }
     if (!isset(self::$factors_list_all['CPI'])) {
         #true 表示不用写入CPI的相关因子
         return true;
     }
     $string = str_replace('-', '|', $resultsets->score);
     $score_array = explode('|', $string);
     $score_array = array_count_values($score_array);
     unset($score_array['']);
     #确保加载内存表
     if (!self::$memory_state) {
         self::loadMemoryTable();
     }
     if (empty(self::$examinee_info)) {
         self::getExamineeInfo($resultsets->examinee_id);
     }
     $dm = self::$examinee_info['sex'] == 1 ? 1 : 2;
     $rt_array = array();
     foreach (self::$factors_list_all['CPI'] as $key => $value) {
         $rt_array_record = array();
         #判断要写入的因子是否存在于之前的结果集中,若不存在,则置为0
         $score = 0;
         if (isset($score_array[$value])) {
             $score = $score_array[$value];
         }
         $m = 0;
         $sd = 0;
         $std_score = 0;
         $ans_score = 0;
         #标准分
         $cpimd = CpimdMemory::findFirst(array("DM = :dm: AND YZ = :yz:", 'bind' => array('dm' => $dm, 'yz' => strtoupper($value))));
         if (!isset($cpimd->DM)) {
             throw new Exception(self::$error_state . '-CPI不存在记录-' . '-DM-' . $dm . '-YZ-' . $value);
         }
         $m = $cpimd->M;
         $sd = $cpimd->SD;
         if ($m != 0 && $sd != 0) {
             $std_score = sprintf("%.2f", 50 + 10 * ($score - $m) / $sd);
         }
         #最终分
         if ($value != 'fx') {
             $ans_score = sprintf("%.2f", $std_score / 10);
         } else {
             if ($std_score == 100) {
                 $ans_score = 10;
             } else {
                 if ($std_score > 80) {
                     $ans_score = 9;
                 } else {
                     if ($std_score > 65) {
                         $ans_score = 8;
                     } else {
                         if ($std_score > 30) {
                             $ans_score = 5;
                         } else {
                             if ($std_score > 10) {
                                 $ans_score = 2;
                             } else {
                                 $ans_score = 1;
                             }
                         }
                     }
                 }
             }
         }
         $array_record['score'] = floatval($score);
         $array_record['std_score'] = floatval($std_score);
         $array_record['ans_score'] = floatval($ans_score);
         $rt_array[$key] = $array_record;
     }
     return $rt_array;
 }